1*4882a593Smuzhiyun* Rockchip Power Domains 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunRockchip processors include support for multiple power domains which can be 4*4882a593Smuzhiyunpowered up/down by software based on different application scenes to save power. 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunRequired properties for power domain controller: 7*4882a593Smuzhiyun- compatible: Should be one of the following. 8*4882a593Smuzhiyun "rockchip,px30-power-controller" - for PX30 SoCs. 9*4882a593Smuzhiyun "rockchip,rv1126-power-controller" - for RV1126 SoCs 10*4882a593Smuzhiyun "rockchip,rk1808-power-controller" - for RK1808 SoCs 11*4882a593Smuzhiyun "rockchip,rk3036-power-controller" - for RK3036 SoCs. 12*4882a593Smuzhiyun "rockchip,rk3066-power-controller" - for RK3066 SoCs. 13*4882a593Smuzhiyun "rockchip,rk3128-power-controller" - for RK3128 SoCs. 14*4882a593Smuzhiyun "rockchip,rk3188-power-controller" - for RK3188 SoCs. 15*4882a593Smuzhiyun "rockchip,rk3228-power-controller" - for RK3228 SoCs. 16*4882a593Smuzhiyun "rockchip,rk3288-power-controller" - for RK3288 SoCs. 17*4882a593Smuzhiyun "rockchip,rk3328-power-controller" - for RK3328 SoCs. 18*4882a593Smuzhiyun "rockchip,rk3366-power-controller" - for RK3366 SoCs. 19*4882a593Smuzhiyun "rockchip,rk3368-power-controller" - for RK3368 SoCs. 20*4882a593Smuzhiyun "rockchip,rk3399-power-controller" - for RK3399 SoCs. 21*4882a593Smuzhiyun "rockchip,rk3568-power-controller" - for RK3568 SoCs. 22*4882a593Smuzhiyun- #power-domain-cells: Number of cells in a power-domain specifier. 23*4882a593Smuzhiyun Should be 1 for multiple PM domains. 24*4882a593Smuzhiyun- #address-cells: Should be 1. 25*4882a593Smuzhiyun- #size-cells: Should be 0. 26*4882a593Smuzhiyun 27*4882a593SmuzhiyunRequired properties for power domain sub nodes: 28*4882a593Smuzhiyun- reg: index of the power domain, should use macros in: 29*4882a593Smuzhiyun "include/dt-bindings/power/px30-power.h" - for PX30 type power domain. 30*4882a593Smuzhiyun "include/dt-bindings/power/rv1126-power.h" - for RV1126 type power domain. 31*4882a593Smuzhiyun "include/dt-bindings/power/rk1808-power.h" - for RK1808 type power domain. 32*4882a593Smuzhiyun "include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain. 33*4882a593Smuzhiyun "include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain. 34*4882a593Smuzhiyun "include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain. 35*4882a593Smuzhiyun "include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain. 36*4882a593Smuzhiyun "include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain. 37*4882a593Smuzhiyun "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain. 38*4882a593Smuzhiyun "include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain. 39*4882a593Smuzhiyun "include/dt-bindings/power/rk3366-power.h" - for RK3366 type power domain. 40*4882a593Smuzhiyun "include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain. 41*4882a593Smuzhiyun "include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain. 42*4882a593Smuzhiyun "include/dt-bindings/power/rk3568-power.h" - for RK3568 type power domain. 43*4882a593Smuzhiyun- clocks (optional): phandles to clocks which need to be enabled while power domain 44*4882a593Smuzhiyun switches state. 45*4882a593Smuzhiyun- pm_qos (optional): phandles to qos blocks which need to be saved and restored 46*4882a593Smuzhiyun while power domain switches state. 47*4882a593Smuzhiyun 48*4882a593SmuzhiyunQos Example: 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun qos_gpu: qos_gpu@ffaf0000 { 51*4882a593Smuzhiyun compatible ="syscon"; 52*4882a593Smuzhiyun reg = <0x0 0xffaf0000 0x0 0x20>; 53*4882a593Smuzhiyun }; 54*4882a593Smuzhiyun 55*4882a593SmuzhiyunExample: 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun power: power-controller { 58*4882a593Smuzhiyun compatible = "rockchip,rk3288-power-controller"; 59*4882a593Smuzhiyun #power-domain-cells = <1>; 60*4882a593Smuzhiyun #address-cells = <1>; 61*4882a593Smuzhiyun #size-cells = <0>; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun pd_gpu { 64*4882a593Smuzhiyun reg = <RK3288_PD_GPU>; 65*4882a593Smuzhiyun clocks = <&cru ACLK_GPU>; 66*4882a593Smuzhiyun pm_qos = <&qos_gpu>; 67*4882a593Smuzhiyun }; 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun power: power-controller { 71*4882a593Smuzhiyun compatible = "rockchip,rk3368-power-controller"; 72*4882a593Smuzhiyun #power-domain-cells = <1>; 73*4882a593Smuzhiyun #address-cells = <1>; 74*4882a593Smuzhiyun #size-cells = <0>; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun pd_gpu_1 { 77*4882a593Smuzhiyun reg = <RK3368_PD_GPU_1>; 78*4882a593Smuzhiyun clocks = <&cru ACLK_GPU_CFG>; 79*4882a593Smuzhiyun }; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593SmuzhiyunExample 2: 83*4882a593Smuzhiyun power: power-controller { 84*4882a593Smuzhiyun compatible = "rockchip,rk3399-power-controller"; 85*4882a593Smuzhiyun #power-domain-cells = <1>; 86*4882a593Smuzhiyun #address-cells = <1>; 87*4882a593Smuzhiyun #size-cells = <0>; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun pd_vio { 90*4882a593Smuzhiyun #address-cells = <1>; 91*4882a593Smuzhiyun #size-cells = <0>; 92*4882a593Smuzhiyun reg = <RK3399_PD_VIO>; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun pd_vo { 95*4882a593Smuzhiyun #address-cells = <1>; 96*4882a593Smuzhiyun #size-cells = <0>; 97*4882a593Smuzhiyun reg = <RK3399_PD_VO>; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun pd_vopb { 100*4882a593Smuzhiyun reg = <RK3399_PD_VOPB>; 101*4882a593Smuzhiyun }; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun pd_vopl { 104*4882a593Smuzhiyun reg = <RK3399_PD_VOPL>; 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun }; 107*4882a593Smuzhiyun }; 108*4882a593Smuzhiyun }; 109*4882a593Smuzhiyun 110*4882a593SmuzhiyunNode of a device using power domains must have a power-domains property, 111*4882a593Smuzhiyuncontaining a phandle to the power device node and an index specifying which 112*4882a593Smuzhiyunpower domain to use. 113*4882a593SmuzhiyunThe index should use macros in: 114*4882a593Smuzhiyun "include/dt-bindings/power/px30-power.h" - for px30 type power domain. 115*4882a593Smuzhiyun "include/dt-bindings/power/rv1126-power.h" - for RV1126 type power domain. 116*4882a593Smuzhiyun "include/dt-bindings/power/rk1808-power.h" - for rk1808 type power domain. 117*4882a593Smuzhiyun "include/dt-bindings/power/rk3036-power.h" - for rk3036 type power domain. 118*4882a593Smuzhiyun "include/dt-bindings/power/rk3128-power.h" - for rk3128 type power domain. 119*4882a593Smuzhiyun "include/dt-bindings/power/rk3128-power.h" - for rk3228 type power domain. 120*4882a593Smuzhiyun "include/dt-bindings/power/rk3288-power.h" - for rk3288 type power domain. 121*4882a593Smuzhiyun "include/dt-bindings/power/rk3328-power.h" - for rk3328 type power domain. 122*4882a593Smuzhiyun "include/dt-bindings/power/rk3366-power.h" - for rk3366 type power domain. 123*4882a593Smuzhiyun "include/dt-bindings/power/rk3368-power.h" - for rk3368 type power domain. 124*4882a593Smuzhiyun "include/dt-bindings/power/rk3399-power.h" - for rk3399 type power domain. 125*4882a593Smuzhiyun "include/dt-bindings/power/rk3568-power.h" - for rk3568 type power domain. 126*4882a593Smuzhiyun 127*4882a593SmuzhiyunExample of the node using power domain: 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun node { 130*4882a593Smuzhiyun /* ... */ 131*4882a593Smuzhiyun power-domains = <&power RK3288_PD_GPU>; 132*4882a593Smuzhiyun /* ... */ 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun node { 136*4882a593Smuzhiyun /* ... */ 137*4882a593Smuzhiyun power-domains = <&power RK3368_PD_GPU_1>; 138*4882a593Smuzhiyun /* ... */ 139*4882a593Smuzhiyun }; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun node { 142*4882a593Smuzhiyun /* ... */ 143*4882a593Smuzhiyun power-domains = <&power RK3399_PD_VOPB>; 144*4882a593Smuzhiyun /* ... */ 145*4882a593Smuzhiyun }; 146