xref: /openbmc/linux/Documentation/devicetree/bindings/opp/opp-v2-kryo-cpu.yaml (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1ec24d1d5SYassine Oudjana# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2ec24d1d5SYassine Oudjana%YAML 1.2
3ec24d1d5SYassine Oudjana---
4ec24d1d5SYassine Oudjana$id: http://devicetree.org/schemas/opp/opp-v2-kryo-cpu.yaml#
5ec24d1d5SYassine Oudjana$schema: http://devicetree.org/meta-schemas/core.yaml#
6ec24d1d5SYassine Oudjana
784e85359SKrzysztof Kozlowskititle: Qualcomm Technologies, Inc. NVMEM OPP
8ec24d1d5SYassine Oudjana
9ec24d1d5SYassine Oudjanamaintainers:
10ec24d1d5SYassine Oudjana  - Ilia Lin <ilia.lin@kernel.org>
11ec24d1d5SYassine Oudjana
12ec24d1d5SYassine OudjanaallOf:
13ec24d1d5SYassine Oudjana  - $ref: opp-v2-base.yaml#
14ec24d1d5SYassine Oudjana
15ec24d1d5SYassine Oudjanadescription: |
16ec24d1d5SYassine Oudjana  In certain Qualcomm Technologies, Inc. SoCs like APQ8096 and MSM8996,
17ec24d1d5SYassine Oudjana  the CPU frequencies subset and voltage value of each OPP varies based on
18ec24d1d5SYassine Oudjana  the silicon variant in use.
19ec24d1d5SYassine Oudjana  Qualcomm Technologies, Inc. Process Voltage Scaling Tables
203e1fac93SYassine Oudjana  defines the voltage and frequency value based on the speedbin blown in
213e1fac93SYassine Oudjana  the efuse combination.
223e1fac93SYassine Oudjana  The qcom-cpufreq-nvmem driver reads the efuse value from the SoC to provide
233e1fac93SYassine Oudjana  the OPP framework with required information (existing HW bitmap).
24ec24d1d5SYassine Oudjana  This is used to determine the voltage and frequency value for each OPP of
25ec24d1d5SYassine Oudjana  operating-points-v2 table when it is parsed by the OPP framework.
26ec24d1d5SYassine Oudjana
27ec24d1d5SYassine Oudjanaproperties:
28ec24d1d5SYassine Oudjana  compatible:
29ec24d1d5SYassine Oudjana    const: operating-points-v2-kryo-cpu
30ec24d1d5SYassine Oudjana
31ec24d1d5SYassine Oudjana  nvmem-cells:
32ec24d1d5SYassine Oudjana    description: |
33ec24d1d5SYassine Oudjana      A phandle pointing to a nvmem-cells node representing the
34ec24d1d5SYassine Oudjana      efuse registers that has information about the
35ec24d1d5SYassine Oudjana      speedbin that is used to select the right frequency/voltage
36ec24d1d5SYassine Oudjana      value pair.
37ec24d1d5SYassine Oudjana
38ec24d1d5SYassine Oudjana  opp-shared: true
39ec24d1d5SYassine Oudjana
40ec24d1d5SYassine OudjanapatternProperties:
41ec24d1d5SYassine Oudjana  '^opp-?[0-9]+$':
42ec24d1d5SYassine Oudjana    type: object
43c7e31e36SRob Herring    additionalProperties: false
44ec24d1d5SYassine Oudjana
45ec24d1d5SYassine Oudjana    properties:
46ec24d1d5SYassine Oudjana      opp-hz: true
47ec24d1d5SYassine Oudjana
48ec24d1d5SYassine Oudjana      opp-microvolt: true
49ec24d1d5SYassine Oudjana
50ec24d1d5SYassine Oudjana      opp-supported-hw:
51ec24d1d5SYassine Oudjana        description: |
52ec24d1d5SYassine Oudjana          A single 32 bit bitmap value, representing compatible HW.
53*ba38f3cbSChristian Marangi          Bitmap for MSM8996 format:
543e1fac93SYassine Oudjana          0:  MSM8996, speedbin 0
553e1fac93SYassine Oudjana          1:  MSM8996, speedbin 1
563e1fac93SYassine Oudjana          2:  MSM8996, speedbin 2
57*ba38f3cbSChristian Marangi          3:  MSM8996, speedbin 3
58*ba38f3cbSChristian Marangi          4-31:  unused
59*ba38f3cbSChristian Marangi
60*ba38f3cbSChristian Marangi          Bitmap for MSM8996SG format (speedbin shifted of 4 left):
61*ba38f3cbSChristian Marangi          0-3:  unused
62*ba38f3cbSChristian Marangi          4:  MSM8996SG, speedbin 0
63*ba38f3cbSChristian Marangi          5:  MSM8996SG, speedbin 1
64*ba38f3cbSChristian Marangi          6:  MSM8996SG, speedbin 2
65*ba38f3cbSChristian Marangi          7-31:  unused
66*ba38f3cbSChristian Marangi        enum: [0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
67*ba38f3cbSChristian Marangi               0x9, 0xd, 0xe, 0xf,
68*ba38f3cbSChristian Marangi               0x10, 0x20, 0x30, 0x70]
69ec24d1d5SYassine Oudjana
70ec24d1d5SYassine Oudjana      clock-latency-ns: true
71ec24d1d5SYassine Oudjana
72ec24d1d5SYassine Oudjana      required-opps: true
73ec24d1d5SYassine Oudjana
74ec24d1d5SYassine Oudjana    required:
75ec24d1d5SYassine Oudjana      - opp-hz
76ec24d1d5SYassine Oudjana
77ec24d1d5SYassine Oudjanarequired:
78ec24d1d5SYassine Oudjana  - compatible
79ec24d1d5SYassine Oudjana
80ec24d1d5SYassine Oudjanaif:
81ec24d1d5SYassine Oudjana  required:
82ec24d1d5SYassine Oudjana    - nvmem-cells
83ec24d1d5SYassine Oudjanathen:
84ec24d1d5SYassine Oudjana  patternProperties:
85ec24d1d5SYassine Oudjana    '^opp-?[0-9]+$':
86ec24d1d5SYassine Oudjana      required:
87ec24d1d5SYassine Oudjana        - opp-supported-hw
88ec24d1d5SYassine Oudjana
89ec24d1d5SYassine OudjanaadditionalProperties: false
90ec24d1d5SYassine Oudjana
91ec24d1d5SYassine Oudjanaexamples:
92ec24d1d5SYassine Oudjana  - |
93ec24d1d5SYassine Oudjana    / {
94ec24d1d5SYassine Oudjana        model = "Qualcomm Technologies, Inc. DB820c";
95ec24d1d5SYassine Oudjana        compatible = "arrow,apq8096-db820c", "qcom,apq8096-sbc", "qcom,apq8096";
96ec24d1d5SYassine Oudjana        #address-cells = <2>;
97ec24d1d5SYassine Oudjana        #size-cells = <2>;
98ec24d1d5SYassine Oudjana
99ec24d1d5SYassine Oudjana        cpus {
100ec24d1d5SYassine Oudjana            #address-cells = <2>;
101ec24d1d5SYassine Oudjana            #size-cells = <0>;
102ec24d1d5SYassine Oudjana
103ec24d1d5SYassine Oudjana            CPU0: cpu@0 {
104ec24d1d5SYassine Oudjana                device_type = "cpu";
105ec24d1d5SYassine Oudjana                compatible = "qcom,kryo";
106ec24d1d5SYassine Oudjana                reg = <0x0 0x0>;
107ec24d1d5SYassine Oudjana                enable-method = "psci";
108ec24d1d5SYassine Oudjana                cpu-idle-states = <&CPU_SLEEP_0>;
109ec24d1d5SYassine Oudjana                capacity-dmips-mhz = <1024>;
110ec24d1d5SYassine Oudjana                clocks = <&kryocc 0>;
111ec24d1d5SYassine Oudjana                operating-points-v2 = <&cluster0_opp>;
1123b4916a6SBryan O'Donoghue                power-domains = <&cpr>;
1133b4916a6SBryan O'Donoghue                power-domain-names = "cpr";
114ec24d1d5SYassine Oudjana                #cooling-cells = <2>;
115ec24d1d5SYassine Oudjana                next-level-cache = <&L2_0>;
116ec24d1d5SYassine Oudjana                L2_0: l2-cache {
117ec24d1d5SYassine Oudjana                    compatible = "cache";
118ec24d1d5SYassine Oudjana                    cache-level = <2>;
1195b2ad5acSRob Herring                    cache-unified;
120ec24d1d5SYassine Oudjana                };
121ec24d1d5SYassine Oudjana            };
122ec24d1d5SYassine Oudjana
123ec24d1d5SYassine Oudjana            CPU1: cpu@1 {
124ec24d1d5SYassine Oudjana                device_type = "cpu";
125ec24d1d5SYassine Oudjana                compatible = "qcom,kryo";
126ec24d1d5SYassine Oudjana                reg = <0x0 0x1>;
127ec24d1d5SYassine Oudjana                enable-method = "psci";
128ec24d1d5SYassine Oudjana                cpu-idle-states = <&CPU_SLEEP_0>;
129ec24d1d5SYassine Oudjana                capacity-dmips-mhz = <1024>;
130ec24d1d5SYassine Oudjana                clocks = <&kryocc 0>;
131ec24d1d5SYassine Oudjana                operating-points-v2 = <&cluster0_opp>;
1323b4916a6SBryan O'Donoghue                power-domains = <&cpr>;
1333b4916a6SBryan O'Donoghue                power-domain-names = "cpr";
134ec24d1d5SYassine Oudjana                #cooling-cells = <2>;
135ec24d1d5SYassine Oudjana                next-level-cache = <&L2_0>;
136ec24d1d5SYassine Oudjana            };
137ec24d1d5SYassine Oudjana
138ec24d1d5SYassine Oudjana            CPU2: cpu@100 {
139ec24d1d5SYassine Oudjana                device_type = "cpu";
140ec24d1d5SYassine Oudjana                compatible = "qcom,kryo";
141ec24d1d5SYassine Oudjana                reg = <0x0 0x100>;
142ec24d1d5SYassine Oudjana                enable-method = "psci";
143ec24d1d5SYassine Oudjana                cpu-idle-states = <&CPU_SLEEP_0>;
144ec24d1d5SYassine Oudjana                capacity-dmips-mhz = <1024>;
145ec24d1d5SYassine Oudjana                clocks = <&kryocc 1>;
146ec24d1d5SYassine Oudjana                operating-points-v2 = <&cluster1_opp>;
1473b4916a6SBryan O'Donoghue                power-domains = <&cpr>;
1483b4916a6SBryan O'Donoghue                power-domain-names = "cpr";
149ec24d1d5SYassine Oudjana                #cooling-cells = <2>;
150ec24d1d5SYassine Oudjana                next-level-cache = <&L2_1>;
151ec24d1d5SYassine Oudjana                L2_1: l2-cache {
152ec24d1d5SYassine Oudjana                    compatible = "cache";
153ec24d1d5SYassine Oudjana                    cache-level = <2>;
1545b2ad5acSRob Herring                    cache-unified;
155ec24d1d5SYassine Oudjana                };
156ec24d1d5SYassine Oudjana            };
157ec24d1d5SYassine Oudjana
158ec24d1d5SYassine Oudjana            CPU3: cpu@101 {
159ec24d1d5SYassine Oudjana                device_type = "cpu";
160ec24d1d5SYassine Oudjana                compatible = "qcom,kryo";
161ec24d1d5SYassine Oudjana                reg = <0x0 0x101>;
162ec24d1d5SYassine Oudjana                enable-method = "psci";
163ec24d1d5SYassine Oudjana                cpu-idle-states = <&CPU_SLEEP_0>;
164ec24d1d5SYassine Oudjana                capacity-dmips-mhz = <1024>;
165ec24d1d5SYassine Oudjana                clocks = <&kryocc 1>;
166ec24d1d5SYassine Oudjana                operating-points-v2 = <&cluster1_opp>;
1673b4916a6SBryan O'Donoghue                power-domains = <&cpr>;
1683b4916a6SBryan O'Donoghue                power-domain-names = "cpr";
169ec24d1d5SYassine Oudjana                #cooling-cells = <2>;
170ec24d1d5SYassine Oudjana                next-level-cache = <&L2_1>;
171ec24d1d5SYassine Oudjana            };
172ec24d1d5SYassine Oudjana
173ec24d1d5SYassine Oudjana            cpu-map {
174ec24d1d5SYassine Oudjana                cluster0 {
175ec24d1d5SYassine Oudjana                    core0 {
176ec24d1d5SYassine Oudjana                        cpu = <&CPU0>;
177ec24d1d5SYassine Oudjana                    };
178ec24d1d5SYassine Oudjana
179ec24d1d5SYassine Oudjana                    core1 {
180ec24d1d5SYassine Oudjana                        cpu = <&CPU1>;
181ec24d1d5SYassine Oudjana                    };
182ec24d1d5SYassine Oudjana                };
183ec24d1d5SYassine Oudjana
184ec24d1d5SYassine Oudjana                cluster1 {
185ec24d1d5SYassine Oudjana                    core0 {
186ec24d1d5SYassine Oudjana                        cpu = <&CPU2>;
187ec24d1d5SYassine Oudjana                    };
188ec24d1d5SYassine Oudjana
189ec24d1d5SYassine Oudjana                    core1 {
190ec24d1d5SYassine Oudjana                        cpu = <&CPU3>;
191ec24d1d5SYassine Oudjana                    };
192ec24d1d5SYassine Oudjana                };
193ec24d1d5SYassine Oudjana            };
194ec24d1d5SYassine Oudjana        };
195ec24d1d5SYassine Oudjana
196ec24d1d5SYassine Oudjana        cluster0_opp: opp-table-0 {
197ec24d1d5SYassine Oudjana            compatible = "operating-points-v2-kryo-cpu";
198ec24d1d5SYassine Oudjana            nvmem-cells = <&speedbin_efuse>;
199ec24d1d5SYassine Oudjana            opp-shared;
200ec24d1d5SYassine Oudjana
201ec24d1d5SYassine Oudjana            opp-307200000 {
202ec24d1d5SYassine Oudjana                opp-hz = /bits/ 64 <307200000>;
203ec24d1d5SYassine Oudjana                opp-microvolt = <905000 905000 1140000>;
2043e1fac93SYassine Oudjana                opp-supported-hw = <0x7>;
2053e1fac93SYassine Oudjana                clock-latency-ns = <200000>;
2063b4916a6SBryan O'Donoghue                required-opps = <&cpr_opp1>;
2073e1fac93SYassine Oudjana            };
2083e1fac93SYassine Oudjana            opp-1401600000 {
2093e1fac93SYassine Oudjana                opp-hz = /bits/ 64 <1401600000>;
2103e1fac93SYassine Oudjana                opp-microvolt = <1140000 905000 1140000>;
2113e1fac93SYassine Oudjana                opp-supported-hw = <0x5>;
212ec24d1d5SYassine Oudjana                clock-latency-ns = <200000>;
2133b4916a6SBryan O'Donoghue                required-opps = <&cpr_opp2>;
214ec24d1d5SYassine Oudjana            };
215ec24d1d5SYassine Oudjana            opp-1593600000 {
216ec24d1d5SYassine Oudjana                opp-hz = /bits/ 64 <1593600000>;
217ec24d1d5SYassine Oudjana                opp-microvolt = <1140000 905000 1140000>;
2183e1fac93SYassine Oudjana                opp-supported-hw = <0x1>;
219ec24d1d5SYassine Oudjana                clock-latency-ns = <200000>;
2203b4916a6SBryan O'Donoghue                required-opps = <&cpr_opp3>;
221ec24d1d5SYassine Oudjana            };
222ec24d1d5SYassine Oudjana        };
223ec24d1d5SYassine Oudjana
224ec24d1d5SYassine Oudjana        cluster1_opp: opp-table-1 {
225ec24d1d5SYassine Oudjana            compatible = "operating-points-v2-kryo-cpu";
226ec24d1d5SYassine Oudjana            nvmem-cells = <&speedbin_efuse>;
227ec24d1d5SYassine Oudjana            opp-shared;
228ec24d1d5SYassine Oudjana
229ec24d1d5SYassine Oudjana            opp-307200000 {
230ec24d1d5SYassine Oudjana                opp-hz = /bits/ 64 <307200000>;
231ec24d1d5SYassine Oudjana                opp-microvolt = <905000 905000 1140000>;
2323e1fac93SYassine Oudjana                opp-supported-hw = <0x7>;
233ec24d1d5SYassine Oudjana                clock-latency-ns = <200000>;
2343b4916a6SBryan O'Donoghue                required-opps = <&cpr_opp1>;
235ec24d1d5SYassine Oudjana            };
2363e1fac93SYassine Oudjana            opp-1804800000 {
2373e1fac93SYassine Oudjana                opp-hz = /bits/ 64 <1804800000>;
238ec24d1d5SYassine Oudjana                opp-microvolt = <1140000 905000 1140000>;
2393e1fac93SYassine Oudjana                opp-supported-hw = <0x6>;
2403e1fac93SYassine Oudjana                clock-latency-ns = <200000>;
2413b4916a6SBryan O'Donoghue                required-opps = <&cpr_opp4>;
2423e1fac93SYassine Oudjana            };
2433e1fac93SYassine Oudjana            opp-1900800000 {
2443e1fac93SYassine Oudjana                opp-hz = /bits/ 64 <1900800000>;
2453e1fac93SYassine Oudjana                opp-microvolt = <1140000 905000 1140000>;
2463e1fac93SYassine Oudjana                opp-supported-hw = <0x4>;
247ec24d1d5SYassine Oudjana                clock-latency-ns = <200000>;
2483b4916a6SBryan O'Donoghue                required-opps = <&cpr_opp5>;
249ec24d1d5SYassine Oudjana            };
250ec24d1d5SYassine Oudjana            opp-2150400000 {
251ec24d1d5SYassine Oudjana                opp-hz = /bits/ 64 <2150400000>;
252ec24d1d5SYassine Oudjana                opp-microvolt = <1140000 905000 1140000>;
2533e1fac93SYassine Oudjana                opp-supported-hw = <0x1>;
254ec24d1d5SYassine Oudjana                clock-latency-ns = <200000>;
2553b4916a6SBryan O'Donoghue                required-opps = <&cpr_opp6>;
256ec24d1d5SYassine Oudjana            };
257ec24d1d5SYassine Oudjana        };
258ec24d1d5SYassine Oudjana
259ec24d1d5SYassine Oudjana        smem {
260ec24d1d5SYassine Oudjana            compatible = "qcom,smem";
261ec24d1d5SYassine Oudjana            memory-region = <&smem_mem>;
262ec24d1d5SYassine Oudjana            hwlocks = <&tcsr_mutex 3>;
263ec24d1d5SYassine Oudjana        };
264ec24d1d5SYassine Oudjana
265ec24d1d5SYassine Oudjana        soc {
266ec24d1d5SYassine Oudjana            #address-cells = <1>;
267ec24d1d5SYassine Oudjana            #size-cells = <1>;
268ec24d1d5SYassine Oudjana
269ec24d1d5SYassine Oudjana            qfprom: qfprom@74000 {
270ec24d1d5SYassine Oudjana                compatible = "qcom,msm8996-qfprom", "qcom,qfprom";
271ec24d1d5SYassine Oudjana                reg = <0x00074000 0x8ff>;
272ec24d1d5SYassine Oudjana                #address-cells = <1>;
273ec24d1d5SYassine Oudjana                #size-cells = <1>;
274ec24d1d5SYassine Oudjana
275ec24d1d5SYassine Oudjana                speedbin_efuse: speedbin@133 {
276ec24d1d5SYassine Oudjana                    reg = <0x133 0x1>;
277ec24d1d5SYassine Oudjana                    bits = <5 3>;
278ec24d1d5SYassine Oudjana                };
279ec24d1d5SYassine Oudjana            };
280ec24d1d5SYassine Oudjana        };
281ec24d1d5SYassine Oudjana    };
282