[PATCH v5 00/17] i3c: renesas: Suspend to RAM with power loss and runtime PM

Claudiu Beznea posted 17 patches 1 week, 5 days ago
drivers/i3c/master/renesas-i3c.c | 375 +++++++++++++++++++++----------
1 file changed, 261 insertions(+), 114 deletions(-)
[PATCH v5 00/17] i3c: renesas: Suspend to RAM with power loss and runtime PM
Posted by Claudiu Beznea 1 week, 5 days ago
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Hi,

This series adjusts the suspend to RAM code to handle cases where power
to the connected devices is lost during suspend to RAM. The fixes
included in this series are required for that support.

Along with suspend to RAM support, runtime PM support is also added.
Cleanup patches were included to prepare for clean runtime PM support.

Thank you,
Claudiu

Changes in v5:
- in patch 1 introduced renesas_i3c_irqs_mask_and_clear_locked()
  similar to what was present in v4 in patch
  "i3c: renesas: Add runtime PM support" but without locking; use the
  same function to mask all the interrupts and cleanup the status
  flag in case interrupts are triggered after the transfer completion
  timed out
- introduce patch "i3c: renesas: Fix out-of-bounds access for newdevs mask"
  to avoid failures when there are no I3C devices connected on the
  bus at probe
- patch "i3c: renesas: Perform Dynamic Address Assignment on resume"
  was restored to the v1 variant; kept it simple to fix the
  suspend/resume for the moment

Changes in v4:
- dropped patch "i3c: renesas: Do not attach devices if xfer failed"
- fixed the swap in renesas_i3c_group_devs_in_slots() for i3c->addr[]
  renesas_i3c_irqs_mask_and_clear();
- in patch 16/16 renamed renesas_i3c_abort_xfer() from v3 to
	
Changes in v3:
- re-based on top of series [1] to be able to use
  i3c_master_reattach_i3c_dev_locked()
- used i3c_master_reattach_i3c_dev_locked() on patch
  "i3c: renesas: Perform Dynamic Address Assignment on resume" along with
  grouping the I2C and I3C devices in the driver slot
- collected tags

Changes in v2:
- dropped patch "i3c: renesas: Use the divider 128"
- adjusted the patches title and description where requested in the
  review process
- adjusted the DAA procedure after resume to still properly re-configure
  the controller in case the bus was full before a suspend
- added patch "i3c: renesas: Do not attach devices if xfer failed"
- collected tags

Claudiu Beznea (17):
  i3c: renesas: Check that the transfer is valid before accessing it
  i3c: renesas: Restore STDBR and EXTBR registers on resume
  i3c: renesas: Follow the reset deassert order used in probe
  i3c: renesas: Reconfigure the DATBAS register on re-attach
  i3c: renesas: Reset the controller on resume
  i3c: renesas: Perform Dynamic Address Assignment on resume
  i3c: renesas: Clean DATBAS register on detach
  i3c: renesas: Fix out-of-bounds access for newdevs mask
  i3c: renesas: Use reset_control_bulk_{assert, deassert}()
  i3c: renesas: Return immediately if there is no transfer
  i3c: renesas: Follow a unified pattern for transfer and command
    initialization
  i3c: renesas: Drop the explicit memset() call
  i3c: renesas: Update HW registers after SW computations are done
  i3c: renesas: Organize structures to avoid unnecessary padding
  i3c: renesas: Use the "dev_name:irq_name" format for the interrupt
    name
  i3c: renesas: Drop unnecessary tab
  i3c: renesas: Add runtime PM support

 drivers/i3c/master/renesas-i3c.c | 375 +++++++++++++++++++++----------
 1 file changed, 261 insertions(+), 114 deletions(-)

-- 
2.43.0
Re: [PATCH v5 00/17] i3c: renesas: Suspend to RAM with power loss and runtime PM
Posted by Alexandre Belloni 5 days, 3 hours ago
On Mon, 13 Jul 2026 16:05:28 +0300, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Hi,
> 
> This series adjusts the suspend to RAM code to handle cases where power
> to the connected devices is lost during suspend to RAM. The fixes
> included in this series are required for that support.
> 
> [...]

Applied, thanks!

[01/17] i3c: renesas: Check that the transfer is valid before accessing it
        https://git.kernel.org/i3c/c/1035bddb16e4
[02/17] i3c: renesas: Restore STDBR and EXTBR registers on resume
        https://git.kernel.org/i3c/c/c348fb87708e
[03/17] i3c: renesas: Follow the reset deassert order used in probe
        https://git.kernel.org/i3c/c/dfc95b9e78bc
[04/17] i3c: renesas: Reconfigure the DATBAS register on re-attach
        https://git.kernel.org/i3c/c/55316fb0ea3b
[05/17] i3c: renesas: Reset the controller on resume
        https://git.kernel.org/i3c/c/49ed0b2a3c63
[06/17] i3c: renesas: Perform Dynamic Address Assignment on resume
        https://git.kernel.org/i3c/c/afe7fbb3f652
[07/17] i3c: renesas: Clean DATBAS register on detach
        https://git.kernel.org/i3c/c/86f65337c636
[08/17] i3c: renesas: Fix out-of-bounds access for newdevs mask
        https://git.kernel.org/i3c/c/f7d9e0bee840
