Linux-Rockchip Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/4] Small fixes and improvement for Rockchip pm-domains driver
@ 2026-09-19  0:35 Shawn Lin
  2026-09-19  0:35 ` [PATCH v2 1/4] pmdomain: rockchip: propagate subdomain add errors Shawn Lin
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Shawn Lin @ 2026-09-19  0:35 UTC (permalink / raw)
  To: Ulf Hansson, Heiko Stuebner
  Cc: Sebastian Reichel, linux-pm, linux-rockchip, Shawn Lin


The first 3 patches are for fixing. And the last one is for
improvement.


Changes in v2:
- switch to use devm_kzalloc()
- add Sebastian's tag

Shawn Lin (4):
  pmdomain: rockchip: propagate subdomain add errors
  pmdomain: rockchip: fix clock leak on domain probe failure
  pmdomain: rockchip: don't ignore clock lookup errors on attach
  pmdomain: rockchip: drop duplicated errno from supply failure message

 drivers/pmdomain/rockchip/pm-domains.c | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

-- 
2.7.4


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 1/4] pmdomain: rockchip: propagate subdomain add errors
  2026-09-19  0:35 [PATCH v2 0/4] Small fixes and improvement for Rockchip pm-domains driver Shawn Lin
@ 2026-09-19  0:35 ` Shawn Lin
  2026-09-19  0:35 ` [PATCH v2 2/4] pmdomain: rockchip: fix clock leak on domain probe failure Shawn Lin
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Shawn Lin @ 2026-09-19  0:35 UTC (permalink / raw)
  To: Ulf Hansson, Heiko Stuebner
  Cc: Sebastian Reichel, linux-pm, linux-rockchip, Shawn Lin

rockchip_pm_add_subdomain() ignored the return value of its recursive
call, so a failure deeper in the hierarchy was silently dropped and
probe still succeeded with an incomplete domain tree.

Fixes: 6be05b5ec161 ("soc: rockchip: power-domain: add support for sub-power domains")
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---

Changes in v2: None

 drivers/pmdomain/rockchip/pm-domains.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c
index ba66ae7..068dd4b3 100644
--- a/drivers/pmdomain/rockchip/pm-domains.c
+++ b/drivers/pmdomain/rockchip/pm-domains.c
@@ -1018,7 +1018,9 @@ static int rockchip_pm_add_subdomain(struct rockchip_pmu *pmu,
 				parent_domain->name, child_domain->name);
 		}
 
-		rockchip_pm_add_subdomain(pmu, np);
+		error = rockchip_pm_add_subdomain(pmu, np);
+		if (error)
+			return error;
 	}
 
 	return 0;
-- 
2.7.4


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 2/4] pmdomain: rockchip: fix clock leak on domain probe failure
  2026-09-19  0:35 [PATCH v2 0/4] Small fixes and improvement for Rockchip pm-domains driver Shawn Lin
  2026-09-19  0:35 ` [PATCH v2 1/4] pmdomain: rockchip: propagate subdomain add errors Shawn Lin
@ 2026-09-19  0:35 ` Shawn Lin
  2026-09-19 17:03   ` Diederik de Haas
  2026-09-19  0:35 ` [PATCH v2 3/4] pmdomain: rockchip: don't ignore clock lookup errors on attach Shawn Lin
  2026-09-19  0:35 ` [PATCH v2 4/4] pmdomain: rockchip: drop duplicated errno from supply failure message Shawn Lin
  3 siblings, 1 reply; 6+ messages in thread
From: Shawn Lin @ 2026-09-19  0:35 UTC (permalink / raw)
  To: Ulf Hansson, Heiko Stuebner
  Cc: Sebastian Reichel, linux-pm, linux-rockchip, Shawn Lin

When of_clk_get() failed in the middle of the loop, the references of
the clocks acquired so far were leaked instead of being released by
the error path.

Also switch the clks array allocation from devm_kcalloc() to
devm_kzalloc() so that clk_bulk_put() cannot run over uninitialized
entries.

Fixes: d909072d0521 ("soc: rockchip: power-domain: use clk_bulk APIs")
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---

Changes in v2:
- switch to use devm_kzalloc()
- add Sebastian's tag

 drivers/pmdomain/rockchip/pm-domains.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c
