Lines Matching refs:atxdmac
249 static inline void __iomem *at_xdmac_chan_reg_base(struct at_xdmac *atxdmac, unsigned int chan_nb)
251 return atxdmac->regs + (AT_XDMAC_CHAN_REG_BASE + chan_nb * 0x40);
254 #define at_xdmac_read(atxdmac, reg) readl_relaxed((atxdmac)->regs + (reg))
255 #define at_xdmac_write(atxdmac, reg, value) \
256 writel_relaxed((value), (atxdmac)->regs + (reg))
323 static void at_xdmac_off(struct at_xdmac *atxdmac)
325 at_xdmac_write(atxdmac, AT_XDMAC_GD, -1L);
328 while (at_xdmac_read(atxdmac, AT_XDMAC_GS))
331 at_xdmac_write(atxdmac, AT_XDMAC_GID, -1L);
338 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device);
403 at_xdmac_write(atxdmac, AT_XDMAC_GIE, atchan->mask);
407 at_xdmac_write(atxdmac, AT_XDMAC_GE, atchan->mask);
443 struct at_xdmac *atxdmac = to_at_xdmac(chan->device);
446 desc = dma_pool_zalloc(atxdmac->at_xdmac_desc_pool, gfp_flags, &phys);
513 struct at_xdmac *atxdmac = of_dma->of_dma_data;
516 struct device *dev = atxdmac->dma.dev;
523 chan = dma_get_any_slave_channel(&atxdmac->dma);
1399 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device);
1446 at_xdmac_write(atxdmac, AT_XDMAC_GSWF, atchan->mask);
1504 at_xdmac_write(atxdmac, AT_XDMAC_GSWF, atchan->mask);
1574 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device);
1593 at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask);
1594 while (at_xdmac_read(atxdmac, AT_XDMAC_GS) & atchan->mask)
1667 struct at_xdmac *atxdmac = (struct at_xdmac *)dev_id;
1674 imr = at_xdmac_read(atxdmac, AT_XDMAC_GIM);
1675 status = at_xdmac_read(atxdmac, AT_XDMAC_GIS);
1678 dev_vdbg(atxdmac->dma.dev,
1686 for (i = 0; i < atxdmac->dma.chancnt; i++) {
1690 atchan = &atxdmac->chan[i];
1694 dev_vdbg(atxdmac->dma.dev,
1708 at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask);
1752 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device);
1761 at_xdmac_write(atxdmac, AT_XDMAC_GRWS, atchan->mask);
1773 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device);
1784 at_xdmac_write(atxdmac, AT_XDMAC_GRWR, atchan->mask);
1795 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device);
1801 at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask);
1802 while (at_xdmac_read(atxdmac, AT_XDMAC_GS) & atchan->mask)
1862 struct at_xdmac *atxdmac = to_at_xdmac(chan->device);
1868 dma_pool_free(atxdmac->at_xdmac_desc_pool, desc, desc->tx_dma_desc.phys);
1877 struct at_xdmac *atxdmac = dev_get_drvdata(dev);
1880 list_for_each_entry_safe(chan, _chan, &atxdmac->dma.channels, device_node) {
1896 struct at_xdmac *atxdmac = dev_get_drvdata(dev);
1899 list_for_each_entry_safe(chan, _chan, &atxdmac->dma.channels, device_node) {
1911 atxdmac->save_gim = at_xdmac_read(atxdmac, AT_XDMAC_GIM);
1912 atxdmac->save_gs = at_xdmac_read(atxdmac, AT_XDMAC_GS);
1914 at_xdmac_off(atxdmac);
1915 clk_disable_unprepare(atxdmac->clk);
1921 struct at_xdmac *atxdmac = dev_get_drvdata(dev);
1927 ret = clk_prepare_enable(atxdmac->clk);
1932 for (i = 0; i < atxdmac->dma.chancnt; i++) {
1933 atchan = &atxdmac->chan[i];
1938 at_xdmac_write(atxdmac, AT_XDMAC_GIE, atxdmac->save_gim);
1939 list_for_each_entry_safe(chan, _chan, &atxdmac->dma.channels, device_node) {
1949 if (atxdmac->save_gs & atchan->mask)
1950 at_xdmac_write(atxdmac, AT_XDMAC_GE, atchan->mask);
1959 struct at_xdmac *atxdmac;
1974 * since atxdmac is not yet allocated and we need to know the number
1985 size = sizeof(*atxdmac);
1987 atxdmac = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);
1988 if (!atxdmac) {
1993 atxdmac->regs = base;
1994 atxdmac->irq = irq;
1996 atxdmac->clk = devm_clk_get(&pdev->dev, "dma_clk");
1997 if (IS_ERR(atxdmac->clk)) {
1999 return PTR_ERR(atxdmac->clk);
2003 ret = request_irq(atxdmac->irq, at_xdmac_interrupt, 0, "at_xdmac", atxdmac);
2009 ret = clk_prepare_enable(atxdmac->clk);
2015 atxdmac->at_xdmac_desc_pool =
2018 if (!atxdmac->at_xdmac_desc_pool) {
2024 dma_cap_set(DMA_CYCLIC, atxdmac->dma.cap_mask);
2025 dma_cap_set(DMA_INTERLEAVE, atxdmac->dma.cap_mask);
2026 dma_cap_set(DMA_MEMCPY, atxdmac->dma.cap_mask);
2027 dma_cap_set(DMA_MEMSET, atxdmac->dma.cap_mask);
2028 dma_cap_set(DMA_MEMSET_SG, atxdmac->dma.cap_mask);
2029 dma_cap_set(DMA_SLAVE, atxdmac->dma.cap_mask);
2034 dma_cap_set(DMA_PRIVATE, atxdmac->dma.cap_mask);
2035 atxdmac->dma.dev = &pdev->dev;
2036 atxdmac->dma.device_alloc_chan_resources = at_xdmac_alloc_chan_resources;
2037 atxdmac->dma.device_free_chan_resources = at_xdmac_free_chan_resources;
2038 atxdmac->dma.device_tx_status = at_xdmac_tx_status;
2039 atxdmac->dma.device_issue_pending = at_xdmac_issue_pending;
2040 atxdmac->dma.device_prep_dma_cyclic = at_xdmac_prep_dma_cyclic;
2041 atxdmac->dma.device_prep_interleaved_dma = at_xdmac_prep_interleaved;
2042 atxdmac->dma.device_prep_dma_memcpy = at_xdmac_prep_dma_memcpy;
2043 atxdmac->dma.device_prep_dma_memset = at_xdmac_prep_dma_memset;
2044 atxdmac->dma.device_prep_dma_memset_sg = at_xdmac_prep_dma_memset_sg;
2045 atxdmac->dma.device_prep_slave_sg = at_xdmac_prep_slave_sg;
2046 atxdmac->dma.device_config = at_xdmac_device_config;
2047 atxdmac->dma.device_pause = at_xdmac_device_pause;
2048 atxdmac->dma.device_resume = at_xdmac_device_resume;
2049 atxdmac->dma.device_terminate_all = at_xdmac_device_terminate_all;
2050 atxdmac->dma.src_addr_widths = AT_XDMAC_DMA_BUSWIDTHS;
2051 atxdmac->dma.dst_addr_widths = AT_XDMAC_DMA_BUSWIDTHS;
2052 atxdmac->dma.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
2053 atxdmac->dma.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
2056 at_xdmac_off(atxdmac);
2059 INIT_LIST_HEAD(&atxdmac->dma.channels);
2061 struct at_xdmac_chan *atchan = &atxdmac->chan[i];
2063 atchan->chan.device = &atxdmac->dma;
2065 &atxdmac->dma.channels);
2067 atchan->ch_regs = at_xdmac_chan_reg_base(atxdmac, i);
2079 platform_set_drvdata(pdev, atxdmac);
2081 ret = dma_async_device_register(&atxdmac->dma);
2088 at_xdmac_xlate, atxdmac);
2095 nr_channels, atxdmac->regs);
2100 dma_async_device_unregister(&atxdmac->dma);
2102 clk_disable_unprepare(atxdmac->clk);
2104 free_irq(atxdmac->irq, atxdmac);
2110 struct at_xdmac *atxdmac = (struct at_xdmac *)platform_get_drvdata(pdev);
2113 at_xdmac_off(atxdmac);
2115 dma_async_device_unregister(&atxdmac->dma);
2116 clk_disable_unprepare(atxdmac->clk);
2118 free_irq(atxdmac->irq, atxdmac);
2120 for (i = 0; i < atxdmac->dma.chancnt; i++) {
2121 struct at_xdmac_chan *atchan = &atxdmac->chan[i];