[PATCH] clk: renesas: rzg2l-cpg: Skip re-initializing MSTOPs and critical resets for s2idle
From: Claudiu Beznea
Date: Mon Oct 19 2026 - 08:26:24 EST
From: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx>
When the system suspends to s2idle, any of the IP blocks may be in the
wakeup path. For a device in the wakeup path, the generic PM domain (genpd)
does not disable/enable its clocks across suspend/resume. Re-initializing
the MSTOP bits for such a device leads to synchronous aborts when its
registers are accessed for the first time after resume.
In a suspend mode that is not controlled by firmware, power to the SoC is
not lost, so the MSTOP and critical reset state is retained and does not
need re-initialization in the first place. Skip it when
pm_suspend_via_firmware() reports such a mode.
Fixes: 5cd33db56956 ("clk: renesas: rzg2l: Add support for MSTOP in clock enable/disable API")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx>
---
drivers/clk/renesas/rzg2l-cpg.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/clk/renesas/rzg2l-cpg.c b/drivers/clk/renesas/rzg2l-cpg.c
index f6293c968bcf..3d2281456036 100644
--- a/drivers/clk/renesas/rzg2l-cpg.c
+++ b/drivers/clk/renesas/rzg2l-cpg.c
@@ -31,6 +31,7 @@
#include <linux/reset-controller.h>
#include <linux/slab.h>
#include <linux/string_choices.h>
+#include <linux/suspend.h>
#include <linux/units.h>
#include <dt-bindings/clock/renesas-cpg-mssr.h>
@@ -2697,6 +2698,9 @@ static int rzg2l_cpg_resume(struct device *dev)
struct rzg2l_cpg_priv *priv = dev_get_drvdata(dev);
int ret;
+ if (!pm_suspend_via_firmware())
+ return 0;
+
ret = rzg2l_cpg_deassert_crit_resets(&priv->rcdev, priv->info);
if (ret)
return ret;
--
2.43.0