Lines Matching refs:dmac
293 static void rcar_dmac_write(struct rcar_dmac *dmac, u32 reg, u32 data) in rcar_dmac_write() argument
296 writew(data, dmac->iomem + reg); in rcar_dmac_write()
298 writel(data, dmac->iomem + reg); in rcar_dmac_write()
301 static u32 rcar_dmac_read(struct rcar_dmac *dmac, u32 reg) in rcar_dmac_read() argument
304 return readw(dmac->iomem + reg); in rcar_dmac_read()
306 return readl(dmac->iomem + reg); in rcar_dmac_read()
435 static int rcar_dmac_init(struct rcar_dmac *dmac) in rcar_dmac_init() argument
440 rcar_dmac_write(dmac, RCAR_DMACHCLR, GENMASK(dmac->n_channels - 1, 0)); in rcar_dmac_init()
441 rcar_dmac_write(dmac, RCAR_DMAOR, in rcar_dmac_init()
444 dmaor = rcar_dmac_read(dmac, RCAR_DMAOR); in rcar_dmac_init()
446 dev_warn(dmac->dev, "DMAOR initialization failed.\n"); in rcar_dmac_init()
808 static void rcar_dmac_stop_all_chan(struct rcar_dmac *dmac) in rcar_dmac_stop_all_chan() argument
813 for (i = 0; i < dmac->n_channels; ++i) { in rcar_dmac_stop_all_chan()
814 struct rcar_dmac_chan *chan = &dmac->channels[i]; in rcar_dmac_stop_all_chan()
1037 struct rcar_dmac *dmac = to_rcar_dmac(chan->device); in rcar_dmac_free_chan_resources() local
1056 clear_bit(rchan->mid_rid, dmac->modules); in rcar_dmac_free_chan_resources()
1527 struct rcar_dmac *dmac = to_rcar_dmac(chan->chan.device); in rcar_dmac_isr_channel() local
1534 rcar_dmac_write(dmac, RCAR_DMACHCLR, 1 << chan->index); in rcar_dmac_isr_channel()
1624 struct rcar_dmac *dmac = to_rcar_dmac(chan->device); in rcar_dmac_chan_filter() local
1638 return !test_and_set_bit(dma_spec->args[0], dmac->modules); in rcar_dmac_chan_filter()
1677 struct rcar_dmac *dmac = dev_get_drvdata(dev); in rcar_dmac_runtime_resume() local
1679 return rcar_dmac_init(dmac); in rcar_dmac_runtime_resume()
1699 static int rcar_dmac_chan_probe(struct rcar_dmac *dmac, in rcar_dmac_chan_probe() argument
1703 struct platform_device *pdev = to_platform_device(dmac->dev); in rcar_dmac_chan_probe()
1710 rchan->iomem = dmac->iomem + RCAR_DMAC_CHAN_OFFSET(index); in rcar_dmac_chan_probe()
1725 dev_err(dmac->dev, "no IRQ specified for channel %u\n", index); in rcar_dmac_chan_probe()
1729 irqname = devm_kasprintf(dmac->dev, GFP_KERNEL, "%s:%u", in rcar_dmac_chan_probe()
1730 dev_name(dmac->dev), index); in rcar_dmac_chan_probe()
1738 chan->device = &dmac->engine; in rcar_dmac_chan_probe()
1741 list_add_tail(&chan->device_node, &dmac->engine.channels); in rcar_dmac_chan_probe()
1743 ret = devm_request_threaded_irq(dmac->dev, rchan->irq, in rcar_dmac_chan_probe()
1748 dev_err(dmac->dev, "failed to request IRQ %u (%d)\n", in rcar_dmac_chan_probe()
1756 static int rcar_dmac_parse_of(struct device *dev, struct rcar_dmac *dmac) in rcar_dmac_parse_of() argument
1761 ret = of_property_read_u32(np, "dma-channels", &dmac->n_channels); in rcar_dmac_parse_of()
1767 if (dmac->n_channels <= 0 || dmac->n_channels >= 100) { in rcar_dmac_parse_of()
1769 dmac->n_channels); in rcar_dmac_parse_of()
1784 struct rcar_dmac *dmac; in rcar_dmac_probe() local
1789 dmac = devm_kzalloc(&pdev->dev, sizeof(*dmac), GFP_KERNEL); in rcar_dmac_probe()
1790 if (!dmac) in rcar_dmac_probe()
1793 dmac->dev = &pdev->dev; in rcar_dmac_probe()
1794 platform_set_drvdata(pdev, dmac); in rcar_dmac_probe()
1795 dma_set_mask_and_coherent(dmac->dev, DMA_BIT_MASK(40)); in rcar_dmac_probe()
1797 ret = rcar_dmac_parse_of(&pdev->dev, dmac); in rcar_dmac_probe()
1810 dmac->n_channels--; in rcar_dmac_probe()
1814 dmac->channels = devm_kcalloc(&pdev->dev, dmac->n_channels, in rcar_dmac_probe()
1815 sizeof(*dmac->channels), GFP_KERNEL); in rcar_dmac_probe()
1816 if (!dmac->channels) in rcar_dmac_probe()
1821 dmac->iomem = devm_ioremap_resource(&pdev->dev, mem); in rcar_dmac_probe()
1822 if (IS_ERR(dmac->iomem)) in rcar_dmac_probe()
1823 return PTR_ERR(dmac->iomem); in rcar_dmac_probe()
1833 ret = rcar_dmac_init(dmac); in rcar_dmac_probe()
1842 engine = &dmac->engine; in rcar_dmac_probe()
1869 for (i = 0; i < dmac->n_channels; ++i) { in rcar_dmac_probe()
1870 ret = rcar_dmac_chan_probe(dmac, &dmac->channels[i], in rcar_dmac_probe()
1901 struct rcar_dmac *dmac = platform_get_drvdata(pdev); in rcar_dmac_remove() local
1904 dma_async_device_unregister(&dmac->engine); in rcar_dmac_remove()
1913 struct rcar_dmac *dmac = platform_get_drvdata(pdev); in rcar_dmac_shutdown() local
1915 rcar_dmac_stop_all_chan(dmac); in rcar_dmac_shutdown()