index 068dd4b3..43fdb7f 100644
--- a/drivers/pmdomain/rockchip/pm-domains.c
+++ b/drivers/pmdomain/rockchip/pm-domains.c
@@ -825,7 +825,7 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu,
 
 	pd->num_clks = of_clk_get_parent_count(node);
 	if (pd->num_clks > 0) {
-		pd->clks = devm_kcalloc(pmu->dev, pd->num_clks,
+		pd->clks = devm_kzalloc(pmu->dev, pd->num_clks,
 					sizeof(*pd->clks), GFP_KERNEL);
 		if (!pd->clks)
 			return -ENOMEM;
@@ -842,7 +842,7 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu,
 			dev_err(pmu->dev,
 				"%pOFn: failed to get clk at index %d: %d\n",
 				node, i, error);
-			return error;
+			goto err_put_clocks;
 		}
 	}
 
-- 
2.7.4


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 3/4] pmdomain: rockchip: don't ignore clock lookup errors on attach
  2026-09-19  0:35 [PATCH v2 0/4] Small fixes and improvement for Rockchip pm-domains driver Shawn Lin
  2026-09-19  0:35 ` [PATCH v2 1/4] pmdomain: rockchip: propagate subdomain add errors Shawn Lin
  2026-09-19  0:35 ` [PATCH v2 2/4] pmdomain: rockchip: fix clock leak on domain probe failure Shawn Lin
@ 2026-09-19  0:35 ` Shawn Lin
  2026-09-19  0:35 ` [PATCH v2 4/4] pmdomain: rockchip: drop duplicated errno from supply failure message Shawn Lin
  3 siblings, 0 replies; 6+ messages in thread
From: Shawn Lin @ 2026-09-19  0:35 UTC (permalink / raw)
  To: Ulf Hansson, Heiko Stuebner
  Cc: Sebastian Reichel, linux-pm, linux-rockchip, Shawn Lin

rockchip_pd_attach_dev() treated every of_clk_get() error as the end
of the clock list, so a clock that exists but is not available yet
(e.g. -EPROBE_DEFER) was silently skipped and the device ended up
without pm_clk management.  Only -ENOENT means there are no more
clocks.

Fixes: 7c696693a4f5 ("soc: rockchip: power-domain: Add power domain driver")
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---

Changes in v2: None

 drivers/pmdomain/rockchip/pm-domains.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c
index 43fdb7f..9917ebf 100644
--- a/drivers/pmdomain/rockchip/pm-domains.c
+++ b/drivers/pmdomain/rockchip/pm-domains.c
@@ -759,7 +759,19 @@ static int rockchip_pd_attach_dev(struct generic_pm_domain *genpd,
 	}
 
 	i = 0;
