]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ARM: dts: qcom: msm8974: Start using rpmpd for power domains
authorLuca Weiss <luca@lucaweiss.eu>
Sat, 21 Jun 2025 13:19:59 +0000 (15:19 +0200)
committerBjorn Andersson <andersson@kernel.org>
Mon, 19 Jan 2026 15:40:32 +0000 (09:40 -0600)
Due to historical reasons all msm8974 boards have used the CX power rail
as regulator instead of going through the power domain framework.

Since rpmpd has gained msm8974 support quite a bit ago, let's start
using it and replace all usages of pm8841_s2 (CX), pm8841_s4 (GFX) and
for the boards using pma8084 pma8084_s2 (CX), pma8084_s7 (GFX).

For reference, downstream is using GFX power rail as parent-supply for
mmcc's OXILI_GDSC GDSC which then is used for GPU, but nothing there is
modelled upstream.

Signed-off-by: Luca Weiss <luca@lucaweiss.eu>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250621-msm8974-rpmpd-switch-v1-4-0a2cb303c446@lucaweiss.eu
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
arch/arm/boot/dts/qcom/qcom-apq8074-dragonboard.dts
arch/arm/boot/dts/qcom/qcom-msm8974-lge-nexus5-hammerhead.dts
arch/arm/boot/dts/qcom/qcom-msm8974-samsung-hlte.dts
arch/arm/boot/dts/qcom/qcom-msm8974-sony-xperia-rhine.dtsi
arch/arm/boot/dts/qcom/qcom-msm8974.dtsi
arch/arm/boot/dts/qcom/qcom-msm8974pro-fairphone-fp2.dts
arch/arm/boot/dts/qcom/qcom-msm8974pro-htc-m8.dts
arch/arm/boot/dts/qcom/qcom-msm8974pro-oneplus-bacon.dts
arch/arm/boot/dts/qcom/qcom-msm8974pro-samsung-klte-common.dtsi
arch/arm/boot/dts/qcom/qcom-msm8974pro-sony-xperia-shinano-common.dtsi

index 34b0cf35fdac8b0bc34ffd27f70f900878a15ff7..d3ae6c6a6f83e2b77849eeeb0c348a8efd9464dd 100644 (file)
 };
 
 &remoteproc_adsp {
-       cx-supply = <&pm8841_s2>;
-
        firmware-name = "qcom/apq8074/adsp.mbn";
 
        status = "okay";
 };
 
 &remoteproc_mss {
-       cx-supply = <&pm8841_s2>;
        mss-supply = <&pm8841_s3>;
        mx-supply = <&pm8841_s1>;
        pll-supply = <&pm8941_l12>;
                        regulator-max-microvolt = <1050000>;
                };
 
-               pm8841_s2: s2 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
-
                pm8841_s3: s3 {
                        regulator-min-microvolt = <500000>;
                        regulator-max-microvolt = <1050000>;
                };
-
-               pm8841_s4: s4 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
        };
 
        regulators-1 {
index 8f4a1fda9276554d2d3daa606c1a2ecca19cc85c..e34d7b864e30990497d83b5ee464bf495007cfac 100644 (file)
 };
 
 &remoteproc_adsp {
-       cx-supply = <&pm8841_s2>;
        status = "okay";
 };
 
 &remoteproc_mss {
-       cx-supply = <&pm8841_s2>;
        mss-supply = <&pm8841_s3>;
        mx-supply = <&pm8841_s1>;
        pll-supply = <&pm8941_l12>;
                        regulator-max-microvolt = <1050000>;
                };
 
-               pm8841_s2: s2 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
-
                pm8841_s3: s3 {
                        regulator-min-microvolt = <1050000>;
                        regulator-max-microvolt = <1050000>;
                };
-
-               pm8841_s4: s4 {
-                       regulator-min-microvolt = <815000>;
-                       regulator-max-microvolt = <900000>;
-               };
        };
 
        regulators-1 {
index b7a1367d3470551de12af699ef150434dc0302b8..7f61f80761e1c0e055e5a5123097f9ce5dd30cc5 100644 (file)
 };
 
 &remoteproc_adsp {
-       cx-supply = <&pm8841_s2>;
        status = "okay";
 };
 
 &remoteproc_mss {
-       cx-supply = <&pm8841_s2>;
        mss-supply = <&pm8841_s3>;
        mx-supply = <&pm8841_s1>;
        pll-supply = <&pm8941_l12>;
                        regulator-max-microvolt = <1050000>;
                };
 
