xref: /linux/drivers/dma/xilinx/xdma.c (revision edbafe65eef2b58625db1e113fbbfb1fe10c0291)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * DMA driver for Xilinx DMA/Bridge Subsystem
4  *
5  * Copyright (C) 2017-2020 Xilinx, Inc. All rights reserved.
6  * Copyright (C) 2022, Advanced Micro Devices, Inc.
7  */
8 
9 /*
10  * The DMA/Bridge Subsystem for PCI Express allows for the movement of data
11  * between Host memory and the DMA subsystem. It does this by operating on
12  * 'descriptors' that contain information about the source, destination and
13  * amount of data to transfer. These direct memory transfers can be both in
14  * the Host to Card (H2C) and Card to Host (C2H) transfers. The DMA can be
15  * configured to have a single AXI4 Master interface shared by all channels
16  * or one AXI4-Stream interface for each channel enabled. Memory transfers are
17  * specified on a per-channel basis in descriptor linked lists, which the DMA
18  * fetches from host memory and processes. Events such as descriptor completion
19  * and errors are signaled using interrupts. The core also provides up to 16
20  * user interrupt wires that generate interrupts to the host.
21  */
22 
23 #include <linux/bitfield.h>
24 #include <linux/dmapool.h>
25 #include <linux/regmap.h>
26 #include <linux/dmaengine.h>
27 #include <linux/dma/amd_xdma.h>
28 #include <linux/platform_device.h>
29 #include <linux/platform_data/amd_xdma.h>
30 #include <linux/dma-mapping.h>
31 #include <linux/pci.h>
32 #include "../virt-dma.h"
33 #include "xdma-regs.h"
34 
35 /* mmio regmap config for all XDMA registers */
36 static const struct regmap_config xdma_regmap_config = {
37 	.reg_bits = 32,
38 	.val_bits = 32,
39 	.reg_stride = 4,
40 	.max_register = XDMA_MAX_REG_OFFSET,
41 };
42 
43 /**
44  * struct xdma_desc_block - Descriptor block
45  * @virt_addr: Virtual address of block start
46  * @dma_addr: DMA address of block start
47  */
48 struct xdma_desc_block {
49 	void		*virt_addr;
50 	dma_addr_t	dma_addr;
51 };
52 
53 /**
54  * struct xdma_chan - Driver specific DMA channel structure
55  * @vchan: Virtual channel
56  * @xdev_hdl: Pointer to DMA device structure
57  * @base: Offset of channel registers
58  * @desc_pool: Descriptor pool
59  * @busy: Busy flag of the channel
60  * @dir: Transferring direction of the channel
61  * @cfg: Transferring config of the channel
62  * @irq: IRQ assigned to the channel
63  * @last_interrupt: task for comppleting last interrupt
64  * @stop_requested: stop request flag
65  */
66 struct xdma_chan {
67 	struct virt_dma_chan		vchan;
68 	void				*xdev_hdl;
69 	u32				base;
70 	struct dma_pool			*desc_pool;
71 	bool				busy;
72 	enum dma_transfer_direction	dir;
73 	struct dma_slave_config		cfg;
74 	u32				irq;
75 	struct completion		last_interrupt;
76 	bool				stop_requested;
77 };
78 
79 /**
80  * struct xdma_desc - DMA desc structure
81  * @vdesc: Virtual DMA descriptor
82  * @chan: DMA channel pointer
83  * @dir: Transferring direction of the request
84  * @desc_blocks: Hardware descriptor blocks
85  * @dblk_num: Number of hardware descriptor blocks
86  * @desc_num: Number of hardware descriptors
87  * @completed_desc_num: Completed hardware descriptors
88  * @cyclic: Cyclic transfer vs. scatter-gather
89  * @interleaved_dma: Interleaved DMA transfer
90  * @periods: Number of periods in the cyclic transfer
91  * @period_size: Size of a period in bytes in cyclic transfers
92  * @frames_left: Number of frames left in interleaved DMA transfer
93  * @error: tx error flag
94  */
95 struct xdma_desc {
96 	struct virt_dma_desc		vdesc;
97 	struct xdma_chan		*chan;
98 	enum dma_transfer_direction	dir;
99 	struct xdma_desc_block		*desc_blocks;
100 	u32				dblk_num;
101 	u32				desc_num;
102 	u32				completed_desc_num;
103 	bool				cyclic;
104 	bool				interleaved_dma;
105 	u32				periods;
106 	u32				period_size;
107 	u32				frames_left;
108 	bool				error;
109 };
110 
111 #define XDMA_DEV_STATUS_REG_DMA		BIT(0)
112 #define XDMA_DEV_STATUS_INIT_MSIX	BIT(1)
113 
114 /**
115  * struct xdma_device - DMA device structure
116  * @pdev: Platform device pointer
117  * @dma_dev: DMA device structure
118  * @rmap: MMIO regmap for DMA registers
119  * @h2c_chans: Host to Card channels
120  * @c2h_chans: Card to Host channels
121  * @h2c_chan_num: Number of H2C channels
122  * @c2h_chan_num: Number of C2H channels
123  * @irq_start: Start IRQ assigned to device
124  * @irq_num: Number of IRQ assigned to device
125  * @status: Initialization status
126  */
127 struct xdma_device {
128 	struct platform_device	*pdev;
129 	struct dma_device	dma_dev;
130 	struct regmap		*rmap;
131 	struct xdma_chan	*h2c_chans;
132 	struct xdma_chan	*c2h_chans;
133 	u32			h2c_chan_num;
134 	u32			c2h_chan_num;
135 	u32			irq_start;
136 	u32			irq_num;
137 	u32			status;
138 };
139 
140 #define xdma_err(xdev, fmt, args...)					\
141 	dev_err(&(xdev)->pdev->dev, fmt, ##args)
142 #define XDMA_CHAN_NUM(_xd) ({						\
143 	typeof(_xd) (xd) = (_xd);					\
144 	((xd)->h2c_chan_num + (xd)->c2h_chan_num); })
145 
146 /* Get the last desc in a desc block */
147 static inline void *xdma_blk_last_desc(struct xdma_desc_block *block)
148 {
149 	return block->virt_addr + (XDMA_DESC_ADJACENT - 1) * XDMA_DESC_SIZE;
150 }
151 
152 /**
153  * xdma_link_sg_desc_blocks - Link SG descriptor blocks for DMA transfer
154  * @sw_desc: Tx descriptor pointer
155  */
156 static void xdma_link_sg_desc_blocks(struct xdma_desc *sw_desc)
157 {
158 	struct xdma_desc_block *block;
159 	u32 last_blk_desc, desc_control;
160 	struct xdma_hw_desc *desc;
161 	int i;
162 
163 	desc_control = XDMA_DESC_CONTROL(XDMA_DESC_ADJACENT, 0);
164 	for (i = 1; i < sw_desc->dblk_num; i++) {
165 		block = &sw_desc->desc_blocks[i - 1];
166 		desc = xdma_blk_last_desc(block);
167 
168 		if (!(i & XDMA_DESC_BLOCK_MASK)) {
169 			desc->control = cpu_to_le32(XDMA_DESC_CONTROL_LAST);
170 			continue;
171 		}
172 		desc->control = cpu_to_le32(desc_control);
173 		desc->next_desc = cpu_to_le64(block[1].dma_addr);
174 	}
175 
176 	/* update the last block */
177 	last_blk_desc = (sw_desc->desc_num - 1) & XDMA_DESC_ADJACENT_MASK;
178 	if (((sw_desc->dblk_num - 1) & XDMA_DESC_BLOCK_MASK) > 0) {
179 		block = &sw_desc->desc_blocks[sw_desc->dblk_num - 2];
180 		desc = xdma_blk_last_desc(block);
181 		desc_control = XDMA_DESC_CONTROL(last_blk_desc + 1, 0);
182 		desc->control = cpu_to_le32(desc_control);
183 	}
184 
185 	block = &sw_desc->desc_blocks[sw_desc->dblk_num - 1];
186 	desc = block->virt_addr + last_blk_desc * XDMA_DESC_SIZE;
187 	desc->control = cpu_to_le32(XDMA_DESC_CONTROL_LAST);
188 }
189 
190 /**
191  * xdma_link_cyclic_desc_blocks - Link cyclic descriptor blocks for DMA transfer
192  * @sw_desc: Tx descriptor pointer
193  */
194 static void xdma_link_cyclic_desc_blocks(struct xdma_desc *sw_desc)
195 {
196 	struct xdma_desc_block *block;
197 	struct xdma_hw_desc *desc;
198 	int i;
199 
200 	block = sw_desc->desc_blocks;
201 	for (i = 0; i < sw_desc->desc_num - 1; i++) {
202 		desc = block->virt_addr + i * XDMA_DESC_SIZE;
203 		desc->next_desc = cpu_to_le64(block->dma_addr + ((i + 1) * XDMA_DESC_SIZE));
204 	}
205 	desc = block->virt_addr + i * XDMA_DESC_SIZE;
206 	desc->next_desc = cpu_to_le64(block->dma_addr);
207 }
208 
209 static inline struct xdma_chan *to_xdma_chan(struct dma_chan *chan)
210 {
211 	return container_of(chan, struct xdma_chan, vchan.chan);
212 }
213 
214 static inline struct xdma_desc *to_xdma_desc(struct virt_dma_desc *vdesc)
215 {
216 	return container_of(vdesc, struct xdma_desc, vdesc);
217 }
218 
219 /**
220  * xdma_channel_init - Initialize DMA channel registers
221  * @chan: DMA channel pointer
222  */
223 static int xdma_channel_init(struct xdma_chan *chan)
224 {
225 	struct xdma_device *xdev = chan->xdev_hdl;
226 	int ret;
227 
228 	ret = regmap_write(xdev->rmap, chan->base + XDMA_CHAN_CONTROL_W1C,
229 			   CHAN_CTRL_NON_INCR_ADDR);
230 	if (ret)
231 		return ret;
232 
233 	ret = regmap_write(xdev->rmap, chan->base + XDMA_CHAN_INTR_ENABLE,
234 			   CHAN_IM_ALL);
235 	if (ret)
236 		return ret;
237 
238 	return 0;
239 }
240 
241 /**
242  * xdma_free_desc - Free descriptor
243  * @vdesc: Virtual DMA descriptor
244  */
245 static void xdma_free_desc(struct virt_dma_desc *vdesc)
246 {
247 	struct xdma_desc *sw_desc;
248 	int i;
249 
250 	sw_desc = to_xdma_desc(vdesc);
251 	for (i = 0; i < sw_desc->dblk_num; i++) {
252 		if (!sw_desc->desc_blocks[i].virt_addr)
253 			break;
254 		dma_pool_free(sw_desc->chan->desc_pool,
255 			      sw_desc->desc_blocks[i].virt_addr,
256 			      sw_desc->desc_blocks[i].dma_addr);
257 	}
258 	kfree(sw_desc->desc_blocks);
259 	kfree(sw_desc);
260 }
261 
262 /**
263  * xdma_alloc_desc - Allocate descriptor
264  * @chan: DMA channel pointer
265  * @desc_num: Number of hardware descriptors
266  * @cyclic: Whether this is a cyclic transfer
267  */
268 static struct xdma_desc *
269 xdma_alloc_desc(struct xdma_chan *chan, u32 desc_num, bool cyclic)
270 {
271 	struct xdma_desc *sw_desc;
272 	struct xdma_hw_desc *desc;
273 	dma_addr_t dma_addr;
274 	u32 dblk_num;
275 	u32 control;
276 	void *addr;
277 	int i, j;
278 
279 	sw_desc = kzalloc_obj(*sw_desc, GFP_NOWAIT);
280 	if (!sw_desc)
281 		return NULL;
282 
283 	sw_desc->chan = chan;
284 	sw_desc->desc_num = desc_num;
285 	sw_desc->cyclic = cyclic;
286 	sw_desc->error = false;
287 	dblk_num = DIV_ROUND_UP(desc_num, XDMA_DESC_ADJACENT);
288 	sw_desc->desc_blocks = kzalloc_objs(*sw_desc->desc_blocks, dblk_num,
289 					    GFP_NOWAIT);
290 	if (!sw_desc->desc_blocks)
291 		goto failed;
292 
293 	if (cyclic)
294 		control = XDMA_DESC_CONTROL_CYCLIC;
295 	else
296 		control = XDMA_DESC_CONTROL(1, 0);
297 
298 	sw_desc->dblk_num = dblk_num;
299 	for (i = 0; i < sw_desc->dblk_num; i++) {
300 		addr = dma_pool_alloc(chan->desc_pool, GFP_NOWAIT, &dma_addr);
301 		if (!addr)
302 			goto failed;
303 
304 		sw_desc->desc_blocks[i].virt_addr = addr;
305 		sw_desc->desc_blocks[i].dma_addr = dma_addr;
306 		for (j = 0, desc = addr; j < XDMA_DESC_ADJACENT; j++)
307 			desc[j].control = cpu_to_le32(control);
308 	}
309 
310 	if (cyclic)
311 		xdma_link_cyclic_desc_blocks(sw_desc);
312 	else
313 		xdma_link_sg_desc_blocks(sw_desc);
314 
315 	return sw_desc;
316 
317 failed:
318 	xdma_free_desc(&sw_desc->vdesc);
319 	return NULL;
320 }
321 
322 /**
323  * xdma_xfer_start - Start DMA transfer
324  * @xchan: DMA channel pointer
325  */
326 static int xdma_xfer_start(struct xdma_chan *xchan)
327 {
328 	struct virt_dma_desc *vd = vchan_next_desc(&xchan->vchan);
329 	struct xdma_device *xdev = xchan->xdev_hdl;
330 	struct xdma_desc_block *block;
331 	u32 val, completed_blocks;
332 	struct xdma_desc *desc;
333 	int ret;
334 
335 	/*
336 	 * check if there is not any submitted descriptor or channel is busy.
337 	 * vchan lock should be held where this function is called.
338 	 */
339 	if (!vd || xchan->busy)
340 		return -EINVAL;
341 
342 	/* clear run stop bit to get ready for transfer */
343 	ret = regmap_write(xdev->rmap, xchan->base + XDMA_CHAN_CONTROL_W1C,
344 			   CHAN_CTRL_RUN_STOP);
345 	if (ret)
346 		return ret;
347 
348 	desc = to_xdma_desc(vd);
349 	if (desc->dir != xchan->dir) {
350 		xdma_err(xdev, "incorrect request direction");
351 		return -EINVAL;
352 	}
353 
354 	/* set DMA engine to the first descriptor block */
355 	completed_blocks = desc->completed_desc_num / XDMA_DESC_ADJACENT;
356 	block = &desc->desc_blocks[completed_blocks];
357 	val = lower_32_bits(block->dma_addr);
358 	ret = regmap_write(xdev->rmap, xchan->base + XDMA_SGDMA_DESC_LO, val);
359 	if (ret)
360 		return ret;
361 
362 	val = upper_32_bits(block->dma_addr);
363 	ret = regmap_write(xdev->rmap, xchan->base + XDMA_SGDMA_DESC_HI, val);
364 	if (ret)
365 		return ret;
366 
367 	if (completed_blocks + 1 == desc->dblk_num)
368 		val = (desc->desc_num - 1) & XDMA_DESC_ADJACENT_MASK;
369 	else
370 		val = XDMA_DESC_ADJACENT - 1;
371 	ret = regmap_write(xdev->rmap, xchan->base + XDMA_SGDMA_DESC_ADJ, val);
372 	if (ret)
373 		return ret;
374 
375 	/* kick off DMA transfer */
376 	ret = regmap_write(xdev->rmap, xchan->base + XDMA_CHAN_CONTROL,
377 			   CHAN_CTRL_START);
378 	if (ret)
379 		return ret;
380 
381 	xchan->busy = true;
382 	xchan->stop_requested = false;
383 	reinit_completion(&xchan->last_interrupt);
384 
385 	return 0;
386 }
387 
388 /**
389  * xdma_xfer_stop - Stop DMA transfer
390  * @xchan: DMA channel pointer
391  */
392 static int xdma_xfer_stop(struct xdma_chan *xchan)
393 {
394 	struct xdma_device *xdev = xchan->xdev_hdl;
395 
396 	/* clear run stop bit to prevent any further auto-triggering */
397 	return regmap_write(xdev->rmap, xchan->base + XDMA_CHAN_CONTROL_W1C,
398 			    CHAN_CTRL_RUN_STOP);
399 }
400 
401 /**
402  * xdma_alloc_channels - Detect and allocate DMA channels
403  * @xdev: DMA device pointer
404  * @dir: Channel direction
405  */
406 static int xdma_alloc_channels(struct xdma_device *xdev,
407 			       enum dma_transfer_direction dir)
408 {
409 	struct xdma_platdata *pdata = dev_get_platdata(&xdev->pdev->dev);
410 	struct xdma_chan **chans, *xchan;
411 	u32 base, identifier, target;
412 	u32 *chan_num;
413 	int i, j, ret;
414 
415 	if (dir == DMA_MEM_TO_DEV) {
416 		base = XDMA_CHAN_H2C_OFFSET;
417 		target = XDMA_CHAN_H2C_TARGET;
418 		chans = &xdev->h2c_chans;
419 		chan_num = &xdev->h2c_chan_num;
420 	} else if (dir == DMA_DEV_TO_MEM) {
421 		base = XDMA_CHAN_C2H_OFFSET;
422 		target = XDMA_CHAN_C2H_TARGET;
423 		chans = &xdev->c2h_chans;
424 		chan_num = &xdev->c2h_chan_num;
425 	} else {
426 		xdma_err(xdev, "invalid direction specified");
427 		return -EINVAL;
428 	}
429 
430 	/* detect number of available DMA channels */
431 	for (i = 0, *chan_num = 0; i < pdata->max_dma_channels; i++) {
432 		ret = regmap_read(xdev->rmap, base + i * XDMA_CHAN_STRIDE,
433 				  &identifier);
434 		if (ret)
435 			return ret;
436 
437 		/* check if it is available DMA channel */
438 		if (XDMA_CHAN_CHECK_TARGET(identifier, target))
439 			(*chan_num)++;
440 	}
441 
442 	if (!*chan_num) {
443 		xdma_err(xdev, "does not probe any channel");
444 		return -EINVAL;
445 	}
446 
447 	*chans = devm_kcalloc(&xdev->pdev->dev, *chan_num, sizeof(**chans),
448 			      GFP_KERNEL);
449 	if (!*chans)
450 		return -ENOMEM;
451 
452 	for (i = 0, j = 0; i < pdata->max_dma_channels; i++) {
453 		ret = regmap_read(xdev->rmap, base + i * XDMA_CHAN_STRIDE,
454 				  &identifier);
455 		if (ret)
456 			return ret;
457 
458 		if (!XDMA_CHAN_CHECK_TARGET(identifier, target))
459 			continue;
460 
461 		if (j == *chan_num) {
462 			xdma_err(xdev, "invalid channel number");
463 			return -EIO;
464 		}
465 
466 		/* init channel structure and hardware */
467 		xchan = &(*chans)[j];
468 		xchan->xdev_hdl = xdev;
469 		xchan->base = base + i * XDMA_CHAN_STRIDE;
470 		xchan->dir = dir;
471 		xchan->stop_requested = false;
472 		init_completion(&xchan->last_interrupt);
473 
474 		ret = xdma_channel_init(xchan);
475 		if (ret)
476 			return ret;
477 		xchan->vchan.desc_free = xdma_free_desc;
478 		vchan_init(&xchan->vchan, &xdev->dma_dev);
479 
480 		j++;
481 	}
482 
483 	dev_info(&xdev->pdev->dev, "configured %d %s channels", j,
484 		 (dir == DMA_MEM_TO_DEV) ? "H2C" : "C2H");
485 
486 	return 0;
487 }
488 
489 /**
490  * xdma_issue_pending - Issue pending transactions
491  * @chan: DMA channel pointer
492  */
493 static void xdma_issue_pending(struct dma_chan *chan)
494 {
495 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
496 	unsigned long flags;
497 
498 	spin_lock_irqsave(&xdma_chan->vchan.lock, flags);
499 	if (vchan_issue_pending(&xdma_chan->vchan))
500 		xdma_xfer_start(xdma_chan);
501 	spin_unlock_irqrestore(&xdma_chan->vchan.lock, flags);
502 }
503 
504 /**
505  * xdma_terminate_all - Terminate all transactions
506  * @chan: DMA channel pointer
507  */
508 static int xdma_terminate_all(struct dma_chan *chan)
509 {
510 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
511 	struct virt_dma_desc *vd;
512 	unsigned long flags;
513 	LIST_HEAD(head);
514 
515 	xdma_xfer_stop(xdma_chan);
516 
517 	spin_lock_irqsave(&xdma_chan->vchan.lock, flags);
518 
519 	xdma_chan->busy = false;
520 	xdma_chan->stop_requested = true;
521 	vd = vchan_next_desc(&xdma_chan->vchan);
522 	if (vd) {
523 		list_del(&vd->node);
524 		dma_cookie_complete(&vd->tx);
525 		vchan_terminate_vdesc(vd);
526 	}
527 	vchan_get_all_descriptors(&xdma_chan->vchan, &head);
528 	list_splice_tail(&head, &xdma_chan->vchan.desc_terminated);
529 
530 	spin_unlock_irqrestore(&xdma_chan->vchan.lock, flags);
531 
532 	return 0;
533 }
534 
535 /**
536  * xdma_synchronize - Synchronize terminated transactions
537  * @chan: DMA channel pointer
538  */
539 static void xdma_synchronize(struct dma_chan *chan)
540 {
541 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
542 	struct xdma_device *xdev = xdma_chan->xdev_hdl;
543 	int st = 0;
544 
545 	/* If the engine continues running, wait for the last interrupt */
546 	regmap_read(xdev->rmap, xdma_chan->base + XDMA_CHAN_STATUS, &st);
547 	if (st & XDMA_CHAN_STATUS_BUSY)
548 		wait_for_completion_timeout(&xdma_chan->last_interrupt, msecs_to_jiffies(1000));
549 
550 	vchan_synchronize(&xdma_chan->vchan);
551 }
552 
553 /**
554  * xdma_fill_descs() - Fill hardware descriptors for one contiguous memory chunk.
555  *		       More than one descriptor will be used if the size is bigger
556  *		       than XDMA_DESC_BLEN_MAX.
557  * @sw_desc: Descriptor container
558  * @src_addr: First value for the ->src_addr field
559  * @dst_addr: First value for the ->dst_addr field
560  * @size: Size of the contiguous memory block
561  * @filled_descs_num: Index of the first descriptor to take care of in @sw_desc
562  */
563 static inline u32 xdma_fill_descs(struct xdma_desc *sw_desc, u64 src_addr,
564 				  u64 dst_addr, u32 size, u32 filled_descs_num)
565 {
566 	u32 left = size, len, desc_num = filled_descs_num;
567 	struct xdma_desc_block *dblk;
568 	struct xdma_hw_desc *desc;
569 
570 	dblk = sw_desc->desc_blocks + (desc_num / XDMA_DESC_ADJACENT);
571 	desc = dblk->virt_addr;
572 	desc += desc_num & XDMA_DESC_ADJACENT_MASK;
573 	do {
574 		len = min_t(u32, left, XDMA_DESC_BLEN_MAX);
575 		/* set hardware descriptor */
576 		desc->bytes = cpu_to_le32(len);
577 		desc->src_addr = cpu_to_le64(src_addr);
578 		desc->dst_addr = cpu_to_le64(dst_addr);
579 		if (!(++desc_num & XDMA_DESC_ADJACENT_MASK))
580 			desc = (++dblk)->virt_addr;
581 		else
582 			desc++;
583 
584 		src_addr += len;
585 		dst_addr += len;
586 		left -= len;
587 	} while (left);
588 
589 	return desc_num - filled_descs_num;
590 }
591 
592 /**
593  * xdma_prep_device_sg - prepare a descriptor for a DMA transaction
594  * @chan: DMA channel pointer
595  * @sgl: Transfer scatter gather list
596  * @sg_len: Length of scatter gather list
597  * @dir: Transfer direction
598  * @flags: transfer ack flags
599  * @context: APP words of the descriptor
600  */
601 static struct dma_async_tx_descriptor *
602 xdma_prep_device_sg(struct dma_chan *chan, struct scatterlist *sgl,
603 		    unsigned int sg_len, enum dma_transfer_direction dir,
604 		    unsigned long flags, void *context)
605 {
606 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
607 	struct dma_async_tx_descriptor *tx_desc;
608 	struct xdma_desc *sw_desc;
609 	u64 addr, dev_addr, *src, *dst;
610 	u32 desc_num, i;
611 	struct scatterlist *sg;
612 
613 	desc_num = sg_nents_for_dma(sgl, sg_len, XDMA_DESC_BLEN_MAX);
614 	sw_desc = xdma_alloc_desc(xdma_chan, desc_num, false);
615 	if (!sw_desc)
616 		return NULL;
617 	sw_desc->dir = dir;
618 	sw_desc->cyclic = false;
619 	sw_desc->interleaved_dma = false;
620 
621 	if (dir == DMA_MEM_TO_DEV) {
622 		dev_addr = xdma_chan->cfg.dst_addr;
623 		src = &addr;
624 		dst = &dev_addr;
625 	} else {
626 		dev_addr = xdma_chan->cfg.src_addr;
627 		src = &dev_addr;
628 		dst = &addr;
629 	}
630 
631 	desc_num = 0;
632 	for_each_sg(sgl, sg, sg_len, i) {
633 		addr = sg_dma_address(sg);
634 		desc_num += xdma_fill_descs(sw_desc, *src, *dst, sg_dma_len(sg), desc_num);
635 		dev_addr += sg_dma_len(sg);
636 	}
637 
638 	tx_desc = vchan_tx_prep(&xdma_chan->vchan, &sw_desc->vdesc, flags);
639 	if (!tx_desc)
640 		goto failed;
641 
642 	return tx_desc;
643 
644 failed:
645 	xdma_free_desc(&sw_desc->vdesc);
646 
647 	return NULL;
648 }
649 
650 /**
651  * xdma_prep_dma_cyclic - prepare for cyclic DMA transactions
652  * @chan: DMA channel pointer
653  * @address: Device DMA address to access
654  * @size: Total length to transfer
655  * @period_size: Period size to use for each transfer
656  * @dir: Transfer direction
657  * @flags: Transfer ack flags
658  */
659 static struct dma_async_tx_descriptor *
660 xdma_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t address,
661 		     size_t size, size_t period_size,
662 		     enum dma_transfer_direction dir,
663 		     unsigned long flags)
664 {
665 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
666 	struct xdma_device *xdev = xdma_chan->xdev_hdl;
667 	unsigned int periods = size / period_size;
668 	struct dma_async_tx_descriptor *tx_desc;
669 	struct xdma_desc *sw_desc;
670 	u64 addr, dev_addr, *src, *dst;
671 	u32 desc_num;
672 	unsigned int i;
673 
674 	/*
675 	 * Simplify the whole logic by preventing an abnormally high number of
676 	 * periods and periods size.
677 	 */
678 	if (period_size > XDMA_DESC_BLEN_MAX) {
679 		xdma_err(xdev, "period size limited to %lu bytes\n", XDMA_DESC_BLEN_MAX);
680 		return NULL;
681 	}
682 
683 	if (periods > XDMA_DESC_ADJACENT) {
684 		xdma_err(xdev, "number of periods limited to %u\n", XDMA_DESC_ADJACENT);
685 		return NULL;
686 	}
687 
688 	sw_desc = xdma_alloc_desc(xdma_chan, periods, true);
689 	if (!sw_desc)
690 		return NULL;
691 
692 	sw_desc->periods = periods;
693 	sw_desc->period_size = period_size;
694 	sw_desc->dir = dir;
695 	sw_desc->interleaved_dma = false;
696 
697 	addr = address;
698 	if (dir == DMA_MEM_TO_DEV) {
699 		dev_addr = xdma_chan->cfg.dst_addr;
700 		src = &addr;
701 		dst = &dev_addr;
702 	} else {
703 		dev_addr = xdma_chan->cfg.src_addr;
704 		src = &dev_addr;
705 		dst = &addr;
706 	}
707 
708 	desc_num = 0;
709 	for (i = 0; i < periods; i++) {
710 		desc_num += xdma_fill_descs(sw_desc, *src, *dst, period_size, desc_num);
711 		addr += period_size;
712 	}
713 
714 	tx_desc = vchan_tx_prep(&xdma_chan->vchan, &sw_desc->vdesc, flags);
715 	if (!tx_desc)
716 		goto failed;
717 
718 	return tx_desc;
719 
720 failed:
721 	xdma_free_desc(&sw_desc->vdesc);
722 
723 	return NULL;
724 }
725 
726 /**
727  * xdma_prep_interleaved_dma - Prepare virtual descriptor for interleaved DMA transfers
728  * @chan: DMA channel
729  * @xt: DMA transfer template
730  * @flags: tx flags
731  */
732 static struct dma_async_tx_descriptor *
733 xdma_prep_interleaved_dma(struct dma_chan *chan,
734 			  struct dma_interleaved_template *xt,
735 			  unsigned long flags)
736 {
737 	int i;
738 	u32 desc_num = 0, period_size = 0;
739 	struct dma_async_tx_descriptor *tx_desc;
740 	struct xdma_chan *xchan = to_xdma_chan(chan);
741 	struct xdma_desc *sw_desc;
742 	u64 src_addr, dst_addr;
743 
744 	for (i = 0; i < xt->frame_size; ++i)
745 		desc_num += DIV_ROUND_UP(xt->sgl[i].size, XDMA_DESC_BLEN_MAX);
746 
747 	sw_desc = xdma_alloc_desc(xchan, desc_num, false);
748 	if (!sw_desc)
749 		return NULL;
750 	sw_desc->dir = xt->dir;
751 	sw_desc->interleaved_dma = true;
752 	sw_desc->cyclic = flags & DMA_PREP_REPEAT;
753 	sw_desc->frames_left = xt->numf;
754 	sw_desc->periods = xt->numf;
755 
756 	desc_num = 0;
757 	src_addr = xt->src_start;
758 	dst_addr = xt->dst_start;
759 	for (i = 0; i < xt->frame_size; ++i) {
760 		desc_num += xdma_fill_descs(sw_desc, src_addr, dst_addr, xt->sgl[i].size, desc_num);
761 		src_addr += dmaengine_get_src_icg(xt, &xt->sgl[i]) + (xt->src_inc ?
762 							      xt->sgl[i].size : 0);
763 		dst_addr += dmaengine_get_dst_icg(xt, &xt->sgl[i]) + (xt->dst_inc ?
764 							      xt->sgl[i].size : 0);
765 		period_size += xt->sgl[i].size;
766 	}
767 	sw_desc->period_size = period_size;
768 
769 	tx_desc = vchan_tx_prep(&xchan->vchan, &sw_desc->vdesc, flags);
770 	if (tx_desc)
771 		return tx_desc;
772 
773 	xdma_free_desc(&sw_desc->vdesc);
774 	return NULL;
775 }
776 
777 /**
778  * xdma_device_config - Configure the DMA channel
779  * @chan: DMA channel
780  * @cfg: channel configuration
781  */
782 static int xdma_device_config(struct dma_chan *chan,
783 			      struct dma_slave_config *cfg)
784 {
785 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
786 
787 	memcpy(&xdma_chan->cfg, cfg, sizeof(*cfg));
788 
789 	return 0;
790 }
791 
792 /**
793  * xdma_free_chan_resources - Free channel resources
794  * @chan: DMA channel
795  */
796 static void xdma_free_chan_resources(struct dma_chan *chan)
797 {
798 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
799 
800 	vchan_free_chan_resources(&xdma_chan->vchan);
801 	dma_pool_destroy(xdma_chan->desc_pool);
802 	xdma_chan->desc_pool = NULL;
803 }
804 
805 /**
806  * xdma_alloc_chan_resources - Allocate channel resources
807  * @chan: DMA channel
808  */
809 static int xdma_alloc_chan_resources(struct dma_chan *chan)
810 {
811 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
812 	struct xdma_device *xdev = xdma_chan->xdev_hdl;
813 	struct device *dev = xdev->dma_dev.dev;
814 
815 	while (dev && !dev_is_pci(dev))
816 		dev = dev->parent;
817 	if (!dev) {
818 		xdma_err(xdev, "unable to find pci device");
819 		return -EINVAL;
820 	}
821 
822 	xdma_chan->desc_pool = dma_pool_create(dma_chan_name(chan), dev, XDMA_DESC_BLOCK_SIZE,
823 					       XDMA_DESC_BLOCK_ALIGN, XDMA_DESC_BLOCK_BOUNDARY);
824 	if (!xdma_chan->desc_pool) {
825 		xdma_err(xdev, "unable to allocate descriptor pool");
826 		return -ENOMEM;
827 	}
828 
829 	return 0;
830 }
831 
832 static enum dma_status xdma_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
833 				      struct dma_tx_state *state)
834 {
835 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
836 	struct xdma_desc *desc = NULL;
837 	struct virt_dma_desc *vd;
838 	enum dma_status ret;
839 	unsigned long flags;
840 	unsigned int period_idx;
841 	u32 residue = 0;
842 
843 	ret = dma_cookie_status(chan, cookie, state);
844 	if (ret == DMA_COMPLETE)
845 		return ret;
846 
847 	spin_lock_irqsave(&xdma_chan->vchan.lock, flags);
848 
849 	vd = vchan_find_desc(&xdma_chan->vchan, cookie);
850 	if (!vd)
851 		goto out;
852 
853 	desc = to_xdma_desc(vd);
854 	if (desc->error) {
855 		ret = DMA_ERROR;
856 	} else if (desc->cyclic) {
857 		period_idx = desc->completed_desc_num % desc->periods;
858 		residue = (desc->periods - period_idx) * desc->period_size;
859 		dma_set_residue(state, residue);
860 	}
861 out:
862 	spin_unlock_irqrestore(&xdma_chan->vchan.lock, flags);
863 
864 	return ret;
865 }
866 
867 /**
868  * xdma_channel_isr - XDMA channel interrupt handler
869  * @irq: IRQ number
870  * @dev_id: Pointer to the DMA channel structure
871  */
872 static irqreturn_t xdma_channel_isr(int irq, void *dev_id)
873 {
874 	struct xdma_chan *xchan = dev_id;
875 	u32 complete_desc_num = 0;
876 	struct xdma_device *xdev = xchan->xdev_hdl;
877 	struct virt_dma_desc *vd, *next_vd;
878 	struct xdma_desc *desc;
879 	int ret;
880 	u32 st;
881 	bool repeat_tx;
882 
883 	spin_lock(&xchan->vchan.lock);
884 
885 	if (xchan->stop_requested)
886 		complete(&xchan->last_interrupt);
887 
888 	/* get submitted request */
889 	vd = vchan_next_desc(&xchan->vchan);
890 	if (!vd)
891 		goto out;
892 
893 	/* Clear-on-read the status register */
894 	ret = regmap_read(xdev->rmap, xchan->base + XDMA_CHAN_STATUS_RC, &st);
895 	if (ret)
896 		goto out;
897 
898 	desc = to_xdma_desc(vd);
899 
900 	st &= XDMA_CHAN_STATUS_MASK;
901 	if ((st & XDMA_CHAN_ERROR_MASK) ||
902 	    !(st & (CHAN_CTRL_IE_DESC_COMPLETED | CHAN_CTRL_IE_DESC_STOPPED))) {
903 		desc->error = true;
904 		xdma_err(xdev, "channel error, status register value: 0x%x", st);
905 		goto out;
906 	}
907 
908 	ret = regmap_read(xdev->rmap, xchan->base + XDMA_CHAN_COMPLETED_DESC,
909 			  &complete_desc_num);
910 	if (ret)
911 		goto out;
912 
913 	if (desc->interleaved_dma) {
914 		xchan->busy = false;
915 		desc->completed_desc_num += complete_desc_num;
916 		if (complete_desc_num == XDMA_DESC_BLOCK_NUM * XDMA_DESC_ADJACENT) {
917 			xdma_xfer_start(xchan);
918 			goto out;
919 		}
920 
921 		/* last desc of any frame */
922 		desc->frames_left--;
923 		if (desc->frames_left)
924 			goto out;
925 
926 		/* last desc of the last frame  */
927 		repeat_tx = vd->tx.flags & DMA_PREP_REPEAT;
928 		next_vd = list_first_entry_or_null(&vd->node, struct virt_dma_desc, node);
929 		if (next_vd)
930 			repeat_tx = repeat_tx && !(next_vd->tx.flags & DMA_PREP_LOAD_EOT);
931 		if (repeat_tx) {
932 			desc->frames_left = desc->periods;
933 			desc->completed_desc_num = 0;
934 			vchan_cyclic_callback(vd);
935 		} else {
936 			list_del(&vd->node);
937 			vchan_cookie_complete(vd);
938 		}
939 		/* start (or continue) the tx of a first desc on the vc.desc_issued list, if any */
940 		xdma_xfer_start(xchan);
941 	} else if (!desc->cyclic) {
942 		xchan->busy = false;
943 		desc->completed_desc_num += complete_desc_num;
944 
945 		/* if all data blocks are transferred, remove and complete the request */
946 		if (desc->completed_desc_num == desc->desc_num) {
947 			list_del(&vd->node);
948 			vchan_cookie_complete(vd);
949 			goto out;
950 		}
951 
952 		if (desc->completed_desc_num > desc->desc_num ||
953 		    complete_desc_num != XDMA_DESC_BLOCK_NUM * XDMA_DESC_ADJACENT)
954 			goto out;
955 
956 		/* transfer the rest of data */
957 		xdma_xfer_start(xchan);
958 	} else {
959 		desc->completed_desc_num = complete_desc_num;
960 		vchan_cyclic_callback(vd);
961 	}
962 
963 out:
964 	spin_unlock(&xchan->vchan.lock);
965 	return IRQ_HANDLED;
966 }
967 
968 /**
969  * xdma_irq_fini - Uninitialize IRQ
970  * @xdev: DMA device pointer
971  */
972 static void xdma_irq_fini(struct xdma_device *xdev)
973 {
974 	int i;
975 
976 	/* disable interrupt */
977 	regmap_write(xdev->rmap, XDMA_IRQ_CHAN_INT_EN_W1C, ~0);
978 
979 	/* free irq handler */
980 	for (i = 0; i < xdev->h2c_chan_num; i++)
981 		free_irq(xdev->h2c_chans[i].irq, &xdev->h2c_chans[i]);
982 
983 	for (i = 0; i < xdev->c2h_chan_num; i++)
984 		free_irq(xdev->c2h_chans[i].irq, &xdev->c2h_chans[i]);
985 }
986 
987 /**
988  * xdma_set_vector_reg - configure hardware IRQ registers
989  * @xdev: DMA device pointer
990  * @vec_tbl_start: Start of IRQ registers
991  * @irq_start: Start of IRQ
992  * @irq_num: Number of IRQ
993  */
994 static int xdma_set_vector_reg(struct xdma_device *xdev, u32 vec_tbl_start,
995 			       u32 irq_start, u32 irq_num)
996 {
997 	u32 shift, i, val = 0;
998 	int ret;
999 
1000 	/* Each IRQ register is 32 bit and contains 4 IRQs */
1001 	while (irq_num > 0) {
1002 		for (i = 0; i < 4; i++) {
1003 			shift = XDMA_IRQ_VEC_SHIFT * i;
1004 			val |= irq_start << shift;
1005 			irq_start++;
1006 			irq_num--;
1007 			if (!irq_num)
1008 				break;
1009 		}
1010 
1011 		/* write IRQ register */
1012 		ret = regmap_write(xdev->rmap, vec_tbl_start, val);
1013 		if (ret)
1014 			return ret;
1015 		vec_tbl_start += sizeof(u32);
1016 		val = 0;
1017 	}
1018 
1019 	return 0;
1020 }
1021 
1022 /**
1023  * xdma_irq_init - initialize IRQs
1024  * @xdev: DMA device pointer
1025  */
1026 static int xdma_irq_init(struct xdma_device *xdev)
1027 {
1028 	u32 irq = xdev->irq_start;
1029 	u32 user_irq_start;
1030 	int i, j, ret;
1031 
1032 	/* return failure if there are not enough IRQs */
1033 	if (xdev->irq_num < XDMA_CHAN_NUM(xdev)) {
1034 		xdma_err(xdev, "not enough irq");
1035 		return -EINVAL;
1036 	}
1037 
1038 	/* setup H2C interrupt handler */
1039 	for (i = 0; i < xdev->h2c_chan_num; i++) {
1040 		ret = request_irq(irq, xdma_channel_isr, 0,
1041 				  "xdma-h2c-channel", &xdev->h2c_chans[i]);
1042 		if (ret) {
1043 			xdma_err(xdev, "H2C channel%d request irq%d failed: %d",
1044 				 i, irq, ret);
1045 			goto failed_init_h2c;
1046 		}
1047 		xdev->h2c_chans[i].irq = irq;
1048 		irq++;
1049 	}
1050 
1051 	/* setup C2H interrupt handler */
1052 	for (j = 0; j < xdev->c2h_chan_num; j++) {
1053 		ret = request_irq(irq, xdma_channel_isr, 0,
1054 				  "xdma-c2h-channel", &xdev->c2h_chans[j]);
1055 		if (ret) {
1056 			xdma_err(xdev, "C2H channel%d request irq%d failed: %d",
1057 				 j, irq, ret);
1058 			goto failed_init_c2h;
1059 		}
1060 		xdev->c2h_chans[j].irq = irq;
1061 		irq++;
1062 	}
1063 
1064 	/* config hardware IRQ registers */
1065 	ret = xdma_set_vector_reg(xdev, XDMA_IRQ_CHAN_VEC_NUM, 0,
1066 				  XDMA_CHAN_NUM(xdev));
1067 	if (ret) {
1068 		xdma_err(xdev, "failed to set channel vectors: %d", ret);
1069 		goto failed_init_c2h;
1070 	}
1071 
1072 	/* config user IRQ registers if needed */
1073 	user_irq_start = XDMA_CHAN_NUM(xdev);
1074 	if (xdev->irq_num > user_irq_start) {
1075 		ret = xdma_set_vector_reg(xdev, XDMA_IRQ_USER_VEC_NUM,
1076 					  user_irq_start,
1077 					  xdev->irq_num - user_irq_start);
1078 		if (ret) {
1079 			xdma_err(xdev, "failed to set user vectors: %d", ret);
1080 			goto failed_init_c2h;
1081 		}
1082 	}
1083 
1084 	/* enable interrupt */
1085 	ret = regmap_write(xdev->rmap, XDMA_IRQ_CHAN_INT_EN_W1S, ~0);
1086 	if (ret)
1087 		goto failed_init_c2h;
1088 
1089 	return 0;
1090 
1091 failed_init_c2h:
1092 	while (j--)
1093 		free_irq(xdev->c2h_chans[j].irq, &xdev->c2h_chans[j]);
1094 failed_init_h2c:
1095 	while (i--)
1096 		free_irq(xdev->h2c_chans[i].irq, &xdev->h2c_chans[i]);
1097 
1098 	return ret;
1099 }
1100 
1101 static bool xdma_filter_fn(struct dma_chan *chan, void *param)
1102 {
1103 	struct xdma_chan *xdma_chan = to_xdma_chan(chan);
1104 	struct xdma_chan_info *chan_info = param;
1105 
1106 	return chan_info->dir == xdma_chan->dir;
1107 }
1108 
1109 /**
1110  * xdma_disable_user_irq - Disable user interrupt
1111  * @pdev: Pointer to the platform_device structure
1112  * @irq_num: System IRQ number
1113  */
1114 void xdma_disable_user_irq(struct platform_device *pdev, u32 irq_num)
1115 {
1116 	struct xdma_device *xdev = platform_get_drvdata(pdev);
1117 	u32 index;
1118 
1119 	index = irq_num - xdev->irq_start;
1120 	if (index < XDMA_CHAN_NUM(xdev) || index >= xdev->irq_num) {
1121 		xdma_err(xdev, "invalid user irq number");
1122 		return;
1123 	}
1124 	index -= XDMA_CHAN_NUM(xdev);
1125 
1126 	regmap_write(xdev->rmap, XDMA_IRQ_USER_INT_EN_W1C, 1 << index);
1127 }
1128 EXPORT_SYMBOL(xdma_disable_user_irq);
1129 
1130 /**
1131  * xdma_enable_user_irq - Enable user logic interrupt
1132  * @pdev: Pointer to the platform_device structure
1133  * @irq_num: System IRQ number
1134  */
1135 int xdma_enable_user_irq(struct platform_device *pdev, u32 irq_num)
1136 {
1137 	struct xdma_device *xdev = platform_get_drvdata(pdev);
1138 	u32 index;
1139 	int ret;
1140 
1141 	index = irq_num - xdev->irq_start;
1142 	if (index < XDMA_CHAN_NUM(xdev) || index >= xdev->irq_num) {
1143 		xdma_err(xdev, "invalid user irq number");
1144 		return -EINVAL;
1145 	}
1146 	index -= XDMA_CHAN_NUM(xdev);
1147 
1148 	ret = regmap_write(xdev->rmap, XDMA_IRQ_USER_INT_EN_W1S, 1 << index);
1149 	if (ret)
1150 		return ret;
1151 
1152 	return 0;
1153 }
1154 EXPORT_SYMBOL(xdma_enable_user_irq);
1155 
1156 /**
1157  * xdma_get_user_irq - Get system IRQ number
1158  * @pdev: Pointer to the platform_device structure
1159  * @user_irq_index: User logic IRQ wire index
1160  *
1161  * Return: The system IRQ number allocated for the given wire index.
1162  */
1163 int xdma_get_user_irq(struct platform_device *pdev, u32 user_irq_index)
1164 {
1165 	struct xdma_device *xdev = platform_get_drvdata(pdev);
1166 
1167 	if (XDMA_CHAN_NUM(xdev) + user_irq_index >= xdev->irq_num) {
1168 		xdma_err(xdev, "invalid user irq index");
1169 		return -EINVAL;
1170 	}
1171 
1172 	return xdev->irq_start + XDMA_CHAN_NUM(xdev) + user_irq_index;
1173 }
1174 EXPORT_SYMBOL(xdma_get_user_irq);
1175 
1176 /**
1177  * xdma_remove - Driver remove function
1178  * @pdev: Pointer to the platform_device structure
1179  */
1180 static void xdma_remove(struct platform_device *pdev)
1181 {
1182 	struct xdma_device *xdev = platform_get_drvdata(pdev);
1183 
1184 	if (xdev->status & XDMA_DEV_STATUS_INIT_MSIX)
1185 		xdma_irq_fini(xdev);
1186 
1187 	if (xdev->status & XDMA_DEV_STATUS_REG_DMA)
1188 		dma_async_device_unregister(&xdev->dma_dev);
1189 }
1190 
1191 /**
1192  * xdma_probe - Driver probe function
1193  * @pdev: Pointer to the platform_device structure
1194  */
1195 static int xdma_probe(struct platform_device *pdev)
1196 {
1197 	struct xdma_platdata *pdata = dev_get_platdata(&pdev->dev);
1198 	struct xdma_device *xdev;
1199 	void __iomem *reg_base;
1200 	struct resource *res;
1201 	int ret = -ENODEV;
1202 
1203 	if (pdata->max_dma_channels > XDMA_MAX_CHANNELS) {
1204 		dev_err(&pdev->dev, "invalid max dma channels %d",
1205 			pdata->max_dma_channels);
1206 		return -EINVAL;
1207 	}
1208 
1209 	xdev = devm_kzalloc(&pdev->dev, sizeof(*xdev), GFP_KERNEL);
1210 	if (!xdev)
1211 		return -ENOMEM;
1212 
1213 	platform_set_drvdata(pdev, xdev);
1214 	xdev->pdev = pdev;
1215 
1216 	res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1217 	if (!res) {
1218 		xdma_err(xdev, "failed to get irq resource");
1219 		goto failed;
1220 	}
1221 	xdev->irq_start = res->start;
1222 	xdev->irq_num = resource_size(res);
1223 
1224 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1225 	if (!res) {
1226 		xdma_err(xdev, "failed to get io resource");
1227 		goto failed;
1228 	}
1229 
1230 	reg_base = devm_ioremap_resource(&pdev->dev, res);
1231 	if (IS_ERR(reg_base)) {
1232 		xdma_err(xdev, "ioremap failed");
1233 		goto failed;
1234 	}
1235 
1236 	xdev->rmap = devm_regmap_init_mmio(&pdev->dev, reg_base,
1237 					   &xdma_regmap_config);
1238 	if (IS_ERR(xdev->rmap)) {
1239 		xdma_err(xdev, "config regmap failed: %pe", xdev->rmap);
1240 		goto failed;
1241 	}
1242 	INIT_LIST_HEAD(&xdev->dma_dev.channels);
1243 
1244 	ret = xdma_alloc_channels(xdev, DMA_MEM_TO_DEV);
1245 	if (ret) {
1246 		xdma_err(xdev, "config H2C channels failed: %d", ret);
1247 		goto failed;
1248 	}
1249 
1250 	ret = xdma_alloc_channels(xdev, DMA_DEV_TO_MEM);
1251 	if (ret) {
1252 		xdma_err(xdev, "config C2H channels failed: %d", ret);
1253 		goto failed;
1254 	}
1255 
1256 	dma_cap_set(DMA_SLAVE, xdev->dma_dev.cap_mask);
1257 	dma_cap_set(DMA_PRIVATE, xdev->dma_dev.cap_mask);
1258 	dma_cap_set(DMA_CYCLIC, xdev->dma_dev.cap_mask);
1259 	dma_cap_set(DMA_INTERLEAVE, xdev->dma_dev.cap_mask);
1260 	dma_cap_set(DMA_REPEAT, xdev->dma_dev.cap_mask);
1261 	dma_cap_set(DMA_LOAD_EOT, xdev->dma_dev.cap_mask);
1262 
1263 	xdev->dma_dev.dev = &pdev->dev;
1264 	xdev->dma_dev.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT;
1265 	xdev->dma_dev.device_free_chan_resources = xdma_free_chan_resources;
1266 	xdev->dma_dev.device_alloc_chan_resources = xdma_alloc_chan_resources;
1267 	xdev->dma_dev.device_tx_status = xdma_tx_status;
1268 	xdev->dma_dev.device_prep_slave_sg = xdma_prep_device_sg;
1269 	xdev->dma_dev.device_config = xdma_device_config;
1270 	xdev->dma_dev.device_issue_pending = xdma_issue_pending;
1271 	xdev->dma_dev.device_terminate_all = xdma_terminate_all;
1272 	xdev->dma_dev.device_synchronize = xdma_synchronize;
1273 	xdev->dma_dev.filter.map = pdata->device_map;
1274 	xdev->dma_dev.filter.mapcnt = pdata->device_map_cnt;
1275 	xdev->dma_dev.filter.fn = xdma_filter_fn;
1276 	xdev->dma_dev.device_prep_dma_cyclic = xdma_prep_dma_cyclic;
1277 	xdev->dma_dev.device_prep_interleaved_dma = xdma_prep_interleaved_dma;
1278 
1279 	ret = dma_async_device_register(&xdev->dma_dev);
1280 	if (ret) {
1281 		xdma_err(xdev, "failed to register Xilinx XDMA: %d", ret);
1282 		goto failed;
1283 	}
1284 	xdev->status |= XDMA_DEV_STATUS_REG_DMA;
1285 
1286 	ret = xdma_irq_init(xdev);
1287 	if (ret) {
1288 		xdma_err(xdev, "failed to init msix: %d", ret);
1289 		goto failed;
1290 	}
1291 	xdev->status |= XDMA_DEV_STATUS_INIT_MSIX;
1292 
1293 	return 0;
1294 
1295 failed:
1296 	xdma_remove(pdev);
1297 
1298 	return ret;
1299 }
1300 
1301 static const struct platform_device_id xdma_id_table[] = {
1302 	{ "xdma", 0},
1303 	{ },
1304 };
1305 MODULE_DEVICE_TABLE(platform, xdma_id_table);
1306 
1307 static struct platform_driver xdma_driver = {
1308 	.driver		= {
1309 		.name = "xdma",
1310 	},
1311 	.id_table	= xdma_id_table,
1312 	.probe		= xdma_probe,
1313 	.remove		= xdma_remove,
1314 };
1315 
1316 module_platform_driver(xdma_driver);
1317 
1318 MODULE_DESCRIPTION("AMD XDMA driver");
1319 MODULE_AUTHOR("XRT Team <runtimeca39d@amd.com>");
1320 MODULE_LICENSE("GPL");
1321