RE: [PATCH v2 0/2] reset: rzg2l-usbphy-ctrl: Add suspend to RAM support
From: Biju Das
Date: Sun Dec 07 2025 - 06:02:49 EST
Hi Claudiu,
> -----Original Message-----
> From: Claudiu Beznea <claudiu.beznea@xxxxxxxxx>
> Sent: 05 December 2025 10:00
> Subject: Re: [PATCH v2 0/2] reset: rzg2l-usbphy-ctrl: Add suspend to RAM support
>
> Hi, Biju,
>
> On 12/5/25 10:53, Biju Das wrote:
> >
> >
> > Hi Claudiu,
> >
> >> -----Original Message-----
> >> From: Claudiu Beznea <claudiu.beznea@xxxxxxxxx>
> >> Sent: 04 December 2025 18:26
> >> Subject: Re: [PATCH v2 0/2] reset: rzg2l-usbphy-ctrl: Add suspend to
> >> RAM support
> >>
> >> Hi, Philipp,
> >>
> >> Could you please let me know if there's anything I should do for this series?
> >
> > If rzg2l_usbphy_ctrl_suspend() fails, What is the probability that it
> > will suspend again without any issue
>
> How can I measure this?
>
> The idea with this code was the following: if any instruction of suspend fails, the suspend is
> aborted, thus code in rzg2l_usbphy_ctrl_suspend() is trying to restore the runtime state of the HW so
> that no runtime users of it to be affected. This is also how core suspend code is doing, e.g.
> suspend_devices_and_enter().
After rechecking, the cleanup() in the suspend code making usage count unbalanced.
Eg:
Suspend returns error with the following usage count incremented
static int rzg2l_usbphy_ctrl_suspend(struct device *dev)
{
reset_deassert:
+ reset_control_deassert(priv->rstc);
+rpm_resume:
+ pm_runtime_resume_and_get(dev);
+ return ret;
}
The suspend error code invokes device resume[1] and in that you are again calling
reset_control_deassert() and pm_runtime_resume_and_get() which makes the usage
count unbalanced forever.
So, looks like the current logic in the Add suspend to RAM support patch is wrong.
[1]
https://elixir.bootlin.com/linux/v6.18-rc7/source/kernel/power/suspend.c#L519
static int rzg2l_usbphy_ctrl_resume(struct device *dev)
+{
+ ret = pm_runtime_resume_and_get(dev);
+
+ rzg2l_usbphy_ctrl_init(priv);
+}
Cheers,
Biju