-               pm8841_s2: s2 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
-
                pm8841_s3: s3 {
                        regulator-min-microvolt = <1050000>;
                        regulator-max-microvolt = <1050000>;
                };
-
-               pm8841_s4: s4 {
-                       regulator-min-microvolt = <815000>;
-                       regulator-max-microvolt = <900000>;
-               };
        };
 
        regulators-1 {
index d7322fc6a09559fdbed1684388ac46024cfe63f3..96682d82b1c3169482854993fb7ad06d7fb14086 100644 (file)
 };
 
 &remoteproc_adsp {
-       cx-supply = <&pm8841_s2>;
        status = "okay";
 };
 
 &remoteproc_mss {
-       cx-supply = <&pm8841_s2>;
        mss-supply = <&pm8841_s3>;
        mx-supply = <&pm8841_s1>;
        pll-supply = <&pm8941_l12>;
                        regulator-max-microvolt = <1050000>;
                };
 
-               pm8841_s2: s2 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
-
                pm8841_s3: s3 {
                        regulator-min-microvolt = <500000>;
                        regulator-max-microvolt = <1050000>;
                };
-
-               pm8841_s4: s4 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
        };
 
        regulators-1 {
index 8459a840d9ffee9da2f9a4ad8fd5a1419a3eb5a7..2a82ddce94a28eb1b50fdaffd5ba5de86e165156 100644 (file)
@@ -8,6 +8,7 @@
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interconnect/qcom,msm8974.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/power/qcom-rpmpd.h>
 #include <dt-bindings/reset/qcom,gcc-msm8974.h>
 
 / {
                                        clocks = <&xo_board>;
                                        clock-names = "xo";
                                };
+
+                               rpmpd: power-controller {
+                                       compatible = "qcom,msm8974-rpmpd";
+                                       #power-domain-cells = <1>;
+                                       operating-points-v2 = <&rpmpd_opp_table>;
+
+                                       rpmpd_opp_table: opp-table {
+                                               compatible = "operating-points-v2";
+
+                                               rpmpd_opp_ret: opp1 {
+                                                       opp-level = <1>;
+                                               };
+
+                                               rpmpd_opp_svs_krait: opp2 {
+                                                       opp-level = <2>;
+                                               };
+
+                                               rpmpd_opp_svs_soc: opp3 {
+                                                       opp-level = <3>;
+                                               };
+
+                                               rpmpd_opp_nom: opp4 {
+                                                       opp-level = <4>;
+                                               };
+
+                                               rpmpd_opp_turbo: opp5 {
+                                                       opp-level = <5>;
+                                               };
+
+                                               rpmpd_opp_super_turbo: opp6 {
+                                                       opp-level = <6>;
+                                               };
+                                       };
+                               };
                        };
                };
        };
                                              <&wcnss_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
                        interrupt-names = "wdog", "fatal", "ready", "handover", "stop-ack";
 
+                       power-domains = <&rpmpd MSM8974_VDDCX>;
+                       power-domain-names = "cx";
+
                        qcom,smem-states = <&wcnss_smp2p_out 0>;
                        qcom,smem-state-names = "stop";
 
                        resets = <&gcc GCC_MSS_RESTART>;
                        reset-names = "mss_restart";
 
+                       power-domains = <&rpmpd MSM8974_VDDCX>;
+                       power-domain-names = "cx";
+
                        qcom,halt-regs = <&tcsr_mutex 0x1180 0x1200 0x1280>;
 
                        qcom,smem-states = <&modem_smp2p_out 0>;
                        clocks = <&xo_board>;
                        clock-names = "xo";
 
+                       power-domains = <&rpmpd MSM8974_VDDCX>;
+                       power-domain-names = "cx";
+
                        memory-region = <&adsp_region>;
 
                        qcom,smem-states = <&adsp_smp2p_out 0>;
index fe227fd3f908e219e20bffe3561390ca6568468e..a081aeadd1d4d9539d38588811be8ac5ba0b79a4 100644 (file)
        status = "okay";
 
        vddmx-supply = <&pm8841_s1>;
-       vddcx-supply = <&pm8841_s2>;
        vddpx-supply = <&pm8941_s3>;
 
        pinctrl-names = "default";
 
 &remoteproc_adsp {
        status = "okay";
-       cx-supply = <&pm8841_s2>;
 };
 
 &remoteproc_mss {
        status = "okay";
-       cx-supply = <&pm8841_s2>;
        mss-supply = <&pm8841_s3>;
        mx-supply = <&pm8841_s1>;
        pll-supply = <&pm8941_l12>;
                        regulator-max-microvolt = <1050000>;
                };
 
-               pm8841_s2: s2 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
-
                pm8841_s3: s3 {
                        regulator-min-microvolt = <1050000>;
                        regulator-max-microvolt = <1050000>;
index b896cc1ad6f7d4b3f8e70ad4460867b04519a6d9..402372834c53d6ef71a72156d1be7d30ff1feee5 100644 (file)
@@ -70,7 +70,6 @@
 
 &pronto {
        vddmx-supply = <&pm8841_s1>;
-       vddcx-supply = <&pm8841_s2>;
        vddpx-supply = <&pm8941_s3>;
 
        pinctrl-0 = <&wcnss_pin_a>;
                        regulator-max-microvolt = <1050000>;
                };
 
-               pm8841_s2: s2 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
-
                pm8841_s3: s3 {
                        regulator-min-microvolt = <1050000>;
                        regulator-max-microvolt = <1050000>;
                };
-
-               pm8841_s4: s4 {
-                       regulator-min-microvolt = <815000>;
-                       regulator-max-microvolt = <900000>;
-               };
        };
 
        regulators-1 {
index 88ff6535477bffefe475cc5fe927b3cc5d223084..258bbbecd92738247ac1aa22492bcb8e87e13385 100644 (file)
 
 &pronto {
        vddmx-supply = <&pm8841_s1>;
-       vddcx-supply = <&pm8841_s2>;
        vddpx-supply = <&pm8941_s3>;
 
        pinctrl-names = "default";
 };
 
 &remoteproc_adsp {
-       cx-supply = <&pm8841_s2>;
-
        status = "okay";
 };
 
                        regulator-max-microvolt = <1050000>;
                };
 
-               pm8841_s2: s2 {
-                       regulator-min-microvolt = <875000>;
-                       regulator-max-microvolt = <1050000>;
-                       regulator-always-on;
-               };
-
                pm8841_s3: s3 {
                        regulator-min-microvolt = <1050000>;
                        regulator-max-microvolt = <1050000>;
index d3959741d2ea9e2a3dace149034d42353fbe9828..56a1a25f3df38bf4a9ba5ea4ad9e8a2d1d1c0a95 100644 (file)
 
 &remoteproc_adsp {
        status = "okay";
-       cx-supply = <&pma8084_s2>;
 };
 
 &remoteproc_mss {
        status = "okay";
-       cx-supply = <&pma8084_s2>;
        mss-supply = <&pma8084_s6>;
        mx-supply = <&pma8084_s1>;
        pll-supply = <&pma8084_l12>;
                        regulator-always-on;
                };
 
-               pma8084_s2: s2 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
-
                pma8084_s3: s3 {
                        regulator-min-microvolt = <1300000>;
                        regulator-max-microvolt = <1300000>;
        };
 };
 
+&rpmpd {
+       compatible = "qcom,msm8974pro-pma8084-rpmpd";
+};
+
 &sdhc_1 {
        status = "okay";
 
index 6af7c71c715847f137ec2da41d70f679a8e1c04b..3d2de30b495e6e6176eb38b95ec67634fbcb29ca 100644 (file)
 };
 
 &remoteproc_adsp {
-       cx-supply = <&pm8841_s2>;
        status = "okay";
 };
 
 &remoteproc_mss {
-       cx-supply = <&pm8841_s2>;
        mss-supply = <&pm8841_s3>;
        mx-supply = <&pm8841_s1>;
        pll-supply = <&pm8941_l12>;
                        regulator-max-microvolt = <1050000>;
                };
 
-               pm8841_s2: s2 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
-
                pm8841_s3: s3 {
                        regulator-min-microvolt = <500000>;
                        regulator-max-microvolt = <1050000>;
                };
-
-               pm8841_s4: s4 {
-                       regulator-min-microvolt = <500000>;
-                       regulator-max-microvolt = <1050000>;
-               };
        };
 
        regulators-1 {