Re: [PATCH v5 14/14] ASoC: rsnd: Add system suspend/resume support

From: Geert Uytterhoeven

Date: Tue Apr 28 2026 - 06:26:07 EST


Hi John,

On Wed, 15 Apr 2026 at 14:47, John Madieu <john.madieu@xxxxxxxxx> wrote:
> Add per-module suspend/resume functions following the existing driver
> architecture where each module manages its own resources in its own
> file. core.c provides common clock/reset helpers and orchestrates the
> calls in the correct order (reverse probe for suspend, probe order
> for resume).
>
> Infrastructure clocks (ADG, audmacpp, SCU) are managed globally
> using optional APIs to remain transparent to platforms that don't
> specify these clocks/resets.
>
> Signed-off-by: John Madieu <john.madieu.xa@xxxxxxxxxxxxxx>

Thanks for your patch!

This causes a crash on Gray Hawk Single (R-Car V4M), but not on
Salvator-XS (R-Car H3 ES2.0):

Unable to handle kernel NULL pointer dereference at virtual
address 0000000000000008
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
user pgtable: 4k pages, 48-bit VAs, pgdp=00000004879ed000
[0000000000000008] pgd=0000000000000000, p4d=0000000000000000
Internal error: Oops: 0000000096000004 [#1] SMP
CPU: 0 UID: 0 PID: 675 Comm: s2idle Not tainted
7.1.0-rc1-arm64-renesas-03756-g4cf47bc1e3d7 #3579 PREEMPT
Hardware name: Renesas Gray Hawk Single board based on r8a779h0 (DT)
pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : rsnd_src_suspend+0x60/0x98
lr : rsnd_suspend+0x44/0x6c
sp : ffff800082e03ab0
x29: ffff800082e03ab0 x28: ffff000444022ac0 x27: ffff8000817d9050
x26: 0000000000000002 x25: ffff80008073dd64 x24: ffff800080ab0b20
x23: 0000000000000000 x22: ffff0004408a84a0 x21: 0000000000000002
x20: ffff0004402d6e80 x19: ffff0004402d6e80 x18: 0000000000000000
x17: 003fffffffffffff x16: ffff800082d8bc18 x15: ffff0005bef86f00
x14: ffff000444022b40 x13: 0000000000000112 x12: 071c71c71c71c71c
x11: 00000000000000c0 x10: 00000000000009f0 x9 : ffff800082e03880
x8 : ffff000444022ac0 x7 : ffff0005bef86f80 x6 : 0000000000000000
x5 : 0000000000000084 x4 : ffff000444022ac0 x3 : 0000000000000000
x2 : ffff000444022ac0 x1 : 0000000000000000 x0 : 0000000000000000
Call trace:
rsnd_src_suspend+0x60/0x98 (P)
rsnd_suspend+0x44/0x6c
device_suspend+0x134/0x3d8
dpm_suspend+0x164/0x268
dpm_suspend_start+0x4c/0x64
suspend_devices_and_enter+0x1c8/0x544
pm_suspend+0x194/0x1e0
state_store+0x7c/0x100
kobj_attr_store+0x14/0x24
sysfs_kf_write+0x78/0x8c
kernfs_fop_write_iter+0x128/0x1d0
vfs_write+0x210/0x390
ksys_write+0x6c/0x100
__arm64_sys_write+0x18/0x20
invoke_syscall+0x50/0x104
el0_svc_common.constprop.0+0x3c/0xd4
do_el0_svc+0x18/0x20
el0_svc+0x24/0xd8
el0t_64_sync_handler+0x98/0xdc
el0t_64_sync+0x154/0x158
Code: 6b13001f 54ffff0c f94013f5 f9402e80 (f9400413)
---[ end trace 0000000000000000 ]---

> --- a/sound/soc/renesas/rcar/src.c
> +++ b/sound/soc/renesas/rcar/src.c
> @@ -848,3 +848,29 @@ void rsnd_src_remove(struct rsnd_priv *priv)
> rsnd_mod_quit(rsnd_mod_get(src));
> }
> }
> +
> +void rsnd_src_suspend(struct rsnd_priv *priv)
> +{
> + struct rsnd_src *src;
> + int i;
> +
> + for_each_rsnd_src(src, priv, i)
> + rsnd_suspend_clk_reset(rsnd_mod_get(src)->clk,
> + rsnd_mod_get(src)->rstc);
> +
> + clk_disable_unprepare(rsnd_priv_to_src_ctrl(priv)->scu_x2);

Apparently rsnd_priv_to_src_ctrl(priv) is NULL.

> + clk_disable_unprepare(rsnd_priv_to_src_ctrl(priv)->scu);
> +}

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