cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

lgm-dma.c (42175B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Lightning Mountain centralized DMA controller driver
      4 *
      5 * Copyright (c) 2016 - 2020 Intel Corporation.
      6 */
      7
      8#include <linux/bitfield.h>
      9#include <linux/clk.h>
     10#include <linux/dma-mapping.h>
     11#include <linux/dmapool.h>
     12#include <linux/err.h>
     13#include <linux/export.h>
     14#include <linux/init.h>
     15#include <linux/interrupt.h>
     16#include <linux/iopoll.h>
     17#include <linux/of_dma.h>
     18#include <linux/of_irq.h>
     19#include <linux/platform_device.h>
     20#include <linux/reset.h>
     21
     22#include "../dmaengine.h"
     23#include "../virt-dma.h"
     24
     25#define DRIVER_NAME			"lgm-dma"
     26
     27#define DMA_ID				0x0008
     28#define DMA_ID_REV			GENMASK(7, 0)
     29#define DMA_ID_PNR			GENMASK(19, 16)
     30#define DMA_ID_CHNR			GENMASK(26, 20)
     31#define DMA_ID_DW_128B			BIT(27)
     32#define DMA_ID_AW_36B			BIT(28)
     33#define DMA_VER32			0x32
     34#define DMA_VER31			0x31
     35#define DMA_VER22			0x0A
     36
     37#define DMA_CTRL			0x0010
     38#define DMA_CTRL_RST			BIT(0)
     39#define DMA_CTRL_DSRAM_PATH		BIT(1)
     40#define DMA_CTRL_DBURST_WR		BIT(3)
     41#define DMA_CTRL_VLD_DF_ACK		BIT(4)
     42#define DMA_CTRL_CH_FL			BIT(6)
     43#define DMA_CTRL_DS_FOD			BIT(7)
     44#define DMA_CTRL_DRB			BIT(8)
     45#define DMA_CTRL_ENBE			BIT(9)
     46#define DMA_CTRL_DESC_TMOUT_CNT_V31	GENMASK(27, 16)
     47#define DMA_CTRL_DESC_TMOUT_EN_V31	BIT(30)
     48#define DMA_CTRL_PKTARB			BIT(31)
     49
     50#define DMA_CPOLL			0x0014
     51#define DMA_CPOLL_CNT			GENMASK(15, 4)
     52#define DMA_CPOLL_EN			BIT(31)
     53
     54#define DMA_CS				0x0018
     55#define DMA_CS_MASK			GENMASK(5, 0)
     56
     57#define DMA_CCTRL			0x001C
     58#define DMA_CCTRL_ON			BIT(0)
     59#define DMA_CCTRL_RST			BIT(1)
     60#define DMA_CCTRL_CH_POLL_EN		BIT(2)
     61#define DMA_CCTRL_CH_ABC		BIT(3) /* Adaptive Burst Chop */
     62#define DMA_CDBA_MSB			GENMASK(7, 4)
     63#define DMA_CCTRL_DIR_TX		BIT(8)
     64#define DMA_CCTRL_CLASS			GENMASK(11, 9)
     65#define DMA_CCTRL_CLASSH		GENMASK(19, 18)
     66#define DMA_CCTRL_WR_NP_EN		BIT(21)
     67#define DMA_CCTRL_PDEN			BIT(23)
     68#define DMA_MAX_CLASS			(SZ_32 - 1)
     69
     70#define DMA_CDBA			0x0020
     71#define DMA_CDLEN			0x0024
     72#define DMA_CIS				0x0028
     73#define DMA_CIE				0x002C
     74#define DMA_CI_EOP			BIT(1)
     75#define DMA_CI_DUR			BIT(2)
     76#define DMA_CI_DESCPT			BIT(3)
     77#define DMA_CI_CHOFF			BIT(4)
     78#define DMA_CI_RDERR			BIT(5)
     79#define DMA_CI_ALL							\
     80	(DMA_CI_EOP | DMA_CI_DUR | DMA_CI_DESCPT | DMA_CI_CHOFF | DMA_CI_RDERR)
     81
     82#define DMA_PS				0x0040
     83#define DMA_PCTRL			0x0044
     84#define DMA_PCTRL_RXBL16		BIT(0)
     85#define DMA_PCTRL_TXBL16		BIT(1)
     86#define DMA_PCTRL_RXBL			GENMASK(3, 2)
     87#define DMA_PCTRL_RXBL_8		3
     88#define DMA_PCTRL_TXBL			GENMASK(5, 4)
     89#define DMA_PCTRL_TXBL_8		3
     90#define DMA_PCTRL_PDEN			BIT(6)
     91#define DMA_PCTRL_RXBL32		BIT(7)
     92#define DMA_PCTRL_RXENDI		GENMASK(9, 8)
     93#define DMA_PCTRL_TXENDI		GENMASK(11, 10)
     94#define DMA_PCTRL_TXBL32		BIT(15)
     95#define DMA_PCTRL_MEM_FLUSH		BIT(16)
     96
     97#define DMA_IRNEN1			0x00E8
     98#define DMA_IRNCR1			0x00EC
     99#define DMA_IRNEN			0x00F4
    100#define DMA_IRNCR			0x00F8
    101#define DMA_C_DP_TICK			0x100
    102#define DMA_C_DP_TICK_TIKNARB		GENMASK(15, 0)
    103#define DMA_C_DP_TICK_TIKARB		GENMASK(31, 16)
    104
    105#define DMA_C_HDRM			0x110
    106/*
    107 * If header mode is set in DMA descriptor,
    108 *   If bit 30 is disabled, HDR_LEN must be configured according to channel
    109 *     requirement.
    110 *   If bit 30 is enabled(checksum with heade mode), HDR_LEN has no need to
    111 *     be configured. It will enable check sum for switch
    112 * If header mode is not set in DMA descriptor,
    113 *   This register setting doesn't matter
    114 */
    115#define DMA_C_HDRM_HDR_SUM		BIT(30)
    116
    117#define DMA_C_BOFF			0x120
    118#define DMA_C_BOFF_BOF_LEN		GENMASK(7, 0)
    119#define DMA_C_BOFF_EN			BIT(31)
    120
    121#define DMA_ORRC			0x190
    122#define DMA_ORRC_ORRCNT			GENMASK(8, 4)
    123#define DMA_ORRC_EN			BIT(31)
    124
    125#define DMA_C_ENDIAN			0x200
    126#define DMA_C_END_DATAENDI		GENMASK(1, 0)
    127#define DMA_C_END_DE_EN			BIT(7)
    128#define DMA_C_END_DESENDI		GENMASK(9, 8)
    129#define DMA_C_END_DES_EN		BIT(16)
    130
    131/* DMA controller capability */
    132#define DMA_ADDR_36BIT			BIT(0)
    133#define DMA_DATA_128BIT			BIT(1)
    134#define DMA_CHAN_FLOW_CTL		BIT(2)
    135#define DMA_DESC_FOD			BIT(3)
    136#define DMA_DESC_IN_SRAM		BIT(4)
    137#define DMA_EN_BYTE_EN			BIT(5)
    138#define DMA_DBURST_WR			BIT(6)
    139#define DMA_VALID_DESC_FETCH_ACK	BIT(7)
    140#define DMA_DFT_DRB			BIT(8)
    141
    142#define DMA_ORRC_MAX_CNT		(SZ_32 - 1)
    143#define DMA_DFT_POLL_CNT		SZ_4
    144#define DMA_DFT_BURST_V22		SZ_2
    145#define DMA_BURSTL_8DW			SZ_8
    146#define DMA_BURSTL_16DW			SZ_16
    147#define DMA_BURSTL_32DW			SZ_32
    148#define DMA_DFT_BURST			DMA_BURSTL_16DW
    149#define DMA_MAX_DESC_NUM		(SZ_8K - 1)
    150#define DMA_CHAN_BOFF_MAX		(SZ_256 - 1)
    151#define DMA_DFT_ENDIAN			0
    152
    153#define DMA_DFT_DESC_TCNT		50
    154#define DMA_HDR_LEN_MAX			(SZ_16K - 1)
    155
    156/* DMA flags */
    157#define DMA_TX_CH			BIT(0)
    158#define DMA_RX_CH			BIT(1)
    159#define DEVICE_ALLOC_DESC		BIT(2)
    160#define CHAN_IN_USE			BIT(3)
    161#define DMA_HW_DESC			BIT(4)
    162
    163/* Descriptor fields */
    164#define DESC_DATA_LEN			GENMASK(15, 0)
    165#define DESC_BYTE_OFF			GENMASK(25, 23)
    166#define DESC_EOP			BIT(28)
    167#define DESC_SOP			BIT(29)
    168#define DESC_C				BIT(30)
    169#define DESC_OWN			BIT(31)
    170
    171#define DMA_CHAN_RST			1
    172#define DMA_MAX_SIZE			(BIT(16) - 1)
    173#define MAX_LOWER_CHANS			32
    174#define MASK_LOWER_CHANS		GENMASK(4, 0)
    175#define DMA_OWN				1
    176#define HIGH_4_BITS			GENMASK(3, 0)
    177#define DMA_DFT_DESC_NUM		1
    178#define DMA_PKT_DROP_DIS		0
    179
    180enum ldma_chan_on_off {
    181	DMA_CH_OFF = 0,
    182	DMA_CH_ON = 1,
    183};
    184
    185enum {
    186	DMA_TYPE_TX = 0,
    187	DMA_TYPE_RX,
    188	DMA_TYPE_MCPY,
    189};
    190
    191struct ldma_dev;
    192struct ldma_port;
    193
    194struct ldma_chan {
    195	struct virt_dma_chan	vchan;
    196	struct ldma_port	*port; /* back pointer */
    197	char			name[8]; /* Channel name */
    198	int			nr; /* Channel id in hardware */
    199	u32			flags; /* central way or channel based way */
    200	enum ldma_chan_on_off	onoff;
    201	dma_addr_t		desc_phys;
    202	void			*desc_base; /* Virtual address */
    203	u32			desc_cnt; /* Number of descriptors */
    204	int			rst;
    205	u32			hdrm_len;
    206	bool			hdrm_csum;
    207	u32			boff_len;
    208	u32			data_endian;
    209	u32			desc_endian;
    210	bool			pden;
    211	bool			desc_rx_np;
    212	bool			data_endian_en;
    213	bool			desc_endian_en;
    214	bool			abc_en;
    215	bool			desc_init;
    216	struct dma_pool		*desc_pool; /* Descriptors pool */
    217	u32			desc_num;
    218	struct dw2_desc_sw	*ds;
    219	struct work_struct	work;
    220	struct dma_slave_config config;
    221};
    222
    223struct ldma_port {
    224	struct ldma_dev		*ldev; /* back pointer */
    225	u32			portid;
    226	u32			rxbl;
    227	u32			txbl;
    228	u32			rxendi;
    229	u32			txendi;
    230	u32			pkt_drop;
    231};
    232
    233/* Instance specific data */
    234struct ldma_inst_data {
    235	bool			desc_in_sram;
    236	bool			chan_fc;
    237	bool			desc_fod; /* Fetch On Demand */
    238	bool			valid_desc_fetch_ack;
    239	u32			orrc; /* Outstanding read count */
    240	const char		*name;
    241	u32			type;
    242};
    243
    244struct ldma_dev {
    245	struct device		*dev;
    246	void __iomem		*base;
    247	struct reset_control	*rst;
    248	struct clk		*core_clk;
    249	struct dma_device	dma_dev;
    250	u32			ver;
    251	int			irq;
    252	struct ldma_port	*ports;
    253	struct ldma_chan	*chans; /* channel list on this DMA or port */
    254	spinlock_t		dev_lock; /* Controller register exclusive */
    255	u32			chan_nrs;
    256	u32			port_nrs;
    257	u32			channels_mask;
    258	u32			flags;
    259	u32			pollcnt;
    260	const struct ldma_inst_data *inst;
    261	struct workqueue_struct	*wq;
    262};
    263
    264struct dw2_desc {
    265	u32 field;
    266	u32 addr;
    267} __packed __aligned(8);
    268
    269struct dw2_desc_sw {
    270	struct virt_dma_desc	vdesc;
    271	struct ldma_chan	*chan;
    272	dma_addr_t		desc_phys;
    273	size_t			desc_cnt;
    274	size_t			size;
    275	struct dw2_desc		*desc_hw;
    276};
    277
    278static inline void
    279ldma_update_bits(struct ldma_dev *d, u32 mask, u32 val, u32 ofs)
    280{
    281	u32 old_val, new_val;
    282
    283	old_val = readl(d->base +  ofs);
    284	new_val = (old_val & ~mask) | (val & mask);
    285
    286	if (new_val != old_val)
    287		writel(new_val, d->base + ofs);
    288}
    289
    290static inline struct ldma_chan *to_ldma_chan(struct dma_chan *chan)
    291{
    292	return container_of(chan, struct ldma_chan, vchan.chan);
    293}
    294
    295static inline struct ldma_dev *to_ldma_dev(struct dma_device *dma_dev)
    296{
    297	return container_of(dma_dev, struct ldma_dev, dma_dev);
    298}
    299
    300static inline struct dw2_desc_sw *to_lgm_dma_desc(struct virt_dma_desc *vdesc)
    301{
    302	return container_of(vdesc, struct dw2_desc_sw, vdesc);
    303}
    304
    305static inline bool ldma_chan_tx(struct ldma_chan *c)
    306{
    307	return !!(c->flags & DMA_TX_CH);
    308}
    309
    310static inline bool ldma_chan_is_hw_desc(struct ldma_chan *c)
    311{
    312	return !!(c->flags & DMA_HW_DESC);
    313}
    314
    315static void ldma_dev_reset(struct ldma_dev *d)
    316
    317{
    318	unsigned long flags;
    319
    320	spin_lock_irqsave(&d->dev_lock, flags);
    321	ldma_update_bits(d, DMA_CTRL_RST, DMA_CTRL_RST, DMA_CTRL);
    322	spin_unlock_irqrestore(&d->dev_lock, flags);
    323}
    324
    325static void ldma_dev_pkt_arb_cfg(struct ldma_dev *d, bool enable)
    326{
    327	unsigned long flags;
    328	u32 mask = DMA_CTRL_PKTARB;
    329	u32 val = enable ? DMA_CTRL_PKTARB : 0;
    330
    331	spin_lock_irqsave(&d->dev_lock, flags);
    332	ldma_update_bits(d, mask, val, DMA_CTRL);
    333	spin_unlock_irqrestore(&d->dev_lock, flags);
    334}
    335
    336static void ldma_dev_sram_desc_cfg(struct ldma_dev *d, bool enable)
    337{
    338	unsigned long flags;
    339	u32 mask = DMA_CTRL_DSRAM_PATH;
    340	u32 val = enable ? DMA_CTRL_DSRAM_PATH : 0;
    341
    342	spin_lock_irqsave(&d->dev_lock, flags);
    343	ldma_update_bits(d, mask, val, DMA_CTRL);
    344	spin_unlock_irqrestore(&d->dev_lock, flags);
    345}
    346
    347static void ldma_dev_chan_flow_ctl_cfg(struct ldma_dev *d, bool enable)
    348{
    349	unsigned long flags;
    350	u32 mask, val;
    351
    352	if (d->inst->type != DMA_TYPE_TX)
    353		return;
    354
    355	mask = DMA_CTRL_CH_FL;
    356	val = enable ? DMA_CTRL_CH_FL : 0;
    357
    358	spin_lock_irqsave(&d->dev_lock, flags);
    359	ldma_update_bits(d, mask, val, DMA_CTRL);
    360	spin_unlock_irqrestore(&d->dev_lock, flags);
    361}
    362
    363static void ldma_dev_global_polling_enable(struct ldma_dev *d)
    364{
    365	unsigned long flags;
    366	u32 mask = DMA_CPOLL_EN | DMA_CPOLL_CNT;
    367	u32 val = DMA_CPOLL_EN;
    368
    369	val |= FIELD_PREP(DMA_CPOLL_CNT, d->pollcnt);
    370
    371	spin_lock_irqsave(&d->dev_lock, flags);
    372	ldma_update_bits(d, mask, val, DMA_CPOLL);
    373	spin_unlock_irqrestore(&d->dev_lock, flags);
    374}
    375
    376static void ldma_dev_desc_fetch_on_demand_cfg(struct ldma_dev *d, bool enable)
    377{
    378	unsigned long flags;
    379	u32 mask, val;
    380
    381	if (d->inst->type == DMA_TYPE_MCPY)
    382		return;
    383
    384	mask = DMA_CTRL_DS_FOD;
    385	val = enable ? DMA_CTRL_DS_FOD : 0;
    386
    387	spin_lock_irqsave(&d->dev_lock, flags);
    388	ldma_update_bits(d, mask, val, DMA_CTRL);
    389	spin_unlock_irqrestore(&d->dev_lock, flags);
    390}
    391
    392static void ldma_dev_byte_enable_cfg(struct ldma_dev *d, bool enable)
    393{
    394	unsigned long flags;
    395	u32 mask = DMA_CTRL_ENBE;
    396	u32 val = enable ? DMA_CTRL_ENBE : 0;
    397
    398	spin_lock_irqsave(&d->dev_lock, flags);
    399	ldma_update_bits(d, mask, val, DMA_CTRL);
    400	spin_unlock_irqrestore(&d->dev_lock, flags);
    401}
    402
    403static void ldma_dev_orrc_cfg(struct ldma_dev *d)
    404{
    405	unsigned long flags;
    406	u32 val = 0;
    407	u32 mask;
    408
    409	if (d->inst->type == DMA_TYPE_RX)
    410		return;
    411
    412	mask = DMA_ORRC_EN | DMA_ORRC_ORRCNT;
    413	if (d->inst->orrc > 0 && d->inst->orrc <= DMA_ORRC_MAX_CNT)
    414		val = DMA_ORRC_EN | FIELD_PREP(DMA_ORRC_ORRCNT, d->inst->orrc);
    415
    416	spin_lock_irqsave(&d->dev_lock, flags);
    417	ldma_update_bits(d, mask, val, DMA_ORRC);
    418	spin_unlock_irqrestore(&d->dev_lock, flags);
    419}
    420
    421static void ldma_dev_df_tout_cfg(struct ldma_dev *d, bool enable, int tcnt)
    422{
    423	u32 mask = DMA_CTRL_DESC_TMOUT_CNT_V31;
    424	unsigned long flags;
    425	u32 val;
    426
    427	if (enable)
    428		val = DMA_CTRL_DESC_TMOUT_EN_V31 | FIELD_PREP(DMA_CTRL_DESC_TMOUT_CNT_V31, tcnt);
    429	else
    430		val = 0;
    431
    432	spin_lock_irqsave(&d->dev_lock, flags);
    433	ldma_update_bits(d, mask, val, DMA_CTRL);
    434	spin_unlock_irqrestore(&d->dev_lock, flags);
    435}
    436
    437static void ldma_dev_dburst_wr_cfg(struct ldma_dev *d, bool enable)
    438{
    439	unsigned long flags;
    440	u32 mask, val;
    441
    442	if (d->inst->type != DMA_TYPE_RX && d->inst->type != DMA_TYPE_MCPY)
    443		return;
    444
    445	mask = DMA_CTRL_DBURST_WR;
    446	val = enable ? DMA_CTRL_DBURST_WR : 0;
    447
    448	spin_lock_irqsave(&d->dev_lock, flags);
    449	ldma_update_bits(d, mask, val, DMA_CTRL);
    450	spin_unlock_irqrestore(&d->dev_lock, flags);
    451}
    452
    453static void ldma_dev_vld_fetch_ack_cfg(struct ldma_dev *d, bool enable)
    454{
    455	unsigned long flags;
    456	u32 mask, val;
    457
    458	if (d->inst->type != DMA_TYPE_TX)
    459		return;
    460
    461	mask = DMA_CTRL_VLD_DF_ACK;
    462	val = enable ? DMA_CTRL_VLD_DF_ACK : 0;
    463
    464	spin_lock_irqsave(&d->dev_lock, flags);
    465	ldma_update_bits(d, mask, val, DMA_CTRL);
    466	spin_unlock_irqrestore(&d->dev_lock, flags);
    467}
    468
    469static void ldma_dev_drb_cfg(struct ldma_dev *d, int enable)
    470{
    471	unsigned long flags;
    472	u32 mask = DMA_CTRL_DRB;
    473	u32 val = enable ? DMA_CTRL_DRB : 0;
    474
    475	spin_lock_irqsave(&d->dev_lock, flags);
    476	ldma_update_bits(d, mask, val, DMA_CTRL);
    477	spin_unlock_irqrestore(&d->dev_lock, flags);
    478}
    479
    480static int ldma_dev_cfg(struct ldma_dev *d)
    481{
    482	bool enable;
    483
    484	ldma_dev_pkt_arb_cfg(d, true);
    485	ldma_dev_global_polling_enable(d);
    486
    487	enable = !!(d->flags & DMA_DFT_DRB);
    488	ldma_dev_drb_cfg(d, enable);
    489
    490	enable = !!(d->flags & DMA_EN_BYTE_EN);
    491	ldma_dev_byte_enable_cfg(d, enable);
    492
    493	enable = !!(d->flags & DMA_CHAN_FLOW_CTL);
    494	ldma_dev_chan_flow_ctl_cfg(d, enable);
    495
    496	enable = !!(d->flags & DMA_DESC_FOD);
    497	ldma_dev_desc_fetch_on_demand_cfg(d, enable);
    498
    499	enable = !!(d->flags & DMA_DESC_IN_SRAM);
    500	ldma_dev_sram_desc_cfg(d, enable);
    501
    502	enable = !!(d->flags & DMA_DBURST_WR);
    503	ldma_dev_dburst_wr_cfg(d, enable);
    504
    505	enable = !!(d->flags & DMA_VALID_DESC_FETCH_ACK);
    506	ldma_dev_vld_fetch_ack_cfg(d, enable);
    507
    508	if (d->ver > DMA_VER22) {
    509		ldma_dev_orrc_cfg(d);
    510		ldma_dev_df_tout_cfg(d, true, DMA_DFT_DESC_TCNT);
    511	}
    512
    513	dev_dbg(d->dev, "%s Controller 0x%08x configuration done\n",
    514		d->inst->name, readl(d->base + DMA_CTRL));
    515
    516	return 0;
    517}
    518
    519static int ldma_chan_cctrl_cfg(struct ldma_chan *c, u32 val)
    520{
    521	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    522	u32 class_low, class_high;
    523	unsigned long flags;
    524	u32 reg;
    525
    526	spin_lock_irqsave(&d->dev_lock, flags);
    527	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    528	reg = readl(d->base + DMA_CCTRL);
    529	/* Read from hardware */
    530	if (reg & DMA_CCTRL_DIR_TX)
    531		c->flags |= DMA_TX_CH;
    532	else
    533		c->flags |= DMA_RX_CH;
    534
    535	/* Keep the class value unchanged */
    536	class_low = FIELD_GET(DMA_CCTRL_CLASS, reg);
    537	class_high = FIELD_GET(DMA_CCTRL_CLASSH, reg);
    538	val &= ~DMA_CCTRL_CLASS;
    539	val |= FIELD_PREP(DMA_CCTRL_CLASS, class_low);
    540	val &= ~DMA_CCTRL_CLASSH;
    541	val |= FIELD_PREP(DMA_CCTRL_CLASSH, class_high);
    542	writel(val, d->base + DMA_CCTRL);
    543	spin_unlock_irqrestore(&d->dev_lock, flags);
    544
    545	return 0;
    546}
    547
    548static void ldma_chan_irq_init(struct ldma_chan *c)
    549{
    550	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    551	unsigned long flags;
    552	u32 enofs, crofs;
    553	u32 cn_bit;
    554
    555	if (c->nr < MAX_LOWER_CHANS) {
    556		enofs = DMA_IRNEN;
    557		crofs = DMA_IRNCR;
    558	} else {
    559		enofs = DMA_IRNEN1;
    560		crofs = DMA_IRNCR1;
    561	}
    562
    563	cn_bit = BIT(c->nr & MASK_LOWER_CHANS);
    564	spin_lock_irqsave(&d->dev_lock, flags);
    565	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    566
    567	/* Clear all interrupts and disabled it */
    568	writel(0, d->base + DMA_CIE);
    569	writel(DMA_CI_ALL, d->base + DMA_CIS);
    570
    571	ldma_update_bits(d, cn_bit, 0, enofs);
    572	writel(cn_bit, d->base + crofs);
    573	spin_unlock_irqrestore(&d->dev_lock, flags);
    574}
    575
    576static void ldma_chan_set_class(struct ldma_chan *c, u32 val)
    577{
    578	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    579	u32 class_val;
    580
    581	if (d->inst->type == DMA_TYPE_MCPY || val > DMA_MAX_CLASS)
    582		return;
    583
    584	/* 3 bits low */
    585	class_val = FIELD_PREP(DMA_CCTRL_CLASS, val & 0x7);
    586	/* 2 bits high */
    587	class_val |= FIELD_PREP(DMA_CCTRL_CLASSH, (val >> 3) & 0x3);
    588
    589	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    590	ldma_update_bits(d, DMA_CCTRL_CLASS | DMA_CCTRL_CLASSH, class_val,
    591			 DMA_CCTRL);
    592}
    593
    594static int ldma_chan_on(struct ldma_chan *c)
    595{
    596	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    597	unsigned long flags;
    598
    599	/* If descriptors not configured, not allow to turn on channel */
    600	if (WARN_ON(!c->desc_init))
    601		return -EINVAL;
    602
    603	spin_lock_irqsave(&d->dev_lock, flags);
    604	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    605	ldma_update_bits(d, DMA_CCTRL_ON, DMA_CCTRL_ON, DMA_CCTRL);
    606	spin_unlock_irqrestore(&d->dev_lock, flags);
    607
    608	c->onoff = DMA_CH_ON;
    609
    610	return 0;
    611}
    612
    613static int ldma_chan_off(struct ldma_chan *c)
    614{
    615	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    616	unsigned long flags;
    617	u32 val;
    618	int ret;
    619
    620	spin_lock_irqsave(&d->dev_lock, flags);
    621	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    622	ldma_update_bits(d, DMA_CCTRL_ON, 0, DMA_CCTRL);
    623	spin_unlock_irqrestore(&d->dev_lock, flags);
    624
    625	ret = readl_poll_timeout_atomic(d->base + DMA_CCTRL, val,
    626					!(val & DMA_CCTRL_ON), 0, 10000);
    627	if (ret)
    628		return ret;
    629
    630	c->onoff = DMA_CH_OFF;
    631
    632	return 0;
    633}
    634
    635static void ldma_chan_desc_hw_cfg(struct ldma_chan *c, dma_addr_t desc_base,
    636				  int desc_num)
    637{
    638	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    639	unsigned long flags;
    640
    641	spin_lock_irqsave(&d->dev_lock, flags);
    642	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    643	writel(lower_32_bits(desc_base), d->base + DMA_CDBA);
    644
    645	/* Higher 4 bits of 36 bit addressing */
    646	if (IS_ENABLED(CONFIG_64BIT)) {
    647		u32 hi = upper_32_bits(desc_base) & HIGH_4_BITS;
    648
    649		ldma_update_bits(d, DMA_CDBA_MSB,
    650				 FIELD_PREP(DMA_CDBA_MSB, hi), DMA_CCTRL);
    651	}
    652	writel(desc_num, d->base + DMA_CDLEN);
    653	spin_unlock_irqrestore(&d->dev_lock, flags);
    654
    655	c->desc_init = true;
    656}
    657
    658static struct dma_async_tx_descriptor *
    659ldma_chan_desc_cfg(struct dma_chan *chan, dma_addr_t desc_base, int desc_num)
    660{
    661	struct ldma_chan *c = to_ldma_chan(chan);
    662	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    663	struct dma_async_tx_descriptor *tx;
    664	struct dw2_desc_sw *ds;
    665
    666	if (!desc_num) {
    667		dev_err(d->dev, "Channel %d must allocate descriptor first\n",
    668			c->nr);
    669		return NULL;
    670	}
    671
    672	if (desc_num > DMA_MAX_DESC_NUM) {
    673		dev_err(d->dev, "Channel %d descriptor number out of range %d\n",
    674			c->nr, desc_num);
    675		return NULL;
    676	}
    677
    678	ldma_chan_desc_hw_cfg(c, desc_base, desc_num);
    679
    680	c->flags |= DMA_HW_DESC;
    681	c->desc_cnt = desc_num;
    682	c->desc_phys = desc_base;
    683
    684	ds = kzalloc(sizeof(*ds), GFP_NOWAIT);
    685	if (!ds)
    686		return NULL;
    687
    688	tx = &ds->vdesc.tx;
    689	dma_async_tx_descriptor_init(tx, chan);
    690
    691	return tx;
    692}
    693
    694static int ldma_chan_reset(struct ldma_chan *c)
    695{
    696	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    697	unsigned long flags;
    698	u32 val;
    699	int ret;
    700
    701	ret = ldma_chan_off(c);
    702	if (ret)
    703		return ret;
    704
    705	spin_lock_irqsave(&d->dev_lock, flags);
    706	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    707	ldma_update_bits(d, DMA_CCTRL_RST, DMA_CCTRL_RST, DMA_CCTRL);
    708	spin_unlock_irqrestore(&d->dev_lock, flags);
    709
    710	ret = readl_poll_timeout_atomic(d->base + DMA_CCTRL, val,
    711					!(val & DMA_CCTRL_RST), 0, 10000);
    712	if (ret)
    713		return ret;
    714
    715	c->rst = 1;
    716	c->desc_init = false;
    717
    718	return 0;
    719}
    720
    721static void ldma_chan_byte_offset_cfg(struct ldma_chan *c, u32 boff_len)
    722{
    723	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    724	u32 mask = DMA_C_BOFF_EN | DMA_C_BOFF_BOF_LEN;
    725	u32 val;
    726
    727	if (boff_len > 0 && boff_len <= DMA_CHAN_BOFF_MAX)
    728		val = FIELD_PREP(DMA_C_BOFF_BOF_LEN, boff_len) | DMA_C_BOFF_EN;
    729	else
    730		val = 0;
    731
    732	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    733	ldma_update_bits(d, mask, val, DMA_C_BOFF);
    734}
    735
    736static void ldma_chan_data_endian_cfg(struct ldma_chan *c, bool enable,
    737				      u32 endian_type)
    738{
    739	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    740	u32 mask = DMA_C_END_DE_EN | DMA_C_END_DATAENDI;
    741	u32 val;
    742
    743	if (enable)
    744		val = DMA_C_END_DE_EN | FIELD_PREP(DMA_C_END_DATAENDI, endian_type);
    745	else
    746		val = 0;
    747
    748	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    749	ldma_update_bits(d, mask, val, DMA_C_ENDIAN);
    750}
    751
    752static void ldma_chan_desc_endian_cfg(struct ldma_chan *c, bool enable,
    753				      u32 endian_type)
    754{
    755	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    756	u32 mask = DMA_C_END_DES_EN | DMA_C_END_DESENDI;
    757	u32 val;
    758
    759	if (enable)
    760		val = DMA_C_END_DES_EN | FIELD_PREP(DMA_C_END_DESENDI, endian_type);
    761	else
    762		val = 0;
    763
    764	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    765	ldma_update_bits(d, mask, val, DMA_C_ENDIAN);
    766}
    767
    768static void ldma_chan_hdr_mode_cfg(struct ldma_chan *c, u32 hdr_len, bool csum)
    769{
    770	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    771	u32 mask, val;
    772
    773	/* NB, csum disabled, hdr length must be provided */
    774	if (!csum && (!hdr_len || hdr_len > DMA_HDR_LEN_MAX))
    775		return;
    776
    777	mask = DMA_C_HDRM_HDR_SUM;
    778	val = DMA_C_HDRM_HDR_SUM;
    779
    780	if (!csum && hdr_len)
    781		val = hdr_len;
    782
    783	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    784	ldma_update_bits(d, mask, val, DMA_C_HDRM);
    785}
    786
    787static void ldma_chan_rxwr_np_cfg(struct ldma_chan *c, bool enable)
    788{
    789	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    790	u32 mask, val;
    791
    792	/* Only valid for RX channel */
    793	if (ldma_chan_tx(c))
    794		return;
    795
    796	mask = DMA_CCTRL_WR_NP_EN;
    797	val = enable ? DMA_CCTRL_WR_NP_EN : 0;
    798
    799	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    800	ldma_update_bits(d, mask, val, DMA_CCTRL);
    801}
    802
    803static void ldma_chan_abc_cfg(struct ldma_chan *c, bool enable)
    804{
    805	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    806	u32 mask, val;
    807
    808	if (d->ver < DMA_VER32 || ldma_chan_tx(c))
    809		return;
    810
    811	mask = DMA_CCTRL_CH_ABC;
    812	val = enable ? DMA_CCTRL_CH_ABC : 0;
    813
    814	ldma_update_bits(d, DMA_CS_MASK, c->nr, DMA_CS);
    815	ldma_update_bits(d, mask, val, DMA_CCTRL);
    816}
    817
    818static int ldma_port_cfg(struct ldma_port *p)
    819{
    820	unsigned long flags;
    821	struct ldma_dev *d;
    822	u32 reg;
    823
    824	d = p->ldev;
    825	reg = FIELD_PREP(DMA_PCTRL_TXENDI, p->txendi);
    826	reg |= FIELD_PREP(DMA_PCTRL_RXENDI, p->rxendi);
    827
    828	if (d->ver == DMA_VER22) {
    829		reg |= FIELD_PREP(DMA_PCTRL_TXBL, p->txbl);
    830		reg |= FIELD_PREP(DMA_PCTRL_RXBL, p->rxbl);
    831	} else {
    832		reg |= FIELD_PREP(DMA_PCTRL_PDEN, p->pkt_drop);
    833
    834		if (p->txbl == DMA_BURSTL_32DW)
    835			reg |= DMA_PCTRL_TXBL32;
    836		else if (p->txbl == DMA_BURSTL_16DW)
    837			reg |= DMA_PCTRL_TXBL16;
    838		else
    839			reg |= FIELD_PREP(DMA_PCTRL_TXBL, DMA_PCTRL_TXBL_8);
    840
    841		if (p->rxbl == DMA_BURSTL_32DW)
    842			reg |= DMA_PCTRL_RXBL32;
    843		else if (p->rxbl == DMA_BURSTL_16DW)
    844			reg |= DMA_PCTRL_RXBL16;
    845		else
    846			reg |= FIELD_PREP(DMA_PCTRL_RXBL, DMA_PCTRL_RXBL_8);
    847	}
    848
    849	spin_lock_irqsave(&d->dev_lock, flags);
    850	writel(p->portid, d->base + DMA_PS);
    851	writel(reg, d->base + DMA_PCTRL);
    852	spin_unlock_irqrestore(&d->dev_lock, flags);
    853
    854	reg = readl(d->base + DMA_PCTRL); /* read back */
    855	dev_dbg(d->dev, "Port Control 0x%08x configuration done\n", reg);
    856
    857	return 0;
    858}
    859
    860static int ldma_chan_cfg(struct ldma_chan *c)
    861{
    862	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
    863	unsigned long flags;
    864	u32 reg;
    865
    866	reg = c->pden ? DMA_CCTRL_PDEN : 0;
    867	reg |= c->onoff ? DMA_CCTRL_ON : 0;
    868	reg |= c->rst ? DMA_CCTRL_RST : 0;
    869
    870	ldma_chan_cctrl_cfg(c, reg);
    871	ldma_chan_irq_init(c);
    872
    873	if (d->ver <= DMA_VER22)
    874		return 0;
    875
    876	spin_lock_irqsave(&d->dev_lock, flags);
    877	ldma_chan_set_class(c, c->nr);
    878	ldma_chan_byte_offset_cfg(c, c->boff_len);
    879	ldma_chan_data_endian_cfg(c, c->data_endian_en, c->data_endian);
    880	ldma_chan_desc_endian_cfg(c, c->desc_endian_en, c->desc_endian);
    881	ldma_chan_hdr_mode_cfg(c, c->hdrm_len, c->hdrm_csum);
    882	ldma_chan_rxwr_np_cfg(c, c->desc_rx_np);
    883	ldma_chan_abc_cfg(c, c->abc_en);
    884	spin_unlock_irqrestore(&d->dev_lock, flags);
    885
    886	if (ldma_chan_is_hw_desc(c))
    887		ldma_chan_desc_hw_cfg(c, c->desc_phys, c->desc_cnt);
    888
    889	return 0;
    890}
    891
    892static void ldma_dev_init(struct ldma_dev *d)
    893{
    894	unsigned long ch_mask = (unsigned long)d->channels_mask;
    895	struct ldma_port *p;
    896	struct ldma_chan *c;
    897	int i;
    898	u32 j;
    899
    900	spin_lock_init(&d->dev_lock);
    901	ldma_dev_reset(d);
    902	ldma_dev_cfg(d);
    903
    904	/* DMA port initialization */
    905	for (i = 0; i < d->port_nrs; i++) {
    906		p = &d->ports[i];
    907		ldma_port_cfg(p);
    908	}
    909
    910	/* DMA channel initialization */
    911	for_each_set_bit(j, &ch_mask, d->chan_nrs) {
    912		c = &d->chans[j];
    913		ldma_chan_cfg(c);
    914	}
    915}
    916
    917static int ldma_cfg_init(struct ldma_dev *d)
    918{
    919	struct fwnode_handle *fwnode = dev_fwnode(d->dev);
    920	struct ldma_port *p;
    921	int i;
    922
    923	if (fwnode_property_read_bool(fwnode, "intel,dma-byte-en"))
    924		d->flags |= DMA_EN_BYTE_EN;
    925
    926	if (fwnode_property_read_bool(fwnode, "intel,dma-dburst-wr"))
    927		d->flags |= DMA_DBURST_WR;
    928
    929	if (fwnode_property_read_bool(fwnode, "intel,dma-drb"))
    930		d->flags |= DMA_DFT_DRB;
    931
    932	if (fwnode_property_read_u32(fwnode, "intel,dma-poll-cnt",
    933				     &d->pollcnt))
    934		d->pollcnt = DMA_DFT_POLL_CNT;
    935
    936	if (d->inst->chan_fc)
    937		d->flags |= DMA_CHAN_FLOW_CTL;
    938
    939	if (d->inst->desc_fod)
    940		d->flags |= DMA_DESC_FOD;
    941
    942	if (d->inst->desc_in_sram)
    943		d->flags |= DMA_DESC_IN_SRAM;
    944
    945	if (d->inst->valid_desc_fetch_ack)
    946		d->flags |= DMA_VALID_DESC_FETCH_ACK;
    947
    948	if (d->ver > DMA_VER22) {
    949		if (!d->port_nrs)
    950			return -EINVAL;
    951
    952		for (i = 0; i < d->port_nrs; i++) {
    953			p = &d->ports[i];
    954			p->rxendi = DMA_DFT_ENDIAN;
    955			p->txendi = DMA_DFT_ENDIAN;
    956			p->rxbl = DMA_DFT_BURST;
    957			p->txbl = DMA_DFT_BURST;
    958			p->pkt_drop = DMA_PKT_DROP_DIS;
    959		}
    960	}
    961
    962	return 0;
    963}
    964
    965static void dma_free_desc_resource(struct virt_dma_desc *vdesc)
    966{
    967	struct dw2_desc_sw *ds = to_lgm_dma_desc(vdesc);
    968	struct ldma_chan *c = ds->chan;
    969
    970	dma_pool_free(c->desc_pool, ds->desc_hw, ds->desc_phys);
    971	kfree(ds);
    972}
    973
    974static struct dw2_desc_sw *
    975dma_alloc_desc_resource(int num, struct ldma_chan *c)
    976{
    977	struct device *dev = c->vchan.chan.device->dev;
    978	struct dw2_desc_sw *ds;
    979
    980	if (num > c->desc_num) {
    981		dev_err(dev, "sg num %d exceed max %d\n", num, c->desc_num);
    982		return NULL;
    983	}
    984
    985	ds = kzalloc(sizeof(*ds), GFP_NOWAIT);
    986	if (!ds)
    987		return NULL;
    988
    989	ds->chan = c;
    990	ds->desc_hw = dma_pool_zalloc(c->desc_pool, GFP_ATOMIC,
    991				      &ds->desc_phys);
    992	if (!ds->desc_hw) {
    993		dev_dbg(dev, "out of memory for link descriptor\n");
    994		kfree(ds);
    995		return NULL;
    996	}
    997	ds->desc_cnt = num;
    998
    999	return ds;
   1000}
   1001
   1002static void ldma_chan_irq_en(struct ldma_chan *c)
   1003{
   1004	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
   1005	unsigned long flags;
   1006
   1007	spin_lock_irqsave(&d->dev_lock, flags);
   1008	writel(c->nr, d->base + DMA_CS);
   1009	writel(DMA_CI_EOP, d->base + DMA_CIE);
   1010	writel(BIT(c->nr), d->base + DMA_IRNEN);
   1011	spin_unlock_irqrestore(&d->dev_lock, flags);
   1012}
   1013
   1014static void ldma_issue_pending(struct dma_chan *chan)
   1015{
   1016	struct ldma_chan *c = to_ldma_chan(chan);
   1017	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
   1018	unsigned long flags;
   1019
   1020	if (d->ver == DMA_VER22) {
   1021		spin_lock_irqsave(&c->vchan.lock, flags);
   1022		if (vchan_issue_pending(&c->vchan)) {
   1023			struct virt_dma_desc *vdesc;
   1024
   1025			/* Get the next descriptor */
   1026			vdesc = vchan_next_desc(&c->vchan);
   1027			if (!vdesc) {
   1028				c->ds = NULL;
   1029				spin_unlock_irqrestore(&c->vchan.lock, flags);
   1030				return;
   1031			}
   1032			list_del(&vdesc->node);
   1033			c->ds = to_lgm_dma_desc(vdesc);
   1034			ldma_chan_desc_hw_cfg(c, c->ds->desc_phys, c->ds->desc_cnt);
   1035			ldma_chan_irq_en(c);
   1036		}
   1037		spin_unlock_irqrestore(&c->vchan.lock, flags);
   1038	}
   1039	ldma_chan_on(c);
   1040}
   1041
   1042static void ldma_synchronize(struct dma_chan *chan)
   1043{
   1044	struct ldma_chan *c = to_ldma_chan(chan);
   1045
   1046	/*
   1047	 * clear any pending work if any. In that
   1048	 * case the resource needs to be free here.
   1049	 */
   1050	cancel_work_sync(&c->work);
   1051	vchan_synchronize(&c->vchan);
   1052	if (c->ds)
   1053		dma_free_desc_resource(&c->ds->vdesc);
   1054}
   1055
   1056static int ldma_terminate_all(struct dma_chan *chan)
   1057{
   1058	struct ldma_chan *c = to_ldma_chan(chan);
   1059	unsigned long flags;
   1060	LIST_HEAD(head);
   1061
   1062	spin_lock_irqsave(&c->vchan.lock, flags);
   1063	vchan_get_all_descriptors(&c->vchan, &head);
   1064	spin_unlock_irqrestore(&c->vchan.lock, flags);
   1065	vchan_dma_desc_free_list(&c->vchan, &head);
   1066
   1067	return ldma_chan_reset(c);
   1068}
   1069
   1070static int ldma_resume_chan(struct dma_chan *chan)
   1071{
   1072	struct ldma_chan *c = to_ldma_chan(chan);
   1073
   1074	ldma_chan_on(c);
   1075
   1076	return 0;
   1077}
   1078
   1079static int ldma_pause_chan(struct dma_chan *chan)
   1080{
   1081	struct ldma_chan *c = to_ldma_chan(chan);
   1082
   1083	return ldma_chan_off(c);
   1084}
   1085
   1086static enum dma_status
   1087ldma_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
   1088	       struct dma_tx_state *txstate)
   1089{
   1090	struct ldma_chan *c = to_ldma_chan(chan);
   1091	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
   1092	enum dma_status status = DMA_COMPLETE;
   1093
   1094	if (d->ver == DMA_VER22)
   1095		status = dma_cookie_status(chan, cookie, txstate);
   1096
   1097	return status;
   1098}
   1099
   1100static void dma_chan_irq(int irq, void *data)
   1101{
   1102	struct ldma_chan *c = data;
   1103	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
   1104	u32 stat;
   1105
   1106	/* Disable channel interrupts  */
   1107	writel(c->nr, d->base + DMA_CS);
   1108	stat = readl(d->base + DMA_CIS);
   1109	if (!stat)
   1110		return;
   1111
   1112	writel(readl(d->base + DMA_CIE) & ~DMA_CI_ALL, d->base + DMA_CIE);
   1113	writel(stat, d->base + DMA_CIS);
   1114	queue_work(d->wq, &c->work);
   1115}
   1116
   1117static irqreturn_t dma_interrupt(int irq, void *dev_id)
   1118{
   1119	struct ldma_dev *d = dev_id;
   1120	struct ldma_chan *c;
   1121	unsigned long irncr;
   1122	u32 cid;
   1123
   1124	irncr = readl(d->base + DMA_IRNCR);
   1125	if (!irncr) {
   1126		dev_err(d->dev, "dummy interrupt\n");
   1127		return IRQ_NONE;
   1128	}
   1129
   1130	for_each_set_bit(cid, &irncr, d->chan_nrs) {
   1131		/* Mask */
   1132		writel(readl(d->base + DMA_IRNEN) & ~BIT(cid), d->base + DMA_IRNEN);
   1133		/* Ack */
   1134		writel(readl(d->base + DMA_IRNCR) | BIT(cid), d->base + DMA_IRNCR);
   1135
   1136		c = &d->chans[cid];
   1137		dma_chan_irq(irq, c);
   1138	}
   1139
   1140	return IRQ_HANDLED;
   1141}
   1142
   1143static void prep_slave_burst_len(struct ldma_chan *c)
   1144{
   1145	struct ldma_port *p = c->port;
   1146	struct dma_slave_config *cfg = &c->config;
   1147
   1148	if (cfg->dst_maxburst)
   1149		cfg->src_maxburst = cfg->dst_maxburst;
   1150
   1151	/* TX and RX has the same burst length */
   1152	p->txbl = ilog2(cfg->src_maxburst);
   1153	p->rxbl = p->txbl;
   1154}
   1155
   1156static struct dma_async_tx_descriptor *
   1157ldma_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
   1158		   unsigned int sglen, enum dma_transfer_direction dir,
   1159		   unsigned long flags, void *context)
   1160{
   1161	struct ldma_chan *c = to_ldma_chan(chan);
   1162	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
   1163	size_t len, avail, total = 0;
   1164	struct dw2_desc *hw_ds;
   1165	struct dw2_desc_sw *ds;
   1166	struct scatterlist *sg;
   1167	int num = sglen, i;
   1168	dma_addr_t addr;
   1169
   1170	if (!sgl)
   1171		return NULL;
   1172
   1173	if (d->ver > DMA_VER22)
   1174		return ldma_chan_desc_cfg(chan, sgl->dma_address, sglen);
   1175
   1176	for_each_sg(sgl, sg, sglen, i) {
   1177		avail = sg_dma_len(sg);
   1178		if (avail > DMA_MAX_SIZE)
   1179			num += DIV_ROUND_UP(avail, DMA_MAX_SIZE) - 1;
   1180	}
   1181
   1182	ds = dma_alloc_desc_resource(num, c);
   1183	if (!ds)
   1184		return NULL;
   1185
   1186	c->ds = ds;
   1187
   1188	num = 0;
   1189	/* sop and eop has to be handled nicely */
   1190	for_each_sg(sgl, sg, sglen, i) {
   1191		addr = sg_dma_address(sg);
   1192		avail = sg_dma_len(sg);
   1193		total += avail;
   1194
   1195		do {
   1196			len = min_t(size_t, avail, DMA_MAX_SIZE);
   1197
   1198			hw_ds = &ds->desc_hw[num];
   1199			switch (sglen) {
   1200			case 1:
   1201				hw_ds->field &= ~DESC_SOP;
   1202				hw_ds->field |= FIELD_PREP(DESC_SOP, 1);
   1203
   1204				hw_ds->field &= ~DESC_EOP;
   1205				hw_ds->field |= FIELD_PREP(DESC_EOP, 1);
   1206				break;
   1207			default:
   1208				if (num == 0) {
   1209					hw_ds->field &= ~DESC_SOP;
   1210					hw_ds->field |= FIELD_PREP(DESC_SOP, 1);
   1211
   1212					hw_ds->field &= ~DESC_EOP;
   1213					hw_ds->field |= FIELD_PREP(DESC_EOP, 0);
   1214				} else if (num == (sglen - 1)) {
   1215					hw_ds->field &= ~DESC_SOP;
   1216					hw_ds->field |= FIELD_PREP(DESC_SOP, 0);
   1217					hw_ds->field &= ~DESC_EOP;
   1218					hw_ds->field |= FIELD_PREP(DESC_EOP, 1);
   1219				} else {
   1220					hw_ds->field &= ~DESC_SOP;
   1221					hw_ds->field |= FIELD_PREP(DESC_SOP, 0);
   1222
   1223					hw_ds->field &= ~DESC_EOP;
   1224					hw_ds->field |= FIELD_PREP(DESC_EOP, 0);
   1225				}
   1226				break;
   1227			}
   1228			/* Only 32 bit address supported */
   1229			hw_ds->addr = (u32)addr;
   1230
   1231			hw_ds->field &= ~DESC_DATA_LEN;
   1232			hw_ds->field |= FIELD_PREP(DESC_DATA_LEN, len);
   1233
   1234			hw_ds->field &= ~DESC_C;
   1235			hw_ds->field |= FIELD_PREP(DESC_C, 0);
   1236
   1237			hw_ds->field &= ~DESC_BYTE_OFF;
   1238			hw_ds->field |= FIELD_PREP(DESC_BYTE_OFF, addr & 0x3);
   1239
   1240			/* Ensure data ready before ownership change */
   1241			wmb();
   1242			hw_ds->field &= ~DESC_OWN;
   1243			hw_ds->field |= FIELD_PREP(DESC_OWN, DMA_OWN);
   1244
   1245			/* Ensure ownership changed before moving forward */
   1246			wmb();
   1247			num++;
   1248			addr += len;
   1249			avail -= len;
   1250		} while (avail);
   1251	}
   1252
   1253	ds->size = total;
   1254	prep_slave_burst_len(c);
   1255
   1256	return vchan_tx_prep(&c->vchan, &ds->vdesc, DMA_CTRL_ACK);
   1257}
   1258
   1259static int
   1260ldma_slave_config(struct dma_chan *chan, struct dma_slave_config *cfg)
   1261{
   1262	struct ldma_chan *c = to_ldma_chan(chan);
   1263
   1264	memcpy(&c->config, cfg, sizeof(c->config));
   1265
   1266	return 0;
   1267}
   1268
   1269static int ldma_alloc_chan_resources(struct dma_chan *chan)
   1270{
   1271	struct ldma_chan *c = to_ldma_chan(chan);
   1272	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
   1273	struct device *dev = c->vchan.chan.device->dev;
   1274	size_t	desc_sz;
   1275
   1276	if (d->ver > DMA_VER22) {
   1277		c->flags |= CHAN_IN_USE;
   1278		return 0;
   1279	}
   1280
   1281	if (c->desc_pool)
   1282		return c->desc_num;
   1283
   1284	desc_sz = c->desc_num * sizeof(struct dw2_desc);
   1285	c->desc_pool = dma_pool_create(c->name, dev, desc_sz,
   1286				       __alignof__(struct dw2_desc), 0);
   1287
   1288	if (!c->desc_pool) {
   1289		dev_err(dev, "unable to allocate descriptor pool\n");
   1290		return -ENOMEM;
   1291	}
   1292
   1293	return c->desc_num;
   1294}
   1295
   1296static void ldma_free_chan_resources(struct dma_chan *chan)
   1297{
   1298	struct ldma_chan *c = to_ldma_chan(chan);
   1299	struct ldma_dev *d = to_ldma_dev(c->vchan.chan.device);
   1300
   1301	if (d->ver == DMA_VER22) {
   1302		dma_pool_destroy(c->desc_pool);
   1303		c->desc_pool = NULL;
   1304		vchan_free_chan_resources(to_virt_chan(chan));
   1305		ldma_chan_reset(c);
   1306	} else {
   1307		c->flags &= ~CHAN_IN_USE;
   1308	}
   1309}
   1310
   1311static void dma_work(struct work_struct *work)
   1312{
   1313	struct ldma_chan *c = container_of(work, struct ldma_chan, work);
   1314	struct dma_async_tx_descriptor *tx = &c->ds->vdesc.tx;
   1315	struct virt_dma_chan *vc = &c->vchan;
   1316	struct dmaengine_desc_callback cb;
   1317	struct virt_dma_desc *vd, *_vd;
   1318	unsigned long flags;
   1319	LIST_HEAD(head);
   1320
   1321	spin_lock_irqsave(&c->vchan.lock, flags);
   1322	list_splice_tail_init(&vc->desc_completed, &head);
   1323	spin_unlock_irqrestore(&c->vchan.lock, flags);
   1324	dmaengine_desc_get_callback(tx, &cb);
   1325	dma_cookie_complete(tx);
   1326	dmaengine_desc_callback_invoke(&cb, NULL);
   1327
   1328	list_for_each_entry_safe(vd, _vd, &head, node) {
   1329		dmaengine_desc_get_callback(tx, &cb);
   1330		dma_cookie_complete(tx);
   1331		list_del(&vd->node);
   1332		dmaengine_desc_callback_invoke(&cb, NULL);
   1333
   1334		vchan_vdesc_fini(vd);
   1335	}
   1336	c->ds = NULL;
   1337}
   1338
   1339static void
   1340update_burst_len_v22(struct ldma_chan *c, struct ldma_port *p, u32 burst)
   1341{
   1342	if (ldma_chan_tx(c))
   1343		p->txbl = ilog2(burst);
   1344	else
   1345		p->rxbl = ilog2(burst);
   1346}
   1347
   1348static void
   1349update_burst_len_v3X(struct ldma_chan *c, struct ldma_port *p, u32 burst)
   1350{
   1351	if (ldma_chan_tx(c))
   1352		p->txbl = burst;
   1353	else
   1354		p->rxbl = burst;
   1355}
   1356
   1357static int
   1358update_client_configs(struct of_dma *ofdma, struct of_phandle_args *spec)
   1359{
   1360	struct ldma_dev *d = ofdma->of_dma_data;
   1361	u32 chan_id =  spec->args[0];
   1362	u32 port_id =  spec->args[1];
   1363	u32 burst = spec->args[2];
   1364	struct ldma_port *p;
   1365	struct ldma_chan *c;
   1366
   1367	if (chan_id >= d->chan_nrs || port_id >= d->port_nrs)
   1368		return 0;
   1369
   1370	p = &d->ports[port_id];
   1371	c = &d->chans[chan_id];
   1372	c->port = p;
   1373
   1374	if (d->ver == DMA_VER22)
   1375		update_burst_len_v22(c, p, burst);
   1376	else
   1377		update_burst_len_v3X(c, p, burst);
   1378
   1379	ldma_port_cfg(p);
   1380
   1381	return 1;
   1382}
   1383
   1384static struct dma_chan *ldma_xlate(struct of_phandle_args *spec,
   1385				   struct of_dma *ofdma)
   1386{
   1387	struct ldma_dev *d = ofdma->of_dma_data;
   1388	u32 chan_id =  spec->args[0];
   1389	int ret;
   1390
   1391	if (!spec->args_count)
   1392		return NULL;
   1393
   1394	/* if args_count is 1 driver use default settings */
   1395	if (spec->args_count > 1) {
   1396		ret = update_client_configs(ofdma, spec);
   1397		if (!ret)
   1398			return NULL;
   1399	}
   1400
   1401	return dma_get_slave_channel(&d->chans[chan_id].vchan.chan);
   1402}
   1403
   1404static void ldma_dma_init_v22(int i, struct ldma_dev *d)
   1405{
   1406	struct ldma_chan *c;
   1407
   1408	c = &d->chans[i];
   1409	c->nr = i; /* Real channel number */
   1410	c->rst = DMA_CHAN_RST;
   1411	c->desc_num = DMA_DFT_DESC_NUM;
   1412	snprintf(c->name, sizeof(c->name), "chan%d", c->nr);
   1413	INIT_WORK(&c->work, dma_work);
   1414	c->vchan.desc_free = dma_free_desc_resource;
   1415	vchan_init(&c->vchan, &d->dma_dev);
   1416}
   1417
   1418static void ldma_dma_init_v3X(int i, struct ldma_dev *d)
   1419{
   1420	struct ldma_chan *c;
   1421
   1422	c = &d->chans[i];
   1423	c->data_endian = DMA_DFT_ENDIAN;
   1424	c->desc_endian = DMA_DFT_ENDIAN;
   1425	c->data_endian_en = false;
   1426	c->desc_endian_en = false;
   1427	c->desc_rx_np = false;
   1428	c->flags |= DEVICE_ALLOC_DESC;
   1429	c->onoff = DMA_CH_OFF;
   1430	c->rst = DMA_CHAN_RST;
   1431	c->abc_en = true;
   1432	c->hdrm_csum = false;
   1433	c->boff_len = 0;
   1434	c->nr = i;
   1435	c->vchan.desc_free = dma_free_desc_resource;
   1436	vchan_init(&c->vchan, &d->dma_dev);
   1437}
   1438
   1439static int ldma_init_v22(struct ldma_dev *d, struct platform_device *pdev)
   1440{
   1441	int ret;
   1442
   1443	ret = device_property_read_u32(d->dev, "dma-channels", &d->chan_nrs);
   1444	if (ret < 0) {
   1445		dev_err(d->dev, "unable to read dma-channels property\n");
   1446		return ret;
   1447	}
   1448
   1449	d->irq = platform_get_irq(pdev, 0);
   1450	if (d->irq < 0)
   1451		return d->irq;
   1452
   1453	ret = devm_request_irq(&pdev->dev, d->irq, dma_interrupt, 0,
   1454			       DRIVER_NAME, d);
   1455	if (ret)
   1456		return ret;
   1457
   1458	d->wq = alloc_ordered_workqueue("dma_wq", WQ_MEM_RECLAIM |
   1459			WQ_HIGHPRI);
   1460	if (!d->wq)
   1461		return -ENOMEM;
   1462
   1463	return 0;
   1464}
   1465
   1466static void ldma_clk_disable(void *data)
   1467{
   1468	struct ldma_dev *d = data;
   1469
   1470	clk_disable_unprepare(d->core_clk);
   1471	reset_control_assert(d->rst);
   1472}
   1473
   1474static const struct ldma_inst_data dma0 = {
   1475	.name = "dma0",
   1476	.chan_fc = false,
   1477	.desc_fod = false,
   1478	.desc_in_sram = false,
   1479	.valid_desc_fetch_ack = false,
   1480};
   1481
   1482static const struct ldma_inst_data dma2tx = {
   1483	.name = "dma2tx",
   1484	.type = DMA_TYPE_TX,
   1485	.orrc = 16,
   1486	.chan_fc = true,
   1487	.desc_fod = true,
   1488	.desc_in_sram = true,
   1489	.valid_desc_fetch_ack = true,
   1490};
   1491
   1492static const struct ldma_inst_data dma1rx = {
   1493	.name = "dma1rx",
   1494	.type = DMA_TYPE_RX,
   1495	.orrc = 16,
   1496	.chan_fc = false,
   1497	.desc_fod = true,
   1498	.desc_in_sram = true,
   1499	.valid_desc_fetch_ack = false,
   1500};
   1501
   1502static const struct ldma_inst_data dma1tx = {
   1503	.name = "dma1tx",
   1504	.type = DMA_TYPE_TX,
   1505	.orrc = 16,
   1506	.chan_fc = true,
   1507	.desc_fod = true,
   1508	.desc_in_sram = true,
   1509	.valid_desc_fetch_ack = true,
   1510};
   1511
   1512static const struct ldma_inst_data dma0tx = {
   1513	.name = "dma0tx",
   1514	.type = DMA_TYPE_TX,
   1515	.orrc = 16,
   1516	.chan_fc = true,
   1517	.desc_fod = true,
   1518	.desc_in_sram = true,
   1519	.valid_desc_fetch_ack = true,
   1520};
   1521
   1522static const struct ldma_inst_data dma3 = {
   1523	.name = "dma3",
   1524	.type = DMA_TYPE_MCPY,
   1525	.orrc = 16,
   1526	.chan_fc = false,
   1527	.desc_fod = false,
   1528	.desc_in_sram = true,
   1529	.valid_desc_fetch_ack = false,
   1530};
   1531
   1532static const struct ldma_inst_data toe_dma30 = {
   1533	.name = "toe_dma30",
   1534	.type = DMA_TYPE_MCPY,
   1535	.orrc = 16,
   1536	.chan_fc = false,
   1537	.desc_fod = false,
   1538	.desc_in_sram = true,
   1539	.valid_desc_fetch_ack = true,
   1540};
   1541
   1542static const struct ldma_inst_data toe_dma31 = {
   1543	.name = "toe_dma31",
   1544	.type = DMA_TYPE_MCPY,
   1545	.orrc = 16,
   1546	.chan_fc = false,
   1547	.desc_fod = false,
   1548	.desc_in_sram = true,
   1549	.valid_desc_fetch_ack = true,
   1550};
   1551
   1552static const struct of_device_id intel_ldma_match[] = {
   1553	{ .compatible = "intel,lgm-cdma", .data = &dma0},
   1554	{ .compatible = "intel,lgm-dma2tx", .data = &dma2tx},
   1555	{ .compatible = "intel,lgm-dma1rx", .data = &dma1rx},
   1556	{ .compatible = "intel,lgm-dma1tx", .data = &dma1tx},
   1557	{ .compatible = "intel,lgm-dma0tx", .data = &dma0tx},
   1558	{ .compatible = "intel,lgm-dma3", .data = &dma3},
   1559	{ .compatible = "intel,lgm-toe-dma30", .data = &toe_dma30},
   1560	{ .compatible = "intel,lgm-toe-dma31", .data = &toe_dma31},
   1561	{}
   1562};
   1563
   1564static int intel_ldma_probe(struct platform_device *pdev)
   1565{
   1566	struct device *dev = &pdev->dev;
   1567	struct dma_device *dma_dev;
   1568	unsigned long ch_mask;
   1569	struct ldma_chan *c;
   1570	struct ldma_port *p;
   1571	struct ldma_dev *d;
   1572	u32 id, bitn = 32, j;
   1573	int i, ret;
   1574
   1575	d = devm_kzalloc(dev, sizeof(*d), GFP_KERNEL);
   1576	if (!d)
   1577		return -ENOMEM;
   1578
   1579	/* Link controller to platform device */
   1580	d->dev = &pdev->dev;
   1581
   1582	d->inst = device_get_match_data(dev);
   1583	if (!d->inst) {
   1584		dev_err(dev, "No device match found\n");
   1585		return -ENODEV;
   1586	}
   1587
   1588	d->base = devm_platform_ioremap_resource(pdev, 0);
   1589	if (IS_ERR(d->base))
   1590		return PTR_ERR(d->base);
   1591
   1592	/* Power up and reset the dma engine, some DMAs always on?? */
   1593	d->core_clk = devm_clk_get_optional(dev, NULL);
   1594	if (IS_ERR(d->core_clk))
   1595		return PTR_ERR(d->core_clk);
   1596
   1597	d->rst = devm_reset_control_get_optional(dev, NULL);
   1598	if (IS_ERR(d->rst))
   1599		return PTR_ERR(d->rst);
   1600
   1601	clk_prepare_enable(d->core_clk);
   1602	reset_control_deassert(d->rst);
   1603
   1604	ret = devm_add_action_or_reset(dev, ldma_clk_disable, d);
   1605	if (ret) {
   1606		dev_err(dev, "Failed to devm_add_action_or_reset, %d\n", ret);
   1607		return ret;
   1608	}
   1609
   1610	id = readl(d->base + DMA_ID);
   1611	d->chan_nrs = FIELD_GET(DMA_ID_CHNR, id);
   1612	d->port_nrs = FIELD_GET(DMA_ID_PNR, id);
   1613	d->ver = FIELD_GET(DMA_ID_REV, id);
   1614
   1615	if (id & DMA_ID_AW_36B)
   1616		d->flags |= DMA_ADDR_36BIT;
   1617
   1618	if (IS_ENABLED(CONFIG_64BIT) && (id & DMA_ID_AW_36B))
   1619		bitn = 36;
   1620
   1621	if (id & DMA_ID_DW_128B)
   1622		d->flags |= DMA_DATA_128BIT;
   1623
   1624	ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(bitn));
   1625	if (ret) {
   1626		dev_err(dev, "No usable DMA configuration\n");
   1627		return ret;
   1628	}
   1629
   1630	if (d->ver == DMA_VER22) {
   1631		ret = ldma_init_v22(d, pdev);
   1632		if (ret)
   1633			return ret;
   1634	}
   1635
   1636	ret = device_property_read_u32(dev, "dma-channel-mask", &d->channels_mask);
   1637	if (ret < 0)
   1638		d->channels_mask = GENMASK(d->chan_nrs - 1, 0);
   1639
   1640	dma_dev = &d->dma_dev;
   1641
   1642	dma_cap_zero(dma_dev->cap_mask);
   1643	dma_cap_set(DMA_SLAVE, dma_dev->cap_mask);
   1644
   1645	/* Channel initializations */
   1646	INIT_LIST_HEAD(&dma_dev->channels);
   1647
   1648	/* Port Initializations */
   1649	d->ports = devm_kcalloc(dev, d->port_nrs, sizeof(*p), GFP_KERNEL);
   1650	if (!d->ports)
   1651		return -ENOMEM;
   1652
   1653	/* Channels Initializations */
   1654	d->chans = devm_kcalloc(d->dev, d->chan_nrs, sizeof(*c), GFP_KERNEL);
   1655	if (!d->chans)
   1656		return -ENOMEM;
   1657
   1658	for (i = 0; i < d->port_nrs; i++) {
   1659		p = &d->ports[i];
   1660		p->portid = i;
   1661		p->ldev = d;
   1662	}
   1663
   1664	ret = ldma_cfg_init(d);
   1665	if (ret)
   1666		return ret;
   1667
   1668	dma_dev->dev = &pdev->dev;
   1669
   1670	ch_mask = (unsigned long)d->channels_mask;
   1671	for_each_set_bit(j, &ch_mask, d->chan_nrs) {
   1672		if (d->ver == DMA_VER22)
   1673			ldma_dma_init_v22(j, d);
   1674		else
   1675			ldma_dma_init_v3X(j, d);
   1676	}
   1677
   1678	dma_dev->device_alloc_chan_resources = ldma_alloc_chan_resources;
   1679	dma_dev->device_free_chan_resources = ldma_free_chan_resources;
   1680	dma_dev->device_terminate_all = ldma_terminate_all;
   1681	dma_dev->device_issue_pending = ldma_issue_pending;
   1682	dma_dev->device_tx_status = ldma_tx_status;
   1683	dma_dev->device_resume = ldma_resume_chan;
   1684	dma_dev->device_pause = ldma_pause_chan;
   1685	dma_dev->device_prep_slave_sg = ldma_prep_slave_sg;
   1686
   1687	if (d->ver == DMA_VER22) {
   1688		dma_dev->device_config = ldma_slave_config;
   1689		dma_dev->device_synchronize = ldma_synchronize;
   1690		dma_dev->src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES);
   1691		dma_dev->dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES);
   1692		dma_dev->directions = BIT(DMA_MEM_TO_DEV) |
   1693				      BIT(DMA_DEV_TO_MEM);
   1694		dma_dev->residue_granularity =
   1695					DMA_RESIDUE_GRANULARITY_DESCRIPTOR;
   1696	}
   1697
   1698	platform_set_drvdata(pdev, d);
   1699
   1700	ldma_dev_init(d);
   1701
   1702	ret = dma_async_device_register(dma_dev);
   1703	if (ret) {
   1704		dev_err(dev, "Failed to register slave DMA engine device\n");
   1705		return ret;
   1706	}
   1707
   1708	ret = of_dma_controller_register(pdev->dev.of_node, ldma_xlate, d);
   1709	if (ret) {
   1710		dev_err(dev, "Failed to register of DMA controller\n");
   1711		dma_async_device_unregister(dma_dev);
   1712		return ret;
   1713	}
   1714
   1715	dev_info(dev, "Init done - rev: %x, ports: %d channels: %d\n", d->ver,
   1716		 d->port_nrs, d->chan_nrs);
   1717
   1718	return 0;
   1719}
   1720
   1721static struct platform_driver intel_ldma_driver = {
   1722	.probe = intel_ldma_probe,
   1723	.driver = {
   1724		.name = DRIVER_NAME,
   1725		.of_match_table = intel_ldma_match,
   1726	},
   1727};
   1728
   1729/*
   1730 * Perform this driver as device_initcall to make sure initialization happens
   1731 * before its DMA clients of some are platform specific and also to provide
   1732 * registered DMA channels and DMA capabilities to clients before their
   1733 * initialization.
   1734 */
   1735static int __init intel_ldma_init(void)
   1736{
   1737	return platform_driver_register(&intel_ldma_driver);
   1738}
   1739
   1740device_initcall(intel_ldma_init);