[PATCH RFC 11/16] clk: qcom: gdsc: Make GDSC parenting optional
From: Konrad Dybcio
Date: Wed Oct 14 2026 - 08:29:16 EST
From: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
Clock controller power-domain attachments currently become parents of all
top-level GDSCs exported by that controller. This conflates resources
needed to access or operate the controller with actual power-collapse
hierarchy.
Allow callers of gdsc_register() to suppress parents inferred from the
controller device and its attached domain list.
Assisted-by: LLM
Signed-off-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
---
drivers/clk/qcom/gdsc.c | 13 +++++++++----
drivers/clk/qcom/gdsc.h | 1 +
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c
index b99d70149af3..2d0803e1eb3b 100644
--- a/drivers/clk/qcom/gdsc.c
+++ b/drivers/clk/qcom/gdsc.c
@@ -587,9 +587,10 @@ static void gdsc_pm_subdomain_remove(struct gdsc_desc *desc, size_t num)
continue;
if (scs[i]->parent)
pm_genpd_remove_subdomain(scs[i]->parent, &scs[i]->pd);
- else if (!IS_ERR_OR_NULL(dev->pm_domain))
+ else if (!desc->no_external_parent &&
+ !IS_ERR_OR_NULL(dev->pm_domain))
pm_genpd_remove_subdomain(pd_to_genpd(dev->pm_domain), &scs[i]->pd);
- else if (desc->pd_list)
+ else if (!desc->no_external_parent && desc->pd_list)
gdsc_remove_subdomain_list(desc->pd_list, &scs[i]->pd);
}
}
@@ -654,13 +655,17 @@ int gdsc_register(struct gdsc_desc *desc,
/* Add subdomains */
for (i = 0; i < num; i++) {
+ ret = 0;
+
if (!scs[i])
continue;
+
if (scs[i]->parent)
ret = pm_genpd_add_subdomain(scs[i]->parent, &scs[i]->pd);
- else if (!IS_ERR_OR_NULL(dev->pm_domain))
+ else if (!desc->no_external_parent &&
+ !IS_ERR_OR_NULL(dev->pm_domain))
ret = pm_genpd_add_subdomain(pd_to_genpd(dev->pm_domain), &scs[i]->pd);
- else if (desc->pd_list)
+ else if (!desc->no_external_parent && desc->pd_list)
ret = gdsc_add_subdomain_list(desc->pd_list, &scs[i]->pd);
if (ret)
diff --git a/drivers/clk/qcom/gdsc.h b/drivers/clk/qcom/gdsc.h
index 2f9665b664e6..8275e266cfcc 100644
--- a/drivers/clk/qcom/gdsc.h
+++ b/drivers/clk/qcom/gdsc.h
@@ -86,6 +86,7 @@ struct gdsc_desc {
struct gdsc **scs;
size_t num;
struct dev_pm_domain_list *pd_list;
+ bool no_external_parent;
};
#ifdef CONFIG_QCOM_GDSC
--
2.56.0