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/apple,cluster-cpufreq.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Apple SoC cluster cpufreq device
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Hector Martin <marcan@marcan.st>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci  Apple SoCs (e.g. M1) have a per-cpu-cluster DVFS controller that is part of
1462306a36Sopenharmony_ci  the cluster management register block. This binding uses the standard
1562306a36Sopenharmony_ci  operating-points-v2 table to define the CPU performance states, with the
1662306a36Sopenharmony_ci  opp-level property specifying the hardware p-state index for that level.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciproperties:
1962306a36Sopenharmony_ci  compatible:
2062306a36Sopenharmony_ci    oneOf:
2162306a36Sopenharmony_ci      - items:
2262306a36Sopenharmony_ci          - enum:
2362306a36Sopenharmony_ci              - apple,t8103-cluster-cpufreq
2462306a36Sopenharmony_ci              - apple,t8112-cluster-cpufreq
2562306a36Sopenharmony_ci          - const: apple,cluster-cpufreq
2662306a36Sopenharmony_ci      - items:
2762306a36Sopenharmony_ci          - const: apple,t6000-cluster-cpufreq
2862306a36Sopenharmony_ci          - const: apple,t8103-cluster-cpufreq
2962306a36Sopenharmony_ci          - const: apple,cluster-cpufreq
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci  reg:
3262306a36Sopenharmony_ci    maxItems: 1
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci  '#performance-domain-cells':
3562306a36Sopenharmony_ci    const: 0
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cirequired:
3862306a36Sopenharmony_ci  - compatible
3962306a36Sopenharmony_ci  - reg
4062306a36Sopenharmony_ci  - '#performance-domain-cells'
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciadditionalProperties: false
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciexamples:
4562306a36Sopenharmony_ci  - |
4662306a36Sopenharmony_ci    // This example shows a single CPU per domain and 2 domains,
4762306a36Sopenharmony_ci    // with two p-states per domain.
4862306a36Sopenharmony_ci    // Shipping hardware has 2-4 CPUs per domain and 2-6 domains.
4962306a36Sopenharmony_ci    cpus {
5062306a36Sopenharmony_ci      #address-cells = <2>;
5162306a36Sopenharmony_ci      #size-cells = <0>;
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci      cpu@0 {
5462306a36Sopenharmony_ci        compatible = "apple,icestorm";
5562306a36Sopenharmony_ci        device_type = "cpu";
5662306a36Sopenharmony_ci        reg = <0x0 0x0>;
5762306a36Sopenharmony_ci        operating-points-v2 = <&ecluster_opp>;
5862306a36Sopenharmony_ci        performance-domains = <&cpufreq_e>;
5962306a36Sopenharmony_ci      };
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci      cpu@10100 {
6262306a36Sopenharmony_ci        compatible = "apple,firestorm";
6362306a36Sopenharmony_ci        device_type = "cpu";
6462306a36Sopenharmony_ci        reg = <0x0 0x10100>;
6562306a36Sopenharmony_ci        operating-points-v2 = <&pcluster_opp>;
6662306a36Sopenharmony_ci        performance-domains = <&cpufreq_p>;
6762306a36Sopenharmony_ci      };
6862306a36Sopenharmony_ci    };
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci    ecluster_opp: opp-table-0 {
7162306a36Sopenharmony_ci      compatible = "operating-points-v2";
7262306a36Sopenharmony_ci      opp-shared;
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci      opp01 {
7562306a36Sopenharmony_ci        opp-hz = /bits/ 64 <600000000>;
7662306a36Sopenharmony_ci        opp-level = <1>;
7762306a36Sopenharmony_ci        clock-latency-ns = <7500>;
7862306a36Sopenharmony_ci      };
7962306a36Sopenharmony_ci      opp02 {
8062306a36Sopenharmony_ci        opp-hz = /bits/ 64 <972000000>;
8162306a36Sopenharmony_ci        opp-level = <2>;
8262306a36Sopenharmony_ci        clock-latency-ns = <22000>;
8362306a36Sopenharmony_ci      };
8462306a36Sopenharmony_ci    };
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci    pcluster_opp: opp-table-1 {
8762306a36Sopenharmony_ci      compatible = "operating-points-v2";
8862306a36Sopenharmony_ci      opp-shared;
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci      opp01 {
9162306a36Sopenharmony_ci        opp-hz = /bits/ 64 <600000000>;
9262306a36Sopenharmony_ci        opp-level = <1>;
9362306a36Sopenharmony_ci        clock-latency-ns = <8000>;
9462306a36Sopenharmony_ci      };
9562306a36Sopenharmony_ci      opp02 {
9662306a36Sopenharmony_ci        opp-hz = /bits/ 64 <828000000>;
9762306a36Sopenharmony_ci        opp-level = <2>;
9862306a36Sopenharmony_ci        clock-latency-ns = <19000>;
9962306a36Sopenharmony_ci      };
10062306a36Sopenharmony_ci    };
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci    soc {
10362306a36Sopenharmony_ci      #address-cells = <2>;
10462306a36Sopenharmony_ci      #size-cells = <2>;
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci      cpufreq_e: performance-controller@210e20000 {
10762306a36Sopenharmony_ci        compatible = "apple,t8103-cluster-cpufreq", "apple,cluster-cpufreq";
10862306a36Sopenharmony_ci        reg = <0x2 0x10e20000 0 0x1000>;
10962306a36Sopenharmony_ci        #performance-domain-cells = <0>;
11062306a36Sopenharmony_ci      };
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci      cpufreq_p: performance-controller@211e20000 {
11362306a36Sopenharmony_ci        compatible = "apple,t8103-cluster-cpufreq", "apple,cluster-cpufreq";
11462306a36Sopenharmony_ci        reg = <0x2 0x11e20000 0 0x1000>;
11562306a36Sopenharmony_ci        #performance-domain-cells = <0>;
11662306a36Sopenharmony_ci      };
11762306a36Sopenharmony_ci    };
118