Lines Matching refs:pdma
25 #include "sf-pdma.h"
90 dev_err(chan->pdma->dma_dev.dev,
257 dev_err(chan->pdma->dma_dev.dev, "NULL desc.\n");
386 * @pdma: pointer of PDMA engine. Caller should check NULL
398 static int sf_pdma_irq_init(struct platform_device *pdev, struct sf_pdma *pdma)
403 for (i = 0; i < pdma->n_chans; i++) {
404 chan = &pdma->chans[i];
438 * @pdma: pointer of PDMA engine. Caller should check NULL
448 static void sf_pdma_setup_chans(struct sf_pdma *pdma)
453 INIT_LIST_HEAD(&pdma->dma_dev.channels);
455 for (i = 0; i < pdma->n_chans; i++) {
456 chan = &pdma->chans[i];
477 chan->pdma = pdma;
484 vchan_init(&chan->vchan, &pdma->dma_dev);
495 struct sf_pdma *pdma;
513 pdma = devm_kzalloc(&pdev->dev, struct_size(pdma, chans, n_chans),
515 if (!pdma)
518 pdma->n_chans = n_chans;
520 pdma->membase = devm_platform_ioremap_resource(pdev, 0);
521 if (IS_ERR(pdma->membase))
522 return PTR_ERR(pdma->membase);
524 ret = sf_pdma_irq_init(pdev, pdma);
528 sf_pdma_setup_chans(pdma);
530 pdma->dma_dev.dev = &pdev->dev;
533 dma_cap_set(DMA_MEMCPY, pdma->dma_dev.cap_mask);
534 pdma->dma_dev.copy_align = 2;
535 pdma->dma_dev.src_addr_widths = widths;
536 pdma->dma_dev.dst_addr_widths = widths;
537 pdma->dma_dev.directions = BIT(DMA_MEM_TO_MEM);
538 pdma->dma_dev.residue_granularity = DMA_RESIDUE_GRANULARITY_DESCRIPTOR;
539 pdma->dma_dev.descriptor_reuse = true;
542 pdma->dma_dev.device_alloc_chan_resources =
544 pdma->dma_dev.device_free_chan_resources =
546 pdma->dma_dev.device_tx_status = sf_pdma_tx_status;
547 pdma->dma_dev.device_prep_dma_memcpy = sf_pdma_prep_dma_memcpy;
548 pdma->dma_dev.device_config = sf_pdma_slave_config;
549 pdma->dma_dev.device_terminate_all = sf_pdma_terminate_all;
550 pdma->dma_dev.device_issue_pending = sf_pdma_issue_pending;
552 platform_set_drvdata(pdev, pdma);
559 ret = dma_async_device_register(&pdma->dma_dev);
571 struct sf_pdma *pdma = platform_get_drvdata(pdev);
575 for (i = 0; i < pdma->n_chans; i++) {
576 ch = &pdma->chans[i];
586 dma_async_device_unregister(&pdma->dma_dev);
592 { .compatible = "sifive,fu540-c000-pdma" },
602 .name = "sf-pdma",