1d17f8338SKrzysztof Kozlowski* Generic PM domains
2d17f8338SKrzysztof Kozlowski
3d17f8338SKrzysztof KozlowskiSystem on chip designs are often divided into multiple PM domains that can be
4d17f8338SKrzysztof Kozlowskiused for power gating of selected IP blocks for power saving by reduced leakage
5d17f8338SKrzysztof Kozlowskicurrent.
6d17f8338SKrzysztof Kozlowski
7d17f8338SKrzysztof KozlowskiThis device tree binding can be used to bind PM domain consumer devices with
8d17f8338SKrzysztof Kozlowskitheir PM domains provided by PM domain providers. A PM domain provider can be
9d17f8338SKrzysztof Kozlowskirepresented by any node in the device tree and can provide one or more PM
10d17f8338SKrzysztof Kozlowskidomains. A consumer node can refer to the provider by a phandle and a set of
11d17f8338SKrzysztof Kozlowskiphandle arguments (so called PM domain specifiers) of length specified by the
12d17f8338SKrzysztof Kozlowski#power-domain-cells property in the PM domain provider node.
13d17f8338SKrzysztof Kozlowski
14d17f8338SKrzysztof Kozlowski==PM domain providers==
15d17f8338SKrzysztof Kozlowski
16d17f8338SKrzysztof KozlowskiSee power-domain.yaml.
17d17f8338SKrzysztof Kozlowski
18d17f8338SKrzysztof Kozlowski==PM domain consumers==
19d17f8338SKrzysztof Kozlowski
20d17f8338SKrzysztof KozlowskiRequired properties:
21d17f8338SKrzysztof Kozlowski - power-domains : A list of PM domain specifiers, as defined by bindings of
22d17f8338SKrzysztof Kozlowski		the power controller that is the PM domain provider.
23d17f8338SKrzysztof Kozlowski
24d17f8338SKrzysztof KozlowskiOptional properties:
25d17f8338SKrzysztof Kozlowski - power-domain-names : A list of power domain name strings sorted in the same
26d17f8338SKrzysztof Kozlowski		order as the power-domains property. Consumers drivers will use
27d17f8338SKrzysztof Kozlowski		power-domain-names to match power domains with power-domains
28d17f8338SKrzysztof Kozlowski		specifiers.
29d17f8338SKrzysztof Kozlowski
30d17f8338SKrzysztof KozlowskiExample:
31d17f8338SKrzysztof Kozlowski
32d17f8338SKrzysztof Kozlowski	leaky-device@12350000 {
33d17f8338SKrzysztof Kozlowski		compatible = "foo,i-leak-current";
34d17f8338SKrzysztof Kozlowski		reg = <0x12350000 0x1000>;
35d17f8338SKrzysztof Kozlowski		power-domains = <&power 0>;
36d17f8338SKrzysztof Kozlowski		power-domain-names = "io";
37d17f8338SKrzysztof Kozlowski	};
38d17f8338SKrzysztof Kozlowski
39d17f8338SKrzysztof Kozlowski	leaky-device@12351000 {
40d17f8338SKrzysztof Kozlowski		compatible = "foo,i-leak-current";
41d17f8338SKrzysztof Kozlowski		reg = <0x12351000 0x1000>;
42d17f8338SKrzysztof Kozlowski		power-domains = <&power 0>, <&power 1> ;
43d17f8338SKrzysztof Kozlowski		power-domain-names = "io", "clk";
44d17f8338SKrzysztof Kozlowski	};
45d17f8338SKrzysztof Kozlowski
46d17f8338SKrzysztof KozlowskiThe first example above defines a typical PM domain consumer device, which is
47d17f8338SKrzysztof Kozlowskilocated inside a PM domain with index 0 of a power controller represented by a
48d17f8338SKrzysztof Kozlowskinode with the label "power".
49d17f8338SKrzysztof KozlowskiIn the second example the consumer device are partitioned across two PM domains,
50d17f8338SKrzysztof Kozlowskithe first with index 0 and the second with index 1, of a power controller that
51d17f8338SKrzysztof Kozlowskiis represented by a node with the label "power".
52d17f8338SKrzysztof Kozlowski
53d17f8338SKrzysztof KozlowskiOptional properties:
54d17f8338SKrzysztof Kozlowski- required-opps: This contains phandle to an OPP node in another device's OPP
55d17f8338SKrzysztof Kozlowski  table. It may contain an array of phandles, where each phandle points to an
56d17f8338SKrzysztof Kozlowski  OPP of a different device. It should not contain multiple phandles to the OPP
57d17f8338SKrzysztof Kozlowski  nodes in the same OPP table. This specifies the minimum required OPP of the
58d17f8338SKrzysztof Kozlowski  device(s), whose OPP's phandle is present in this property, for the
59d17f8338SKrzysztof Kozlowski  functioning of the current device at the current OPP (where this property is
60d17f8338SKrzysztof Kozlowski  present).
61d17f8338SKrzysztof Kozlowski
62d17f8338SKrzysztof KozlowskiExample:
63d17f8338SKrzysztof Kozlowski- OPP table for domain provider that provides two domains.
64d17f8338SKrzysztof Kozlowski
65d17f8338SKrzysztof Kozlowski	domain0_opp_table: opp-table0 {
66d17f8338SKrzysztof Kozlowski		compatible = "operating-points-v2";
67d17f8338SKrzysztof Kozlowski
68d17f8338SKrzysztof Kozlowski		domain0_opp_0: opp-1000000000 {
69d17f8338SKrzysztof Kozlowski			opp-hz = /bits/ 64 <1000000000>;
70d17f8338SKrzysztof Kozlowski			opp-microvolt = <975000 970000 985000>;
71d17f8338SKrzysztof Kozlowski		};
72d17f8338SKrzysztof Kozlowski		domain0_opp_1: opp-1100000000 {
73d17f8338SKrzysztof Kozlowski			opp-hz = /bits/ 64 <1100000000>;
74d17f8338SKrzysztof Kozlowski			opp-microvolt = <1000000 980000 1010000>;
75d17f8338SKrzysztof Kozlowski		};
76d17f8338SKrzysztof Kozlowski	};
77d17f8338SKrzysztof Kozlowski
78d17f8338SKrzysztof Kozlowski	domain1_opp_table: opp-table1 {
79d17f8338SKrzysztof Kozlowski		compatible = "operating-points-v2";
80d17f8338SKrzysztof Kozlowski
81d17f8338SKrzysztof Kozlowski		domain1_opp_0: opp-1200000000 {
82d17f8338SKrzysztof Kozlowski			opp-hz = /bits/ 64 <1200000000>;
83d17f8338SKrzysztof Kozlowski			opp-microvolt = <975000 970000 985000>;
84d17f8338SKrzysztof Kozlowski		};
85d17f8338SKrzysztof Kozlowski		domain1_opp_1: opp-1300000000 {
86d17f8338SKrzysztof Kozlowski			opp-hz = /bits/ 64 <1300000000>;
87d17f8338SKrzysztof Kozlowski			opp-microvolt = <1000000 980000 1010000>;
88d17f8338SKrzysztof Kozlowski		};
89d17f8338SKrzysztof Kozlowski	};
90d17f8338SKrzysztof Kozlowski
91d17f8338SKrzysztof Kozlowski	power: power-controller@12340000 {
92d17f8338SKrzysztof Kozlowski		compatible = "foo,power-controller";
93d17f8338SKrzysztof Kozlowski		reg = <0x12340000 0x1000>;
94d17f8338SKrzysztof Kozlowski		#power-domain-cells = <1>;
95d17f8338SKrzysztof Kozlowski		operating-points-v2 = <&domain0_opp_table>, <&domain1_opp_table>;
96d17f8338SKrzysztof Kozlowski	};
97d17f8338SKrzysztof Kozlowski
98d17f8338SKrzysztof Kozlowski	leaky-device0@12350000 {
99d17f8338SKrzysztof Kozlowski		compatible = "foo,i-leak-current";
100d17f8338SKrzysztof Kozlowski		reg = <0x12350000 0x1000>;
101d17f8338SKrzysztof Kozlowski		power-domains = <&power 0>;
102d17f8338SKrzysztof Kozlowski		required-opps = <&domain0_opp_0>;
103d17f8338SKrzysztof Kozlowski	};
104d17f8338SKrzysztof Kozlowski
105d17f8338SKrzysztof Kozlowski	leaky-device1@12350000 {
106d17f8338SKrzysztof Kozlowski		compatible = "foo,i-leak-current";
107d17f8338SKrzysztof Kozlowski		reg = <0x12350000 0x1000>;
108d17f8338SKrzysztof Kozlowski		power-domains = <&power 1>;
109d17f8338SKrzysztof Kozlowski		required-opps = <&domain1_opp_1>;
110d17f8338SKrzysztof Kozlowski	};
111d17f8338SKrzysztof Kozlowski
1123261227dSUlf Hansson[1]. Documentation/devicetree/bindings/power/domain-idle-state.yaml
113