[PATCH 07/17] i3c: renesas: Perform Dynamic Address Assignment on resume

Claudiu Beznea claudiu.beznea at kernel.org
Sat May 23 03:26:09 PDT 2026



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 at bp.renesas.com>
>>
>> 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- 
> adrian.hunter at intel.com/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/20260512121732.406009-7-adrian.hunter@intel.com/
[2] 
https://elixir.bootlin.com/linux/v7.1-rc4/source/drivers/i3c/master/mipi-i3c-hci/core.c#L848

-- 
Thank you,
Claudiu




More information about the linux-i3c mailing list