From: Kevin Hilman (TI) Date: Mon, 20 Apr 2026 23:51:19 +0000 (-0700) Subject: pmdomain: arm_scmi: add support for domain hierarchies X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fba9c703c18459e936c365442667c08ca40dadcb;p=thirdparty%2Fkernel%2Flinux.git pmdomain: arm_scmi: add support for domain hierarchies After primary SCMI pmdomain is created, use new of_genpd helper which checks for child domain mappings defined in power-domains-child-ids. Also remove any child domain mappings when SCMI domain is removed. Signed-off-by: Kevin Hilman (TI) Signed-off-by: Ulf Hansson --- diff --git a/drivers/pmdomain/arm/scmi_pm_domain.c b/drivers/pmdomain/arm/scmi_pm_domain.c index 5454faed7d5d4..3d73aef21d2f9 100644 --- a/drivers/pmdomain/arm/scmi_pm_domain.c +++ b/drivers/pmdomain/arm/scmi_pm_domain.c @@ -113,6 +113,15 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev) goto err_rm_genpds; dev_set_drvdata(dev, scmi_pd_data); + + /* + * Parse (optional) power-domains-child-ids property to establish + * parent-child relationships. + */ + ret = of_genpd_add_child_ids(np, scmi_pd_data); + if (ret < 0) + dev_err(dev, "Failed to add child domain hierarchy: %d\n", ret); + dev_info(dev, "Initialized %d power domains", num_domains); return 0; @@ -130,9 +139,13 @@ static void scmi_pm_domain_remove(struct scmi_device *sdev) struct device *dev = &sdev->dev; struct device_node *np = dev->of_node; + scmi_pd_data = dev_get_drvdata(dev); + + /* Remove any parent-child relationships established at probe time */ + of_genpd_remove_child_ids(np, scmi_pd_data); + of_genpd_del_provider(np); - scmi_pd_data = dev_get_drvdata(dev); for (i = 0; i < scmi_pd_data->num_domains; i++) { if (!scmi_pd_data->domains[i]) continue;