xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/power/qcom,rpmpd.yaml (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*4882a593Smuzhiyun%YAML 1.2
3*4882a593Smuzhiyun---
4*4882a593Smuzhiyun$id: http://devicetree.org/schemas/power/qcom,rpmpd.yaml#
5*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml#
6*4882a593Smuzhiyun
7*4882a593Smuzhiyuntitle: Qualcomm RPM/RPMh Power domains
8*4882a593Smuzhiyun
9*4882a593Smuzhiyunmaintainers:
10*4882a593Smuzhiyun  - Rajendra Nayak <rnayak@codeaurora.org>
11*4882a593Smuzhiyun
12*4882a593Smuzhiyundescription:
13*4882a593Smuzhiyun  For RPM/RPMh Power domains, we communicate a performance state to RPM/RPMh
14*4882a593Smuzhiyun  which then translates it into a corresponding voltage on a rail.
15*4882a593Smuzhiyun
16*4882a593Smuzhiyunproperties:
17*4882a593Smuzhiyun  compatible:
18*4882a593Smuzhiyun    enum:
19*4882a593Smuzhiyun      - qcom,msm8976-rpmpd
20*4882a593Smuzhiyun      - qcom,msm8996-rpmpd
21*4882a593Smuzhiyun      - qcom,msm8998-rpmpd
22*4882a593Smuzhiyun      - qcom,qcs404-rpmpd
23*4882a593Smuzhiyun      - qcom,sc7180-rpmhpd
24*4882a593Smuzhiyun      - qcom,sdm845-rpmhpd
25*4882a593Smuzhiyun      - qcom,sm8150-rpmhpd
26*4882a593Smuzhiyun      - qcom,sm8250-rpmhpd
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun  '#power-domain-cells':
29*4882a593Smuzhiyun    const: 1
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun  operating-points-v2: true
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun  opp-table:
34*4882a593Smuzhiyun    type: object
35*4882a593Smuzhiyun
36*4882a593Smuzhiyunrequired:
37*4882a593Smuzhiyun  - compatible
38*4882a593Smuzhiyun  - '#power-domain-cells'
39*4882a593Smuzhiyun  - operating-points-v2
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunadditionalProperties: false
42*4882a593Smuzhiyun
43*4882a593Smuzhiyunexamples:
44*4882a593Smuzhiyun  - |
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun    // Example 1 (rpmh power domain controller and OPP table):
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun    #include <dt-bindings/power/qcom-rpmpd.h>
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun    rpmhpd: power-controller {
51*4882a593Smuzhiyun      compatible = "qcom,sdm845-rpmhpd";
52*4882a593Smuzhiyun      #power-domain-cells = <1>;
53*4882a593Smuzhiyun      operating-points-v2 = <&rpmhpd_opp_table>;
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun      rpmhpd_opp_table: opp-table {
56*4882a593Smuzhiyun        compatible = "operating-points-v2";
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun        rpmhpd_opp_ret: opp1 {
59*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_RETENTION>;
60*4882a593Smuzhiyun        };
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun        rpmhpd_opp_min_svs: opp2 {
63*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_MIN_SVS>;
64*4882a593Smuzhiyun        };
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun        rpmhpd_opp_low_svs: opp3 {
67*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
68*4882a593Smuzhiyun        };
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun        rpmhpd_opp_svs: opp4 {
71*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
72*4882a593Smuzhiyun        };
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun        rpmhpd_opp_svs_l1: opp5 {
75*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
76*4882a593Smuzhiyun        };
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun        rpmhpd_opp_nom: opp6 {
79*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
80*4882a593Smuzhiyun        };
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun        rpmhpd_opp_nom_l1: opp7 {
83*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>;
84*4882a593Smuzhiyun        };
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun        rpmhpd_opp_nom_l2: opp8 {
87*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_NOM_L2>;
88*4882a593Smuzhiyun        };
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun        rpmhpd_opp_turbo: opp9 {
91*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_TURBO>;
92*4882a593Smuzhiyun        };
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun        rpmhpd_opp_turbo_l1: opp10 {
95*4882a593Smuzhiyun          opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>;
96*4882a593Smuzhiyun        };
97*4882a593Smuzhiyun      };
98*4882a593Smuzhiyun    };
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun  - |
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun    // Example 2 (rpm power domain controller and OPP table):
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun    rpmpd: power-controller {
105*4882a593Smuzhiyun      compatible = "qcom,msm8996-rpmpd";
106*4882a593Smuzhiyun      #power-domain-cells = <1>;
107*4882a593Smuzhiyun      operating-points-v2 = <&rpmpd_opp_table>;
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun      rpmpd_opp_table: opp-table {
110*4882a593Smuzhiyun        compatible = "operating-points-v2";
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun        rpmpd_opp_low: opp1 {
113*4882a593Smuzhiyun          opp-level = <1>;
114*4882a593Smuzhiyun        };
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun        rpmpd_opp_ret: opp2 {
117*4882a593Smuzhiyun          opp-level = <2>;
118*4882a593Smuzhiyun        };
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun        rpmpd_opp_svs: opp3 {
121*4882a593Smuzhiyun          opp-level = <3>;
122*4882a593Smuzhiyun        };
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun        rpmpd_opp_normal: opp4 {
125*4882a593Smuzhiyun          opp-level = <4>;
126*4882a593Smuzhiyun        };
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun        rpmpd_opp_high: opp5 {
129*4882a593Smuzhiyun          opp-level = <5>;
130*4882a593Smuzhiyun        };
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun        rpmpd_opp_turbo: opp6 {
133*4882a593Smuzhiyun          opp-level = <6>;
134*4882a593Smuzhiyun        };
135*4882a593Smuzhiyun      };
136*4882a593Smuzhiyun    };
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun  - |
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun    // Example 3 (Client/Consumer device using OPP table):
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun    leaky-device0@12350000 {
143*4882a593Smuzhiyun      compatible = "foo,i-leak-current";
144*4882a593Smuzhiyun      reg = <0x12350000 0x1000>;
145*4882a593Smuzhiyun      power-domains = <&rpmhpd 0>;
146*4882a593Smuzhiyun      operating-points-v2 = <&leaky_opp_table>;
147*4882a593Smuzhiyun    };
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun    leaky_opp_table: opp-table {
150*4882a593Smuzhiyun      compatible = "operating-points-v2";
151*4882a593Smuzhiyun      opp1 {
152*4882a593Smuzhiyun        opp-hz = /bits/ 64 <144000>;
153*4882a593Smuzhiyun        required-opps = <&rpmhpd_opp_low>;
154*4882a593Smuzhiyun      };
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun      opp2 {
157*4882a593Smuzhiyun        opp-hz = /bits/ 64 <400000>;
158*4882a593Smuzhiyun        required-opps = <&rpmhpd_opp_ret>;
159*4882a593Smuzhiyun      };
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun      opp3 {
162*4882a593Smuzhiyun        opp-hz = /bits/ 64 <20000000>;
163*4882a593Smuzhiyun        required-opps = <&rpmpd_opp_svs>;
164*4882a593Smuzhiyun      };
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun      opp4 {
167*4882a593Smuzhiyun        opp-hz = /bits/ 64 <25000000>;
168*4882a593Smuzhiyun        required-opps = <&rpmpd_opp_normal>;
169*4882a593Smuzhiyun      };
170*4882a593Smuzhiyun    };
171*4882a593Smuzhiyun...
172