1 Qualcomm Technologies, Inc. NVMEM CPUFreq and OPP bindings
2 ===================================
4 In Certain Qualcomm Technologies, Inc. SoCs like apq8096 and msm8996,
5 the CPU frequencies subset and voltage value of each OPP varies based on
6 the silicon variant in use.
7 Qualcomm Technologies, Inc. Process Voltage Scaling Tables
8 defines the voltage and frequency value based on the msm-id in SMEM
9 and speedbin blown in the efuse combination.
10 The qcom-cpufreq-nvmem driver reads the msm-id and efuse value from the SoC
11 to provide the OPP framework with required information (existing HW bitmap).
12 This is used to determine the voltage and frequency value for each OPP of
13 operating-points-v2 table when it is parsed by the OPP framework.
18 - operating-points-v2: Phandle to the operating-points-v2 table to use.
20 In 'operating-points-v2' table:
21 - compatible: Should be
22 - 'operating-points-v2-kryo-cpu' for apq8096 and msm8996.
27 - power-domains: A phandle pointing to the PM domain specifier which provides
28 the performance states available for active state management.
29 Please refer to the power-domains bindings
30 Documentation/devicetree/bindings/power/power_domain.txt
31 and also examples below.
32 - power-domain-names: Should be
35 In 'operating-points-v2' table:
36 - nvmem-cells: A phandle pointing to a nvmem-cells node representing the
37 efuse registers that has information about the
38 speedbin that is used to select the right frequency/voltage
40 Please refer the for nvmem-cells
41 bindings Documentation/devicetree/bindings/nvmem/nvmem.txt
42 and also examples below.
45 - opp-supported-hw: A single 32 bit bitmap value, representing compatible HW.
47 0: MSM8996 V3, speedbin 0
48 1: MSM8996 V3, speedbin 1
49 2: MSM8996 V3, speedbin 2
51 4: MSM8996 SG, speedbin 0
52 5: MSM8996 SG, speedbin 1
53 6: MSM8996 SG, speedbin 2
65 compatible = "qcom,kryo";
67 enable-method = "psci";
69 cpu-supply = <&pm8994_s11_saw>;
70 operating-points-v2 = <&cluster0_opp>;
72 next-level-cache = <&L2_0>;
81 compatible = "qcom,kryo";
83 enable-method = "psci";
85 cpu-supply = <&pm8994_s11_saw>;
86 operating-points-v2 = <&cluster0_opp>;
88 next-level-cache = <&L2_0>;
93 compatible = "qcom,kryo";
95 enable-method = "psci";
97 cpu-supply = <&pm8994_s11_saw>;
98 operating-points-v2 = <&cluster1_opp>;
100 next-level-cache = <&L2_1>;
102 compatible = "cache";
109 compatible = "qcom,kryo";
111 enable-method = "psci";
112 clocks = <&kryocc 1>;
113 cpu-supply = <&pm8994_s11_saw>;
114 operating-points-v2 = <&cluster1_opp>;
115 #cooling-cells = <2>;
116 next-level-cache = <&L2_1>;
142 cluster0_opp: opp_table0 {
143 compatible = "operating-points-v2-kryo-cpu";
144 nvmem-cells = <&speedbin_efuse>;
148 opp-hz = /bits/ 64 <307200000>;
149 opp-microvolt = <905000 905000 1140000>;
150 opp-supported-hw = <0x77>;
151 clock-latency-ns = <200000>;
154 opp-hz = /bits/ 64 <384000000>;
155 opp-microvolt = <905000 905000 1140000>;
156 opp-supported-hw = <0x70>;
157 clock-latency-ns = <200000>;
160 opp-hz = /bits/ 64 <422400000>;
161 opp-microvolt = <905000 905000 1140000>;
162 opp-supported-hw = <0x7>;
163 clock-latency-ns = <200000>;
166 opp-hz = /bits/ 64 <460800000>;
167 opp-microvolt = <905000 905000 1140000>;
168 opp-supported-hw = <0x70>;
169 clock-latency-ns = <200000>;
172 opp-hz = /bits/ 64 <480000000>;
173 opp-microvolt = <905000 905000 1140000>;
174 opp-supported-hw = <0x7>;
175 clock-latency-ns = <200000>;
178 opp-hz = /bits/ 64 <537600000>;
179 opp-microvolt = <905000 905000 1140000>;
180 opp-supported-hw = <0x70>;
181 clock-latency-ns = <200000>;
184 opp-hz = /bits/ 64 <556800000>;
185 opp-microvolt = <905000 905000 1140000>;
186 opp-supported-hw = <0x7>;
187 clock-latency-ns = <200000>;
190 opp-hz = /bits/ 64 <614400000>;
191 opp-microvolt = <905000 905000 1140000>;
192 opp-supported-hw = <0x70>;
193 clock-latency-ns = <200000>;
196 opp-hz = /bits/ 64 <652800000>;
197 opp-microvolt = <905000 905000 1140000>;
198 opp-supported-hw = <0x7>;
199 clock-latency-ns = <200000>;
202 opp-hz = /bits/ 64 <691200000>;
203 opp-microvolt = <905000 905000 1140000>;
204 opp-supported-hw = <0x70>;
205 clock-latency-ns = <200000>;
208 opp-hz = /bits/ 64 <729600000>;
209 opp-microvolt = <905000 905000 1140000>;
210 opp-supported-hw = <0x7>;
211 clock-latency-ns = <200000>;
214 opp-hz = /bits/ 64 <768000000>;
215 opp-microvolt = <905000 905000 1140000>;
216 opp-supported-hw = <0x70>;
217 clock-latency-ns = <200000>;
220 opp-hz = /bits/ 64 <844800000>;
221 opp-microvolt = <905000 905000 1140000>;
222 opp-supported-hw = <0x77>;
223 clock-latency-ns = <200000>;
226 opp-hz = /bits/ 64 <902400000>;
227 opp-microvolt = <905000 905000 1140000>;
228 opp-supported-hw = <0x70>;
229 clock-latency-ns = <200000>;
232 opp-hz = /bits/ 64 <960000000>;
233 opp-microvolt = <905000 905000 1140000>;
234 opp-supported-hw = <0x7>;
235 clock-latency-ns = <200000>;
238 opp-hz = /bits/ 64 <979200000>;
239 opp-microvolt = <905000 905000 1140000>;
240 opp-supported-hw = <0x70>;
241 clock-latency-ns = <200000>;
244 opp-hz = /bits/ 64 <1036800000>;
245 opp-microvolt = <905000 905000 1140000>;
246 opp-supported-hw = <0x7>;
247 clock-latency-ns = <200000>;
250 opp-hz = /bits/ 64 <1056000000>;
251 opp-microvolt = <905000 905000 1140000>;
252 opp-supported-hw = <0x70>;
253 clock-latency-ns = <200000>;
256 opp-hz = /bits/ 64 <1113600000>;
257 opp-microvolt = <905000 905000 1140000>;
258 opp-supported-hw = <0x7>;
259 clock-latency-ns = <200000>;
262 opp-hz = /bits/ 64 <1132800000>;
263 opp-microvolt = <905000 905000 1140000>;
264 opp-supported-hw = <0x70>;
265 clock-latency-ns = <200000>;
268 opp-hz = /bits/ 64 <1190400000>;
269 opp-microvolt = <905000 905000 1140000>;
270 opp-supported-hw = <0x7>;
271 clock-latency-ns = <200000>;
274 opp-hz = /bits/ 64 <1209600000>;
275 opp-microvolt = <905000 905000 1140000>;
276 opp-supported-hw = <0x70>;
277 clock-latency-ns = <200000>;
280 opp-hz = /bits/ 64 <1228800000>;
281 opp-microvolt = <905000 905000 1140000>;
282 opp-supported-hw = <0x7>;
283 clock-latency-ns = <200000>;
286 opp-hz = /bits/ 64 <1286400000>;
287 opp-microvolt = <1140000 905000 1140000>;
288 opp-supported-hw = <0x70>;
289 clock-latency-ns = <200000>;
292 opp-hz = /bits/ 64 <1324800000>;
293 opp-microvolt = <1140000 905000 1140000>;
294 opp-supported-hw = <0x5>;
295 clock-latency-ns = <200000>;
298 opp-hz = /bits/ 64 <1363200000>;
299 opp-microvolt = <1140000 905000 1140000>;
300 opp-supported-hw = <0x72>;
301 clock-latency-ns = <200000>;
304 opp-hz = /bits/ 64 <1401600000>;
305 opp-microvolt = <1140000 905000 1140000>;
306 opp-supported-hw = <0x5>;
307 clock-latency-ns = <200000>;
310 opp-hz = /bits/ 64 <1440000000>;
311 opp-microvolt = <1140000 905000 1140000>;
312 opp-supported-hw = <0x70>;
313 clock-latency-ns = <200000>;
316 opp-hz = /bits/ 64 <1478400000>;
317 opp-microvolt = <1140000 905000 1140000>;
318 opp-supported-hw = <0x1>;
319 clock-latency-ns = <200000>;
322 opp-hz = /bits/ 64 <1497600000>;
323 opp-microvolt = <1140000 905000 1140000>;
324 opp-supported-hw = <0x4>;
325 clock-latency-ns = <200000>;
328 opp-hz = /bits/ 64 <1516800000>;
329 opp-microvolt = <1140000 905000 1140000>;
330 opp-supported-hw = <0x70>;
331 clock-latency-ns = <200000>;
334 opp-hz = /bits/ 64 <1593600000>;
335 opp-microvolt = <1140000 905000 1140000>;
336 opp-supported-hw = <0x71>;
337 clock-latency-ns = <200000>;
340 opp-hz = /bits/ 64 <1996800000>;
341 opp-microvolt = <1140000 905000 1140000>;
342 opp-supported-hw = <0x20>;
343 clock-latency-ns = <200000>;
346 opp-hz = /bits/ 64 <2188800000>;
347 opp-microvolt = <1140000 905000 1140000>;
348 opp-supported-hw = <0x10>;
349 clock-latency-ns = <200000>;
353 cluster1_opp: opp_table1 {
354 compatible = "operating-points-v2-kryo-cpu";
355 nvmem-cells = <&speedbin_efuse>;
359 opp-hz = /bits/ 64 <307200000>;
360 opp-microvolt = <905000 905000 1140000>;
361 opp-supported-hw = <0x77>;
362 clock-latency-ns = <200000>;
365 opp-hz = /bits/ 64 <384000000>;
366 opp-microvolt = <905000 905000 1140000>;
367 opp-supported-hw = <0x70>;
368 clock-latency-ns = <200000>;
371 opp-hz = /bits/ 64 <403200000>;
372 opp-microvolt = <905000 905000 1140000>;
373 opp-supported-hw = <0x7>;
374 clock-latency-ns = <200000>;
377 opp-hz = /bits/ 64 <460800000>;
378 opp-microvolt = <905000 905000 1140000>;
379 opp-supported-hw = <0x70>;
380 clock-latency-ns = <200000>;
383 opp-hz = /bits/ 64 <480000000>;
384 opp-microvolt = <905000 905000 1140000>;
385 opp-supported-hw = <0x7>;
386 clock-latency-ns = <200000>;
389 opp-hz = /bits/ 64 <537600000>;
390 opp-microvolt = <905000 905000 1140000>;
391 opp-supported-hw = <0x70>;
392 clock-latency-ns = <200000>;
395 opp-hz = /bits/ 64 <556800000>;
396 opp-microvolt = <905000 905000 1140000>;
397 opp-supported-hw = <0x7>;
398 clock-latency-ns = <200000>;
401 opp-hz = /bits/ 64 <614400000>;
402 opp-microvolt = <905000 905000 1140000>;
403 opp-supported-hw = <0x70>;
404 clock-latency-ns = <200000>;
407 opp-hz = /bits/ 64 <652800000>;
408 opp-microvolt = <905000 905000 1140000>;
409 opp-supported-hw = <0x7>;
410 clock-latency-ns = <200000>;
413 opp-hz = /bits/ 64 <691200000>;
414 opp-microvolt = <905000 905000 1140000>;
415 opp-supported-hw = <0x70>;
416 clock-latency-ns = <200000>;
419 opp-hz = /bits/ 64 <729600000>;
420 opp-microvolt = <905000 905000 1140000>;
421 opp-supported-hw = <0x7>;
422 clock-latency-ns = <200000>;
425 opp-hz = /bits/ 64 <748800000>;
426 opp-microvolt = <905000 905000 1140000>;
427 opp-supported-hw = <0x70>;
428 clock-latency-ns = <200000>;
431 opp-hz = /bits/ 64 <806400000>;
432 opp-microvolt = <905000 905000 1140000>;
433 opp-supported-hw = <0x7>;
434 clock-latency-ns = <200000>;
437 opp-hz = /bits/ 64 <825600000>;
438 opp-microvolt = <905000 905000 1140000>;
439 opp-supported-hw = <0x70>;
440 clock-latency-ns = <200000>;
443 opp-hz = /bits/ 64 <883200000>;
444 opp-microvolt = <905000 905000 1140000>;
445 opp-supported-hw = <0x7>;
446 clock-latency-ns = <200000>;
449 opp-hz = /bits/ 64 <902400000>;
450 opp-microvolt = <905000 905000 1140000>;
451 opp-supported-hw = <0x70>;
452 clock-latency-ns = <200000>;
455 opp-hz = /bits/ 64 <940800000>;
456 opp-microvolt = <905000 905000 1140000>;
457 opp-supported-hw = <0x7>;
458 clock-latency-ns = <200000>;
461 opp-hz = /bits/ 64 <979200000>;
462 opp-microvolt = <905000 905000 1140000>;
463 opp-supported-hw = <0x70>;
464 clock-latency-ns = <200000>;
467 opp-hz = /bits/ 64 <1036800000>;
468 opp-microvolt = <905000 905000 1140000>;
469 opp-supported-hw = <0x7>;
470 clock-latency-ns = <200000>;
473 opp-hz = /bits/ 64 <1056000000>;
474 opp-microvolt = <905000 905000 1140000>;
475 opp-supported-hw = <0x70>;
476 clock-latency-ns = <200000>;
479 opp-hz = /bits/ 64 <1113600000>;
480 opp-microvolt = <905000 905000 1140000>;
481 opp-supported-hw = <0x7>;
482 clock-latency-ns = <200000>;
485 opp-hz = /bits/ 64 <1132800000>;
486 opp-microvolt = <905000 905000 1140000>;
487 opp-supported-hw = <0x70>;
488 clock-latency-ns = <200000>;
491 opp-hz = /bits/ 64 <1190400000>;
492 opp-microvolt = <905000 905000 1140000>;
493 opp-supported-hw = <0x7>;
494 clock-latency-ns = <200000>;
497 opp-hz = /bits/ 64 <1209600000>;
498 opp-microvolt = <905000 905000 1140000>;
499 opp-supported-hw = <0x70>;
500 clock-latency-ns = <200000>;
503 opp-hz = /bits/ 64 <1248000000>;
504 opp-microvolt = <905000 905000 1140000>;
505 opp-supported-hw = <0x7>;
506 clock-latency-ns = <200000>;
509 opp-hz = /bits/ 64 <1286400000>;
510 opp-microvolt = <905000 905000 1140000>;
511 opp-supported-hw = <0x70>;
512 clock-latency-ns = <200000>;
515 opp-hz = /bits/ 64 <1324800000>;
516 opp-microvolt = <1140000 905000 1140000>;
517 opp-supported-hw = <0x7>;
518 clock-latency-ns = <200000>;
521 opp-hz = /bits/ 64 <1363200000>;
522 opp-microvolt = <1140000 905000 1140000>;
523 opp-supported-hw = <0x70>;
524 clock-latency-ns = <200000>;
527 opp-hz = /bits/ 64 <1401600000>;
528 opp-microvolt = <1140000 905000 1140000>;
529 opp-supported-hw = <0x7>;
530 clock-latency-ns = <200000>;
533 opp-hz = /bits/ 64 <1440000000>;
534 opp-microvolt = <1140000 905000 1140000>;
535 opp-supported-hw = <0x70>;
536 clock-latency-ns = <200000>;
539 opp-hz = /bits/ 64 <1478400000>;
540 opp-microvolt = <1140000 905000 1140000>;
541 opp-supported-hw = <0x7>;
542 clock-latency-ns = <200000>;
545 opp-hz = /bits/ 64 <1516800000>;
546 opp-microvolt = <1140000 905000 1140000>;
547 opp-supported-hw = <0x70>;
548 clock-latency-ns = <200000>;
551 opp-hz = /bits/ 64 <1555200000>;
552 opp-microvolt = <1140000 905000 1140000>;
553 opp-supported-hw = <0x7>;
554 clock-latency-ns = <200000>;
557 opp-hz = /bits/ 64 <1593600000>;
558 opp-microvolt = <1140000 905000 1140000>;
559 opp-supported-hw = <0x70>;
560 clock-latency-ns = <200000>;
563 opp-hz = /bits/ 64 <1632000000>;
564 opp-microvolt = <1140000 905000 1140000>;
565 opp-supported-hw = <0x7>;
566 clock-latency-ns = <200000>;
569 opp-hz = /bits/ 64 <1670400000>;
570 opp-microvolt = <1140000 905000 1140000>;
571 opp-supported-hw = <0x70>;
572 clock-latency-ns = <200000>;
575 opp-hz = /bits/ 64 <1708800000>;
576 opp-microvolt = <1140000 905000 1140000>;
577 opp-supported-hw = <0x7>;
578 clock-latency-ns = <200000>;
581 opp-hz = /bits/ 64 <1747200000>;
582 opp-microvolt = <1140000 905000 1140000>;
583 opp-supported-hw = <0x70>;
584 clock-latency-ns = <200000>;
587 opp-hz = /bits/ 64 <1785600000>;
588 opp-microvolt = <1140000 905000 1140000>;
589 opp-supported-hw = <0x7>;
590 clock-latency-ns = <200000>;
593 opp-hz = /bits/ 64 <1804800000>;
594 opp-microvolt = <1140000 905000 1140000>;
595 opp-supported-hw = <0x6>;
596 clock-latency-ns = <200000>;
599 opp-hz = /bits/ 64 <1824000000>;
600 opp-microvolt = <1140000 905000 1140000>;
601 opp-supported-hw = <0x71>;
602 clock-latency-ns = <200000>;
605 opp-hz = /bits/ 64 <1900800000>;
606 opp-microvolt = <1140000 905000 1140000>;
607 opp-supported-hw = <0x74>;
608 clock-latency-ns = <200000>;
611 opp-hz = /bits/ 64 <1920000000>;
612 opp-microvolt = <1140000 905000 1140000>;
613 opp-supported-hw = <0x1>;
614 clock-latency-ns = <200000>;
617 opp-hz = /bits/ 64 <1977600000>;
618 opp-microvolt = <1140000 905000 1140000>;
619 opp-supported-hw = <0x30>;
620 clock-latency-ns = <200000>;
623 opp-hz = /bits/ 64 <1996800000>;
624 opp-microvolt = <1140000 905000 1140000>;
625 opp-supported-hw = <0x1>;
626 clock-latency-ns = <200000>;
629 opp-hz = /bits/ 64 <2054400000>;
630 opp-microvolt = <1140000 905000 1140000>;
631 opp-supported-hw = <0x30>;
632 clock-latency-ns = <200000>;
635 opp-hz = /bits/ 64 <2073600000>;
636 opp-microvolt = <1140000 905000 1140000>;
637 opp-supported-hw = <0x1>;
638 clock-latency-ns = <200000>;
641 opp-hz = /bits/ 64 <2150400000>;
642 opp-microvolt = <1140000 905000 1140000>;
643 opp-supported-hw = <0x31>;
644 clock-latency-ns = <200000>;
647 opp-hz = /bits/ 64 <2246400000>;
648 opp-microvolt = <1140000 905000 1140000>;
649 opp-supported-hw = <0x10>;
650 clock-latency-ns = <200000>;
653 opp-hz = /bits/ 64 <2342400000>;
654 opp-microvolt = <1140000 905000 1140000>;
655 opp-supported-hw = <0x10>;
656 clock-latency-ns = <200000>;
663 #address-cells = <2>;
667 smem_mem: smem-mem@86000000 {
668 reg = <0x0 0x86000000 0x0 0x200000>;
675 compatible = "qcom,smem";
676 memory-region = <&smem_mem>;
677 hwlocks = <&tcsr_mutex 3>;
682 qfprom: qfprom@74000 {
683 compatible = "qcom,qfprom";
684 reg = <0x00074000 0x8ff>;
685 #address-cells = <1>;
688 speedbin_efuse: speedbin@133 {
699 #address-cells = <1>;
704 compatible = "arm,cortex-a53";
707 clocks = <&apcs_glb>;
708 operating-points-v2 = <&cpu_opp_table>;
709 power-domains = <&cpr>;
710 power-domain-names = "cpr";
715 compatible = "arm,cortex-a53";
718 clocks = <&apcs_glb>;
719 operating-points-v2 = <&cpu_opp_table>;
720 power-domains = <&cpr>;
721 power-domain-names = "cpr";
726 compatible = "arm,cortex-a53";
729 clocks = <&apcs_glb>;
730 operating-points-v2 = <&cpu_opp_table>;
731 power-domains = <&cpr>;
732 power-domain-names = "cpr";
737 compatible = "arm,cortex-a53";
740 clocks = <&apcs_glb>;
741 operating-points-v2 = <&cpu_opp_table>;
742 power-domains = <&cpr>;
743 power-domain-names = "cpr";
747 cpu_opp_table: cpu-opp-table {
748 compatible = "operating-points-v2-kryo-cpu";
752 opp-hz = /bits/ 64 <1094400000>;
753 required-opps = <&cpr_opp1>;
756 opp-hz = /bits/ 64 <1248000000>;
757 required-opps = <&cpr_opp2>;
760 opp-hz = /bits/ 64 <1401600000>;
761 required-opps = <&cpr_opp3>;
765 cpr_opp_table: cpr-opp-table {
766 compatible = "operating-points-v2-qcom-level";
770 qcom,opp-fuse-level = <1>;
774 qcom,opp-fuse-level = <2>;
778 qcom,opp-fuse-level = <3>;
786 cpr: power-controller@b018000 {
787 compatible = "qcom,qcs404-cpr", "qcom,cpr";
788 reg = <0x0b018000 0x1000>;
790 vdd-apc-supply = <&pms405_s3>;
791 #power-domain-cells = <0>;
792 operating-points-v2 = <&cpr_opp_table>;