Lines Matching refs:fsl_chan

29 	struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);  in fsl_edma_synchronize()  local
31 vchan_synchronize(&fsl_chan->vchan); in fsl_edma_synchronize()
53 static void fsl_edma3_err_check(struct fsl_edma_chan *fsl_chan) in fsl_edma3_err_check() argument
58 scoped_guard(spinlock, &fsl_chan->vchan.lock) { in fsl_edma3_err_check()
59 ch_err = edma_readl_chreg(fsl_chan, ch_es); in fsl_edma3_err_check()
63 edma_writel_chreg(fsl_chan, EDMA_V3_CH_ERR, ch_es); in fsl_edma3_err_check()
64 val = edma_readl_chreg(fsl_chan, ch_csr); in fsl_edma3_err_check()
66 edma_writel_chreg(fsl_chan, val, ch_csr); in fsl_edma3_err_check()
70 if (!fsl_chan->edesc) in fsl_edma3_err_check()
74 dev_err(&fsl_chan->pdev->dev, "Destination Bus Error interrupt.\n"); in fsl_edma3_err_check()
77 dev_err(&fsl_chan->pdev->dev, "Source Bus Error interrupt.\n"); in fsl_edma3_err_check()
80 dev_err(&fsl_chan->pdev->dev, "Scatter/Gather Configuration Error interrupt.\n"); in fsl_edma3_err_check()
83 dev_err(&fsl_chan->pdev->dev, "NBYTES/CITER Configuration Error interrupt.\n"); in fsl_edma3_err_check()
86 dev_err(&fsl_chan->pdev->dev, "Destination Offset Error interrupt.\n"); in fsl_edma3_err_check()
89 dev_err(&fsl_chan->pdev->dev, "Destination Address Error interrupt.\n"); in fsl_edma3_err_check()
92 dev_err(&fsl_chan->pdev->dev, "Source Offset Error interrupt.\n"); in fsl_edma3_err_check()
95 dev_err(&fsl_chan->pdev->dev, "Source Address Error interrupt.\n"); in fsl_edma3_err_check()
98 dev_err(&fsl_chan->pdev->dev, "Transfer Canceled interrupt.\n"); in fsl_edma3_err_check()
101 dev_err(&fsl_chan->pdev->dev, "Uncorrectable TCD error during channel execution interrupt.\n"); in fsl_edma3_err_check()
103 fsl_chan->status = DMA_ERROR; in fsl_edma3_err_check()
108 struct fsl_edma_chan *fsl_chan = dev_id; in fsl_edma3_err_handler_per_chan() local
110 fsl_edma3_err_check(fsl_chan); in fsl_edma3_err_handler_per_chan()
132 struct fsl_edma_chan *fsl_chan = dev_id; in fsl_edma3_tx_handler() local
135 intr = edma_readl_chreg(fsl_chan, ch_int); in fsl_edma3_tx_handler()
139 edma_writel_chreg(fsl_chan, 1, ch_int); in fsl_edma3_tx_handler()
141 fsl_edma_tx_chan_handler(fsl_chan); in fsl_edma3_tx_handler()
148 struct fsl_edma_chan *fsl_chan = devi_id; in fsl_edma2_tx_handler() local
150 return fsl_edma_tx_handler(irq, fsl_chan->edma); in fsl_edma2_tx_handler()
237 struct fsl_edma_chan *fsl_chan; in fsl_edma_srcid_in_use() local
241 fsl_chan = &fsl_edma->chans[i]; in fsl_edma_srcid_in_use()
243 if (fsl_chan->srcid && srcid == fsl_chan->srcid) { in fsl_edma_srcid_in_use()
244 dev_err(&fsl_chan->pdev->dev, "The srcid is in use, can't use!\n"); in fsl_edma_srcid_in_use()
256 struct fsl_edma_chan *fsl_chan; in fsl_edma_xlate() local
276 fsl_chan = to_fsl_edma_chan(chan); in fsl_edma_xlate()
277 fsl_chan->srcid = dma_spec->args[1]; in fsl_edma_xlate()
279 if (!fsl_chan->srcid) { in fsl_edma_xlate()
280 dev_err(&fsl_chan->pdev->dev, "Invalidate srcid %d\n", in fsl_edma_xlate()
281 fsl_chan->srcid); in fsl_edma_xlate()
285 fsl_edma_chan_mux(fsl_chan, fsl_chan->srcid, in fsl_edma_xlate()
299 struct fsl_edma_chan *fsl_chan; in fsl_edma3_xlate() local
315 fsl_chan = to_fsl_edma_chan(chan); in fsl_edma3_xlate()
318 i = fsl_chan - fsl_edma->chans; in fsl_edma3_xlate()
320 fsl_chan->priority = dma_spec->args[1]; in fsl_edma3_xlate()
321 fsl_chan->is_rxchan = dma_spec->args[2] & FSL_EDMA_RX; in fsl_edma3_xlate()
322 fsl_chan->is_remote = dma_spec->args[2] & FSL_EDMA_REMOTE; in fsl_edma3_xlate()
323 fsl_chan->is_multi_fifo = dma_spec->args[2] & FSL_EDMA_MULTI_FIFO; in fsl_edma3_xlate()
335 } else if (b_chmux && !fsl_chan->srcid) { in fsl_edma3_xlate()
339 fsl_chan->srcid = dma_spec->args[0]; in fsl_edma3_xlate()
394 struct fsl_edma_chan *fsl_chan = &fsl_edma->chans[i]; in fsl_edma3_irq_init() local
400 fsl_chan->txirq = platform_get_irq(pdev, i); in fsl_edma3_irq_init()
401 if (fsl_chan->txirq < 0) in fsl_edma3_irq_init()
404 fsl_chan->irq_handler = fsl_edma3_tx_handler; in fsl_edma3_irq_init()
407 fsl_chan->errirq = fsl_chan->txirq; in fsl_edma3_irq_init()
408 fsl_chan->errirq_handler = fsl_edma3_err_handler_per_chan; in fsl_edma3_irq_init()
634 struct fsl_edma_chan *fsl_chan; in fsl_edma3_detach_pd() local
640 fsl_chan = &fsl_edma->chans[i]; in fsl_edma3_detach_pd()
641 if (fsl_chan->pd_dev_link) in fsl_edma3_detach_pd()
642 device_link_del(fsl_chan->pd_dev_link); in fsl_edma3_detach_pd()
643 if (fsl_chan->pd_dev) { in fsl_edma3_detach_pd()
644 dev_pm_domain_detach(fsl_chan->pd_dev, false); in fsl_edma3_detach_pd()
645 pm_runtime_dont_use_autosuspend(fsl_chan->pd_dev); in fsl_edma3_detach_pd()
646 pm_runtime_set_suspended(fsl_chan->pd_dev); in fsl_edma3_detach_pd()
658 struct fsl_edma_chan *fsl_chan; in fsl_edma3_attach_pd() local
669 fsl_chan = &fsl_edma->chans[i]; in fsl_edma3_attach_pd()
677 fsl_chan->pd_dev_link = device_link_add(dev, pd_chan, DL_FLAG_STATELESS | in fsl_edma3_attach_pd()
680 if (!fsl_chan->pd_dev_link) { in fsl_edma3_attach_pd()
686 fsl_chan->pd_dev = pd_chan; in fsl_edma3_attach_pd()
688 pm_runtime_use_autosuspend(fsl_chan->pd_dev); in fsl_edma3_attach_pd()
689 pm_runtime_set_autosuspend_delay(fsl_chan->pd_dev, 200); in fsl_edma3_attach_pd()
690 pm_runtime_set_active(fsl_chan->pd_dev); in fsl_edma3_attach_pd()
795 struct fsl_edma_chan *fsl_chan = &fsl_edma->chans[i]; in fsl_edma_probe() local
801 snprintf(fsl_chan->chan_name, sizeof(fsl_chan->chan_name), "%s-CH%02d", in fsl_edma_probe()
804 snprintf(fsl_chan->errirq_name, sizeof(fsl_chan->errirq_name), in fsl_edma_probe()
807 fsl_chan->edma = fsl_edma; in fsl_edma_probe()
808 fsl_chan->pm_state = RUNNING; in fsl_edma_probe()
809 fsl_chan->srcid = 0; in fsl_edma_probe()
810 fsl_chan->dma_dir = DMA_NONE; in fsl_edma_probe()
811 fsl_chan->vchan.desc_free = fsl_edma_free_desc; in fsl_edma_probe()
815 fsl_chan->tcd = fsl_edma->membase in fsl_edma_probe()
817 fsl_chan->mux_addr = fsl_edma->membase + drvdata->mux_off + i * drvdata->mux_skip; in fsl_edma_probe()
821 fsl_chan->clk = devm_clk_get_enabled(&pdev->dev, in fsl_edma_probe()
824 if (IS_ERR(fsl_chan->clk)) in fsl_edma_probe()
825 return PTR_ERR(fsl_chan->clk); in fsl_edma_probe()
827 fsl_chan->pdev = pdev; in fsl_edma_probe()
828 vchan_init(&fsl_chan->vchan, &fsl_edma->dma_dev); in fsl_edma_probe()
830 edma_write_tcdreg(fsl_chan, cpu_to_le32(0), csr); in fsl_edma_probe()
831 fsl_edma_chan_mux(fsl_chan, 0, false); in fsl_edma_probe()
832 if (fsl_chan->edma->drvdata->flags & FSL_EDMA_DRV_HAS_CHCLK) in fsl_edma_probe()
833 clk_disable_unprepare(fsl_chan->clk); in fsl_edma_probe()
924 struct fsl_edma_chan *fsl_chan; in fsl_edma_suspend_late() local
929 fsl_chan = &fsl_edma->chans[i]; in fsl_edma_suspend_late()
932 spin_lock_irqsave(&fsl_chan->vchan.lock, flags); in fsl_edma_suspend_late()
934 if (unlikely(fsl_chan->status == DMA_IN_PROGRESS)) { in fsl_edma_suspend_late()
936 fsl_edma_disable_request(fsl_chan); in fsl_edma_suspend_late()
937 fsl_edma_chan_mux(fsl_chan, 0, false); in fsl_edma_suspend_late()
940 fsl_chan->pm_state = SUSPENDED; in fsl_edma_suspend_late()
941 spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); in fsl_edma_suspend_late()
950 struct fsl_edma_chan *fsl_chan; in fsl_edma_resume_early() local
955 fsl_chan = &fsl_edma->chans[i]; in fsl_edma_resume_early()
958 fsl_chan->pm_state = RUNNING; in fsl_edma_resume_early()
959 edma_write_tcdreg(fsl_chan, 0, csr); in fsl_edma_resume_early()
960 if (fsl_chan->srcid != 0) in fsl_edma_resume_early()
961 fsl_edma_chan_mux(fsl_chan, fsl_chan->srcid, true); in fsl_edma_resume_early()