| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/cpufreq/qcom-cpufreq-nvmem.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Qualcomm Technologies, Inc. NVMEM CPUFreq |
| |
| maintainers: |
| - Ilia Lin <ilia.lin@kernel.org> |
| |
| description: | |
| In certain Qualcomm Technologies, Inc. SoCs such as QCS404, The CPU supply |
| voltage is dynamically configured by Core Power Reduction (CPR) depending on |
| current CPU frequency and efuse values. |
| CPR provides a power domain with multiple levels that are selected depending |
| on the CPU OPP in use. The CPUFreq driver sets the CPR power domain level |
| according to the required OPPs defined in the CPU OPP tables. |
| |
| For old implementation efuses are parsed to select the correct opp table and |
| voltage and CPR is not supported/used. |
| |
| select: |
| properties: |
| compatible: |
| contains: |
| enum: |
| - qcom,apq8064 |
| - qcom,apq8096 |
| - qcom,ipq8064 |
| - qcom,msm8939 |
| - qcom,msm8960 |
| - qcom,msm8974 |
| - qcom,msm8996 |
| - qcom,qcs404 |
| required: |
| - compatible |
| |
| patternProperties: |
| '^opp-table(-[a-z0-9]+)?$': |
| allOf: |
| - if: |
| properties: |
| compatible: |
| const: operating-points-v2-kryo-cpu |
| then: |
| $ref: /schemas/opp/opp-v2-kryo-cpu.yaml# |
| |
| - if: |
| properties: |
| compatible: |
| const: operating-points-v2-qcom-level |
| then: |
| $ref: /schemas/opp/opp-v2-qcom-level.yaml# |
| |
| unevaluatedProperties: false |
| |
| allOf: |
| - if: |
| properties: |
| compatible: |
| contains: |
| enum: |
| - qcom,qcs404 |
| |
| then: |
| properties: |
| cpus: |
| type: object |
| |
| patternProperties: |
| '^cpu@[0-9a-f]+$': |
| type: object |
| |
| properties: |
| power-domains: |
| maxItems: 1 |
| |
| power-domain-names: |
| items: |
| - const: cpr |
| |
| required: |
| - power-domains |
| - power-domain-names |
| |
| patternProperties: |
| '^opp-table(-[a-z0-9]+)?$': |
| if: |
| properties: |
| compatible: |
| const: operating-points-v2-kryo-cpu |
| then: |
| patternProperties: |
| '^opp-?[0-9]+$': |
| required: |
| - required-opps |
| |
| additionalProperties: true |
| |
| examples: |
| - | |
| / { |
| model = "Qualcomm Technologies, Inc. QCS404 EVB 1000"; |
| compatible = "qcom,qcs404-evb-1000", "qcom,qcs404-evb", "qcom,qcs404"; |
| #address-cells = <2>; |
| #size-cells = <2>; |
| |
| cpus { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| CPU0: cpu@100 { |
| device_type = "cpu"; |
| compatible = "arm,cortex-a53"; |
| reg = <0x100>; |
| enable-method = "psci"; |
| cpu-idle-states = <&CPU_SLEEP_0>; |
| next-level-cache = <&L2_0>; |
| #cooling-cells = <2>; |
| clocks = <&apcs_glb>; |
| operating-points-v2 = <&cpu_opp_table>; |
| power-domains = <&cpr>; |
| power-domain-names = "cpr"; |
| }; |
| |
| CPU1: cpu@101 { |
| device_type = "cpu"; |
| compatible = "arm,cortex-a53"; |
| reg = <0x101>; |
| enable-method = "psci"; |
| cpu-idle-states = <&CPU_SLEEP_0>; |
| next-level-cache = <&L2_0>; |
| #cooling-cells = <2>; |
| clocks = <&apcs_glb>; |
| operating-points-v2 = <&cpu_opp_table>; |
| power-domains = <&cpr>; |
| power-domain-names = "cpr"; |
| }; |
| |
| CPU2: cpu@102 { |
| device_type = "cpu"; |
| compatible = "arm,cortex-a53"; |
| reg = <0x102>; |
| enable-method = "psci"; |
| cpu-idle-states = <&CPU_SLEEP_0>; |
| next-level-cache = <&L2_0>; |
| #cooling-cells = <2>; |
| clocks = <&apcs_glb>; |
| operating-points-v2 = <&cpu_opp_table>; |
| power-domains = <&cpr>; |
| power-domain-names = "cpr"; |
| }; |
| |
| CPU3: cpu@103 { |
| device_type = "cpu"; |
| compatible = "arm,cortex-a53"; |
| reg = <0x103>; |
| enable-method = "psci"; |
| cpu-idle-states = <&CPU_SLEEP_0>; |
| next-level-cache = <&L2_0>; |
| #cooling-cells = <2>; |
| clocks = <&apcs_glb>; |
| operating-points-v2 = <&cpu_opp_table>; |
| power-domains = <&cpr>; |
| power-domain-names = "cpr"; |
| }; |
| }; |
| |
| cpu_opp_table: opp-table-cpu { |
| compatible = "operating-points-v2-kryo-cpu"; |
| opp-shared; |
| |
| opp-1094400000 { |
| opp-hz = /bits/ 64 <1094400000>; |
| required-opps = <&cpr_opp1>; |
| }; |
| opp-1248000000 { |
| opp-hz = /bits/ 64 <1248000000>; |
| required-opps = <&cpr_opp2>; |
| }; |
| opp-1401600000 { |
| opp-hz = /bits/ 64 <1401600000>; |
| required-opps = <&cpr_opp3>; |
| }; |
| }; |
| |
| cpr_opp_table: opp-table-cpr { |
| compatible = "operating-points-v2-qcom-level"; |
| |
| cpr_opp1: opp1 { |
| opp-level = <1>; |
| qcom,opp-fuse-level = <1>; |
| }; |
| cpr_opp2: opp2 { |
| opp-level = <2>; |
| qcom,opp-fuse-level = <2>; |
| }; |
| cpr_opp3: opp3 { |
| opp-level = <3>; |
| qcom,opp-fuse-level = <3>; |
| }; |
| }; |
| }; |