[PATCH 3/3] clk: renesas: cpg-mssr: Add missing of_genpd_del_provider() call

From: Ovidiu Panait

Date: Wed Sep 16 2026 - 07:52:06 EST


The CPG/MSSR 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.

Fixes: 6197aa65c490 ("clk: renesas: cpg-mssr: Add support for reset control")
Signed-off-by: Ovidiu Panait <ovidiu.panait.rb@xxxxxxxxxxx>
---
drivers/clk/renesas/renesas-cpg-mssr.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
index f2feac1cc74f..73a705cc7924 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.c
+++ b/drivers/clk/renesas/renesas-cpg-mssr.c
@@ -672,7 +672,10 @@ void cpg_mssr_detach_dev(struct generic_pm_domain *unused, struct device *dev)

static void cpg_mssr_genpd_remove(void *data)
{
- pm_genpd_remove(data);
+ struct device_node *np = data;
+
+ of_genpd_del_provider(np);
+ pm_genpd_remove(&cpg_mssr_clk_domain->genpd);
}

static int __init cpg_mssr_add_clk_domain(struct device *dev,
@@ -702,13 +705,15 @@ static int __init cpg_mssr_add_clk_domain(struct device *dev,
if (ret)
return ret;

- ret = devm_add_action_or_reset(dev, cpg_mssr_genpd_remove, genpd);
- if (ret)
- return ret;
-
cpg_mssr_clk_domain = pd;

- return of_genpd_add_provider_simple(np, genpd);
+ ret = of_genpd_add_provider_simple(np, genpd);
+ if (ret) {
+ pm_genpd_remove(genpd);
+ return ret;
+ }
+
+ return devm_add_action_or_reset(dev, cpg_mssr_genpd_remove, np);
}

#ifdef CONFIG_RESET_CONTROLLER
--
2.34.1