Re: [PATCH 07/17] i3c: renesas: Perform Dynamic Address Assignment on resume
From: Claudiu Beznea
Date: Sat May 23 2026 - 06:26:28 EST
On 5/22/26 22:16, Frank Li wrote:
On Fri, May 22, 2026 at 01:18:05PM +0300, Claudiu Beznea wrote:
From: Claudiu Beznea<claudiu.beznea.uj@xxxxxxxxxxxxxx>Can you referhttps://lore.kernel.org/linux-i3c/20260512121732.406009-1- adrian.hunter@xxxxxxxxx/T/#mafdc9631a2a18dfebfa5b5efcb8584d32bceba7f
The Renesas RZ/G3S SoC supports a power saving mode where power to most
SoC components, including I3C, is turned off.
On systems where the I3C devices also loses power during suspend (e.g. NXP
P3T1085UK-ARD connected to the PMOD1_6A connector of the RZ SMARC Carrier
2 + Renesas RZ/G3S SMARC SOM), the devices becomes unreachable after
resume.
Running DAA in the controller resume path restores communication. However,
DAA relies on interrupts for TX/RX, which are not available in the noirq
suspend/resume phase (unless they are wakeup interrupts). For this, the
suspend/resume callbacks were moved out of the noirq phase. Currently,
there is no identified use case on either the Renesas RZ/G3S or Renesas
RZ/G3E SoCs that requires the controller suspend/resume hooks to be part of
the noirq suspend/resume phase.
which defer DAA to workqueue.
I've reviewed this series and tested it. Tests passed on my side.
According to the following diff from patch 6/8 [1]:
/**
* i3c_master_do_daa_ext() - Dynamic Address Assignment (extended version)
* @master: controller
@@ -1878,9 +1889,7 @@ int i3c_master_do_daa_ext(struct i3c_master_controller *master, bool rstdaa)
if (ret)
goto out;
- i3c_bus_normaluse_lock(&master->bus);
- i3c_master_register_new_i3c_devs(master);
- i3c_bus_normaluse_unlock(&master->bus);
+ queue_work(master->wq, &master->reg_work);
out:
i3c_master_rpm_put(master);
only the registration of the new devices is deferred. The RSTDAA command is still sent according to the following code in i3c_master_do_daa_ext():
// ...
if (master->shutting_down) {
ret = -ENODEV;
} else {
if (rstdaa)
rstret = i3c_master_rstdaa_locked(master, I3C_BROADCAST_ADDR);
ret = master->ops->do_daa(master);
}
// ...
which is what fixed the communication with the I3C devices I used in my testing, in resume case.
If I remove the i3c_master_do_daa_ext() call from renesas_i3c_resume() then the I3C devices are not working anymore after resume on my setup.
Also, the i3c_master_do_daa_ext() call in i3c_hci_resume_common() remains unchanged [2] in series [1].
So, could you please let me know if I misunderstood your comment and if there is anything that should be done for this patch?
[1] https://lore.kernel.org/all/20260512121732.406009-7-adrian.hunter@xxxxxxxxx/
[2] https://elixir.bootlin.com/linux/v7.1-rc4/source/drivers/i3c/master/mipi-i3c-hci/core.c#L848
--
Thank you,
Claudiu