162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/dvfs/performance-domain.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Generic performance domains
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Sudeep Holla <sudeep.holla@arm.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |+
1362306a36Sopenharmony_ci  This binding is intended for performance management of groups of devices or
1462306a36Sopenharmony_ci  CPUs that run in the same performance domain. Performance domains must not
1562306a36Sopenharmony_ci  be confused with power domains. A performance domain is defined by a set
1662306a36Sopenharmony_ci  of devices that always have to run at the same performance level. For a given
1762306a36Sopenharmony_ci  performance domain, there is a single point of control that affects all the
1862306a36Sopenharmony_ci  devices in the domain, making it impossible to set the performance level of
1962306a36Sopenharmony_ci  an individual device in the domain independently from other devices in
2062306a36Sopenharmony_ci  that domain. For example, a set of CPUs that share a voltage domain, and
2162306a36Sopenharmony_ci  have a common frequency control, is said to be in the same performance
2262306a36Sopenharmony_ci  domain.
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci  This device tree binding can be used to bind performance domain consumer
2562306a36Sopenharmony_ci  devices with their performance domains provided by performance domain
2662306a36Sopenharmony_ci  providers. A performance domain provider can be represented by any node in
2762306a36Sopenharmony_ci  the device tree and can provide one or more performance domains. A consumer
2862306a36Sopenharmony_ci  node can refer to the provider by a phandle and a set of phandle arguments
2962306a36Sopenharmony_ci  (so called performance domain specifiers) of length specified by the
3062306a36Sopenharmony_ci  \#performance-domain-cells property in the performance domain provider node.
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciselect: true
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ciproperties:
3562306a36Sopenharmony_ci  "#performance-domain-cells":
3662306a36Sopenharmony_ci    description:
3762306a36Sopenharmony_ci      Number of cells in a performance domain specifier. Typically 0 for nodes
3862306a36Sopenharmony_ci      representing a single performance domain and 1 for nodes providing
3962306a36Sopenharmony_ci      multiple performance domains (e.g. performance controllers), but can be
4062306a36Sopenharmony_ci      any value as specified by device tree binding documentation of particular
4162306a36Sopenharmony_ci      provider.
4262306a36Sopenharmony_ci    enum: [ 0, 1 ]
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  performance-domains:
4562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle-array
4662306a36Sopenharmony_ci    description:
4762306a36Sopenharmony_ci      A phandle and performance domain specifier as defined by bindings of the
4862306a36Sopenharmony_ci      performance controller/provider specified by phandle.
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ciadditionalProperties: true
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciexamples:
5362306a36Sopenharmony_ci  - |
5462306a36Sopenharmony_ci    soc {
5562306a36Sopenharmony_ci        #address-cells = <2>;
5662306a36Sopenharmony_ci        #size-cells = <2>;
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci        performance: performance-controller@11bc00 {
5962306a36Sopenharmony_ci            compatible = "mediatek,cpufreq-hw";
6062306a36Sopenharmony_ci            reg = <0 0x0011bc10 0 0x120>, <0 0x0011bd30 0 0x120>;
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci            #performance-domain-cells = <1>;
6362306a36Sopenharmony_ci        };
6462306a36Sopenharmony_ci    };
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci    // The node above defines a performance controller that is a performance
6762306a36Sopenharmony_ci    // domain provider and expects one cell as its phandle argument.
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci    cpus {
7062306a36Sopenharmony_ci        #address-cells = <2>;
7162306a36Sopenharmony_ci        #size-cells = <0>;
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci        cpu@0 {
7462306a36Sopenharmony_ci            device_type = "cpu";
7562306a36Sopenharmony_ci            compatible = "arm,cortex-a57";
7662306a36Sopenharmony_ci            reg = <0x0 0x0>;
7762306a36Sopenharmony_ci            performance-domains = <&performance 1>;
7862306a36Sopenharmony_ci        };
7962306a36Sopenharmony_ci    };
80