[RESEND] ASoC: rsnd: dma: fix SSI9 4/5/6/7 busif dma address
diff mbox series

Message ID 20191022185429.12769-1-erosca@de.adit-jv.com
State New
Headers show
Series
  • [RESEND] ASoC: rsnd: dma: fix SSI9 4/5/6/7 busif dma address
Related show

Commit Message

Eugeniu Rosca Oct. 22, 2019, 6:54 p.m. UTC
From: Jiada Wang <jiada_wang@mentor.com>

Currently each SSI unit's busif dma address is calculated by
following calculation formula:
0xec540000 + 0x1000 * id + busif / 4 * 0xA000 + busif % 4 * 0x400

But according to R-Car3 HW manual 41.1.4 Register Configuration,
ssi9 4/5/6/7 busif data register address
(SSI9_4_BUSIF/SSI9_5_BUSIF/SSI9_6_BUSIF/SSI9_7_BUSIF)
are out of this rule.

This patch updates the calculation formula to correct
ssi9 4/5/6/7 busif data register address.

Fixes: 5e45a6fab3b9 ("ASoc: rsnd: dma: Calculate dma address with consider of BUSIF")
Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
[erosca: minor improvements in commit description]
Cc: Andrew Gabbasov <andrew_gabbasov@mentor.com>
Cc: stable@vger.kernel.org # v4.20+
Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
---

Originally submitted as https://patchwork.kernel.org/patch/10825513/
("ASoC: rsnd: dma: fix SSI9 4/5/6/7 busif dma address")

---
 sound/soc/sh/rcar/dma.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Kuninori Morimoto Oct. 23, 2019, 12:51 a.m. UTC | #1
Hi

> From: Jiada Wang <jiada_wang@mentor.com>
> 
> Currently each SSI unit's busif dma address is calculated by
> following calculation formula:
> 0xec540000 + 0x1000 * id + busif / 4 * 0xA000 + busif % 4 * 0x400
> 
> But according to R-Car3 HW manual 41.1.4 Register Configuration,
> ssi9 4/5/6/7 busif data register address
> (SSI9_4_BUSIF/SSI9_5_BUSIF/SSI9_6_BUSIF/SSI9_7_BUSIF)
> are out of this rule.
> 
> This patch updates the calculation formula to correct
> ssi9 4/5/6/7 busif data register address.
> 
> Fixes: 5e45a6fab3b9 ("ASoc: rsnd: dma: Calculate dma address with consider of BUSIF")
> Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
> Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
> [erosca: minor improvements in commit description]
> Cc: Andrew Gabbasov <andrew_gabbasov@mentor.com>
> Cc: stable@vger.kernel.org # v4.20+
> Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
> ---

Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Eugeniu Rosca Oct. 23, 2019, 9:55 a.m. UTC | #2
Hi Morimoto-san,

On Wed, Oct 23, 2019 at 09:51:36AM +0900, Kuninori Morimoto wrote:
> 
> Hi
> 
> > From: Jiada Wang <jiada_wang@mentor.com>
> > 
> > Currently each SSI unit's busif dma address is calculated by
> > following calculation formula:
> > 0xec540000 + 0x1000 * id + busif / 4 * 0xA000 + busif % 4 * 0x400
> > 
> > But according to R-Car3 HW manual 41.1.4 Register Configuration,
> > ssi9 4/5/6/7 busif data register address
> > (SSI9_4_BUSIF/SSI9_5_BUSIF/SSI9_6_BUSIF/SSI9_7_BUSIF)
> > are out of this rule.
> > 
> > This patch updates the calculation formula to correct
> > ssi9 4/5/6/7 busif data register address.
> > 
> > Fixes: 5e45a6fab3b9 ("ASoc: rsnd: dma: Calculate dma address with consider of BUSIF")
> > Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
> > Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
> > [erosca: minor improvements in commit description]
> > Cc: Andrew Gabbasov <andrew_gabbasov@mentor.com>
> > Cc: stable@vger.kernel.org # v4.20+
> > Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
> > ---
> 
> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

Many thanks for the prompt responses.

Patch
diff mbox series

diff --git a/sound/soc/sh/rcar/dma.c b/sound/soc/sh/rcar/dma.c
index 0324a5c39619..28f65eba2bb4 100644
--- a/sound/soc/sh/rcar/dma.c
+++ b/sound/soc/sh/rcar/dma.c
@@ -508,10 +508,10 @@  static struct rsnd_mod_ops rsnd_dmapp_ops = {
 #define RDMA_SSI_I_N(addr, i)	(addr ##_reg - 0x00300000 + (0x40 * i) + 0x8)
 #define RDMA_SSI_O_N(addr, i)	(addr ##_reg - 0x00300000 + (0x40 * i) + 0xc)
 
-#define RDMA_SSIU_I_N(addr, i, j) (addr ##_reg - 0x00441000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400))
+#define RDMA_SSIU_I_N(addr, i, j) (addr ##_reg - 0x00441000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400) - (0x4000 * ((i) / 9) * ((j) / 4)))
 #define RDMA_SSIU_O_N(addr, i, j) RDMA_SSIU_I_N(addr, i, j)
 
-#define RDMA_SSIU_I_P(addr, i, j) (addr ##_reg - 0x00141000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400))
+#define RDMA_SSIU_I_P(addr, i, j) (addr ##_reg - 0x00141000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400) - (0x4000 * ((i) / 9) * ((j) / 4)))
 #define RDMA_SSIU_O_P(addr, i, j) RDMA_SSIU_I_P(addr, i, j)
 
 #define RDMA_SRC_I_N(addr, i)	(addr ##_reg - 0x00500000 + (0x400 * i))