ARM: rockchip: add power-domains for Cortex-A9 socs
Subsystems (2)
Heiko Stuebner
maintainerv3 cover ARM: rockchip: add power-domains for Cortex-A9 socs
Domain values are done by the book (aka soc documentation for pmu and power-domain <-> ip block connections) and tested with the gpu and the wip lima kernel driver as well as te new vop support on rk3188.
changes in v3:
- added spdx license header to dt-binding headers
- added Rob's Review for the added compatibles in patch 3 changes in v2:
- fix typos found by Julien
- adapt to changes happening in the power-domain driver since v1
- add vop power-domain links for rk3188
- drop already applied clock fixes
Heiko Stuebner (7):
dt-bindings: add power-domain header for RK3188 SoCs
dt-bindings: add power-domain header for RK3066 SoCs
dt-bindings: add compatibles for rk3066/rk3188 power controllers
soc: rockchip: power-domain: add rk3188 powerdomains
soc: rockchip: power-domain: add rk3066 powerdomains
ARM: dts: rockchip: add qos nodes found on rk3066 and rk3188
ARM: dts: rockchip: add rk3066/rk3188 power-domains
.../bindings/soc/rockchip/power_domain.txt | 4 ++ arch/arm/boot/dts/rk3066a.dtsi | 52 +++++++++++++++++++ arch/arm/boot/dts/rk3188.dtsi | 51 ++++++++++++++++++ arch/arm/boot/dts/rk3xxx.dtsi | 40 ++++++++++++++ drivers/soc/rockchip/pm_domains.c | 48 +++++++++++++++++ include/dt-bindings/power/rk3066-power.h | 22 ++++++++ include/dt-bindings/power/rk3188-power.h | 24 +++++++++ 7 files changed, 241 insertions(+) create mode 100644 include/dt-bindings/power/rk3066-power.h create mode 100644 include/dt-bindings/power/rk3188-power.h
Signature · 1 line
2.18.0
Heiko Stuebner
maintainerPATCH v3 1/7 dt-bindings: add power-domain header for RK3188 SoCs
Add rk3188 power-domains as described by the TRM.
--- include/dt-bindings/power/rk3188-power.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 include/dt-bindings/power/rk3188-power.h
include/dt-bindings/power/rk3188-power.h new file +24 -0
@@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __DT_BINDINGS_POWER_RK3188_POWER_H__ +#define __DT_BINDINGS_POWER_RK3188_POWER_H__ + +/* VD_CORE */ +#define RK3188_PD_A9_0 0 +#define RK3188_PD_A9_1 1 +#define RK3188_PD_A9_2 2 +#define RK3188_PD_A9_3 3 +#define RK3188_PD_DBG 4 +#define RK3188_PD_SCU 5 + +/* VD_LOGIC */ +#define RK3188_PD_VIDEO 6 +#define RK3188_PD_VIO 7 +#define RK3188_PD_GPU 8 +#define RK3188_PD_PERI 9 +#define RK3188_PD_CPU 10 +#define RK3188_PD_ALIVE 11 + +/* VD_PMU */ +#define RK3188_PD_RTC 12 + +#endif
Signature · 1 line
2.18.0
Rob Herring
maintainerPATCH v3 1/7 dt-bindings: add power-domain header for RK3188 SoCs
Quoted 8 lines · Heiko Stuebner
Add rk3188 power-domains as described by the TRM.
Signed-off-by Heiko Stuebner <[email protected]>--- include/dt-bindings/power/rk3188-power.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 include/dt-bindings/power/rk3188-power.h
Heiko Stuebner
maintainerPATCH v3 2/7 dt-bindings: add power-domain header for RK3066 SoCs
In reply to Heiko StuebnerAdd rk3066 power-domains as described by the TRM.
--- include/dt-bindings/power/rk3066-power.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 include/dt-bindings/power/rk3066-power.h
include/dt-bindings/power/rk3066-power.h new file +22 -0
@@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __DT_BINDINGS_POWER_RK3066_POWER_H__ +#define __DT_BINDINGS_POWER_RK3066_POWER_H__ + +/* VD_CORE */ +#define RK3066_PD_A9_0 0 +#define RK3066_PD_A9_1 1 +#define RK3066_PD_DBG 4 +#define RK3066_PD_SCU 5 + +/* VD_LOGIC */ +#define RK3066_PD_VIDEO 6 +#define RK3066_PD_VIO 7 +#define RK3066_PD_GPU 8 +#define RK3066_PD_PERI 9 +#define RK3066_PD_CPU 10 +#define RK3066_PD_ALIVE 11 + +/* VD_PMU */ +#define RK3066_PD_RTC 12 + +#endif
Signature · 1 line
2.18.0
Rob Herring
maintainerPATCH v3 2/7 dt-bindings: add power-domain header for RK3066 SoCs
Quoted 8 lines · Heiko Stuebner
Add rk3066 power-domains as described by the TRM.
Signed-off-by Heiko Stuebner <[email protected]>--- include/dt-bindings/power/rk3066-power.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 include/dt-bindings/power/rk3066-power.h
Heiko Stuebner
maintainerPATCH v3 3/7 dt-bindings: add compatibles for rk3066/rk3188 power controllers
In reply to Heiko StuebnerAdd the compatible values for the power-domain controllers found on rk3066 and rk3188.
--- .../devicetree/bindings/soc/rockchip/power_domain.txt | 4 ++++ 1 file changed, 4 insertions(+)
Documentation/devicetree/bindings/soc/rockchip/power_domain.txt +4 -0
@@ -7,7 +7,9 @@ Required properties for power domain controller: - compatible: Should be one of the following. "rockchip,px30-power-controller" - for PX30 SoCs. "rockchip,rk3036-power-controller" - for RK3036 SoCs. + "rockchip,rk3066-power-controller" - for RK3066 SoCs. "rockchip,rk3128-power-controller" - for RK3128 SoCs. + "rockchip,rk3188-power-controller" - for RK3188 SoCs. "rockchip,rk3228-power-controller" - for RK3228 SoCs. "rockchip,rk3288-power-controller" - for RK3288 SoCs. "rockchip,rk3328-power-controller" - for RK3328 SoCs.
@@ -23,7 +25,9 @@ Required properties for power domain sub nodes: - reg: index of the power domain, should use macros in: "include/dt-bindings/power/px30-power.h" - for PX30 type power domain. "include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain. + "include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain. "include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain. + "include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain. "include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain. "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain. "include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain.
Signature · 1 line
2.18.0
Heiko Stuebner
maintainerPATCH v3 4/7 soc: rockchip: power-domain: add rk3188 powerdomains
In reply to Heiko StuebnerAdd power-domains found on rk3188 socs.
--- drivers/soc/rockchip/pm_domains.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
drivers/soc/rockchip/pm_domains.c +24 -0
@@ -22,6 +22,7 @@#include <dt-bindings/power/px30-power.h> #include <dt-bindings/power/rk3036-power.h> #include <dt-bindings/power/rk3128-power.h> +#include <dt-bindings/power/rk3188-power.h> #include <dt-bindings/power/rk3228-power.h> #include <dt-bindings/power/rk3288-power.h> #include <dt-bindings/power/rk3328-power.h>
@@ -745,6 +746,14 @@ static const struct rockchip_domain_info rk3128_pm_domains[] = { [RK3128_PD_GPU] = DOMAIN_RK3288(1, 1, 3, false), }; +static const struct rockchip_domain_info rk3188_pm_domains[] = { + [RK3188_PD_GPU ] =DOMAIN (9 ,9 ,3 ,24 ,29 , false), + [RK3188_PD_VIDEO ] =DOMAIN (8 ,8 ,4 ,23 ,28 , false), + [RK3188_PD_VIO ] =DOMAIN (7 ,7 ,5 ,22 ,27 , false), + [RK3188_PD_PERI ] =DOMAIN (6 ,6 ,2 ,25 ,30 , false), + [RK3188_PD_CPU ] =DOMAIN (5 ,5 ,1 ,26 ,31 , false), +}; +static const struct rockchip_domain_info rk3228_pm_domains[] = { [RK3228_PD_CORE ] =DOMAIN_RK3036 (0 ,0 ,16 , true), [RK3228_PD_MSCH ] =DOMAIN_RK3036 (1 ,1 ,17 , true),
@@ -857,6 +866,17 @@ static const struct rockchip_pmu_info rk3128_pmu = { .domain_info = rk3128_pm_domains, }; +static const struct rockchip_pmu_info rk3188_pmu = { + .pwr_offset =0x08 , + .status_offset =0x0c , + .req_offset =0x38 ,/* PMU_MISC_CON1 */ + .idle_offset =0x0c , + .ack_offset =0x0c , + + .num_domains =ARRAY_SIZE (rk3188_pm_domains), + .domain_info = rk3188_pm_domains, +}; +static const struct rockchip_pmu_info rk3228_pmu = { .req_offset =0x40c , .idle_offset =0x488 ,
@@ -952,6 +972,10 @@ static const struct of_device_id rockchip_pm_domain_dt_match[] = { .compatible = "rockchip,rk3128-power-controller", .data = (void *)&rk3128_pmu, }, + { + .compatible = "rockchip,rk3188-power-controller", + .data = (void *)&rk3188_pmu, + }, { .compatible = "rockchip,rk3228-power-controller", .data = (void *)&rk3228_pmu,
Signature · 1 line
2.18.0
Heiko Stuebner
maintainerPATCH v3 5/7 soc: rockchip: power-domain: add rk3066 powerdomains
In reply to Heiko StuebnerAdd power-domains found on rk3066 socs.
--- drivers/soc/rockchip/pm_domains.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
drivers/soc/rockchip/pm_domains.c +24 -0
@@ -21,6 +21,7 @@#include <linux/mfd/syscon.h> #include <dt-bindings/power/px30-power.h> #include <dt-bindings/power/rk3036-power.h> +#include <dt-bindings/power/rk3066-power.h> #include <dt-bindings/power/rk3128-power.h> #include <dt-bindings/power/rk3188-power.h> #include <dt-bindings/power/rk3228-power.h>
@@ -738,6 +739,14 @@ static const struct rockchip_domain_info rk3036_pm_domains[] = { [RK3036_PD_SYS] = DOMAIN_RK3036(8, 22, 29, false), }; +static const struct rockchip_domain_info rk3066_pm_domains[] = { + [RK3066_PD_GPU ] =DOMAIN (9 ,9 ,3 ,24 ,29 , false), + [RK3066_PD_VIDEO ] =DOMAIN (8 ,8 ,4 ,23 ,28 , false), + [RK3066_PD_VIO ] =DOMAIN (7 ,7 ,5 ,22 ,27 , false), + [RK3066_PD_PERI ] =DOMAIN (6 ,6 ,2 ,25 ,30 , false), + [RK3066_PD_CPU ] =DOMAIN (-1 ,5 ,1 ,26 ,31 , false), +}; +static const struct rockchip_domain_info rk3128_pm_domains[] = { [RK3128_PD_CORE ] =DOMAIN_RK3288 (0 ,0 ,4 , false), [RK3128_PD_MSCH ] =DOMAIN_RK3288 (-1 ,-1 ,6 , true),
@@ -855,6 +864,17 @@ static const struct rockchip_pmu_info rk3036_pmu = { .domain_info = rk3036_pm_domains, }; +static const struct rockchip_pmu_info rk3066_pmu = { + .pwr_offset =0x08 , + .status_offset =0x0c , + .req_offset =0x38 ,/* PMU_MISC_CON1 */ + .idle_offset =0x0c , + .ack_offset =0x0c , + + .num_domains =ARRAY_SIZE (rk3066_pm_domains), + .domain_info = rk3066_pm_domains, +}; +static const struct rockchip_pmu_info rk3128_pmu = { .pwr_offset =0x04 , .status_offset =0x08 ,
@@ -968,6 +988,10 @@ static const struct of_device_id rockchip_pm_domain_dt_match[] = { .compatible = "rockchip,rk3036-power-controller", .data = (void *)&rk3036_pmu, }, + { + .compatible = "rockchip,rk3066-power-controller", + .data = (void *)&rk3066_pmu, + }, { .compatible = "rockchip,rk3128-power-controller", .data = (void *)&rk3128_pmu,
Signature · 1 line
2.18.0
Heiko Stuebner
maintainerPATCH v3 6/7 ARM: dts: rockchip: add qos nodes found on rk3066 and rk3188
In reply to Heiko StuebnerQoS nodes keep information about priorites etc on the interconnect and loose state when the power-domain gets disabled. Therefore the power-domain driver stores the settings of available qos nodes and restores them when the power-domain gets enabled again.
So add the qos nodes found on the Cortex-A9 socs from Rockchip, so that they can then be connected to the power-domains.
--- arch/arm/boot/dts/rk3xxx.dtsi | 40 +++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+)
arch/arm/boot/dts/rk3xxx.dtsi +40 -0
@@ -147,6 +147,46 @@ status = "disabled"; }; + qos_gpu: qos at 1012d000 { + compatible = "syscon"; + reg = <0x1012d000 0x20>; + }; + + qos_vpu: qos at 1012e000 { + compatible = "syscon"; + reg = <0x1012e000 0x20>; + }; + + qos_lcdc0: qos at 1012f000 { + compatible = "syscon"; + reg = <0x1012f000 0x20>; + }; + + qos_cif0: qos at 1012f080 { + compatible = "syscon"; + reg = <0x1012f080 0x20>; + }; + + qos_ipp: qos at 1012f100 { + compatible = "syscon"; + reg = <0x1012f100 0x20>; + }; + + qos_lcdc1: qos at 1012f180 { + compatible = "syscon"; + reg = <0x1012f180 0x20>; + }; + + qos_cif1: qos at 1012f200 { + compatible = "syscon"; + reg = <0x1012f200 0x20>; + }; + + qos_rga: qos at 1012f280 { + compatible = "syscon"; + reg = <0x1012f280 0x20>; + }; + usb_otg: usb at 10180000 { compatible = "rockchip,rk3066-usb", "snps,dwc2"; reg = <0x10180000 0x40000>;
Signature · 1 line
2.18.0
Heiko Stuebner
maintainerPATCH v3 7/7 ARM: dts: rockchip: add rk3066/rk3188 power-domains
In reply to Heiko StuebnerAdd the power-domain nodes to both rk3066 and rk3188 including their clocks and qos connections.
--- arch/arm/boot/dts/rk3066a.dtsi | 52 ++++++++++++++++++++++++++++++++++ arch/arm/boot/dts/rk3188.dtsi | 51 +++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+)
arch/arm/boot/dts/rk3066a.dtsi +52 -0
@@ -7,6 +7,7 @@ #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/pinctrl/rockchip.h> #include <dt-bindings/clock/rk3066a-cru.h> +#include <dt-bindings/power/rk3066-power.h> #include "rk3xxx.dtsi" / {
@@ -595,6 +596,7 @@ "ppmmu2", "pp3", "ppmmu3"; + power-domains = <&power RK3066_PD_GPU>; }; &i2c0 {
@@ -643,6 +645,56 @@ dma-names = "rx-tx"; }; +&pmu { + power: power-controller { + compatible = "rockchip,rk3066-power-controller"; + #power-domain-cells = <1>; + #address-cells = <1>; + #size-cells = <0>; + + pd_vio at RK3066_PD_VIO { + reg = <RK3066_PD_VIO>; + clocks = <&cru ACLK_LCDC0>, + <&cru ACLK_LCDC1>, + <&cru DCLK_LCDC0>, + <&cru DCLK_LCDC1>, + <&cru HCLK_LCDC0>, + <&cru HCLK_LCDC1>, + <&cru SCLK_CIF1>, + <&cru ACLK_CIF1>, + <&cru HCLK_CIF1>, + <&cru SCLK_CIF0>, + <&cru ACLK_CIF0>, + <&cru HCLK_CIF0>, + <&cru ACLK_IPP>, + <&cru HCLK_IPP>, + <&cru ACLK_RGA>, + <&cru HCLK_RGA>; + pm_qos = <&qos_lcdc0>, + <&qos_lcdc1>, + <&qos_cif0>, + <&qos_cif1>, + <&qos_ipp>, + <&qos_rga>; + }; + + pd_video at RK3066_PD_VIDEO { + reg = <RK3066_PD_VIDEO>; + clocks = <&cru ACLK_VDPU>, + <&cru ACLK_VEPU>, + <&cru HCLK_VDPU>, + <&cru HCLK_VEPU>; + pm_qos = <&qos_vpu>; + }; + + pd_gpu at RK3066_PD_GPU { + reg = <RK3066_PD_GPU>; + clocks = <&cru ACLK_GPU>; + pm_qos = <&qos_gpu>; + }; + }; +}; + &pwm0 { pinctrl-names = "default"; pinctrl-0 = <&pwm0_out>;
arch/arm/boot/dts/rk3188.dtsi +51 -0
81 lines not on this page · raw message
Signature · 1 line
2.18.0
Heiko Stuebner
maintainerv3 cover ARM: rockchip: add power-domains for Cortex-A9 socs
In reply to Heiko StuebnerAm Dienstag, 23. Oktober 2018, 12:38:13 CET schrieb Heiko Stuebner:
Quoted 13 lines
Domain values are done by the book (aka soc documentation for pmu and power-domain <-> ip block connections) and tested with the gpu and the wip lima kernel driver as well as te new vop support on rk3188.
changes in v3:
- added spdx license header to dt-binding headers
- added Rob's Review for the added compatibles in patch 3 changes in v2:
- fix typos found by Julien
- adapt to changes happening in the power-domain driver since v1
- add vop power-domain links for rk3188
- drop already applied clock fixes
Quoted 8 lines
Heiko Stuebner (7):
dt-bindings: add power-domain header for RK3188 SoCs
dt-bindings: add power-domain header for RK3066 SoCs
dt-bindings: add compatibles for rk3066/rk3188 power controllers
soc: rockchip: power-domain: add rk3188 powerdomains
soc: rockchip: power-domain: add rk3066 powerdomains
ARM: dts: rockchip: add qos nodes found on rk3066 and rk3188
ARM: dts: rockchip: add rk3066/rk3188 power-domains
applied for 4.21