GNU Linux-libre 4.9.337-gnu1
[releases.git] / Documentation / devicetree / bindings / soc / rockchip / power_domain.txt
1 * Rockchip Power Domains
2
3 Rockchip processors include support for multiple power domains which can be
4 powered up/down by software based on different application scenes to save power.
5
6 Required properties for power domain controller:
7 - compatible: Should be one of the following.
8         "rockchip,rk3288-power-controller" - for RK3288 SoCs.
9         "rockchip,rk3368-power-controller" - for RK3368 SoCs.
10         "rockchip,rk3399-power-controller" - for RK3399 SoCs.
11 - #power-domain-cells: Number of cells in a power-domain specifier.
12         Should be 1 for multiple PM domains.
13 - #address-cells: Should be 1.
14 - #size-cells: Should be 0.
15
16 Required properties for power domain sub nodes:
17 - reg: index of the power domain, should use macros in:
18         "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain.
19         "include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain.
20         "include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain.
21 - clocks (optional): phandles to clocks which need to be enabled while power domain
22         switches state.
23 - pm_qos (optional): phandles to qos blocks which need to be saved and restored
24         while power domain switches state.
25
26 Qos Example:
27
28         qos_gpu: qos_gpu@ffaf0000 {
29                 compatible ="syscon";
30                 reg = <0x0 0xffaf0000 0x0 0x20>;
31         };
32
33 Example:
34
35         power: power-controller {
36                 compatible = "rockchip,rk3288-power-controller";
37                 #power-domain-cells = <1>;
38                 #address-cells = <1>;
39                 #size-cells = <0>;
40
41                 pd_gpu {
42                         reg = <RK3288_PD_GPU>;
43                         clocks = <&cru ACLK_GPU>;
44                         pm_qos = <&qos_gpu>;
45                 };
46         };
47
48          power: power-controller {
49                 compatible = "rockchip,rk3368-power-controller";
50                 #power-domain-cells = <1>;
51                 #address-cells = <1>;
52                 #size-cells = <0>;
53
54                 pd_gpu_1 {
55                         reg = <RK3368_PD_GPU_1>;
56                         clocks = <&cru ACLK_GPU_CFG>;
57                 };
58         };
59
60 Example 2:
61                 power: power-controller {
62                         compatible = "rockchip,rk3399-power-controller";
63                         #power-domain-cells = <1>;
64                         #address-cells = <1>;
65                         #size-cells = <0>;
66
67                         pd_vio {
68                                 #address-cells = <1>;
69                                 #size-cells = <0>;
70                                 reg = <RK3399_PD_VIO>;
71
72                                 pd_vo {
73                                         #address-cells = <1>;
74                                         #size-cells = <0>;
75                                         reg = <RK3399_PD_VO>;
76
77                                         pd_vopb {
78                                                 reg = <RK3399_PD_VOPB>;
79                                         };
80
81                                         pd_vopl {
82                                                 reg = <RK3399_PD_VOPL>;
83                                         };
84                                 };
85                         };
86                 };
87
88 Node of a device using power domains must have a power-domains property,
89 containing a phandle to the power device node and an index specifying which
90 power domain to use.
91 The index should use macros in:
92         "include/dt-bindings/power/rk3288-power.h" - for rk3288 type power domain.
93         "include/dt-bindings/power/rk3368-power.h" - for rk3368 type power domain.
94         "include/dt-bindings/power/rk3399-power.h" - for rk3399 type power domain.
95
96 Example of the node using power domain:
97
98         node {
99                 /* ... */
100                 power-domains = <&power RK3288_PD_GPU>;
101                 /* ... */
102         };
103
104         node {
105                 /* ... */
106                 power-domains = <&power RK3368_PD_GPU_1>;
107                 /* ... */
108         };
109
110         node {
111                 /* ... */
112                 power-domains = <&power RK3399_PD_VOPB>;
113                 /* ... */
114         };