^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) %YAML 1.2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) ---
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) $id: http://devicetree.org/schemas/power/power-domain.yaml#
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) $schema: http://devicetree.org/meta-schemas/core.yaml#
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) title: Generic PM domains
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) maintainers:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) - Rafael J. Wysocki <rjw@rjwysocki.net>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) - Kevin Hilman <khilman@kernel.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) - Ulf Hansson <ulf.hansson@linaro.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) description: |+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) System on chip designs are often divided into multiple PM domains that can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) used for power gating of selected IP blocks for power saving by reduced leakage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) current.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) This device tree binding can be used to bind PM domain consumer devices with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) their PM domains provided by PM domain providers. A PM domain provider can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) represented by any node in the device tree and can provide one or more PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) domains. A consumer node can refer to the provider by a phandle and a set of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) phandle arguments (so called PM domain specifiers) of length specified by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) \#power-domain-cells property in the PM domain provider node.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) properties:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) $nodename:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) pattern: "^(power-controller|power-domain)([@-].*)?$"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) domain-idle-states:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) $ref: /schemas/types.yaml#/definitions/phandle-array
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) description: |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) Phandles of idle states that defines the available states for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) power-domain provider. The idle state definitions are compatible with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) domain-idle-state bindings, specified in ./domain-idle-state.yaml.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) Note that, the domain-idle-state property reflects the idle states of this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) PM domain and not the idle states of the devices or sub-domains in the PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) domain. Devices and sub-domains have their own idle states independent of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) the parent domain's idle states. In the absence of this property, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) domain would be considered as capable of being powered-on or powered-off.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) operating-points-v2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) $ref: /schemas/types.yaml#/definitions/phandle-array
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) description:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) Phandles to the OPP tables of power domains provided by a power domain
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) provider. If the provider provides a single power domain only or all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) the power domains provided by the provider have identical OPP tables,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) then this shall contain a single phandle. Refer to ../opp/opp.txt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) for more information.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) "#power-domain-cells":
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) description:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) Number of cells in a PM domain specifier. Typically 0 for nodes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) representing a single PM domain and 1 for nodes providing multiple PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) domains (e.g. power controllers), but can be any value as specified
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) by device tree binding documentation of particular provider.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) power-domains:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) description:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) A phandle and PM domain specifier as defined by bindings of the power
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) controller specified by phandle. Some power domains might be powered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) from another power domain (or have other hardware specific
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) dependencies). For representing such dependency a standard PM domain
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) consumer binding is used. When provided, all domains created
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) by the given provider should be subdomains of the domain specified
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) by this binding.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) required:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) - "#power-domain-cells"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) additionalProperties: true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) examples:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) - |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) power: power-controller@12340000 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) compatible = "foo,power-controller";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) reg = <0x12340000 0x1000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #power-domain-cells = <1>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) // The node above defines a power controller that is a PM domain provider and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) // expects one cell as its phandle argument.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) - |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) parent2: power-controller@12340000 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) compatible = "foo,power-controller";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) reg = <0x12340000 0x1000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #power-domain-cells = <1>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) child2: power-controller@12341000 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) compatible = "foo,power-controller";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) reg = <0x12341000 0x1000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) power-domains = <&parent2 0>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #power-domain-cells = <1>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) // The nodes above define two power controllers: 'parent' and 'child'.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) // Domains created by the 'child' power controller are subdomains of '0' power
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) // domain provided by the 'parent' power controller.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) - |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) parent3: power-controller@12340000 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) compatible = "foo,power-controller";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) reg = <0x12340000 0x1000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #power-domain-cells = <0>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) domain-idle-states = <&DOMAIN_RET>, <&DOMAIN_PWR_DN>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) child3: power-controller@12341000 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) compatible = "foo,power-controller";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) reg = <0x12341000 0x1000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) power-domains = <&parent3>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #power-domain-cells = <0>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) domain-idle-states = <&DOMAIN_PWR_DN>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) domain-idle-states {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) DOMAIN_RET: domain-retention {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) compatible = "domain-idle-state";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) entry-latency-us = <1000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) exit-latency-us = <2000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) min-residency-us = <10000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) DOMAIN_PWR_DN: domain-pwr-dn {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) compatible = "domain-idle-state";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) entry-latency-us = <5000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) exit-latency-us = <8000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) min-residency-us = <7000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) };