-	while ((clk = of_clk_get(dev->of_node, i++)) && !IS_ERR(clk)) {
+	while (1) {
+		clk = of_clk_get(dev->of_node, i++);
+		if (IS_ERR(clk)) {
+			error = PTR_ERR(clk);
+			if (error == -ENOENT)
+				break;
+
+			dev_err(dev, "failed to get clock %d: %d\n", i - 1,
+				error);
+			pm_clk_destroy(dev);
+			return error;
+		}
+
 		dev_dbg(dev, "adding clock '%pC' to list of PM clocks\n", clk);
 		error = pm_clk_add_clk(dev, clk);
 		if (error) {
-- 
2.7.4


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 4/4] pmdomain: rockchip: drop duplicated errno from supply failure message
  2026-09-19  0:35 [PATCH v2 0/4] Small fixes and improvement for Rockchip pm-domains driver Shawn Lin
                   ` (2 preceding siblings ...)
  2026-09-19  0:35 ` [PATCH v2 3/4] pmdomain: rockchip: don't ignore clock lookup errors on attach Shawn Lin
@ 2026-09-19  0:35 ` Shawn Lin
  3 siblings, 0 replies; 6+ messages in thread
From: Shawn Lin @ 2026-09-19  0:35 UTC (permalink / raw)
  To: Ulf Hansson, Heiko Stuebner
  Cc: Sebastian Reichel, linux-pm, linux-rockchip, Shawn Lin

dev_err_probe() already appends the error code.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---

Changes in v2: None

 drivers/pmdomain/rockchip/pm-domains.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c
index 9917ebf..1f236e1 100644
--- a/drivers/pmdomain/rockchip/pm-domains.c
+++ b/drivers/pmdomain/rockchip/pm-domains.c
@@ -721,7 +721,7 @@ static int rockchip_pd_power_on(struct generic_pm_domain *domain)
 	ret = rockchip_pd_regulator_enable(pd);
 	if (ret)
 		return dev_err_probe(pd->pmu->dev, ret,
-				     "Failed to enable supply: %d\n", ret);
+				     "Failed to enable supply\n");
 
 	ret = rockchip_pd_power(pd, true);
 	if (ret)
-- 
2.7.4


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 2/4] pmdomain: rockchip: fix clock leak on domain probe failure
  2026-09-19  0:35 ` [PATCH v2 2/4] pmdomain: rockchip: fix clock leak on domain probe failure Shawn Lin
@ 2026-09-19 17:03   ` Diederik de Haas
  0 siblings, 0 replies; 6+ messages in thread
From: Diederik de Haas @ 2026-09-19 17:03 UTC (permalink / raw)
  To: Shawn Lin, Ulf Hansson, Heiko Stuebner
  Cc: Sebastian Reichel, linux-pm, linux-rockchip

On Sat Sep 19, 2026 at 2:35 AM CEST, Shawn Lin wrote:
> When of_clk_get() failed in the middle of the loop, the references of
> the clocks acquired so far were leaked instead of being released by
> the error path.
>
> Also switch the clks array allocation from devm_kcalloc() to
> devm_kzalloc() so that clk_bulk_put() cannot run over uninitialized
> entries.
>
> Fixes: d909072d0521 ("soc: rockchip: power-domain: use clk_bulk APIs")
> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> ---
>
> Changes in v2:
> - switch to use devm_kzalloc()
> - add Sebastian's tag
>
>  drivers/pmdomain/rockchip/pm-domains.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c
> index 068dd4b3..43fdb7f 100644
> --- a/drivers/pmdomain/rockchip/pm-domains.c
> +++ b/drivers/pmdomain/rockchip/pm-domains.c
> @@ -825,7 +825,7 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu,
>  
>  	pd->num_clks = of_clk_get_parent_count(node);
>  	if (pd->num_clks > 0) {
> -		pd->clks = devm_kcalloc(pmu->dev, pd->num_clks,
> +		pd->clks = devm_kzalloc(pmu->dev, pd->num_clks,
>  					sizeof(*pd->clks), GFP_KERNEL);

/media/nvme/dev/debian/salsa/kernel-team/linux/drivers/pmdomain/rockchip/pm-domains.c: In function ‘rockchip_pm_add_one_domain’:
/media/nvme/dev/debian/salsa/kernel-team/linux/drivers/pmdomain/rockchip/pm-domains.c:840:28: error: too many arguments to function ‘devm_kzalloc’; expected 3, have 4
  840 |                 pd->clks = devm_kzalloc(pmu->dev, pd->num_clks,
      |                            ^~~~~~~~~~~~
In file included from /media/nvme/dev/debian/salsa/kernel-team/linux/include/linux/device.h:31,
                 from /media/nvme/dev/debian/salsa/kernel-team/linux/include/linux/platform_device.h:13,
                 from /media/nvme/dev/debian/salsa/kernel-team/linux/drivers/pmdomain/rockchip/pm-domains.c:13:
/media/nvme/dev/debian/salsa/kernel-team/linux/include/linux/device/devres.h:48:21: note: declared here
   48 | static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
      |                     ^~~~~~~~~~~~

Seems legit:
https://elixir.bootlin.com/linux/v7.3-rc3/source/include/linux/device/devres.h#L48

Cheers,
  Diederik

>  		if (!pd->clks)
>  			return -ENOMEM;
> @@ -842,7 +842,7 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu,
>  			dev_err(pmu->dev,
>  				"%pOFn: failed to get clk at index %d: %d\n",
>  				node, i, error);
> -			return error;
> +			goto err_put_clocks;
>  		}
>  	}
>  



_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-09-19 17:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-19  0:35 [PATCH v2 0/4] Small fixes and improvement for Rockchip pm-domains driver Shawn Lin
2026-09-19  0:35 ` [PATCH v2 1/4] pmdomain: rockchip: propagate subdomain add errors Shawn Lin
2026-09-19  0:35 ` [PATCH v2 2/4] pmdomain: rockchip: fix clock leak on domain probe failure Shawn Lin
2026-09-19 17:03   ` Diederik de Haas
2026-09-19  0:35 ` [PATCH v2 3/4] pmdomain: rockchip: don't ignore clock lookup errors on attach Shawn Lin
2026-09-19  0:35 ` [PATCH v2 4/4] pmdomain: rockchip: drop duplicated errno from supply failure message Shawn Lin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox