soc: qcom: rpmpd: Add parent PD support
authorKonrad Dybcio <konrad.dybcio@linaro.org>
Mon, 13 Mar 2023 20:00:06 +0000 (21:00 +0100)
committerBjorn Andersson <andersson@kernel.org>
Wed, 15 Mar 2023 22:40:27 +0000 (15:40 -0700)
In some cases (like with the GPU core clock on GMU-less SoCs) it's
required that we scale more than one voltage domain. This can be achieved
by linking them in a parent-child relationship. Add support for specifying
a parent PD, similarly to what has been done in the RPMhPD driver.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230313-topic-rpmpd-v3-8-06a4f448ff90@linaro.org
drivers/soc/qcom/rpmpd.c

index 946630d82b3d739eafbab51177f91e7fb929606f..2027c820caa7c356041a5d1705b1998d73b13adf 100644 (file)
@@ -48,6 +48,7 @@ struct rpmpd_req {
 
 struct rpmpd {
        struct generic_pm_domain pd;
+       struct generic_pm_domain *parent;
        struct rpmpd *peer;
        const bool active_only;
        unsigned int corner;
@@ -969,6 +970,15 @@ static int rpmpd_probe(struct platform_device *pdev)
                data->domains[i] = &rpmpds[i]->pd;
        }
 
+       /* Add subdomains */
+       for (i = 0; i < num; i++) {
+               if (!rpmpds[i])
+                       continue;
+
+               if (rpmpds[i]->parent)
+                       pm_genpd_add_subdomain(rpmpds[i]->parent, &rpmpds[i]->pd);
+       }
+
        return of_genpd_add_provider_onecell(pdev->dev.of_node, data);
 }