Lines Matching refs:dmac

185 	struct axi_dmac *dmac = chan_to_axi_dmac(chan);  in axi_dmac_start_transfer()  local
192 val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER); in axi_dmac_start_transfer()
223 sg->id = axi_dmac_read(dmac, AXI_DMAC_REG_TRANSFER_ID); in axi_dmac_start_transfer()
226 axi_dmac_write(dmac, AXI_DMAC_REG_DEST_ADDRESS, sg->dest_addr); in axi_dmac_start_transfer()
227 axi_dmac_write(dmac, AXI_DMAC_REG_DEST_STRIDE, sg->dest_stride); in axi_dmac_start_transfer()
231 axi_dmac_write(dmac, AXI_DMAC_REG_SRC_ADDRESS, sg->src_addr); in axi_dmac_start_transfer()
232 axi_dmac_write(dmac, AXI_DMAC_REG_SRC_STRIDE, sg->src_stride); in axi_dmac_start_transfer()
244 axi_dmac_write(dmac, AXI_DMAC_REG_X_LENGTH, sg->x_len - 1); in axi_dmac_start_transfer()
245 axi_dmac_write(dmac, AXI_DMAC_REG_Y_LENGTH, sg->y_len - 1); in axi_dmac_start_transfer()
246 axi_dmac_write(dmac, AXI_DMAC_REG_FLAGS, flags); in axi_dmac_start_transfer()
247 axi_dmac_write(dmac, AXI_DMAC_REG_START_TRANSFER, 1); in axi_dmac_start_transfer()
299 struct axi_dmac *dmac = devid; in axi_dmac_interrupt_handler() local
303 pending = axi_dmac_read(dmac, AXI_DMAC_REG_IRQ_PENDING); in axi_dmac_interrupt_handler()
307 axi_dmac_write(dmac, AXI_DMAC_REG_IRQ_PENDING, pending); in axi_dmac_interrupt_handler()
309 spin_lock(&dmac->chan.vchan.lock); in axi_dmac_interrupt_handler()
314 completed = axi_dmac_read(dmac, AXI_DMAC_REG_TRANSFER_DONE); in axi_dmac_interrupt_handler()
315 start_next = axi_dmac_transfer_done(&dmac->chan, completed); in axi_dmac_interrupt_handler()
319 axi_dmac_start_transfer(&dmac->chan); in axi_dmac_interrupt_handler()
320 spin_unlock(&dmac->chan.vchan.lock); in axi_dmac_interrupt_handler()
328 struct axi_dmac *dmac = chan_to_axi_dmac(chan); in axi_dmac_terminate_all() local
333 axi_dmac_write(dmac, AXI_DMAC_REG_CTRL, 0); in axi_dmac_terminate_all()
354 struct axi_dmac *dmac = chan_to_axi_dmac(chan); in axi_dmac_issue_pending() local
357 axi_dmac_write(dmac, AXI_DMAC_REG_CTRL, AXI_DMAC_CTRL_ENABLE); in axi_dmac_issue_pending()
611 struct axi_dmac *dmac; in axi_dmac_probe() local
615 dmac = devm_kzalloc(&pdev->dev, sizeof(*dmac), GFP_KERNEL); in axi_dmac_probe()
616 if (!dmac) in axi_dmac_probe()
619 dmac->irq = platform_get_irq(pdev, 0); in axi_dmac_probe()
620 if (dmac->irq < 0) in axi_dmac_probe()
621 return dmac->irq; in axi_dmac_probe()
622 if (dmac->irq == 0) in axi_dmac_probe()
626 dmac->base = devm_ioremap_resource(&pdev->dev, res); in axi_dmac_probe()
627 if (IS_ERR(dmac->base)) in axi_dmac_probe()
628 return PTR_ERR(dmac->base); in axi_dmac_probe()
630 dmac->clk = devm_clk_get(&pdev->dev, NULL); in axi_dmac_probe()
631 if (IS_ERR(dmac->clk)) in axi_dmac_probe()
632 return PTR_ERR(dmac->clk); in axi_dmac_probe()
634 INIT_LIST_HEAD(&dmac->chan.active_descs); in axi_dmac_probe()
641 ret = axi_dmac_parse_chan_dt(of_chan, &dmac->chan); in axi_dmac_probe()
650 pdev->dev.dma_parms = &dmac->dma_parms; in axi_dmac_probe()
651 dma_set_max_seg_size(&pdev->dev, dmac->chan.max_length); in axi_dmac_probe()
653 dma_dev = &dmac->dma_dev; in axi_dmac_probe()
666 dma_dev->src_addr_widths = BIT(dmac->chan.src_width); in axi_dmac_probe()
667 dma_dev->dst_addr_widths = BIT(dmac->chan.dest_width); in axi_dmac_probe()
668 dma_dev->directions = BIT(dmac->chan.direction); in axi_dmac_probe()
672 dmac->chan.vchan.desc_free = axi_dmac_desc_free; in axi_dmac_probe()
673 vchan_init(&dmac->chan.vchan, dma_dev); in axi_dmac_probe()
675 ret = clk_prepare_enable(dmac->clk); in axi_dmac_probe()
679 axi_dmac_write(dmac, AXI_DMAC_REG_IRQ_MASK, 0x00); in axi_dmac_probe()
690 ret = request_irq(dmac->irq, axi_dmac_interrupt_handler, IRQF_SHARED, in axi_dmac_probe()
691 dev_name(&pdev->dev), dmac); in axi_dmac_probe()
695 platform_set_drvdata(pdev, dmac); in axi_dmac_probe()
702 dma_async_device_unregister(&dmac->dma_dev); in axi_dmac_probe()
704 clk_disable_unprepare(dmac->clk); in axi_dmac_probe()
711 struct axi_dmac *dmac = platform_get_drvdata(pdev); in axi_dmac_remove() local
714 free_irq(dmac->irq, dmac); in axi_dmac_remove()
715 tasklet_kill(&dmac->chan.vchan.task); in axi_dmac_remove()
716 dma_async_device_unregister(&dmac->dma_dev); in axi_dmac_remove()
717 clk_disable_unprepare(dmac->clk); in axi_dmac_remove()