Lines Matching refs:dmac

274 static void rcar_dmac_write(struct rcar_dmac *dmac, u32 reg, u32 data)  in rcar_dmac_write()  argument
277 writew(data, dmac->iomem + reg); in rcar_dmac_write()
279 writel(data, dmac->iomem + reg); in rcar_dmac_write()
282 static u32 rcar_dmac_read(struct rcar_dmac *dmac, u32 reg) in rcar_dmac_read() argument
285 return readw(dmac->iomem + reg); in rcar_dmac_read()
287 return readl(dmac->iomem + reg); in rcar_dmac_read()
411 static int rcar_dmac_init(struct rcar_dmac *dmac) in rcar_dmac_init() argument
416 rcar_dmac_write(dmac, RCAR_DMACHCLR, 0x7fff); in rcar_dmac_init()
417 rcar_dmac_write(dmac, RCAR_DMAOR, in rcar_dmac_init()
420 dmaor = rcar_dmac_read(dmac, RCAR_DMAOR); in rcar_dmac_init()
422 dev_warn(dmac->dev, "DMAOR initialization failed.\n"); in rcar_dmac_init()
753 static void rcar_dmac_stop(struct rcar_dmac *dmac) in rcar_dmac_stop() argument
755 rcar_dmac_write(dmac, RCAR_DMAOR, 0); in rcar_dmac_stop()
758 static void rcar_dmac_abort(struct rcar_dmac *dmac) in rcar_dmac_abort() argument
763 for (i = 0; i < dmac->n_channels; ++i) { in rcar_dmac_abort()
764 struct rcar_dmac_chan *chan = &dmac->channels[i]; in rcar_dmac_abort()
969 struct rcar_dmac *dmac = to_rcar_dmac(chan->device); in rcar_dmac_free_chan_resources() local
983 clear_bit(rchan->mid_rid, dmac->modules); in rcar_dmac_free_chan_resources()
1412 struct rcar_dmac *dmac = data; in rcar_dmac_isr_error() local
1414 if (!(rcar_dmac_read(dmac, RCAR_DMAOR) & RCAR_DMAOR_AE)) in rcar_dmac_isr_error()
1421 rcar_dmac_stop(dmac); in rcar_dmac_isr_error()
1422 rcar_dmac_abort(dmac); in rcar_dmac_isr_error()
1423 rcar_dmac_init(dmac); in rcar_dmac_isr_error()
1434 struct rcar_dmac *dmac = to_rcar_dmac(chan->device); in rcar_dmac_chan_filter() local
1448 return !test_and_set_bit(dma_spec->args[0], dmac->modules); in rcar_dmac_chan_filter()
1503 struct rcar_dmac *dmac = dev_get_drvdata(dev); in rcar_dmac_runtime_resume() local
1505 return rcar_dmac_init(dmac); in rcar_dmac_runtime_resume()
1519 static int rcar_dmac_chan_probe(struct rcar_dmac *dmac, in rcar_dmac_chan_probe() argument
1523 struct platform_device *pdev = to_platform_device(dmac->dev); in rcar_dmac_chan_probe()
1531 rchan->iomem = dmac->iomem + RCAR_DMAC_CHAN_OFFSET(index); in rcar_dmac_chan_probe()
1546 dev_err(dmac->dev, "no IRQ specified for channel %u\n", index); in rcar_dmac_chan_probe()
1550 irqname = devm_kasprintf(dmac->dev, GFP_KERNEL, "%s:%u", in rcar_dmac_chan_probe()
1551 dev_name(dmac->dev), index); in rcar_dmac_chan_probe()
1555 ret = devm_request_threaded_irq(dmac->dev, irq, rcar_dmac_isr_channel, in rcar_dmac_chan_probe()
1559 dev_err(dmac->dev, "failed to request IRQ %u (%d)\n", irq, ret); in rcar_dmac_chan_probe()
1567 chan->device = &dmac->engine; in rcar_dmac_chan_probe()
1570 list_add_tail(&chan->device_node, &dmac->engine.channels); in rcar_dmac_chan_probe()
1575 static int rcar_dmac_parse_of(struct device *dev, struct rcar_dmac *dmac) in rcar_dmac_parse_of() argument
1580 ret = of_property_read_u32(np, "dma-channels", &dmac->n_channels); in rcar_dmac_parse_of()
1586 if (dmac->n_channels <= 0 || dmac->n_channels >= 100) { in rcar_dmac_parse_of()
1588 dmac->n_channels); in rcar_dmac_parse_of()
1603 struct rcar_dmac *dmac; in rcar_dmac_probe() local
1610 dmac = devm_kzalloc(&pdev->dev, sizeof(*dmac), GFP_KERNEL); in rcar_dmac_probe()
1611 if (!dmac) in rcar_dmac_probe()
1614 dmac->dev = &pdev->dev; in rcar_dmac_probe()
1615 platform_set_drvdata(pdev, dmac); in rcar_dmac_probe()
1617 ret = rcar_dmac_parse_of(&pdev->dev, dmac); in rcar_dmac_probe()
1630 dmac->n_channels--; in rcar_dmac_probe()
1634 dmac->channels = devm_kcalloc(&pdev->dev, dmac->n_channels, in rcar_dmac_probe()
1635 sizeof(*dmac->channels), GFP_KERNEL); in rcar_dmac_probe()
1636 if (!dmac->channels) in rcar_dmac_probe()
1641 dmac->iomem = devm_ioremap_resource(&pdev->dev, mem); in rcar_dmac_probe()
1642 if (IS_ERR(dmac->iomem)) in rcar_dmac_probe()
1643 return PTR_ERR(dmac->iomem); in rcar_dmac_probe()
1651 irqname = devm_kasprintf(dmac->dev, GFP_KERNEL, "%s:error", in rcar_dmac_probe()
1652 dev_name(dmac->dev)); in rcar_dmac_probe()
1657 irqname, dmac); in rcar_dmac_probe()
1672 ret = rcar_dmac_init(dmac); in rcar_dmac_probe()
1681 INIT_LIST_HEAD(&dmac->engine.channels); in rcar_dmac_probe()
1683 for (i = 0; i < dmac->n_channels; ++i) { in rcar_dmac_probe()
1684 ret = rcar_dmac_chan_probe(dmac, &dmac->channels[i], in rcar_dmac_probe()
1701 engine = &dmac->engine; in rcar_dmac_probe()
1737 struct rcar_dmac *dmac = platform_get_drvdata(pdev); in rcar_dmac_remove() local
1740 dma_async_device_unregister(&dmac->engine); in rcar_dmac_remove()
1749 struct rcar_dmac *dmac = platform_get_drvdata(pdev); in rcar_dmac_shutdown() local
1751 rcar_dmac_stop(dmac); in rcar_dmac_shutdown()