Re: [PATCH 12/22] ASoC: rsnd: Update SSI for RZ/G3E support
From: Geert Uytterhoeven
Date: Tue Mar 24 2026 - 09:45:53 EST
Hi John,
On Thu, 19 Mar 2026 at 16:56, John Madieu <john.madieu.xa@xxxxxxxxxxxxxx> wrote:
> Add SSI support for the Renesas RZ/G3E SoC, which differs from earlier
> generations in several ways:
>
> - The SSI block always operates in BUSIF mode; RZ/G3E does not implement
> the SSITDR/SSIRDR registers used by R-Car Gen2/Gen3/Gen4 for direct SSI
> DMA.
> Consequently, all audio data must pass through BUSIF.
> - Each SSI instance has its own reset line, exposed using per-SSI names
> such as "ssi0", "ssi1", etc., rather than a single shared reset.
>
> To support these differences, update rsnd_ssi_use_busif() to always
> return 1 on RZ/G3E, ensuring that the driver consistently selects the
> BUSIF DMA path. Also update the reset acquisition logic to request the
> appropriate per-SSI reset controller based on the SSI instance name.
>
> Signed-off-by: John Madieu <john.madieu.xa@xxxxxxxxxxxxxx>
Thanks for your patch!
> --- a/sound/soc/renesas/rcar/ssi.c
> +++ b/sound/soc/renesas/rcar/ssi.c
> @@ -123,8 +123,15 @@ int rsnd_ssi_use_busif(struct rsnd_dai_stream *io)
> {
> struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
> struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
> + struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
> int use_busif = 0;
>
> + /*
> + * RZ/G3E does not support PIO mode. Always use BUSIF.
> + */
> + if (rsnd_flags_has(priv, RSND_SSI_ALWAYS_BUSIF))
> + return 1;
> +
> if (!rsnd_ssi_is_dma_mode(mod))
> return 0;
>
> @@ -865,6 +872,8 @@ static int rsnd_ssi_common_remove(struct rsnd_mod *mod,
> rsnd_flags_del(ssi, RSND_SSI_PROBED);
> }
>
> + rsnd_dma_detach(io, mod, &io->dma);
This goes BOOM on R-Car Gen3 and Gen4:
Unable to handle kernel NULL pointer dereference at virtual
address 0000000000000004
Mem abort info:
ESR = 0x0000000096000004
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
FSC = 0x04: level 0 translation fault
Data abort info:
ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
CM = 0, WnR = 0, TnD = 0, TagAccess = 0
GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
[0000000000000004] user address but active_mm is swapper
Internal error: Oops: 0000000096000004 [#1] SMP
CPU: 1 UID: 0 PID: 1 Comm: swapper/0 Not tainted
7.0.0-rc5-arm64-renesas-07233-g377893124b8a #3530 PREEMPT
Hardware name: Renesas Gray Hawk Single board based on r8a779h0 (DT)
pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : rsnd_dma_detach+0x10/0x20
lr : rsnd_ssi_common_remove+0x48/0x74
sp : ffff8000818ebac0
x29: ffff8000818ebac0 x28: ffff000441c02938 x27: ffff0004408a8410
x26: 000000000000000d x25: 0000000000000000 x24: ffff8000817b9970
x23: 0000000000000000 x22: 000000000000000c x21: 00000000fffffdfb
x20: ffff000441c02938 x19: ffff0004402bc080 x18: 00000000ffffffff
x17: ffff000440ba6600 x16: ffff000440ba6a00 x15: ffff8000818eb700
x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000030
x11: 0101010101010101 x10: ffff800080fa7670 x9 : 1fffe00088052d21
x8 : 0101010101010101 x7 : 7f7f7f7f7f7f7f7f x6 : feff636d746e722d
x5 : 000000000000003c x4 : ffff800080a9dcc4 x3 : ffff0004402be800
x2 : ffff000441c029b8 x1 : ffff000441c02938 x0 : 0000000000000000
Call trace:
rsnd_dma_detach+0x10/0x20 (P)
rsnd_ssi_common_remove+0x48/0x74
rsnd_probe+0x2d0/0x448
platform_probe+0x58/0x90
really_probe+0xb8/0x294
__driver_probe_device+0x74/0x124
driver_probe_device+0x3c/0x158
__driver_attach+0xe0/0x1b4
bus_for_each_dev+0x78/0xd4
driver_attach+0x20/0x28
bus_add_driver+0xe0/0x1e0
driver_register+0x58/0x114
__platform_driver_register+0x20/0x28
rsnd_driver_init+0x18/0x20
do_one_initcall+0x7c/0x184
kernel_init_freeable+0x200/0x2e0
kernel_init+0x20/0x1cc
ret_from_fork+0x10/0x20
Code: a9bf7bfd aa0003e1 910003fd f9400040 (b9400402)
---[ end trace 0000000000000000 ]---
> +
> return 0;
> }
>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
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