fsl_edma 151 drivers/dma/fsl-edma-common.h struct fsl_edma_engine *fsl_edma); fsl_edma 32 drivers/dma/fsl-edma.c struct fsl_edma_engine *fsl_edma = dev_id; fsl_edma 34 drivers/dma/fsl-edma.c struct edma_regs *regs = &fsl_edma->regs; fsl_edma 37 drivers/dma/fsl-edma.c intr = edma_readl(fsl_edma, regs->intl); fsl_edma 41 drivers/dma/fsl-edma.c for (ch = 0; ch < fsl_edma->n_chans; ch++) { fsl_edma 43 drivers/dma/fsl-edma.c edma_writeb(fsl_edma, EDMA_CINT_CINT(ch), regs->cint); fsl_edma 45 drivers/dma/fsl-edma.c fsl_chan = &fsl_edma->chans[ch]; fsl_edma 69 drivers/dma/fsl-edma.c struct fsl_edma_engine *fsl_edma = dev_id; fsl_edma 71 drivers/dma/fsl-edma.c struct edma_regs *regs = &fsl_edma->regs; fsl_edma 73 drivers/dma/fsl-edma.c err = edma_readl(fsl_edma, regs->errl); fsl_edma 77 drivers/dma/fsl-edma.c for (ch = 0; ch < fsl_edma->n_chans; ch++) { fsl_edma 79 drivers/dma/fsl-edma.c fsl_edma_disable_request(&fsl_edma->chans[ch]); fsl_edma 80 drivers/dma/fsl-edma.c edma_writeb(fsl_edma, EDMA_CERR_CERR(ch), regs->cerr); fsl_edma 81 drivers/dma/fsl-edma.c fsl_edma->chans[ch].status = DMA_ERROR; fsl_edma 82 drivers/dma/fsl-edma.c fsl_edma->chans[ch].idle = true; fsl_edma 99 drivers/dma/fsl-edma.c struct fsl_edma_engine *fsl_edma = ofdma->of_dma_data; fsl_edma 102 drivers/dma/fsl-edma.c u32 dmamux_nr = fsl_edma->drvdata->dmamuxs; fsl_edma 103 drivers/dma/fsl-edma.c unsigned long chans_per_mux = fsl_edma->n_chans / dmamux_nr; fsl_edma 108 drivers/dma/fsl-edma.c mutex_lock(&fsl_edma->fsl_edma_mutex); fsl_edma 109 drivers/dma/fsl-edma.c list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) { fsl_edma 120 drivers/dma/fsl-edma.c mutex_unlock(&fsl_edma->fsl_edma_mutex); fsl_edma 125 drivers/dma/fsl-edma.c mutex_unlock(&fsl_edma->fsl_edma_mutex); fsl_edma 130 drivers/dma/fsl-edma.c fsl_edma_irq_init(struct platform_device *pdev, struct fsl_edma_engine *fsl_edma) fsl_edma 134 drivers/dma/fsl-edma.c fsl_edma->txirq = platform_get_irq_byname(pdev, "edma-tx"); fsl_edma 135 drivers/dma/fsl-edma.c if (fsl_edma->txirq < 0) fsl_edma 136 drivers/dma/fsl-edma.c return fsl_edma->txirq; fsl_edma 138 drivers/dma/fsl-edma.c fsl_edma->errirq = platform_get_irq_byname(pdev, "edma-err"); fsl_edma 139 drivers/dma/fsl-edma.c if (fsl_edma->errirq < 0) fsl_edma 140 drivers/dma/fsl-edma.c return fsl_edma->errirq; fsl_edma 142 drivers/dma/fsl-edma.c if (fsl_edma->txirq == fsl_edma->errirq) { fsl_edma 143 drivers/dma/fsl-edma.c ret = devm_request_irq(&pdev->dev, fsl_edma->txirq, fsl_edma 144 drivers/dma/fsl-edma.c fsl_edma_irq_handler, 0, "eDMA", fsl_edma); fsl_edma 150 drivers/dma/fsl-edma.c ret = devm_request_irq(&pdev->dev, fsl_edma->txirq, fsl_edma 151 drivers/dma/fsl-edma.c fsl_edma_tx_handler, 0, "eDMA tx", fsl_edma); fsl_edma 157 drivers/dma/fsl-edma.c ret = devm_request_irq(&pdev->dev, fsl_edma->errirq, fsl_edma 158 drivers/dma/fsl-edma.c fsl_edma_err_handler, 0, "eDMA err", fsl_edma); fsl_edma 170 drivers/dma/fsl-edma.c struct fsl_edma_engine *fsl_edma) fsl_edma 192 drivers/dma/fsl-edma.c sprintf(fsl_edma->chans[i].chan_name, "eDMA2-CH%02d", i); fsl_edma 198 drivers/dma/fsl-edma.c 0, "eDMA2-ERR", fsl_edma); fsl_edma 202 drivers/dma/fsl-edma.c fsl_edma->chans[i].chan_name, fsl_edma 203 drivers/dma/fsl-edma.c fsl_edma); fsl_edma 212 drivers/dma/fsl-edma.c struct platform_device *pdev, struct fsl_edma_engine *fsl_edma) fsl_edma 214 drivers/dma/fsl-edma.c if (fsl_edma->txirq == fsl_edma->errirq) { fsl_edma 215 drivers/dma/fsl-edma.c devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); fsl_edma 217 drivers/dma/fsl-edma.c devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); fsl_edma 218 drivers/dma/fsl-edma.c devm_free_irq(&pdev->dev, fsl_edma->errirq, fsl_edma); fsl_edma 222 drivers/dma/fsl-edma.c static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma, int nr_clocks) fsl_edma 227 drivers/dma/fsl-edma.c clk_disable_unprepare(fsl_edma->muxclk[i]); fsl_edma 255 drivers/dma/fsl-edma.c struct fsl_edma_engine *fsl_edma; fsl_edma 276 drivers/dma/fsl-edma.c len = sizeof(*fsl_edma) + sizeof(*fsl_chan) * chans; fsl_edma 277 drivers/dma/fsl-edma.c fsl_edma = devm_kzalloc(&pdev->dev, len, GFP_KERNEL); fsl_edma 278 drivers/dma/fsl-edma.c if (!fsl_edma) fsl_edma 281 drivers/dma/fsl-edma.c fsl_edma->drvdata = drvdata; fsl_edma 282 drivers/dma/fsl-edma.c fsl_edma->n_chans = chans; fsl_edma 283 drivers/dma/fsl-edma.c mutex_init(&fsl_edma->fsl_edma_mutex); fsl_edma 286 drivers/dma/fsl-edma.c fsl_edma->membase = devm_ioremap_resource(&pdev->dev, res); fsl_edma 287 drivers/dma/fsl-edma.c if (IS_ERR(fsl_edma->membase)) fsl_edma 288 drivers/dma/fsl-edma.c return PTR_ERR(fsl_edma->membase); fsl_edma 290 drivers/dma/fsl-edma.c fsl_edma_setup_regs(fsl_edma); fsl_edma 291 drivers/dma/fsl-edma.c regs = &fsl_edma->regs; fsl_edma 294 drivers/dma/fsl-edma.c fsl_edma->dmaclk = devm_clk_get(&pdev->dev, "dma"); fsl_edma 295 drivers/dma/fsl-edma.c if (IS_ERR(fsl_edma->dmaclk)) { fsl_edma 297 drivers/dma/fsl-edma.c return PTR_ERR(fsl_edma->dmaclk); fsl_edma 300 drivers/dma/fsl-edma.c ret = clk_prepare_enable(fsl_edma->dmaclk); fsl_edma 307 drivers/dma/fsl-edma.c for (i = 0; i < fsl_edma->drvdata->dmamuxs; i++) { fsl_edma 311 drivers/dma/fsl-edma.c fsl_edma->muxbase[i] = devm_ioremap_resource(&pdev->dev, res); fsl_edma 312 drivers/dma/fsl-edma.c if (IS_ERR(fsl_edma->muxbase[i])) { fsl_edma 314 drivers/dma/fsl-edma.c fsl_disable_clocks(fsl_edma, i); fsl_edma 315 drivers/dma/fsl-edma.c return PTR_ERR(fsl_edma->muxbase[i]); fsl_edma 319 drivers/dma/fsl-edma.c fsl_edma->muxclk[i] = devm_clk_get(&pdev->dev, clkname); fsl_edma 320 drivers/dma/fsl-edma.c if (IS_ERR(fsl_edma->muxclk[i])) { fsl_edma 323 drivers/dma/fsl-edma.c fsl_disable_clocks(fsl_edma, i); fsl_edma 324 drivers/dma/fsl-edma.c return PTR_ERR(fsl_edma->muxclk[i]); fsl_edma 327 drivers/dma/fsl-edma.c ret = clk_prepare_enable(fsl_edma->muxclk[i]); fsl_edma 330 drivers/dma/fsl-edma.c fsl_disable_clocks(fsl_edma, i); fsl_edma 334 drivers/dma/fsl-edma.c fsl_edma->big_endian = of_property_read_bool(np, "big-endian"); fsl_edma 336 drivers/dma/fsl-edma.c INIT_LIST_HEAD(&fsl_edma->dma_dev.channels); fsl_edma 337 drivers/dma/fsl-edma.c for (i = 0; i < fsl_edma->n_chans; i++) { fsl_edma 338 drivers/dma/fsl-edma.c struct fsl_edma_chan *fsl_chan = &fsl_edma->chans[i]; fsl_edma 340 drivers/dma/fsl-edma.c fsl_chan->edma = fsl_edma; fsl_edma 346 drivers/dma/fsl-edma.c vchan_init(&fsl_chan->vchan, &fsl_edma->dma_dev); fsl_edma 348 drivers/dma/fsl-edma.c edma_writew(fsl_edma, 0x0, ®s->tcd[i].csr); fsl_edma 352 drivers/dma/fsl-edma.c edma_writel(fsl_edma, ~0, regs->intl); fsl_edma 353 drivers/dma/fsl-edma.c ret = fsl_edma->drvdata->setup_irq(pdev, fsl_edma); fsl_edma 357 drivers/dma/fsl-edma.c dma_cap_set(DMA_PRIVATE, fsl_edma->dma_dev.cap_mask); fsl_edma 358 drivers/dma/fsl-edma.c dma_cap_set(DMA_SLAVE, fsl_edma->dma_dev.cap_mask); fsl_edma 359 drivers/dma/fsl-edma.c dma_cap_set(DMA_CYCLIC, fsl_edma->dma_dev.cap_mask); fsl_edma 361 drivers/dma/fsl-edma.c fsl_edma->dma_dev.dev = &pdev->dev; fsl_edma 362 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_alloc_chan_resources fsl_edma 364 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_free_chan_resources fsl_edma 366 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_tx_status = fsl_edma_tx_status; fsl_edma 367 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_prep_slave_sg = fsl_edma_prep_slave_sg; fsl_edma 368 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_prep_dma_cyclic = fsl_edma_prep_dma_cyclic; fsl_edma 369 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_config = fsl_edma_slave_config; fsl_edma 370 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_pause = fsl_edma_pause; fsl_edma 371 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_resume = fsl_edma_resume; fsl_edma 372 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_terminate_all = fsl_edma_terminate_all; fsl_edma 373 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_synchronize = fsl_edma_synchronize; fsl_edma 374 drivers/dma/fsl-edma.c fsl_edma->dma_dev.device_issue_pending = fsl_edma_issue_pending; fsl_edma 376 drivers/dma/fsl-edma.c fsl_edma->dma_dev.src_addr_widths = FSL_EDMA_BUSWIDTHS; fsl_edma 377 drivers/dma/fsl-edma.c fsl_edma->dma_dev.dst_addr_widths = FSL_EDMA_BUSWIDTHS; fsl_edma 378 drivers/dma/fsl-edma.c fsl_edma->dma_dev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV); fsl_edma 380 drivers/dma/fsl-edma.c platform_set_drvdata(pdev, fsl_edma); fsl_edma 382 drivers/dma/fsl-edma.c ret = dma_async_device_register(&fsl_edma->dma_dev); fsl_edma 386 drivers/dma/fsl-edma.c fsl_disable_clocks(fsl_edma, fsl_edma->drvdata->dmamuxs); fsl_edma 390 drivers/dma/fsl-edma.c ret = of_dma_controller_register(np, fsl_edma_xlate, fsl_edma); fsl_edma 394 drivers/dma/fsl-edma.c dma_async_device_unregister(&fsl_edma->dma_dev); fsl_edma 395 drivers/dma/fsl-edma.c fsl_disable_clocks(fsl_edma, fsl_edma->drvdata->dmamuxs); fsl_edma 400 drivers/dma/fsl-edma.c edma_writel(fsl_edma, EDMA_CR_ERGA | EDMA_CR_ERCA, regs->cr); fsl_edma 408 drivers/dma/fsl-edma.c struct fsl_edma_engine *fsl_edma = platform_get_drvdata(pdev); fsl_edma 410 drivers/dma/fsl-edma.c fsl_edma_irq_exit(pdev, fsl_edma); fsl_edma 411 drivers/dma/fsl-edma.c fsl_edma_cleanup_vchan(&fsl_edma->dma_dev); fsl_edma 413 drivers/dma/fsl-edma.c dma_async_device_unregister(&fsl_edma->dma_dev); fsl_edma 414 drivers/dma/fsl-edma.c fsl_disable_clocks(fsl_edma, fsl_edma->drvdata->dmamuxs); fsl_edma 421 drivers/dma/fsl-edma.c struct fsl_edma_engine *fsl_edma = dev_get_drvdata(dev); fsl_edma 426 drivers/dma/fsl-edma.c for (i = 0; i < fsl_edma->n_chans; i++) { fsl_edma 427 drivers/dma/fsl-edma.c fsl_chan = &fsl_edma->chans[i]; fsl_edma 445 drivers/dma/fsl-edma.c struct fsl_edma_engine *fsl_edma = dev_get_drvdata(dev); fsl_edma 447 drivers/dma/fsl-edma.c struct edma_regs *regs = &fsl_edma->regs; fsl_edma 450 drivers/dma/fsl-edma.c for (i = 0; i < fsl_edma->n_chans; i++) { fsl_edma 451 drivers/dma/fsl-edma.c fsl_chan = &fsl_edma->chans[i]; fsl_edma 453 drivers/dma/fsl-edma.c edma_writew(fsl_edma, 0x0, ®s->tcd[i].csr); fsl_edma 458 drivers/dma/fsl-edma.c edma_writel(fsl_edma, EDMA_CR_ERGA | EDMA_CR_ERCA, regs->cr);