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/cpufreq/cpufreq-qcom-hw.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Qualcomm Technologies, Inc. CPUFREQ
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci  CPUFREQ HW is a hardware engine used by some Qualcomm Technologies, Inc. (QTI)
1562306a36Sopenharmony_ci  SoCs to manage frequency in hardware. It is capable of controlling frequency
1662306a36Sopenharmony_ci  for multiple clusters.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciproperties:
1962306a36Sopenharmony_ci  compatible:
2062306a36Sopenharmony_ci    oneOf:
2162306a36Sopenharmony_ci      - description: v1 of CPUFREQ HW
2262306a36Sopenharmony_ci        items:
2362306a36Sopenharmony_ci          - enum:
2462306a36Sopenharmony_ci              - qcom,qcm2290-cpufreq-hw
2562306a36Sopenharmony_ci              - qcom,sc7180-cpufreq-hw
2662306a36Sopenharmony_ci              - qcom,sdm845-cpufreq-hw
2762306a36Sopenharmony_ci              - qcom,sm6115-cpufreq-hw
2862306a36Sopenharmony_ci              - qcom,sm6350-cpufreq-hw
2962306a36Sopenharmony_ci              - qcom,sm8150-cpufreq-hw
3062306a36Sopenharmony_ci          - const: qcom,cpufreq-hw
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci      - description: v2 of CPUFREQ HW (EPSS)
3362306a36Sopenharmony_ci        items:
3462306a36Sopenharmony_ci          - enum:
3562306a36Sopenharmony_ci              - qcom,qdu1000-cpufreq-epss
3662306a36Sopenharmony_ci              - qcom,sa8775p-cpufreq-epss
3762306a36Sopenharmony_ci              - qcom,sc7280-cpufreq-epss
3862306a36Sopenharmony_ci              - qcom,sc8280xp-cpufreq-epss
3962306a36Sopenharmony_ci              - qcom,sm6375-cpufreq-epss
4062306a36Sopenharmony_ci              - qcom,sm8250-cpufreq-epss
4162306a36Sopenharmony_ci              - qcom,sm8350-cpufreq-epss
4262306a36Sopenharmony_ci              - qcom,sm8450-cpufreq-epss
4362306a36Sopenharmony_ci              - qcom,sm8550-cpufreq-epss
4462306a36Sopenharmony_ci          - const: qcom,cpufreq-epss
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci  reg:
4762306a36Sopenharmony_ci    minItems: 1
4862306a36Sopenharmony_ci    items:
4962306a36Sopenharmony_ci      - description: Frequency domain 0 register region
5062306a36Sopenharmony_ci      - description: Frequency domain 1 register region
5162306a36Sopenharmony_ci      - description: Frequency domain 2 register region
5262306a36Sopenharmony_ci      - description: Frequency domain 3 register region
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci  reg-names:
5562306a36Sopenharmony_ci    minItems: 1
5662306a36Sopenharmony_ci    items:
5762306a36Sopenharmony_ci      - const: freq-domain0
5862306a36Sopenharmony_ci      - const: freq-domain1
5962306a36Sopenharmony_ci      - const: freq-domain2
6062306a36Sopenharmony_ci      - const: freq-domain3
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci  clocks:
6362306a36Sopenharmony_ci    items:
6462306a36Sopenharmony_ci      - description: XO Clock
6562306a36Sopenharmony_ci      - description: GPLL0 Clock
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci  clock-names:
6862306a36Sopenharmony_ci    items:
6962306a36Sopenharmony_ci      - const: xo
7062306a36Sopenharmony_ci      - const: alternate
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci  interrupts:
7362306a36Sopenharmony_ci    minItems: 1
7462306a36Sopenharmony_ci    maxItems: 4
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci  interrupt-names:
7762306a36Sopenharmony_ci    minItems: 1
7862306a36Sopenharmony_ci    items:
7962306a36Sopenharmony_ci      - const: dcvsh-irq-0
8062306a36Sopenharmony_ci      - const: dcvsh-irq-1
8162306a36Sopenharmony_ci      - const: dcvsh-irq-2
8262306a36Sopenharmony_ci      - const: dcvsh-irq-3
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci  '#freq-domain-cells':
8562306a36Sopenharmony_ci    const: 1
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci  '#clock-cells':
8862306a36Sopenharmony_ci    const: 1
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cirequired:
9162306a36Sopenharmony_ci  - compatible
9262306a36Sopenharmony_ci  - reg
9362306a36Sopenharmony_ci  - clocks
9462306a36Sopenharmony_ci  - clock-names
9562306a36Sopenharmony_ci  - '#freq-domain-cells'
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ciadditionalProperties: false
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciallOf:
10062306a36Sopenharmony_ci  - if:
10162306a36Sopenharmony_ci      properties:
10262306a36Sopenharmony_ci        compatible:
10362306a36Sopenharmony_ci          contains:
10462306a36Sopenharmony_ci            enum:
10562306a36Sopenharmony_ci              - qcom,qcm2290-cpufreq-hw
10662306a36Sopenharmony_ci    then:
10762306a36Sopenharmony_ci      properties:
10862306a36Sopenharmony_ci        reg:
10962306a36Sopenharmony_ci          minItems: 1
11062306a36Sopenharmony_ci          maxItems: 1
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci        reg-names:
11362306a36Sopenharmony_ci          minItems: 1
11462306a36Sopenharmony_ci          maxItems: 1
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci        interrupts:
11762306a36Sopenharmony_ci          minItems: 1
11862306a36Sopenharmony_ci          maxItems: 1
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci        interrupt-names:
12162306a36Sopenharmony_ci          minItems: 1
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci  - if:
12462306a36Sopenharmony_ci      properties:
12562306a36Sopenharmony_ci        compatible:
12662306a36Sopenharmony_ci          contains:
12762306a36Sopenharmony_ci            enum:
12862306a36Sopenharmony_ci              - qcom,qdu1000-cpufreq-epss
12962306a36Sopenharmony_ci              - qcom,sc7180-cpufreq-hw
13062306a36Sopenharmony_ci              - qcom,sc8280xp-cpufreq-epss
13162306a36Sopenharmony_ci              - qcom,sdm845-cpufreq-hw
13262306a36Sopenharmony_ci              - qcom,sm6115-cpufreq-hw
13362306a36Sopenharmony_ci              - qcom,sm6350-cpufreq-hw
13462306a36Sopenharmony_ci              - qcom,sm6375-cpufreq-epss
13562306a36Sopenharmony_ci    then:
13662306a36Sopenharmony_ci      properties:
13762306a36Sopenharmony_ci        reg:
13862306a36Sopenharmony_ci          minItems: 2
13962306a36Sopenharmony_ci          maxItems: 2
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci        reg-names:
14262306a36Sopenharmony_ci          minItems: 2
14362306a36Sopenharmony_ci          maxItems: 2
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci        interrupts:
14662306a36Sopenharmony_ci          minItems: 2
14762306a36Sopenharmony_ci          maxItems: 2
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci        interrupt-names:
15062306a36Sopenharmony_ci          minItems: 2
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci  - if:
15362306a36Sopenharmony_ci      properties:
15462306a36Sopenharmony_ci        compatible:
15562306a36Sopenharmony_ci          contains:
15662306a36Sopenharmony_ci            enum:
15762306a36Sopenharmony_ci              - qcom,sc7280-cpufreq-epss
15862306a36Sopenharmony_ci              - qcom,sm8250-cpufreq-epss
15962306a36Sopenharmony_ci              - qcom,sm8350-cpufreq-epss
16062306a36Sopenharmony_ci              - qcom,sm8450-cpufreq-epss
16162306a36Sopenharmony_ci              - qcom,sm8550-cpufreq-epss
16262306a36Sopenharmony_ci    then:
16362306a36Sopenharmony_ci      properties:
16462306a36Sopenharmony_ci        reg:
16562306a36Sopenharmony_ci          minItems: 3
16662306a36Sopenharmony_ci          maxItems: 3
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci        reg-names:
16962306a36Sopenharmony_ci          minItems: 3
17062306a36Sopenharmony_ci          maxItems: 3
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci        interrupts:
17362306a36Sopenharmony_ci          minItems: 3
17462306a36Sopenharmony_ci          maxItems: 3
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci        interrupt-names:
17762306a36Sopenharmony_ci          minItems: 3
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci  - if:
18062306a36Sopenharmony_ci      properties:
18162306a36Sopenharmony_ci        compatible:
18262306a36Sopenharmony_ci          contains:
18362306a36Sopenharmony_ci            enum:
18462306a36Sopenharmony_ci              - qcom,sm8150-cpufreq-hw
18562306a36Sopenharmony_ci    then:
18662306a36Sopenharmony_ci      properties:
18762306a36Sopenharmony_ci        reg:
18862306a36Sopenharmony_ci          minItems: 3
18962306a36Sopenharmony_ci          maxItems: 3
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci        reg-names:
19262306a36Sopenharmony_ci          minItems: 3
19362306a36Sopenharmony_ci          maxItems: 3
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci        # On some SoCs the Prime core shares the LMH irq with Big cores
19662306a36Sopenharmony_ci        interrupts:
19762306a36Sopenharmony_ci          minItems: 2
19862306a36Sopenharmony_ci          maxItems: 2
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci        interrupt-names:
20162306a36Sopenharmony_ci          minItems: 2
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ciexamples:
20562306a36Sopenharmony_ci  - |
20662306a36Sopenharmony_ci    #include <dt-bindings/clock/qcom,gcc-sdm845.h>
20762306a36Sopenharmony_ci    #include <dt-bindings/clock/qcom,rpmh.h>
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci    // Example 1: Dual-cluster, Quad-core per cluster. CPUs within a cluster
21062306a36Sopenharmony_ci    // switch DCVS state together.
21162306a36Sopenharmony_ci    cpus {
21262306a36Sopenharmony_ci      #address-cells = <2>;
21362306a36Sopenharmony_ci      #size-cells = <0>;
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ci      CPU0: cpu@0 {
21662306a36Sopenharmony_ci        device_type = "cpu";
21762306a36Sopenharmony_ci        compatible = "qcom,kryo385";
21862306a36Sopenharmony_ci        reg = <0x0 0x0>;
21962306a36Sopenharmony_ci        enable-method = "psci";
22062306a36Sopenharmony_ci        next-level-cache = <&L2_0>;
22162306a36Sopenharmony_ci        qcom,freq-domain = <&cpufreq_hw 0>;
22262306a36Sopenharmony_ci        clocks = <&cpufreq_hw 0>;
22362306a36Sopenharmony_ci        L2_0: l2-cache {
22462306a36Sopenharmony_ci          compatible = "cache";
22562306a36Sopenharmony_ci          cache-unified;
22662306a36Sopenharmony_ci          cache-level = <2>;
22762306a36Sopenharmony_ci          next-level-cache = <&L3_0>;
22862306a36Sopenharmony_ci          L3_0: l3-cache {
22962306a36Sopenharmony_ci            compatible = "cache";
23062306a36Sopenharmony_ci            cache-unified;
23162306a36Sopenharmony_ci            cache-level = <3>;
23262306a36Sopenharmony_ci          };
23362306a36Sopenharmony_ci        };
23462306a36Sopenharmony_ci      };
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci      CPU1: cpu@100 {
23762306a36Sopenharmony_ci        device_type = "cpu";
23862306a36Sopenharmony_ci        compatible = "qcom,kryo385";
23962306a36Sopenharmony_ci        reg = <0x0 0x100>;
24062306a36Sopenharmony_ci        enable-method = "psci";
24162306a36Sopenharmony_ci        next-level-cache = <&L2_100>;
24262306a36Sopenharmony_ci        qcom,freq-domain = <&cpufreq_hw 0>;
24362306a36Sopenharmony_ci        clocks = <&cpufreq_hw 0>;
24462306a36Sopenharmony_ci        L2_100: l2-cache {
24562306a36Sopenharmony_ci          compatible = "cache";
24662306a36Sopenharmony_ci          cache-unified;
24762306a36Sopenharmony_ci          cache-level = <2>;
24862306a36Sopenharmony_ci          next-level-cache = <&L3_0>;
24962306a36Sopenharmony_ci        };
25062306a36Sopenharmony_ci      };
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ci      CPU2: cpu@200 {
25362306a36Sopenharmony_ci        device_type = "cpu";
25462306a36Sopenharmony_ci        compatible = "qcom,kryo385";
25562306a36Sopenharmony_ci        reg = <0x0 0x200>;
25662306a36Sopenharmony_ci        enable-method = "psci";
25762306a36Sopenharmony_ci        next-level-cache = <&L2_200>;
25862306a36Sopenharmony_ci        qcom,freq-domain = <&cpufreq_hw 0>;
25962306a36Sopenharmony_ci        clocks = <&cpufreq_hw 0>;
26062306a36Sopenharmony_ci        L2_200: l2-cache {
26162306a36Sopenharmony_ci          compatible = "cache";
26262306a36Sopenharmony_ci          cache-unified;
26362306a36Sopenharmony_ci          cache-level = <2>;
26462306a36Sopenharmony_ci          next-level-cache = <&L3_0>;
26562306a36Sopenharmony_ci        };
26662306a36Sopenharmony_ci      };
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ci      CPU3: cpu@300 {
26962306a36Sopenharmony_ci        device_type = "cpu";
27062306a36Sopenharmony_ci        compatible = "qcom,kryo385";
27162306a36Sopenharmony_ci        reg = <0x0 0x300>;
27262306a36Sopenharmony_ci        enable-method = "psci";
27362306a36Sopenharmony_ci        next-level-cache = <&L2_300>;
27462306a36Sopenharmony_ci        qcom,freq-domain = <&cpufreq_hw 0>;
27562306a36Sopenharmony_ci        clocks = <&cpufreq_hw 0>;
27662306a36Sopenharmony_ci        L2_300: l2-cache {
27762306a36Sopenharmony_ci          compatible = "cache";
27862306a36Sopenharmony_ci          cache-unified;
27962306a36Sopenharmony_ci          cache-level = <2>;
28062306a36Sopenharmony_ci          next-level-cache = <&L3_0>;
28162306a36Sopenharmony_ci        };
28262306a36Sopenharmony_ci      };
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci      CPU4: cpu@400 {
28562306a36Sopenharmony_ci        device_type = "cpu";
28662306a36Sopenharmony_ci        compatible = "qcom,kryo385";
28762306a36Sopenharmony_ci        reg = <0x0 0x400>;
28862306a36Sopenharmony_ci        enable-method = "psci";
28962306a36Sopenharmony_ci        next-level-cache = <&L2_400>;
29062306a36Sopenharmony_ci        qcom,freq-domain = <&cpufreq_hw 1>;
29162306a36Sopenharmony_ci        clocks = <&cpufreq_hw 1>;
29262306a36Sopenharmony_ci        L2_400: l2-cache {
29362306a36Sopenharmony_ci          compatible = "cache";
29462306a36Sopenharmony_ci          cache-unified;
29562306a36Sopenharmony_ci          cache-level = <2>;
29662306a36Sopenharmony_ci          next-level-cache = <&L3_0>;
29762306a36Sopenharmony_ci        };
29862306a36Sopenharmony_ci      };
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci      CPU5: cpu@500 {
30162306a36Sopenharmony_ci        device_type = "cpu";
30262306a36Sopenharmony_ci        compatible = "qcom,kryo385";
30362306a36Sopenharmony_ci        reg = <0x0 0x500>;
30462306a36Sopenharmony_ci        enable-method = "psci";
30562306a36Sopenharmony_ci        next-level-cache = <&L2_500>;
30662306a36Sopenharmony_ci        qcom,freq-domain = <&cpufreq_hw 1>;
30762306a36Sopenharmony_ci        clocks = <&cpufreq_hw 1>;
30862306a36Sopenharmony_ci        L2_500: l2-cache {
30962306a36Sopenharmony_ci          compatible = "cache";
31062306a36Sopenharmony_ci          cache-unified;
31162306a36Sopenharmony_ci          cache-level = <2>;
31262306a36Sopenharmony_ci          next-level-cache = <&L3_0>;
31362306a36Sopenharmony_ci        };
31462306a36Sopenharmony_ci      };
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ci      CPU6: cpu@600 {
31762306a36Sopenharmony_ci        device_type = "cpu";
31862306a36Sopenharmony_ci        compatible = "qcom,kryo385";
31962306a36Sopenharmony_ci        reg = <0x0 0x600>;
32062306a36Sopenharmony_ci        enable-method = "psci";
32162306a36Sopenharmony_ci        next-level-cache = <&L2_600>;
32262306a36Sopenharmony_ci        qcom,freq-domain = <&cpufreq_hw 1>;
32362306a36Sopenharmony_ci        clocks = <&cpufreq_hw 1>;
32462306a36Sopenharmony_ci        L2_600: l2-cache {
32562306a36Sopenharmony_ci          compatible = "cache";
32662306a36Sopenharmony_ci          cache-unified;
32762306a36Sopenharmony_ci          cache-level = <2>;
32862306a36Sopenharmony_ci          next-level-cache = <&L3_0>;
32962306a36Sopenharmony_ci        };
33062306a36Sopenharmony_ci      };
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ci      CPU7: cpu@700 {
33362306a36Sopenharmony_ci        device_type = "cpu";
33462306a36Sopenharmony_ci        compatible = "qcom,kryo385";
33562306a36Sopenharmony_ci        reg = <0x0 0x700>;
33662306a36Sopenharmony_ci        enable-method = "psci";
33762306a36Sopenharmony_ci        next-level-cache = <&L2_700>;
33862306a36Sopenharmony_ci        qcom,freq-domain = <&cpufreq_hw 1>;
33962306a36Sopenharmony_ci        clocks = <&cpufreq_hw 1>;
34062306a36Sopenharmony_ci        L2_700: l2-cache {
34162306a36Sopenharmony_ci          compatible = "cache";
34262306a36Sopenharmony_ci          cache-unified;
34362306a36Sopenharmony_ci          cache-level = <2>;
34462306a36Sopenharmony_ci          next-level-cache = <&L3_0>;
34562306a36Sopenharmony_ci        };
34662306a36Sopenharmony_ci      };
34762306a36Sopenharmony_ci    };
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ci    soc {
35062306a36Sopenharmony_ci      #address-cells = <1>;
35162306a36Sopenharmony_ci      #size-cells = <1>;
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_ci      cpufreq@17d43000 {
35462306a36Sopenharmony_ci        compatible = "qcom,sdm845-cpufreq-hw", "qcom,cpufreq-hw";
35562306a36Sopenharmony_ci        reg = <0x17d43000 0x1400>, <0x17d45800 0x1400>;
35662306a36Sopenharmony_ci        reg-names = "freq-domain0", "freq-domain1";
35762306a36Sopenharmony_ci
35862306a36Sopenharmony_ci        clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GPLL0>;
35962306a36Sopenharmony_ci        clock-names = "xo", "alternate";
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci        #freq-domain-cells = <1>;
36262306a36Sopenharmony_ci        #clock-cells = <1>;
36362306a36Sopenharmony_ci      };
36462306a36Sopenharmony_ci    };
36562306a36Sopenharmony_ci...
366