Re: [PATCH 07/17] i3c: renesas: Perform Dynamic Address Assignment on resume
Claudiu Beznea <[email protected]>
| Newsgroups | org.infradead.lists.linux-i3c,org.kernel.vger.linux-kernel,org.kernel.vger.linux-renesas-soc,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
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<[email protected]> >> >> 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. > Can you referhttps://lore.kernel.org/linux-i3c/20260512121732.406009-1- > [email protected]/T/#mafdc9631a2a18dfebfa5b5efcb8584d32bceba7f > > 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/[email protected]/ [2] https://elixir.bootlin.com/linux/v7.1-rc4/source/drivers/i3c/master/mipi-i3c-hci/core.c#L848 -- Thank you, Claudiu -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c