[09/17] i3c: renesas: Use reset_control_bulk_{assert, deassert}()
        https://git.kernel.org/i3c/c/12306f6710ae
[10/17] i3c: renesas: Return immediately if there is no transfer
        https://git.kernel.org/i3c/c/3b3a1f1778e8
[11/17] i3c: renesas: Follow a unified pattern for transfer and command initialization
        https://git.kernel.org/i3c/c/436c6afd8d5d
[12/17] i3c: renesas: Drop the explicit memset() call
        https://git.kernel.org/i3c/c/84dc0f87a62c
[13/17] i3c: renesas: Update HW registers after SW computations are done
        https://git.kernel.org/i3c/c/1a22e87cf3b9
[14/17] i3c: renesas: Organize structures to avoid unnecessary padding
        https://git.kernel.org/i3c/c/a0957ae127f6
[15/17] i3c: renesas: Use the "dev_name:irq_name" format for the interrupt name
        https://git.kernel.org/i3c/c/9d1730ad7888
[16/17] i3c: renesas: Drop unnecessary tab
        https://git.kernel.org/i3c/c/070d0ef61c08
[17/17] i3c: renesas: Add runtime PM support
        https://git.kernel.org/i3c/c/4995ae05e8e1

Best regards,
Re: [PATCH v5 00/17] i3c: renesas: Suspend to RAM with power loss and runtime PM
Posted by Tommaso Merciai 1 week, 5 days ago
Hi Claudiu,
Thanks for your patch.

On Mon, Jul 13, 2026 at 04:05:28PM +0300, Claudiu Beznea wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Hi,
> 
> This series adjusts the suspend to RAM code to handle cases where power
> to the connected devices is lost during suspend to RAM. The fixes
> included in this series are required for that support.
> 
> Along with suspend to RAM support, runtime PM support is also added.
> Cleanup patches were included to prepare for clean runtime PM support.
> 
> Thank you,
> Claudiu
> 
> Changes in v5:
> - in patch 1 introduced renesas_i3c_irqs_mask_and_clear_locked()
>   similar to what was present in v4 in patch
>   "i3c: renesas: Add runtime PM support" but without locking; use the
>   same function to mask all the interrupts and cleanup the status
>   flag in case interrupts are triggered after the transfer completion
>   timed out
> - introduce patch "i3c: renesas: Fix out-of-bounds access for newdevs mask"
>   to avoid failures when there are no I3C devices connected on the
>   bus at probe
> - patch "i3c: renesas: Perform Dynamic Address Assignment on resume"
>   was restored to the v1 variant; kept it simple to fix the
>   suspend/resume for the moment

Tested on RZ/G3E SMARC CARRIER II + RZ SMARC BREAKOUT board with one
P3T1085UK-ARD board connected.

Tested-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>


Kind Regards,
Tommaso


> 
> Changes in v4:
> - dropped patch "i3c: renesas: Do not attach devices if xfer failed"
> - fixed the swap in renesas_i3c_group_devs_in_slots() for i3c->addr[]
>   renesas_i3c_irqs_mask_and_clear();
> - in patch 16/16 renamed renesas_i3c_abort_xfer() from v3 to
> 	
> Changes in v3:
> - re-based on top of series [1] to be able to use
>   i3c_master_reattach_i3c_dev_locked()
> - used i3c_master_reattach_i3c_dev_locked() on patch
>   "i3c: renesas: Perform Dynamic Address Assignment on resume" along with
>   grouping the I2C and I3C devices in the driver slot
> - collected tags
> 
> Changes in v2:
> - dropped patch "i3c: renesas: Use the divider 128"
> - adjusted the patches title and description where requested in the
>   review process
> - adjusted the DAA procedure after resume to still properly re-configure
>   the controller in case the bus was full before a suspend
> - added patch "i3c: renesas: Do not attach devices if xfer failed"
> - collected tags
> 
> Claudiu Beznea (17):
>   i3c: renesas: Check that the transfer is valid before accessing it
>   i3c: renesas: Restore STDBR and EXTBR registers on resume
>   i3c: renesas: Follow the reset deassert order used in probe
>   i3c: renesas: Reconfigure the DATBAS register on re-attach
>   i3c: renesas: Reset the controller on resume
>   i3c: renesas: Perform Dynamic Address Assignment on resume
>   i3c: renesas: Clean DATBAS register on detach
>   i3c: renesas: Fix out-of-bounds access for newdevs mask
>   i3c: renesas: Use reset_control_bulk_{assert, deassert}()
>   i3c: renesas: Return immediately if there is no transfer
>   i3c: renesas: Follow a unified pattern for transfer and command
>     initialization
>   i3c: renesas: Drop the explicit memset() call
>   i3c: renesas: Update HW registers after SW computations are done
>   i3c: renesas: Organize structures to avoid unnecessary padding
>   i3c: renesas: Use the "dev_name:irq_name" format for the interrupt
>     name
>   i3c: renesas: Drop unnecessary tab
>   i3c: renesas: Add runtime PM support
> 
>  drivers/i3c/master/renesas-i3c.c | 375 +++++++++++++++++++++----------
>  1 file changed, 261 insertions(+), 114 deletions(-)
> 
> -- 
> 2.43.0
>