Loading drivers/dma/sh/rcar-dmac.c +11 −4 Original line number Diff line number Diff line Loading @@ -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)) Loading Loading
drivers/dma/sh/rcar-dmac.c +11 −4 Original line number Diff line number Diff line Loading @@ -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)) Loading