Lines Matching refs:dmac

214 #define for_each_rcar_dmac_chan(i, dmac, chan)						\
215 for (i = 0, chan = &(dmac)->channels[0]; i < (dmac)->n_channels; i++, chan++) \
216 if (!((dmac)->channels_mask & BIT(i))) continue; else
312 static void rcar_dmac_write(struct rcar_dmac *dmac, u32 reg, u32 data)
315 writew(data, dmac->dmac_base + reg);
317 writel(data, dmac->dmac_base + reg);
320 static u32 rcar_dmac_read(struct rcar_dmac *dmac, u32 reg)
323 return readw(dmac->dmac_base + reg);
325 return readl(dmac->dmac_base + reg);
344 static void rcar_dmac_chan_clear(struct rcar_dmac *dmac,
347 if (dmac->chan_base)
350 rcar_dmac_write(dmac, RCAR_DMACHCLR, BIT(chan->index));
353 static void rcar_dmac_chan_clear_all(struct rcar_dmac *dmac)
358 if (dmac->chan_base) {
359 for_each_rcar_dmac_chan(i, dmac, chan)
362 rcar_dmac_write(dmac, RCAR_DMACHCLR, dmac->channels_mask);
476 static int rcar_dmac_init(struct rcar_dmac *dmac)
481 rcar_dmac_chan_clear_all(dmac);
482 rcar_dmac_write(dmac, RCAR_DMAOR,
485 dmaor = rcar_dmac_read(dmac, RCAR_DMAOR);
487 dev_warn(dmac->dev, "DMAOR initialization failed.\n");
849 static void rcar_dmac_stop_all_chan(struct rcar_dmac *dmac)
855 for_each_rcar_dmac_chan(i, dmac, chan) {
1077 struct rcar_dmac *dmac = to_rcar_dmac(chan->device);
1096 clear_bit(rchan->mid_rid, dmac->modules);
1589 struct rcar_dmac *dmac = to_rcar_dmac(chan->chan.device);
1596 rcar_dmac_chan_clear(dmac, chan);
1686 struct rcar_dmac *dmac = to_rcar_dmac(chan->device);
1699 return !test_and_set_bit(dma_spec->args[0], dmac->modules);
1739 struct rcar_dmac *dmac = dev_get_drvdata(dev);
1741 return rcar_dmac_init(dmac);
1761 static int rcar_dmac_chan_probe(struct rcar_dmac *dmac,
1764 struct platform_device *pdev = to_platform_device(dmac->dev);
1786 irqname = devm_kasprintf(dmac->dev, GFP_KERNEL, "%s:%u",
1787 dev_name(dmac->dev), rchan->index);
1795 chan->device = &dmac->engine;
1798 list_add_tail(&chan->device_node, &dmac->engine.channels);
1800 ret = devm_request_threaded_irq(dmac->dev, rchan->irq,
1805 dev_err(dmac->dev, "failed to request IRQ %u (%d)\n",
1815 static int rcar_dmac_parse_of(struct device *dev, struct rcar_dmac *dmac)
1820 ret = of_property_read_u32(np, "dma-channels", &dmac->n_channels);
1827 if (dmac->n_channels <= 0 ||
1828 dmac->n_channels >= RCAR_DMAC_MAX_CHANNELS) {
1830 dmac->n_channels);
1838 dmac->channels_mask = GENMASK(dmac->n_channels - 1, 0);
1839 of_property_read_u32(np, "dma-channel-mask", &dmac->channels_mask);
1842 dmac->channels_mask &= GENMASK(dmac->n_channels - 1, 0);
1857 struct rcar_dmac *dmac;
1865 dmac = devm_kzalloc(&pdev->dev, sizeof(*dmac), GFP_KERNEL);
1866 if (!dmac)
1869 dmac->dev = &pdev->dev;
1870 platform_set_drvdata(pdev, dmac);
1871 ret = dma_set_max_seg_size(dmac->dev, RCAR_DMATCR_MASK);
1875 ret = dma_set_mask_and_coherent(dmac->dev, DMA_BIT_MASK(40));
1879 ret = rcar_dmac_parse_of(&pdev->dev, dmac);
1892 dmac->channels_mask &= ~BIT(0);
1894 dmac->channels = devm_kcalloc(&pdev->dev, dmac->n_channels,
1895 sizeof(*dmac->channels), GFP_KERNEL);
1896 if (!dmac->channels)
1900 dmac->dmac_base = devm_platform_ioremap_resource(pdev, 0);
1901 if (IS_ERR(dmac->dmac_base))
1902 return PTR_ERR(dmac->dmac_base);
1905 dmac->chan_base = devm_platform_ioremap_resource(pdev, 1);
1906 if (IS_ERR(dmac->chan_base))
1907 return PTR_ERR(dmac->chan_base);
1909 chan_base = dmac->chan_base;
1911 chan_base = dmac->dmac_base + data->chan_offset_base;
1914 for_each_rcar_dmac_chan(i, dmac, chan) {
1927 ret = rcar_dmac_init(dmac);
1936 engine = &dmac->engine;
1963 for_each_rcar_dmac_chan(i, dmac, chan) {
1964 ret = rcar_dmac_chan_probe(dmac, chan);
1995 struct rcar_dmac *dmac = platform_get_drvdata(pdev);
1998 dma_async_device_unregister(&dmac->engine);
2005 struct rcar_dmac *dmac = platform_get_drvdata(pdev);
2007 rcar_dmac_stop_all_chan(dmac);
2022 .compatible = "renesas,rcar-dmac",
2025 .compatible = "renesas,rcar-gen4-dmac",
2028 .compatible = "renesas,dmac-r8a779a0",
2038 .name = "rcar-dmac",