162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/opp/opp-v2-kryo-cpu.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Qualcomm Technologies, Inc. NVMEM OPP 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Ilia Lin <ilia.lin@kernel.org> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciallOf: 1362306a36Sopenharmony_ci - $ref: opp-v2-base.yaml# 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cidescription: | 1662306a36Sopenharmony_ci In certain Qualcomm Technologies, Inc. SoCs like APQ8096 and MSM8996, 1762306a36Sopenharmony_ci the CPU frequencies subset and voltage value of each OPP varies based on 1862306a36Sopenharmony_ci the silicon variant in use. 1962306a36Sopenharmony_ci Qualcomm Technologies, Inc. Process Voltage Scaling Tables 2062306a36Sopenharmony_ci defines the voltage and frequency value based on the speedbin blown in 2162306a36Sopenharmony_ci the efuse combination. 2262306a36Sopenharmony_ci The qcom-cpufreq-nvmem driver reads the efuse value from the SoC to provide 2362306a36Sopenharmony_ci the OPP framework with required information (existing HW bitmap). 2462306a36Sopenharmony_ci This is used to determine the voltage and frequency value for each OPP of 2562306a36Sopenharmony_ci operating-points-v2 table when it is parsed by the OPP framework. 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciproperties: 2862306a36Sopenharmony_ci compatible: 2962306a36Sopenharmony_ci const: operating-points-v2-kryo-cpu 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci nvmem-cells: 3262306a36Sopenharmony_ci description: | 3362306a36Sopenharmony_ci A phandle pointing to a nvmem-cells node representing the 3462306a36Sopenharmony_ci efuse registers that has information about the 3562306a36Sopenharmony_ci speedbin that is used to select the right frequency/voltage 3662306a36Sopenharmony_ci value pair. 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci opp-shared: true 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cipatternProperties: 4162306a36Sopenharmony_ci '^opp-?[0-9]+$': 4262306a36Sopenharmony_ci type: object 4362306a36Sopenharmony_ci additionalProperties: false 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci properties: 4662306a36Sopenharmony_ci opp-hz: true 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci opp-microvolt: true 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci opp-supported-hw: 5162306a36Sopenharmony_ci description: | 5262306a36Sopenharmony_ci A single 32 bit bitmap value, representing compatible HW. 5362306a36Sopenharmony_ci Bitmap for MSM8996 format: 5462306a36Sopenharmony_ci 0: MSM8996, speedbin 0 5562306a36Sopenharmony_ci 1: MSM8996, speedbin 1 5662306a36Sopenharmony_ci 2: MSM8996, speedbin 2 5762306a36Sopenharmony_ci 3: MSM8996, speedbin 3 5862306a36Sopenharmony_ci 4-31: unused 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci Bitmap for MSM8996SG format (speedbin shifted of 4 left): 6162306a36Sopenharmony_ci 0-3: unused 6262306a36Sopenharmony_ci 4: MSM8996SG, speedbin 0 6362306a36Sopenharmony_ci 5: MSM8996SG, speedbin 1 6462306a36Sopenharmony_ci 6: MSM8996SG, speedbin 2 6562306a36Sopenharmony_ci 7-31: unused 6662306a36Sopenharmony_ci enum: [0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 6762306a36Sopenharmony_ci 0x9, 0xd, 0xe, 0xf, 6862306a36Sopenharmony_ci 0x10, 0x20, 0x30, 0x70] 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci clock-latency-ns: true 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci required-opps: true 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci required: 7562306a36Sopenharmony_ci - opp-hz 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cirequired: 7862306a36Sopenharmony_ci - compatible 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ciif: 8162306a36Sopenharmony_ci required: 8262306a36Sopenharmony_ci - nvmem-cells 8362306a36Sopenharmony_cithen: 8462306a36Sopenharmony_ci patternProperties: 8562306a36Sopenharmony_ci '^opp-?[0-9]+$': 8662306a36Sopenharmony_ci required: 8762306a36Sopenharmony_ci - opp-supported-hw 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ciadditionalProperties: false 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ciexamples: 9262306a36Sopenharmony_ci - | 9362306a36Sopenharmony_ci / { 9462306a36Sopenharmony_ci model = "Qualcomm Technologies, Inc. DB820c"; 9562306a36Sopenharmony_ci compatible = "arrow,apq8096-db820c", "qcom,apq8096-sbc", "qcom,apq8096"; 9662306a36Sopenharmony_ci #address-cells = <2>; 9762306a36Sopenharmony_ci #size-cells = <2>; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci cpus { 10062306a36Sopenharmony_ci #address-cells = <2>; 10162306a36Sopenharmony_ci #size-cells = <0>; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci CPU0: cpu@0 { 10462306a36Sopenharmony_ci device_type = "cpu"; 10562306a36Sopenharmony_ci compatible = "qcom,kryo"; 10662306a36Sopenharmony_ci reg = <0x0 0x0>; 10762306a36Sopenharmony_ci enable-method = "psci"; 10862306a36Sopenharmony_ci cpu-idle-states = <&CPU_SLEEP_0>; 10962306a36Sopenharmony_ci capacity-dmips-mhz = <1024>; 11062306a36Sopenharmony_ci clocks = <&kryocc 0>; 11162306a36Sopenharmony_ci operating-points-v2 = <&cluster0_opp>; 11262306a36Sopenharmony_ci power-domains = <&cpr>; 11362306a36Sopenharmony_ci power-domain-names = "cpr"; 11462306a36Sopenharmony_ci #cooling-cells = <2>; 11562306a36Sopenharmony_ci next-level-cache = <&L2_0>; 11662306a36Sopenharmony_ci L2_0: l2-cache { 11762306a36Sopenharmony_ci compatible = "cache"; 11862306a36Sopenharmony_ci cache-level = <2>; 11962306a36Sopenharmony_ci cache-unified; 12062306a36Sopenharmony_ci }; 12162306a36Sopenharmony_ci }; 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci CPU1: cpu@1 { 12462306a36Sopenharmony_ci device_type = "cpu"; 12562306a36Sopenharmony_ci compatible = "qcom,kryo"; 12662306a36Sopenharmony_ci reg = <0x0 0x1>; 12762306a36Sopenharmony_ci enable-method = "psci"; 12862306a36Sopenharmony_ci cpu-idle-states = <&CPU_SLEEP_0>; 12962306a36Sopenharmony_ci capacity-dmips-mhz = <1024>; 13062306a36Sopenharmony_ci clocks = <&kryocc 0>; 13162306a36Sopenharmony_ci operating-points-v2 = <&cluster0_opp>; 13262306a36Sopenharmony_ci power-domains = <&cpr>; 13362306a36Sopenharmony_ci power-domain-names = "cpr"; 13462306a36Sopenharmony_ci #cooling-cells = <2>; 13562306a36Sopenharmony_ci next-level-cache = <&L2_0>; 13662306a36Sopenharmony_ci }; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci CPU2: cpu@100 { 13962306a36Sopenharmony_ci device_type = "cpu"; 14062306a36Sopenharmony_ci compatible = "qcom,kryo"; 14162306a36Sopenharmony_ci reg = <0x0 0x100>; 14262306a36Sopenharmony_ci enable-method = "psci"; 14362306a36Sopenharmony_ci cpu-idle-states = <&CPU_SLEEP_0>; 14462306a36Sopenharmony_ci capacity-dmips-mhz = <1024>; 14562306a36Sopenharmony_ci clocks = <&kryocc 1>; 14662306a36Sopenharmony_ci operating-points-v2 = <&cluster1_opp>; 14762306a36Sopenharmony_ci power-domains = <&cpr>; 14862306a36Sopenharmony_ci power-domain-names = "cpr"; 14962306a36Sopenharmony_ci #cooling-cells = <2>; 15062306a36Sopenharmony_ci next-level-cache = <&L2_1>; 15162306a36Sopenharmony_ci L2_1: l2-cache { 15262306a36Sopenharmony_ci compatible = "cache"; 15362306a36Sopenharmony_ci cache-level = <2>; 15462306a36Sopenharmony_ci cache-unified; 15562306a36Sopenharmony_ci }; 15662306a36Sopenharmony_ci }; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci CPU3: cpu@101 { 15962306a36Sopenharmony_ci device_type = "cpu"; 16062306a36Sopenharmony_ci compatible = "qcom,kryo"; 16162306a36Sopenharmony_ci reg = <0x0 0x101>; 16262306a36Sopenharmony_ci enable-method = "psci"; 16362306a36Sopenharmony_ci cpu-idle-states = <&CPU_SLEEP_0>; 16462306a36Sopenharmony_ci capacity-dmips-mhz = <1024>; 16562306a36Sopenharmony_ci clocks = <&kryocc 1>; 16662306a36Sopenharmony_ci operating-points-v2 = <&cluster1_opp>; 16762306a36Sopenharmony_ci power-domains = <&cpr>; 16862306a36Sopenharmony_ci power-domain-names = "cpr"; 16962306a36Sopenharmony_ci #cooling-cells = <2>; 17062306a36Sopenharmony_ci next-level-cache = <&L2_1>; 17162306a36Sopenharmony_ci }; 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci cpu-map { 17462306a36Sopenharmony_ci cluster0 { 17562306a36Sopenharmony_ci core0 { 17662306a36Sopenharmony_ci cpu = <&CPU0>; 17762306a36Sopenharmony_ci }; 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci core1 { 18062306a36Sopenharmony_ci cpu = <&CPU1>; 18162306a36Sopenharmony_ci }; 18262306a36Sopenharmony_ci }; 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci cluster1 { 18562306a36Sopenharmony_ci core0 { 18662306a36Sopenharmony_ci cpu = <&CPU2>; 18762306a36Sopenharmony_ci }; 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci core1 { 19062306a36Sopenharmony_ci cpu = <&CPU3>; 19162306a36Sopenharmony_ci }; 19262306a36Sopenharmony_ci }; 19362306a36Sopenharmony_ci }; 19462306a36Sopenharmony_ci }; 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci cluster0_opp: opp-table-0 { 19762306a36Sopenharmony_ci compatible = "operating-points-v2-kryo-cpu"; 19862306a36Sopenharmony_ci nvmem-cells = <&speedbin_efuse>; 19962306a36Sopenharmony_ci opp-shared; 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci opp-307200000 { 20262306a36Sopenharmony_ci opp-hz = /bits/ 64 <307200000>; 20362306a36Sopenharmony_ci opp-microvolt = <905000 905000 1140000>; 20462306a36Sopenharmony_ci opp-supported-hw = <0x7>; 20562306a36Sopenharmony_ci clock-latency-ns = <200000>; 20662306a36Sopenharmony_ci required-opps = <&cpr_opp1>; 20762306a36Sopenharmony_ci }; 20862306a36Sopenharmony_ci opp-1401600000 { 20962306a36Sopenharmony_ci opp-hz = /bits/ 64 <1401600000>; 21062306a36Sopenharmony_ci opp-microvolt = <1140000 905000 1140000>; 21162306a36Sopenharmony_ci opp-supported-hw = <0x5>; 21262306a36Sopenharmony_ci clock-latency-ns = <200000>; 21362306a36Sopenharmony_ci required-opps = <&cpr_opp2>; 21462306a36Sopenharmony_ci }; 21562306a36Sopenharmony_ci opp-1593600000 { 21662306a36Sopenharmony_ci opp-hz = /bits/ 64 <1593600000>; 21762306a36Sopenharmony_ci opp-microvolt = <1140000 905000 1140000>; 21862306a36Sopenharmony_ci opp-supported-hw = <0x1>; 21962306a36Sopenharmony_ci clock-latency-ns = <200000>; 22062306a36Sopenharmony_ci required-opps = <&cpr_opp3>; 22162306a36Sopenharmony_ci }; 22262306a36Sopenharmony_ci }; 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci cluster1_opp: opp-table-1 { 22562306a36Sopenharmony_ci compatible = "operating-points-v2-kryo-cpu"; 22662306a36Sopenharmony_ci nvmem-cells = <&speedbin_efuse>; 22762306a36Sopenharmony_ci opp-shared; 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci opp-307200000 { 23062306a36Sopenharmony_ci opp-hz = /bits/ 64 <307200000>; 23162306a36Sopenharmony_ci opp-microvolt = <905000 905000 1140000>; 23262306a36Sopenharmony_ci opp-supported-hw = <0x7>; 23362306a36Sopenharmony_ci clock-latency-ns = <200000>; 23462306a36Sopenharmony_ci required-opps = <&cpr_opp1>; 23562306a36Sopenharmony_ci }; 23662306a36Sopenharmony_ci opp-1804800000 { 23762306a36Sopenharmony_ci opp-hz = /bits/ 64 <1804800000>; 23862306a36Sopenharmony_ci opp-microvolt = <1140000 905000 1140000>; 23962306a36Sopenharmony_ci opp-supported-hw = <0x6>; 24062306a36Sopenharmony_ci clock-latency-ns = <200000>; 24162306a36Sopenharmony_ci required-opps = <&cpr_opp4>; 24262306a36Sopenharmony_ci }; 24362306a36Sopenharmony_ci opp-1900800000 { 24462306a36Sopenharmony_ci opp-hz = /bits/ 64 <1900800000>; 24562306a36Sopenharmony_ci opp-microvolt = <1140000 905000 1140000>; 24662306a36Sopenharmony_ci opp-supported-hw = <0x4>; 24762306a36Sopenharmony_ci clock-latency-ns = <200000>; 24862306a36Sopenharmony_ci required-opps = <&cpr_opp5>; 24962306a36Sopenharmony_ci }; 25062306a36Sopenharmony_ci opp-2150400000 { 25162306a36Sopenharmony_ci opp-hz = /bits/ 64 <2150400000>; 25262306a36Sopenharmony_ci opp-microvolt = <1140000 905000 1140000>; 25362306a36Sopenharmony_ci opp-supported-hw = <0x1>; 25462306a36Sopenharmony_ci clock-latency-ns = <200000>; 25562306a36Sopenharmony_ci required-opps = <&cpr_opp6>; 25662306a36Sopenharmony_ci }; 25762306a36Sopenharmony_ci }; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci smem { 26062306a36Sopenharmony_ci compatible = "qcom,smem"; 26162306a36Sopenharmony_ci memory-region = <&smem_mem>; 26262306a36Sopenharmony_ci hwlocks = <&tcsr_mutex 3>; 26362306a36Sopenharmony_ci }; 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci soc { 26662306a36Sopenharmony_ci #address-cells = <1>; 26762306a36Sopenharmony_ci #size-cells = <1>; 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci qfprom: qfprom@74000 { 27062306a36Sopenharmony_ci compatible = "qcom,msm8996-qfprom", "qcom,qfprom"; 27162306a36Sopenharmony_ci reg = <0x00074000 0x8ff>; 27262306a36Sopenharmony_ci #address-cells = <1>; 27362306a36Sopenharmony_ci #size-cells = <1>; 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci speedbin_efuse: speedbin@133 { 27662306a36Sopenharmony_ci reg = <0x133 0x1>; 27762306a36Sopenharmony_ci bits = <5 3>; 27862306a36Sopenharmony_ci }; 27962306a36Sopenharmony_ci }; 28062306a36Sopenharmony_ci }; 28162306a36Sopenharmony_ci }; 282