113 lines
3.6 KiB
Plaintext
113 lines
3.6 KiB
Plaintext
* Generic PM domains
|
|
|
|
System on chip designs are often divided into multiple PM domains that can be
|
|
used for power gating of selected IP blocks for power saving by reduced leakage
|
|
current.
|
|
|
|
This device tree binding can be used to bind PM domain consumer devices with
|
|
their PM domains provided by PM domain providers. A PM domain provider can be
|
|
represented by any node in the device tree and can provide one or more PM
|
|
domains. A consumer node can refer to the provider by a phandle and a set of
|
|
phandle arguments (so called PM domain specifiers) of length specified by the
|
|
#power-domain-cells property in the PM domain provider node.
|
|
|
|
==PM domain providers==
|
|
|
|
See power-domain.yaml.
|
|
|
|
==PM domain consumers==
|
|
|
|
Required properties:
|
|
- power-domains : A list of PM domain specifiers, as defined by bindings of
|
|
the power controller that is the PM domain provider.
|
|
|
|
Optional properties:
|
|
- power-domain-names : A list of power domain name strings sorted in the same
|
|
order as the power-domains property. Consumers drivers will use
|
|
power-domain-names to match power domains with power-domains
|
|
specifiers.
|
|
|
|
Example:
|
|
|
|
leaky-device@12350000 {
|
|
compatible = "foo,i-leak-current";
|
|
reg = <0x12350000 0x1000>;
|
|
power-domains = <&power 0>;
|
|
power-domain-names = "io";
|
|
};
|
|
|
|
leaky-device@12351000 {
|
|
compatible = "foo,i-leak-current";
|
|
reg = <0x12351000 0x1000>;
|
|
power-domains = <&power 0>, <&power 1> ;
|
|
power-domain-names = "io", "clk";
|
|
};
|
|
|
|
The first example above defines a typical PM domain consumer device, which is
|
|
located inside a PM domain with index 0 of a power controller represented by a
|
|
node with the label "power".
|
|
In the second example the consumer device are partitioned across two PM domains,
|
|
the first with index 0 and the second with index 1, of a power controller that
|
|
is represented by a node with the label "power".
|
|
|
|
Optional properties:
|
|
- required-opps: This contains phandle to an OPP node in another device's OPP
|
|
table. It may contain an array of phandles, where each phandle points to an
|
|
OPP of a different device. It should not contain multiple phandles to the OPP
|
|
nodes in the same OPP table. This specifies the minimum required OPP of the
|
|
device(s), whose OPP's phandle is present in this property, for the
|
|
functioning of the current device at the current OPP (where this property is
|
|
present).
|
|
|
|
Example:
|
|
- OPP table for domain provider that provides two domains.
|
|
|
|
domain0_opp_table: opp-table0 {
|
|
compatible = "operating-points-v2";
|
|
|
|
domain0_opp_0: opp-1000000000 {
|
|
opp-hz = /bits/ 64 <1000000000>;
|
|
opp-microvolt = <975000 970000 985000>;
|
|
};
|
|
domain0_opp_1: opp-1100000000 {
|
|
opp-hz = /bits/ 64 <1100000000>;
|
|
opp-microvolt = <1000000 980000 1010000>;
|
|
};
|
|
};
|
|
|
|
domain1_opp_table: opp-table1 {
|
|
compatible = "operating-points-v2";
|
|
|
|
domain1_opp_0: opp-1200000000 {
|
|
opp-hz = /bits/ 64 <1200000000>;
|
|
opp-microvolt = <975000 970000 985000>;
|
|
};
|
|
domain1_opp_1: opp-1300000000 {
|
|
opp-hz = /bits/ 64 <1300000000>;
|
|
opp-microvolt = <1000000 980000 1010000>;
|
|
};
|
|
};
|
|
|
|
power: power-controller@12340000 {
|
|
compatible = "foo,power-controller";
|
|
reg = <0x12340000 0x1000>;
|
|
#power-domain-cells = <1>;
|
|
operating-points-v2 = <&domain0_opp_table>, <&domain1_opp_table>;
|
|
};
|
|
|
|
leaky-device0@12350000 {
|
|
compatible = "foo,i-leak-current";
|
|
reg = <0x12350000 0x1000>;
|
|
power-domains = <&power 0>;
|
|
required-opps = <&domain0_opp_0>;
|
|
};
|
|
|
|
leaky-device1@12350000 {
|
|
compatible = "foo,i-leak-current";
|
|
reg = <0x12350000 0x1000>;
|
|
power-domains = <&power 1>;
|
|
required-opps = <&domain1_opp_1>;
|
|
};
|
|
|
|
[1]. Documentation/devicetree/bindings/power/domain-idle-state.yaml
|