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 */
xdma_blk_last_desc(struct xdma_desc_block * 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 */
xdma_link_sg_desc_blocks(struct xdma_desc * sw_desc)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 */
xdma_link_cyclic_desc_blocks(struct xdma_desc * sw_desc)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
to_xdma_chan(struct dma_chan * chan)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
to_xdma_desc(struct virt_dma_desc * vdesc)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 */
xdma_channel_init(struct xdma_chan * chan)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 */
xdma_free_desc(struct virt_dma_desc * vdesc)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 *
xdma_alloc_desc(struct xdma_chan * chan,u32 desc_num,bool cyclic)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 */
xdma_xfer_start(struct xdma_chan * xchan)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 */
xdma_xfer_stop(struct xdma_chan * xchan)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 */
xdma_alloc_channels(struct xdma_device * xdev,enum dma_transfer_direction dir)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 */
xdma_issue_pending(struct dma_chan * chan)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 */
xdma_terminate_all(struct dma_chan * chan)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 */
xdma_synchronize(struct dma_chan * chan)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 */
xdma_fill_descs(struct xdma_desc * sw_desc,u64 src_addr,u64 dst_addr,u32 size,u32 filled_descs_num)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 *
xdma_prep_device_sg(struct dma_chan * chan,struct scatterlist * sgl,unsigned int sg_len,enum dma_transfer_direction dir,unsigned long flags,void * context)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 *
xdma_prep_dma_cyclic(struct dma_chan * chan,dma_addr_t address,size_t size,size_t period_size,enum dma_transfer_direction dir,unsigned long flags)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 *
xdma_prep_interleaved_dma(struct dma_chan * chan,struct dma_interleaved_template * xt,unsigned long flags)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 */
xdma_device_config(struct dma_chan * chan,struct dma_slave_config * cfg)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 */
xdma_free_chan_resources(struct dma_chan * chan)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 */
xdma_alloc_chan_resources(struct dma_chan * chan)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
xdma_tx_status(struct dma_chan * chan,dma_cookie_t cookie,struct dma_tx_state * state)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 */
xdma_channel_isr(int irq,void * dev_id)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 */
xdma_irq_fini(struct xdma_device * xdev)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 */
xdma_set_vector_reg(struct xdma_device * xdev,u32 vec_tbl_start,u32 irq_start,u32 irq_num)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 */
xdma_irq_init(struct xdma_device * xdev)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
xdma_filter_fn(struct dma_chan * chan,void * param)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 */
xdma_disable_user_irq(struct platform_device * pdev,u32 irq_num)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 */
xdma_enable_user_irq(struct platform_device * pdev,u32 irq_num)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 */
xdma_get_user_irq(struct platform_device * pdev,u32 user_irq_index)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 */
xdma_remove(struct platform_device * pdev)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 */
xdma_probe(struct platform_device * pdev)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