~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/devicetree/bindings/opp/opp-v2.yaml

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
  2 %YAML 1.2
  3 ---
  4 $id: http://devicetree.org/schemas/opp/opp-v2.yaml#
  5 $schema: http://devicetree.org/meta-schemas/core.yaml#
  6 
  7 title: Generic OPP (Operating Performance Points)
  8 
  9 maintainers:
 10   - Viresh Kumar <viresh.kumar@linaro.org>
 11 
 12 allOf:
 13   - $ref: opp-v2-base.yaml#
 14 
 15 properties:
 16   compatible:
 17     const: operating-points-v2
 18 
 19 unevaluatedProperties: false
 20 
 21 examples:
 22   - |
 23     /*
 24      * Example 1: Single cluster Dual-core ARM cortex A9, switch DVFS states
 25      * together.
 26      */
 27     cpus {
 28         #address-cells = <1>;
 29         #size-cells = <0>;
 30 
 31         cpu@0 {
 32             compatible = "arm,cortex-a9";
 33             device_type = "cpu";
 34             reg = <0>;
 35             next-level-cache = <&L2>;
 36             clocks = <&clk_controller 0>;
 37             clock-names = "cpu";
 38             cpu-supply = <&cpu_supply0>;
 39             operating-points-v2 = <&cpu0_opp_table0>;
 40         };
 41 
 42         cpu@1 {
 43             compatible = "arm,cortex-a9";
 44             device_type = "cpu";
 45             reg = <1>;
 46             next-level-cache = <&L2>;
 47             clocks = <&clk_controller 0>;
 48             clock-names = "cpu";
 49             cpu-supply = <&cpu_supply0>;
 50             operating-points-v2 = <&cpu0_opp_table0>;
 51         };
 52     };
 53 
 54     cpu0_opp_table0: opp-table {
 55         compatible = "operating-points-v2";
 56         opp-shared;
 57 
 58         opp-1000000000 {
 59             opp-hz = /bits/ 64 <1000000000>;
 60             opp-microvolt = <975000 970000 985000>;
 61             opp-microamp = <70000>;
 62             clock-latency-ns = <300000>;
 63             opp-suspend;
 64         };
 65         opp-1100000000 {
 66             opp-hz = /bits/ 64 <1100000000>;
 67             opp-microvolt = <1000000 980000 1010000>;
 68             opp-microamp = <80000>;
 69             clock-latency-ns = <310000>;
 70         };
 71         opp-1200000000 {
 72             opp-hz = /bits/ 64 <1200000000>;
 73             opp-microvolt = <1025000>;
 74             clock-latency-ns = <290000>;
 75             turbo-mode;
 76         };
 77     };
 78 
 79   - |
 80     /*
 81      * Example 2: Single cluster, Quad-core Qualcom-krait, switches DVFS states
 82      * independently.
 83      */
 84     cpus {
 85         #address-cells = <1>;
 86         #size-cells = <0>;
 87 
 88         cpu@0 {
 89             compatible = "qcom,krait";
 90             device_type = "cpu";
 91             reg = <0>;
 92             next-level-cache = <&L2>;
 93             clocks = <&clk_controller 0>;
 94             clock-names = "cpu";
 95             cpu-supply = <&cpu_supply0>;
 96             operating-points-v2 = <&cpu_opp_table>;
 97         };
 98 
 99         cpu@1 {
100             compatible = "qcom,krait";
101             device_type = "cpu";
102             reg = <1>;
103             next-level-cache = <&L2>;
104             clocks = <&clk_controller 1>;
105             clock-names = "cpu";
106             cpu-supply = <&cpu_supply1>;
107             operating-points-v2 = <&cpu_opp_table>;
108         };
109 
110         cpu@2 {
111             compatible = "qcom,krait";
112             device_type = "cpu";
113             reg = <2>;
114             next-level-cache = <&L2>;
115             clocks = <&clk_controller 2>;
116             clock-names = "cpu";
117             cpu-supply = <&cpu_supply2>;
118             operating-points-v2 = <&cpu_opp_table>;
119         };
120 
121         cpu@3 {
122             compatible = "qcom,krait";
123             device_type = "cpu";
124             reg = <3>;
125             next-level-cache = <&L2>;
126             clocks = <&clk_controller 3>;
127             clock-names = "cpu";
128             cpu-supply = <&cpu_supply3>;
129             operating-points-v2 = <&cpu_opp_table>;
130         };
131     };
132 
133     cpu_opp_table: opp-table {
134         compatible = "operating-points-v2";
135 
136         /*
137          * Missing opp-shared property means CPUs switch DVFS states
138          * independently.
139          */
140 
141         opp-1000000000 {
142             opp-hz = /bits/ 64 <1000000000>;
143             opp-microvolt = <975000 970000 985000>;
144             opp-microamp = <70000>;
145             clock-latency-ns = <300000>;
146             opp-suspend;
147         };
148         opp-1100000000 {
149             opp-hz = /bits/ 64 <1100000000>;
150             opp-microvolt = <1000000 980000 1010000>;
151             opp-microamp = <80000>;
152             clock-latency-ns = <310000>;
153         };
154         opp-1200000000 {
155             opp-hz = /bits/ 64 <1200000000>;
156             opp-microvolt = <1025000>;
157             opp-microamp = <90000>;
158             clock-latency-ns = <290000>;
159             turbo-mode;
160         };
161     };
162 
163   - |
164     /*
165      * Example 3: Dual-cluster, Dual-core per cluster. CPUs within a cluster switch
166      * DVFS state together.
167      */
168     cpus {
169         #address-cells = <1>;
170         #size-cells = <0>;
171 
172         cpu@0 {
173             compatible = "arm,cortex-a7";
174             device_type = "cpu";
175             reg = <0>;
176             next-level-cache = <&L2>;
177             clocks = <&clk_controller 0>;
178             clock-names = "cpu";
179             cpu-supply = <&cpu_supply0>;
180             operating-points-v2 = <&cluster0_opp>;
181         };
182 
183         cpu@1 {
184             compatible = "arm,cortex-a7";
185             device_type = "cpu";
186             reg = <1>;
187             next-level-cache = <&L2>;
188             clocks = <&clk_controller 0>;
189             clock-names = "cpu";
190             cpu-supply = <&cpu_supply0>;
191             operating-points-v2 = <&cluster0_opp>;
192         };
193 
194         cpu@100 {
195             compatible = "arm,cortex-a15";
196             device_type = "cpu";
197             reg = <100>;
198             next-level-cache = <&L2>;
199             clocks = <&clk_controller 1>;
200             clock-names = "cpu";
201             cpu-supply = <&cpu_supply1>;
202             operating-points-v2 = <&cluster1_opp>;
203         };
204 
205         cpu@101 {
206             compatible = "arm,cortex-a15";
207             device_type = "cpu";
208             reg = <101>;
209             next-level-cache = <&L2>;
210             clocks = <&clk_controller 1>;
211             clock-names = "cpu";
212             cpu-supply = <&cpu_supply1>;
213             operating-points-v2 = <&cluster1_opp>;
214         };
215     };
216 
217     cluster0_opp: opp-table-0 {
218         compatible = "operating-points-v2";
219         opp-shared;
220 
221         opp-1000000000 {
222             opp-hz = /bits/ 64 <1000000000>;
223             opp-microvolt = <975000 970000 985000>;
224             opp-microamp = <70000>;
225             clock-latency-ns = <300000>;
226             opp-suspend;
227         };
228         opp-1100000000 {
229             opp-hz = /bits/ 64 <1100000000>;
230             opp-microvolt = <1000000 980000 1010000>;
231             opp-microamp = <80000>;
232             clock-latency-ns = <310000>;
233         };
234         opp-1200000000 {
235             opp-hz = /bits/ 64 <1200000000>;
236             opp-microvolt = <1025000>;
237             opp-microamp = <90000>;
238             clock-latency-ns = <290000>;
239             turbo-mode;
240         };
241     };
242 
243     cluster1_opp: opp-table-1 {
244         compatible = "operating-points-v2";
245         opp-shared;
246 
247         opp-1300000000 {
248             opp-hz = /bits/ 64 <1300000000>;
249             opp-microvolt = <1050000 1045000 1055000>;
250             opp-microamp = <95000>;
251             clock-latency-ns = <400000>;
252             opp-suspend;
253         };
254         opp-1400000000 {
255             opp-hz = /bits/ 64 <1400000000>;
256             opp-microvolt = <1075000>;
257             opp-microamp = <100000>;
258             clock-latency-ns = <400000>;
259         };
260         opp-1500000000 {
261             opp-hz = /bits/ 64 <1500000000>;
262             opp-microvolt = <1100000 1010000 1110000>;
263             opp-microamp = <95000>;
264             clock-latency-ns = <400000>;
265             turbo-mode;
266         };
267     };
268 
269   - |
270     /* Example 4: Handling multiple regulators */
271     cpus {
272         #address-cells = <1>;
273         #size-cells = <0>;
274 
275         cpu@0 {
276             compatible = "foo,cpu-type";
277             device_type = "cpu";
278             reg = <0>;
279 
280             vcc0-supply = <&cpu_supply0>;
281             vcc1-supply = <&cpu_supply1>;
282             vcc2-supply = <&cpu_supply2>;
283             operating-points-v2 = <&cpu0_opp_table4>;
284         };
285     };
286 
287     cpu0_opp_table4: opp-table-0 {
288         compatible = "operating-points-v2";
289         opp-shared;
290 
291         opp-1000000000 {
292             opp-hz = /bits/ 64 <1000000000>;
293             opp-microvolt = <970000>, /* Supply 0 */
294                             <960000>, /* Supply 1 */
295                             <960000>; /* Supply 2 */
296             opp-microamp =  <70000>,  /* Supply 0 */
297                             <70000>,  /* Supply 1 */
298                             <70000>;  /* Supply 2 */
299             clock-latency-ns = <300000>;
300         };
301 
302         /* OR */
303 
304         opp-1000000001 {
305             opp-hz = /bits/ 64 <1000000001>;
306             opp-microvolt = <975000 970000 985000>, /* Supply 0 */
307                             <965000 960000 975000>, /* Supply 1 */
308                             <965000 960000 975000>; /* Supply 2 */
309             opp-microamp =  <70000>,    /* Supply 0 */
310                 <70000>,    /* Supply 1 */
311                 <70000>;    /* Supply 2 */
312             clock-latency-ns = <300000>;
313         };
314 
315         /* OR */
316 
317         opp-1000000002 {
318             opp-hz = /bits/ 64 <1000000002>;
319             opp-microvolt = <975000 970000 985000>, /* Supply 0 */
320                 <965000 960000 975000>, /* Supply 1 */
321                 <965000 960000 975000>; /* Supply 2 */
322             opp-microamp =  <70000>,    /* Supply 0 */
323                 <0>,      /* Supply 1 doesn't need this */
324                 <70000>;    /* Supply 2 */
325             clock-latency-ns = <300000>;
326         };
327     };
328 
329   - |
330     /*
331      * Example 5: opp-supported-hw
332      * (example: three level hierarchy of versions: cuts, substrate and process)
333      */
334     cpus {
335         #address-cells = <1>;
336         #size-cells = <0>;
337 
338         cpu@0 {
339             compatible = "arm,cortex-a7";
340             device_type = "cpu";
341             reg = <0>;
342             cpu-supply = <&cpu_supply>;
343             operating-points-v2 = <&cpu0_opp_table_slow>;
344         };
345     };
346 
347     cpu0_opp_table_slow: opp-table {
348         compatible = "operating-points-v2";
349         opp-shared;
350 
351         opp-600000000 {
352             /*
353              * Supports all substrate and process versions for 0xF
354              * cuts, i.e. only first four cuts.
355              */
356             opp-supported-hw = <0xF 0xFFFFFFFF 0xFFFFFFFF>;
357             opp-hz = /bits/ 64 <600000000>;
358         };
359 
360         opp-800000000 {
361             /*
362              * Supports:
363              * - cuts: only one, 6th cut (represented by 6th bit).
364              * - substrate: supports 16 different substrate versions
365              * - process: supports 9 different process versions
366              */
367             opp-supported-hw = <0x20 0xff0000ff 0x0000f4f0>;
368             opp-hz = /bits/ 64 <800000000>;
369         };
370 
371         opp-900000000 {
372             /*
373              * Supports:
374              * - All cuts and substrate where process version is 0x2.
375              * - All cuts and process where substrate version is 0x2.
376              */
377             opp-supported-hw = <0xFFFFFFFF 0xFFFFFFFF 0x02>,
378                                <0xFFFFFFFF 0x01 0xFFFFFFFF>;
379             opp-hz = /bits/ 64 <900000000>;
380         };
381     };
382 
383   - |
384     /*
385      * Example 6: opp-microvolt-<name>, opp-microamp-<name>:
386      * (example: device with two possible microvolt ranges: slow and fast)
387      */
388     cpus {
389         #address-cells = <1>;
390         #size-cells = <0>;
391 
392         cpu@0 {
393             compatible = "arm,cortex-a7";
394             device_type = "cpu";
395             reg = <0>;
396             operating-points-v2 = <&cpu0_opp_table6>;
397         };
398     };
399 
400     cpu0_opp_table6: opp-table-0 {
401         compatible = "operating-points-v2";
402         opp-shared;
403 
404         opp-1000000000 {
405             opp-hz = /bits/ 64 <1000000000>;
406             opp-microvolt-slow = <915000 900000 925000>;
407             opp-microvolt-fast = <975000 970000 985000>;
408             opp-microamp-slow =  <70000>;
409             opp-microamp-fast =  <71000>;
410         };
411 
412         opp-1200000000 {
413             opp-hz = /bits/ 64 <1200000000>;
414             opp-microvolt-slow = <915000 900000 925000>, /* Supply vcc0 */
415                                  <925000 910000 935000>; /* Supply vcc1 */
416             opp-microvolt-fast = <975000 970000 985000>, /* Supply vcc0 */
417                                  <965000 960000 975000>; /* Supply vcc1 */
418             opp-microamp =  <70000>; /* Will be used for both slow/fast */
419         };
420     };
421 
422   - |
423     /*
424      * Example 7: Single cluster Quad-core ARM cortex A53, OPP points from firmware,
425      * distinct clock controls but two sets of clock/voltage/current lines.
426      */
427     cpus {
428         #address-cells = <2>;
429         #size-cells = <0>;
430 
431         cpu@0 {
432             compatible = "arm,cortex-a53";
433             device_type = "cpu";
434             reg = <0x0 0x100>;
435             next-level-cache = <&A53_L2>;
436             clocks = <&dvfs_controller 0>;
437             operating-points-v2 = <&cpu_opp0_table>;
438         };
439         cpu@1 {
440             compatible = "arm,cortex-a53";
441             device_type = "cpu";
442             reg = <0x0 0x101>;
443             next-level-cache = <&A53_L2>;
444             clocks = <&dvfs_controller 1>;
445             operating-points-v2 = <&cpu_opp0_table>;
446         };
447         cpu@2 {
448             compatible = "arm,cortex-a53";
449             device_type = "cpu";
450             reg = <0x0 0x102>;
451             next-level-cache = <&A53_L2>;
452             clocks = <&dvfs_controller 2>;
453             operating-points-v2 = <&cpu_opp1_table>;
454         };
455         cpu@3 {
456             compatible = "arm,cortex-a53";
457             device_type = "cpu";
458             reg = <0x0 0x103>;
459             next-level-cache = <&A53_L2>;
460             clocks = <&dvfs_controller 3>;
461             operating-points-v2 = <&cpu_opp1_table>;
462         };
463 
464     };
465 
466     cpu_opp0_table: opp-table-0 {
467         compatible = "operating-points-v2";
468         opp-shared;
469     };
470 
471     cpu_opp1_table: opp-table-1 {
472         compatible = "operating-points-v2";
473         opp-shared;
474     };
475 ...

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php