Message ID | 87h8uzmzx2.wl%kuninori.morimoto.gx@renesas.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Hi Morimoto-san, On Mon, Oct 16, 2017 at 7:28 AM, Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> wrote: > From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > > SYS/RT/Audio DMAC have both TCR/TCRB register. > Its difference is transfer counter value of read (= TCR) > or write (= TCRB). The relationship is like below. > > TCR TCRB > [SOURCE] -> [DMAC] -> [DESTINATION] > > Thus, we want to read TCRB instead of TCR for residue. > Otherwise, Sound Capture has noise after PluseAudio support > (= 07b7acb51d2 ("ASoC: rsnd: update pointer more accurate")) > > Signed-off-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> > [Kuninori: added detail information in log] > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Thanks for your patch! > --- a/drivers/dma/sh/rcar-dmac.c > +++ b/drivers/dma/sh/rcar-dmac.c > @@ -1310,7 +1310,7 @@ static unsigned int rcar_dmac_chan_get_residue(struct rcar_dmac_chan *chan, > } > > /* Add the residue for the current chunk. */ > - residue += rcar_dmac_chan_read(chan, RCAR_DMATCR) << desc->xfer_shift; > + residue += rcar_dmac_chan_read(chan, RCAR_DMATCRB) << desc->xfer_shift; Indeed, TCR indicates the counter value used for reading, while TCRB indicates the counter value used for writing. However, shouldn't the register to use depend on the DMA direction? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Geert > > SYS/RT/Audio DMAC have both TCR/TCRB register. > > Its difference is transfer counter value of read (= TCR) > > or write (= TCRB). The relationship is like below. > > > > TCR TCRB > > [SOURCE] -> [DMAC] -> [DESTINATION] > > > > Thus, we want to read TCRB instead of TCR for residue. > > Otherwise, Sound Capture has noise after PluseAudio support > > (= 07b7acb51d2 ("ASoC: rsnd: update pointer more accurate")) > > > > Signed-off-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> > > [Kuninori: added detail information in log] > > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> (snip) > However, shouldn't the register to use depend on the DMA direction? I think TCRB is OK for all direction, but yes, we can care its direction. I can post v2 patch, if you want. Geert do you want to care direction ? Best regards --- Kuninori Morimoto -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Morimoto-san, On Mon, Oct 16, 2017 at 9:12 AM, Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> wrote: >> > SYS/RT/Audio DMAC have both TCR/TCRB register. >> > Its difference is transfer counter value of read (= TCR) >> > or write (= TCRB). The relationship is like below. >> > >> > TCR TCRB >> > [SOURCE] -> [DMAC] -> [DESTINATION] >> > >> > Thus, we want to read TCRB instead of TCR for residue. >> > Otherwise, Sound Capture has noise after PluseAudio support >> > (= 07b7acb51d2 ("ASoC: rsnd: update pointer more accurate")) >> > >> > Signed-off-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> >> > [Kuninori: added detail information in log] >> > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > (snip) >> However, shouldn't the register to use depend on the DMA direction? > > I think TCRB is OK for all direction, > but yes, we can care its direction. > I can post v2 patch, if you want. > Geert do you want to care direction ? Please do. I think in general the .get_residue() callback should return the correct value for both reading and writing. Thanks! Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Geert > >> > SYS/RT/Audio DMAC have both TCR/TCRB register. > >> > Its difference is transfer counter value of read (= TCR) > >> > or write (= TCRB). The relationship is like below. > >> > > >> > TCR TCRB > >> > [SOURCE] -> [DMAC] -> [DESTINATION] > >> > > >> > Thus, we want to read TCRB instead of TCR for residue. > >> > Otherwise, Sound Capture has noise after PluseAudio support > >> > (= 07b7acb51d2 ("ASoC: rsnd: update pointer more accurate")) > >> > > >> > Signed-off-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> > >> > [Kuninori: added detail information in log] > >> > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > > (snip) > >> However, shouldn't the register to use depend on the DMA direction? > > > > I think TCRB is OK for all direction, > > but yes, we can care its direction. > > I can post v2 patch, if you want. > > Geert do you want to care direction ? > > Please do. I think in general the .get_residue() callback should return the > correct value for both reading and writing. OK, will post v2 Best regards --- Kuninori Morimoto -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c index 2b2c7db..50c4950 100644 --- a/drivers/dma/sh/rcar-dmac.c +++ b/drivers/dma/sh/rcar-dmac.c @@ -1310,7 +1310,7 @@ static unsigned int rcar_dmac_chan_get_residue(struct rcar_dmac_chan *chan, } /* Add the residue for the current chunk. */ - residue += rcar_dmac_chan_read(chan, RCAR_DMATCR) << desc->xfer_shift; + residue += rcar_dmac_chan_read(chan, RCAR_DMATCRB) << desc->xfer_shift; return residue; }