Lines Matching refs:dmac

296 static void rcar_dmac_write(struct rcar_dmac *dmac, u32 reg, u32 data)  in rcar_dmac_write()  argument
299 writew(data, dmac->iomem + reg); in rcar_dmac_write()
301 writel(data, dmac->iomem + reg); in rcar_dmac_write()
304 static u32 rcar_dmac_read(struct rcar_dmac *dmac, u32 reg) in rcar_dmac_read() argument
307 return readw(dmac->iomem + reg); in rcar_dmac_read()
309 return readl(dmac->iomem + reg); in rcar_dmac_read()
438 static int rcar_dmac_init(struct rcar_dmac *dmac) in rcar_dmac_init() argument
443 rcar_dmac_write(dmac, RCAR_DMACHCLR, dmac->channels_mask); in rcar_dmac_init()
444 rcar_dmac_write(dmac, RCAR_DMAOR, in rcar_dmac_init()
447 dmaor = rcar_dmac_read(dmac, RCAR_DMAOR); in rcar_dmac_init()
449 dev_warn(dmac->dev, "DMAOR initialization failed.\n"); in rcar_dmac_init()
811 static void rcar_dmac_stop_all_chan(struct rcar_dmac *dmac) in rcar_dmac_stop_all_chan() argument
816 for (i = 0; i < dmac->n_channels; ++i) { in rcar_dmac_stop_all_chan()
817 struct rcar_dmac_chan *chan = &dmac->channels[i]; in rcar_dmac_stop_all_chan()
819 if (!(dmac->channels_mask & BIT(i))) in rcar_dmac_stop_all_chan()
1043 struct rcar_dmac *dmac = to_rcar_dmac(chan->device); in rcar_dmac_free_chan_resources() local
1062 clear_bit(rchan->mid_rid, dmac->modules); in rcar_dmac_free_chan_resources()
1555 struct rcar_dmac *dmac = to_rcar_dmac(chan->chan.device); in rcar_dmac_isr_channel() local
1562 rcar_dmac_write(dmac, RCAR_DMACHCLR, 1 << chan->index); in rcar_dmac_isr_channel()
1652 struct rcar_dmac *dmac = to_rcar_dmac(chan->device); in rcar_dmac_chan_filter() local
1665 return !test_and_set_bit(dma_spec->args[0], dmac->modules); in rcar_dmac_chan_filter()
1705 struct rcar_dmac *dmac = dev_get_drvdata(dev); in rcar_dmac_runtime_resume() local
1707 return rcar_dmac_init(dmac); in rcar_dmac_runtime_resume()
1727 static int rcar_dmac_chan_probe(struct rcar_dmac *dmac, in rcar_dmac_chan_probe() argument
1731 struct platform_device *pdev = to_platform_device(dmac->dev); in rcar_dmac_chan_probe()
1738 rchan->iomem = dmac->iomem + RCAR_DMAC_CHAN_OFFSET(index); in rcar_dmac_chan_probe()
1755 irqname = devm_kasprintf(dmac->dev, GFP_KERNEL, "%s:%u", in rcar_dmac_chan_probe()
1756 dev_name(dmac->dev), index); in rcar_dmac_chan_probe()
1764 chan->device = &dmac->engine; in rcar_dmac_chan_probe()
1767 list_add_tail(&chan->device_node, &dmac->engine.channels); in rcar_dmac_chan_probe()
1769 ret = devm_request_threaded_irq(dmac->dev, rchan->irq, in rcar_dmac_chan_probe()
1774 dev_err(dmac->dev, "failed to request IRQ %u (%d)\n", in rcar_dmac_chan_probe()
1784 static int rcar_dmac_parse_of(struct device *dev, struct rcar_dmac *dmac) in rcar_dmac_parse_of() argument
1789 ret = of_property_read_u32(np, "dma-channels", &dmac->n_channels); in rcar_dmac_parse_of()
1796 if (dmac->n_channels <= 0 || in rcar_dmac_parse_of()
1797 dmac->n_channels >= RCAR_DMAC_MAX_CHANNELS) { in rcar_dmac_parse_of()
1799 dmac->n_channels); in rcar_dmac_parse_of()
1803 dmac->channels_mask = GENMASK(dmac->n_channels - 1, 0); in rcar_dmac_parse_of()
1815 struct rcar_dmac *dmac; in rcar_dmac_probe() local
1820 dmac = devm_kzalloc(&pdev->dev, sizeof(*dmac), GFP_KERNEL); in rcar_dmac_probe()
1821 if (!dmac) in rcar_dmac_probe()
1824 dmac->dev = &pdev->dev; in rcar_dmac_probe()
1825 platform_set_drvdata(pdev, dmac); in rcar_dmac_probe()
1826 dmac->dev->dma_parms = &dmac->parms; in rcar_dmac_probe()
1827 dma_set_max_seg_size(dmac->dev, RCAR_DMATCR_MASK); in rcar_dmac_probe()
1828 dma_set_mask_and_coherent(dmac->dev, DMA_BIT_MASK(40)); in rcar_dmac_probe()
1830 ret = rcar_dmac_parse_of(&pdev->dev, dmac); in rcar_dmac_probe()
1843 dmac->channels_mask &= ~BIT(0); in rcar_dmac_probe()
1845 dmac->channels = devm_kcalloc(&pdev->dev, dmac->n_channels, in rcar_dmac_probe()
1846 sizeof(*dmac->channels), GFP_KERNEL); in rcar_dmac_probe()
1847 if (!dmac->channels) in rcar_dmac_probe()
1852 dmac->iomem = devm_ioremap_resource(&pdev->dev, mem); in rcar_dmac_probe()
1853 if (IS_ERR(dmac->iomem)) in rcar_dmac_probe()
1854 return PTR_ERR(dmac->iomem); in rcar_dmac_probe()
1864 ret = rcar_dmac_init(dmac); in rcar_dmac_probe()
1873 engine = &dmac->engine; in rcar_dmac_probe()
1900 for (i = 0; i < dmac->n_channels; ++i) { in rcar_dmac_probe()
1901 if (!(dmac->channels_mask & BIT(i))) in rcar_dmac_probe()
1904 ret = rcar_dmac_chan_probe(dmac, &dmac->channels[i], i); in rcar_dmac_probe()
1934 struct rcar_dmac *dmac = platform_get_drvdata(pdev); in rcar_dmac_remove() local
1937 dma_async_device_unregister(&dmac->engine); in rcar_dmac_remove()
1946 struct rcar_dmac *dmac = platform_get_drvdata(pdev); in rcar_dmac_shutdown() local
1948 rcar_dmac_stop_all_chan(dmac); in rcar_dmac_shutdown()