xref: /freebsd-src/sys/contrib/device-tree/Bindings/dvfs/performance-domain.yaml (revision f126890ac5386406dadf7c4cfa9566cbb56537c5)
15956d97fSEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
25956d97fSEmmanuel Vadot%YAML 1.2
35956d97fSEmmanuel Vadot---
45956d97fSEmmanuel Vadot$id: http://devicetree.org/schemas/dvfs/performance-domain.yaml#
55956d97fSEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
65956d97fSEmmanuel Vadot
75956d97fSEmmanuel Vadottitle: Generic performance domains
85956d97fSEmmanuel Vadot
95956d97fSEmmanuel Vadotmaintainers:
105956d97fSEmmanuel Vadot  - Sudeep Holla <sudeep.holla@arm.com>
115956d97fSEmmanuel Vadot
125956d97fSEmmanuel Vadotdescription: |+
135956d97fSEmmanuel Vadot  This binding is intended for performance management of groups of devices or
145956d97fSEmmanuel Vadot  CPUs that run in the same performance domain. Performance domains must not
155956d97fSEmmanuel Vadot  be confused with power domains. A performance domain is defined by a set
165956d97fSEmmanuel Vadot  of devices that always have to run at the same performance level. For a given
175956d97fSEmmanuel Vadot  performance domain, there is a single point of control that affects all the
185956d97fSEmmanuel Vadot  devices in the domain, making it impossible to set the performance level of
195956d97fSEmmanuel Vadot  an individual device in the domain independently from other devices in
205956d97fSEmmanuel Vadot  that domain. For example, a set of CPUs that share a voltage domain, and
215956d97fSEmmanuel Vadot  have a common frequency control, is said to be in the same performance
225956d97fSEmmanuel Vadot  domain.
235956d97fSEmmanuel Vadot
245956d97fSEmmanuel Vadot  This device tree binding can be used to bind performance domain consumer
255956d97fSEmmanuel Vadot  devices with their performance domains provided by performance domain
265956d97fSEmmanuel Vadot  providers. A performance domain provider can be represented by any node in
275956d97fSEmmanuel Vadot  the device tree and can provide one or more performance domains. A consumer
285956d97fSEmmanuel Vadot  node can refer to the provider by a phandle and a set of phandle arguments
295956d97fSEmmanuel Vadot  (so called performance domain specifiers) of length specified by the
305956d97fSEmmanuel Vadot  \#performance-domain-cells property in the performance domain provider node.
315956d97fSEmmanuel Vadot
325956d97fSEmmanuel Vadotselect: true
335956d97fSEmmanuel Vadot
345956d97fSEmmanuel Vadotproperties:
355956d97fSEmmanuel Vadot  "#performance-domain-cells":
365956d97fSEmmanuel Vadot    description:
375956d97fSEmmanuel Vadot      Number of cells in a performance domain specifier. Typically 0 for nodes
385956d97fSEmmanuel Vadot      representing a single performance domain and 1 for nodes providing
395956d97fSEmmanuel Vadot      multiple performance domains (e.g. performance controllers), but can be
405956d97fSEmmanuel Vadot      any value as specified by device tree binding documentation of particular
415956d97fSEmmanuel Vadot      provider.
425956d97fSEmmanuel Vadot    enum: [ 0, 1 ]
435956d97fSEmmanuel Vadot
445956d97fSEmmanuel Vadot  performance-domains:
45*f126890aSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/phandle-array
465956d97fSEmmanuel Vadot    description:
475956d97fSEmmanuel Vadot      A phandle and performance domain specifier as defined by bindings of the
485956d97fSEmmanuel Vadot      performance controller/provider specified by phandle.
495956d97fSEmmanuel Vadot
505956d97fSEmmanuel VadotadditionalProperties: true
515956d97fSEmmanuel Vadot
525956d97fSEmmanuel Vadotexamples:
535956d97fSEmmanuel Vadot  - |
54c9ccf3a3SEmmanuel Vadot    soc {
55c9ccf3a3SEmmanuel Vadot        #address-cells = <2>;
56c9ccf3a3SEmmanuel Vadot        #size-cells = <2>;
57c9ccf3a3SEmmanuel Vadot
58c9ccf3a3SEmmanuel Vadot        performance: performance-controller@11bc00 {
59c9ccf3a3SEmmanuel Vadot            compatible = "mediatek,cpufreq-hw";
60c9ccf3a3SEmmanuel Vadot            reg = <0 0x0011bc10 0 0x120>, <0 0x0011bd30 0 0x120>;
61c9ccf3a3SEmmanuel Vadot
625956d97fSEmmanuel Vadot            #performance-domain-cells = <1>;
635956d97fSEmmanuel Vadot        };
64c9ccf3a3SEmmanuel Vadot    };
655956d97fSEmmanuel Vadot
665956d97fSEmmanuel Vadot    // The node above defines a performance controller that is a performance
675956d97fSEmmanuel Vadot    // domain provider and expects one cell as its phandle argument.
685956d97fSEmmanuel Vadot
695956d97fSEmmanuel Vadot    cpus {
705956d97fSEmmanuel Vadot        #address-cells = <2>;
715956d97fSEmmanuel Vadot        #size-cells = <0>;
725956d97fSEmmanuel Vadot
735956d97fSEmmanuel Vadot        cpu@0 {
745956d97fSEmmanuel Vadot            device_type = "cpu";
755956d97fSEmmanuel Vadot            compatible = "arm,cortex-a57";
765956d97fSEmmanuel Vadot            reg = <0x0 0x0>;
775956d97fSEmmanuel Vadot            performance-domains = <&performance 1>;
785956d97fSEmmanuel Vadot        };
795956d97fSEmmanuel Vadot    };
80