Lines Matching refs:xdev
245 struct xilinx_dpdma_device *xdev; member
452 static void xilinx_dpdma_debugfs_init(struct xilinx_dpdma_device *xdev) in xilinx_dpdma_debugfs_init() argument
458 dent = debugfs_create_file("testcase", 0444, xdev->common.dbg_dev_root, in xilinx_dpdma_debugfs_init()
461 dev_err(xdev->dev, "Failed to create debugfs testcase file\n"); in xilinx_dpdma_debugfs_init()
505 static void xilinx_dpdma_sw_desc_set_dma_addrs(struct xilinx_dpdma_device *xdev, in xilinx_dpdma_sw_desc_set_dma_addrs() argument
515 if (xdev->ext_addr) in xilinx_dpdma_sw_desc_set_dma_addrs()
525 if (xdev->ext_addr) { in xilinx_dpdma_sw_desc_set_dma_addrs()
539 if (xdev->ext_addr) in xilinx_dpdma_sw_desc_set_dma_addrs()
593 struct device *dev = chan->xdev->dev; in xilinx_dpdma_chan_dump_tx_desc()
704 dev_err(chan->xdev->dev, in xilinx_dpdma_chan_prep_cyclic()
714 xilinx_dpdma_sw_desc_set_dma_addrs(chan->xdev, sw_desc, last, in xilinx_dpdma_chan_prep_cyclic()
736 if (chan->xdev->ext_addr) in xilinx_dpdma_chan_prep_cyclic()
773 dev_err(chan->xdev->dev, in xilinx_dpdma_chan_prep_interleaved_dma()
789 xilinx_dpdma_sw_desc_set_dma_addrs(chan->xdev, sw_desc, sw_desc, in xilinx_dpdma_chan_prep_interleaved_dma()
825 dpdma_write(chan->xdev->reg, XILINX_DPDMA_IEN, reg); in xilinx_dpdma_chan_enable()
828 dpdma_write(chan->xdev->reg, XILINX_DPDMA_EIEN, reg); in xilinx_dpdma_chan_enable()
851 dpdma_write(chan->xdev->reg, XILINX_DPDMA_IEN, reg); in xilinx_dpdma_chan_disable()
853 dpdma_write(chan->xdev->reg, XILINX_DPDMA_EIEN, reg); in xilinx_dpdma_chan_disable()
882 struct xilinx_dpdma_device *xdev = chan->xdev; in xilinx_dpdma_chan_video_group_ready() local
887 if (xdev->chan[i]->video_group && !xdev->chan[i]->running) in xilinx_dpdma_chan_video_group_ready()
890 if (xdev->chan[i]->video_group) in xilinx_dpdma_chan_video_group_ready()
906 struct xilinx_dpdma_device *xdev = chan->xdev; in xilinx_dpdma_chan_queue_transfer() local
945 if (xdev->ext_addr) in xilinx_dpdma_chan_queue_transfer()
970 dpdma_write(xdev->reg, XILINX_DPDMA_GBL, reg); in xilinx_dpdma_chan_queue_transfer()
1007 dev_dbg(chan->xdev->dev, in xilinx_dpdma_chan_notify_no_ostand()
1014 dpdma_write(chan->xdev->reg, XILINX_DPDMA_IDS, in xilinx_dpdma_chan_notify_no_ostand()
1040 dpdma_write(chan->xdev->reg, XILINX_DPDMA_IEN, in xilinx_dpdma_chan_wait_no_ostand()
1045 dev_err(chan->xdev->dev, "chan%u: not ready to stop: %d trans\n", in xilinx_dpdma_chan_wait_no_ostand()
1075 dpdma_write(chan->xdev->reg, XILINX_DPDMA_IEN, in xilinx_dpdma_chan_poll_no_ostand()
1080 dev_err(chan->xdev->dev, "chan%u: not ready to stop: %d trans\n", in xilinx_dpdma_chan_poll_no_ostand()
1133 dev_warn(chan->xdev->dev, in xilinx_dpdma_chan_done_irq()
1167 dev_dbg(chan->xdev->dev, in xilinx_dpdma_chan_vsync_irq()
1223 struct xilinx_dpdma_device *xdev = chan->xdev; in xilinx_dpdma_chan_handle_err() local
1229 dev_dbg(xdev->dev, "chan%u: cur desc addr = 0x%04x%08x\n", in xilinx_dpdma_chan_handle_err()
1233 dev_dbg(xdev->dev, "chan%u: cur payload addr = 0x%04x%08x\n", in xilinx_dpdma_chan_handle_err()
1250 dev_dbg(xdev->dev, "chan%u: repeated error on desc\n", in xilinx_dpdma_chan_handle_err()
1327 chan->desc_pool = dma_pool_create(dev_name(chan->xdev->dev), in xilinx_dpdma_alloc_chan_resources()
1328 chan->xdev->dev, in xilinx_dpdma_alloc_chan_resources()
1332 dev_err(chan->xdev->dev, in xilinx_dpdma_alloc_chan_resources()
1434 struct xilinx_dpdma_device *xdev = chan->xdev; in xilinx_dpdma_terminate_all() local
1442 if (xdev->chan[i]->video_group && in xilinx_dpdma_terminate_all()
1443 xdev->chan[i]->running) { in xilinx_dpdma_terminate_all()
1444 xilinx_dpdma_chan_pause(xdev->chan[i]); in xilinx_dpdma_terminate_all()
1445 xdev->chan[i]->video_group = false; in xilinx_dpdma_terminate_all()
1526 static void xilinx_dpdma_handle_err_irq(struct xilinx_dpdma_device *xdev, in xilinx_dpdma_handle_err_irq() argument
1532 dev_dbg_ratelimited(xdev->dev, in xilinx_dpdma_handle_err_irq()
1537 dpdma_write(xdev->reg, XILINX_DPDMA_IDS, in xilinx_dpdma_handle_err_irq()
1539 dpdma_write(xdev->reg, XILINX_DPDMA_EIDS, in xilinx_dpdma_handle_err_irq()
1542 for (i = 0; i < ARRAY_SIZE(xdev->chan); i++) in xilinx_dpdma_handle_err_irq()
1543 if (err || xilinx_dpdma_chan_err(xdev->chan[i], isr, eisr)) in xilinx_dpdma_handle_err_irq()
1544 tasklet_schedule(&xdev->chan[i]->err_task); in xilinx_dpdma_handle_err_irq()
1553 static void xilinx_dpdma_enable_irq(struct xilinx_dpdma_device *xdev) in xilinx_dpdma_enable_irq() argument
1555 dpdma_write(xdev->reg, XILINX_DPDMA_IEN, XILINX_DPDMA_INTR_ALL); in xilinx_dpdma_enable_irq()
1556 dpdma_write(xdev->reg, XILINX_DPDMA_EIEN, XILINX_DPDMA_EINTR_ALL); in xilinx_dpdma_enable_irq()
1565 static void xilinx_dpdma_disable_irq(struct xilinx_dpdma_device *xdev) in xilinx_dpdma_disable_irq() argument
1567 dpdma_write(xdev->reg, XILINX_DPDMA_IDS, XILINX_DPDMA_INTR_ALL); in xilinx_dpdma_disable_irq()
1568 dpdma_write(xdev->reg, XILINX_DPDMA_EIDS, XILINX_DPDMA_EINTR_ALL); in xilinx_dpdma_disable_irq()
1582 struct xilinx_dpdma_device *xdev = chan->xdev; in xilinx_dpdma_chan_err_task() local
1590 dpdma_write(xdev->reg, XILINX_DPDMA_IEN, in xilinx_dpdma_chan_err_task()
1592 dpdma_write(xdev->reg, XILINX_DPDMA_EIEN, in xilinx_dpdma_chan_err_task()
1604 struct xilinx_dpdma_device *xdev = data; in xilinx_dpdma_irq_handler() local
1610 status = dpdma_read(xdev->reg, XILINX_DPDMA_ISR); in xilinx_dpdma_irq_handler()
1611 error = dpdma_read(xdev->reg, XILINX_DPDMA_EISR); in xilinx_dpdma_irq_handler()
1615 dpdma_write(xdev->reg, XILINX_DPDMA_ISR, status); in xilinx_dpdma_irq_handler()
1616 dpdma_write(xdev->reg, XILINX_DPDMA_EISR, error); in xilinx_dpdma_irq_handler()
1623 for (i = 0; i < ARRAY_SIZE(xdev->chan); i++) { in xilinx_dpdma_irq_handler()
1624 struct xilinx_dpdma_chan *chan = xdev->chan[i]; in xilinx_dpdma_irq_handler()
1633 for_each_set_bit(i, &mask, ARRAY_SIZE(xdev->chan)) in xilinx_dpdma_irq_handler()
1634 xilinx_dpdma_chan_done_irq(xdev->chan[i]); in xilinx_dpdma_irq_handler()
1639 for_each_set_bit(i, &mask, ARRAY_SIZE(xdev->chan)) in xilinx_dpdma_irq_handler()
1640 xilinx_dpdma_chan_notify_no_ostand(xdev->chan[i]); in xilinx_dpdma_irq_handler()
1645 xilinx_dpdma_handle_err_irq(xdev, mask, error); in xilinx_dpdma_irq_handler()
1654 static int xilinx_dpdma_chan_init(struct xilinx_dpdma_device *xdev, in xilinx_dpdma_chan_init() argument
1659 chan = devm_kzalloc(xdev->dev, sizeof(*chan), GFP_KERNEL); in xilinx_dpdma_chan_init()
1664 chan->reg = xdev->reg + XILINX_DPDMA_CH_BASE in xilinx_dpdma_chan_init()
1667 chan->xdev = xdev; in xilinx_dpdma_chan_init()
1675 vchan_init(&chan->vchan, &xdev->common); in xilinx_dpdma_chan_init()
1677 xdev->chan[chan->id] = chan; in xilinx_dpdma_chan_init()
1694 struct xilinx_dpdma_device *xdev = ofdma->of_dma_data; in of_dma_xilinx_xlate() local
1697 if (chan_id >= ARRAY_SIZE(xdev->chan)) in of_dma_xilinx_xlate()
1700 if (!xdev->chan[chan_id]) in of_dma_xilinx_xlate()
1703 return dma_get_slave_channel(&xdev->chan[chan_id]->vchan.chan); in of_dma_xilinx_xlate()
1706 static void dpdma_hw_init(struct xilinx_dpdma_device *xdev) in dpdma_hw_init() argument
1712 xilinx_dpdma_disable_irq(xdev); in dpdma_hw_init()
1715 for (i = 0; i < ARRAY_SIZE(xdev->chan); i++) { in dpdma_hw_init()
1716 reg = xdev->reg + XILINX_DPDMA_CH_BASE in dpdma_hw_init()
1722 dpdma_write(xdev->reg, XILINX_DPDMA_ISR, XILINX_DPDMA_INTR_ALL); in dpdma_hw_init()
1723 dpdma_write(xdev->reg, XILINX_DPDMA_EISR, XILINX_DPDMA_EINTR_ALL); in dpdma_hw_init()
1728 struct xilinx_dpdma_device *xdev; in xilinx_dpdma_probe() local
1733 xdev = devm_kzalloc(&pdev->dev, sizeof(*xdev), GFP_KERNEL); in xilinx_dpdma_probe()
1734 if (!xdev) in xilinx_dpdma_probe()
1737 xdev->dev = &pdev->dev; in xilinx_dpdma_probe()
1738 xdev->ext_addr = sizeof(dma_addr_t) > 4; in xilinx_dpdma_probe()
1740 INIT_LIST_HEAD(&xdev->common.channels); in xilinx_dpdma_probe()
1742 platform_set_drvdata(pdev, xdev); in xilinx_dpdma_probe()
1744 xdev->axi_clk = devm_clk_get(xdev->dev, "axi_clk"); in xilinx_dpdma_probe()
1745 if (IS_ERR(xdev->axi_clk)) in xilinx_dpdma_probe()
1746 return PTR_ERR(xdev->axi_clk); in xilinx_dpdma_probe()
1748 xdev->reg = devm_platform_ioremap_resource(pdev, 0); in xilinx_dpdma_probe()
1749 if (IS_ERR(xdev->reg)) in xilinx_dpdma_probe()
1750 return PTR_ERR(xdev->reg); in xilinx_dpdma_probe()
1752 dpdma_hw_init(xdev); in xilinx_dpdma_probe()
1754 xdev->irq = platform_get_irq(pdev, 0); in xilinx_dpdma_probe()
1755 if (xdev->irq < 0) in xilinx_dpdma_probe()
1756 return xdev->irq; in xilinx_dpdma_probe()
1758 ret = request_irq(xdev->irq, xilinx_dpdma_irq_handler, IRQF_SHARED, in xilinx_dpdma_probe()
1759 dev_name(xdev->dev), xdev); in xilinx_dpdma_probe()
1761 dev_err(xdev->dev, "failed to request IRQ\n"); in xilinx_dpdma_probe()
1765 ddev = &xdev->common; in xilinx_dpdma_probe()
1792 for (i = 0; i < ARRAY_SIZE(xdev->chan); ++i) { in xilinx_dpdma_probe()
1793 ret = xilinx_dpdma_chan_init(xdev, i); in xilinx_dpdma_probe()
1795 dev_err(xdev->dev, "failed to initialize channel %u\n", in xilinx_dpdma_probe()
1801 ret = clk_prepare_enable(xdev->axi_clk); in xilinx_dpdma_probe()
1803 dev_err(xdev->dev, "failed to enable the axi clock\n"); in xilinx_dpdma_probe()
1809 dev_err(xdev->dev, "failed to register the dma device\n"); in xilinx_dpdma_probe()
1813 ret = of_dma_controller_register(xdev->dev->of_node, in xilinx_dpdma_probe()
1816 dev_err(xdev->dev, "failed to register DMA to DT DMA helper\n"); in xilinx_dpdma_probe()
1820 xilinx_dpdma_enable_irq(xdev); in xilinx_dpdma_probe()
1822 xilinx_dpdma_debugfs_init(xdev); in xilinx_dpdma_probe()
1831 clk_disable_unprepare(xdev->axi_clk); in xilinx_dpdma_probe()
1833 for (i = 0; i < ARRAY_SIZE(xdev->chan); i++) in xilinx_dpdma_probe()
1834 xilinx_dpdma_chan_remove(xdev->chan[i]); in xilinx_dpdma_probe()
1836 free_irq(xdev->irq, xdev); in xilinx_dpdma_probe()
1843 struct xilinx_dpdma_device *xdev = platform_get_drvdata(pdev); in xilinx_dpdma_remove() local
1847 free_irq(xdev->irq, xdev); in xilinx_dpdma_remove()
1849 xilinx_dpdma_disable_irq(xdev); in xilinx_dpdma_remove()
1851 dma_async_device_unregister(&xdev->common); in xilinx_dpdma_remove()
1852 clk_disable_unprepare(xdev->axi_clk); in xilinx_dpdma_remove()
1854 for (i = 0; i < ARRAY_SIZE(xdev->chan); i++) in xilinx_dpdma_remove()
1855 xilinx_dpdma_chan_remove(xdev->chan[i]); in xilinx_dpdma_remove()