[PATCH 1/3] clk: renesas: rzv2h: Add missing of_genpd_del_provider() call
From: Ovidiu Panait
Date: Wed Sep 16 2026 - 07:45:07 EST
Sashiko reported that the RZ/V2H CPG driver registers the PM domain
provider, but doesn't remove it on probe failure, leaving a stale
provider behind.
Add the missing of_genpd_del_provider() call on the probe error path.
Link: https://sashiko.dev/#/patchset/20260902104939.25522-1-ovidiu.panait.rb%40renesas.com
Fixes: dd22e5621749 ("clk: renesas: Add family-specific clock driver for RZ/V2H(P)")
Signed-off-by: Ovidiu Panait <ovidiu.panait.rb@xxxxxxxxxxx>
---
drivers/clk/renesas/rzv2h-cpg.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 63f13fe4e4b0..827e274ba744 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -1512,7 +1512,10 @@ static void rzv2h_cpg_detach_dev(struct generic_pm_domain *unused, struct device
static void rzv2h_cpg_genpd_remove_simple(void *data)
{
- pm_genpd_remove(data);
+ struct rzv2h_cpg_pd *pd = data;
+
+ of_genpd_del_provider(pd->priv->dev->of_node);
+ pm_genpd_remove(&pd->genpd);
}
static int __init rzv2h_cpg_add_pm_domains(struct rzv2h_cpg_priv *priv)
@@ -1535,11 +1538,13 @@ static int __init rzv2h_cpg_add_pm_domains(struct rzv2h_cpg_priv *priv)
if (ret)
return ret;
- ret = devm_add_action_or_reset(dev, rzv2h_cpg_genpd_remove_simple, &pd->genpd);
- if (ret)
+ ret = of_genpd_add_provider_simple(np, &pd->genpd);
+ if (ret) {
+ pm_genpd_remove(&pd->genpd);
return ret;
+ }
- return of_genpd_add_provider_simple(np, &pd->genpd);
+ return devm_add_action_or_reset(dev, rzv2h_cpg_genpd_remove_simple, pd);
}
static int __init rzv2h_cpg_probe(struct platform_device *pdev)
--
2.34.1