Lines Matching full:dmac

194  * @channels: array of DMAC channels
214 * @chan_offset_base: DMAC channels base offset
215 * @chan_offset_stride: DMAC channels offset stride
303 static void rcar_dmac_write(struct rcar_dmac *dmac, u32 reg, u32 data) in rcar_dmac_write() argument
306 writew(data, dmac->iomem + reg); in rcar_dmac_write()
308 writel(data, dmac->iomem + reg); in rcar_dmac_write()
311 static u32 rcar_dmac_read(struct rcar_dmac *dmac, u32 reg) in rcar_dmac_read() argument
314 return readw(dmac->iomem + reg); in rcar_dmac_read()
316 return readl(dmac->iomem + reg); in rcar_dmac_read()
383 * first descriptor at beginning of transfer by the DMAC like it in rcar_dmac_chan_start_xfer()
445 static int rcar_dmac_init(struct rcar_dmac *dmac) in rcar_dmac_init() argument
449 /* Clear all channels and enable the DMAC globally. */ in rcar_dmac_init()
450 rcar_dmac_write(dmac, RCAR_DMACHCLR, dmac->channels_mask); in rcar_dmac_init()
451 rcar_dmac_write(dmac, RCAR_DMAOR, in rcar_dmac_init()
454 dmaor = rcar_dmac_read(dmac, RCAR_DMAOR); in rcar_dmac_init()
456 dev_warn(dmac->dev, "DMAOR initialization failed.\n"); in rcar_dmac_init()
818 static void rcar_dmac_stop_all_chan(struct rcar_dmac *dmac) in rcar_dmac_stop_all_chan() argument
823 for (i = 0; i < dmac->n_channels; ++i) { in rcar_dmac_stop_all_chan()
824 struct rcar_dmac_chan *chan = &dmac->channels[i]; in rcar_dmac_stop_all_chan()
826 if (!(dmac->channels_mask & BIT(i))) in rcar_dmac_stop_all_chan()
1050 struct rcar_dmac *dmac = to_rcar_dmac(chan->device); in rcar_dmac_free_chan_resources() local
1069 clear_bit(rchan->mid_rid, dmac->modules); in rcar_dmac_free_chan_resources()
1562 struct rcar_dmac *dmac = to_rcar_dmac(chan->chan.device); in rcar_dmac_isr_channel() local
1569 rcar_dmac_write(dmac, RCAR_DMACHCLR, 1 << chan->index); in rcar_dmac_isr_channel()
1659 struct rcar_dmac *dmac = to_rcar_dmac(chan->device); in rcar_dmac_chan_filter() local
1672 return !test_and_set_bit(dma_spec->args[0], dmac->modules); in rcar_dmac_chan_filter()
1712 struct rcar_dmac *dmac = dev_get_drvdata(dev); in rcar_dmac_runtime_resume() local
1714 return rcar_dmac_init(dmac); in rcar_dmac_runtime_resume()
1734 static int rcar_dmac_chan_probe(struct rcar_dmac *dmac, in rcar_dmac_chan_probe() argument
1739 struct platform_device *pdev = to_platform_device(dmac->dev); in rcar_dmac_chan_probe()
1746 rchan->iomem = dmac->iomem + data->chan_offset_base + in rcar_dmac_chan_probe()
1764 irqname = devm_kasprintf(dmac->dev, GFP_KERNEL, "%s:%u", in rcar_dmac_chan_probe()
1765 dev_name(dmac->dev), index); in rcar_dmac_chan_probe()
1773 chan->device = &dmac->engine; in rcar_dmac_chan_probe()
1776 list_add_tail(&chan->device_node, &dmac->engine.channels); in rcar_dmac_chan_probe()
1778 ret = devm_request_threaded_irq(dmac->dev, rchan->irq, in rcar_dmac_chan_probe()
1783 dev_err(dmac->dev, "failed to request IRQ %u (%d)\n", in rcar_dmac_chan_probe()
1793 static int rcar_dmac_parse_of(struct device *dev, struct rcar_dmac *dmac) in rcar_dmac_parse_of() argument
1798 ret = of_property_read_u32(np, "dma-channels", &dmac->n_channels); in rcar_dmac_parse_of()
1805 if (dmac->n_channels <= 0 || in rcar_dmac_parse_of()
1806 dmac->n_channels >= RCAR_DMAC_MAX_CHANNELS) { in rcar_dmac_parse_of()
1808 dmac->n_channels); in rcar_dmac_parse_of()
1816 dmac->channels_mask = GENMASK(dmac->n_channels - 1, 0); in rcar_dmac_parse_of()
1817 of_property_read_u32(np, "dma-channel-mask", &dmac->channels_mask); in rcar_dmac_parse_of()
1820 dmac->channels_mask &= GENMASK(dmac->n_channels - 1, 0); in rcar_dmac_parse_of()
1832 struct rcar_dmac *dmac; in rcar_dmac_probe() local
1841 dmac = devm_kzalloc(&pdev->dev, sizeof(*dmac), GFP_KERNEL); in rcar_dmac_probe()
1842 if (!dmac) in rcar_dmac_probe()
1845 dmac->dev = &pdev->dev; in rcar_dmac_probe()
1846 platform_set_drvdata(pdev, dmac); in rcar_dmac_probe()
1847 dma_set_max_seg_size(dmac->dev, RCAR_DMATCR_MASK); in rcar_dmac_probe()
1848 dma_set_mask_and_coherent(dmac->dev, DMA_BIT_MASK(40)); in rcar_dmac_probe()
1850 ret = rcar_dmac_parse_of(&pdev->dev, dmac); in rcar_dmac_probe()
1856 * flushed correctly, resulting in memory corruption. DMAC 0 channel 0 in rcar_dmac_probe()
1863 dmac->channels_mask &= ~BIT(0); in rcar_dmac_probe()
1865 dmac->channels = devm_kcalloc(&pdev->dev, dmac->n_channels, in rcar_dmac_probe()
1866 sizeof(*dmac->channels), GFP_KERNEL); in rcar_dmac_probe()
1867 if (!dmac->channels) in rcar_dmac_probe()
1871 dmac->iomem = devm_platform_ioremap_resource(pdev, 0); in rcar_dmac_probe()
1872 if (IS_ERR(dmac->iomem)) in rcar_dmac_probe()
1873 return PTR_ERR(dmac->iomem); in rcar_dmac_probe()
1883 ret = rcar_dmac_init(dmac); in rcar_dmac_probe()
1892 engine = &dmac->engine; in rcar_dmac_probe()
1919 for (i = 0; i < dmac->n_channels; ++i) { in rcar_dmac_probe()
1920 if (!(dmac->channels_mask & BIT(i))) in rcar_dmac_probe()
1923 ret = rcar_dmac_chan_probe(dmac, &dmac->channels[i], data, i); in rcar_dmac_probe()
1928 /* Register the DMAC as a DMA provider for DT. */ in rcar_dmac_probe()
1953 struct rcar_dmac *dmac = platform_get_drvdata(pdev); in rcar_dmac_remove() local
1956 dma_async_device_unregister(&dmac->engine); in rcar_dmac_remove()
1965 struct rcar_dmac *dmac = platform_get_drvdata(pdev); in rcar_dmac_shutdown() local
1967 rcar_dmac_stop_all_chan(dmac); in rcar_dmac_shutdown()
1977 .compatible = "renesas,rcar-dmac",
1987 .name = "rcar-dmac",