| From 555ba44c5c53e5120c18f2556d2a4704718b10dd Mon Sep 17 00:00:00 2001 |
| From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| Date: Wed, 11 Jul 2018 11:10:15 +0900 |
| Subject: [PATCH 1618/1795] dmaengine: sh: rcar-dmac: add a new function to |
| clear CHCR.DE with barrier |
| |
| This patch adds a new function rcar_dmac_clear_chcr_de() to simplify |
| adding pause function later. |
| |
| Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| (cherry picked from commit 4de1247a9826cec0ba054479124bd9aa60fb71a5) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/dma/sh/rcar-dmac.c | 15 +++++++++++---- |
| 1 file changed, 11 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c |
| index 9906a9c7220b..d3b7388645bc 100644 |
| --- a/drivers/dma/sh/rcar-dmac.c |
| +++ b/drivers/dma/sh/rcar-dmac.c |
| @@ -759,18 +759,25 @@ static void rcar_dmac_chcr_de_barrier(struct rcar_dmac_chan *chan) |
| dev_err(chan->chan.device->dev, "CHCR DE check error\n"); |
| } |
| |
| -static void rcar_dmac_sync_tcr(struct rcar_dmac_chan *chan) |
| +static void rcar_dmac_clear_chcr_de(struct rcar_dmac_chan *chan) |
| { |
| u32 chcr = rcar_dmac_chan_read(chan, RCAR_DMACHCR); |
| |
| - if (!(chcr & RCAR_DMACHCR_DE)) |
| - return; |
| - |
| /* set DE=0 and flush remaining data */ |
| rcar_dmac_chan_write(chan, RCAR_DMACHCR, (chcr & ~RCAR_DMACHCR_DE)); |
| |
| /* make sure all remaining data was flushed */ |
| rcar_dmac_chcr_de_barrier(chan); |
| +} |
| + |
| +static void rcar_dmac_sync_tcr(struct rcar_dmac_chan *chan) |
| +{ |
| + u32 chcr = rcar_dmac_chan_read(chan, RCAR_DMACHCR); |
| + |
| + if (!(chcr & RCAR_DMACHCR_DE)) |
| + return; |
| + |
| + rcar_dmac_clear_chcr_de(chan); |
| |
| /* back DE if remain data exists */ |
| if (rcar_dmac_chan_read(chan, RCAR_DMATCR)) |
| -- |
| 2.19.0 |
| |