Skip to contentSkip to conversation

ARM: rockchip: add power-domains for Cortex-A9 socs

PATCH Superseded Heiko Stuebner 2 participants 11 messages Oct 23, 2018 – Nov 5, 2018

Subsystems (2)
lore
Share & tools
lore

Heiko Stuebner

author maintainer
#0 lore raw

v3 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
author maintainer
#1 lore raw

PATCH 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
new file mode 100644
index 000000000000..93d23dfba33f
@@ -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
maintainer
#2 lore raw

PATCH 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.

---
 include/dt-bindings/power/rk3188-power.h | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 include/dt-bindings/power/rk3188-power.h
author maintainer
#3 lore raw

PATCH v3 2/7 dt-bindings: add power-domain header for RK3066 SoCs

In reply to Heiko Stuebner

Add 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
new file mode 100644
index 000000000000..acf9f310ac53
@@ -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
maintainer
#4 lore raw

PATCH 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.

---
 include/dt-bindings/power/rk3066-power.h | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
 create mode 100644 include/dt-bindings/power/rk3066-power.h
author maintainer
#5 lore raw

PATCH v3 3/7 dt-bindings: add compatibles for rk3066/rk3188 power controllers

In reply to Heiko Stuebner

Add 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
index 5d49d0a2ff29..8304eceb62e4 100644
@@ -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
author maintainer
#6 lore raw

PATCH v3 4/7 soc: rockchip: power-domain: add rk3188 powerdomains

In reply to Heiko Stuebner

Add 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
index 6dff8682155f..58bd39cd3369 100644
@@ -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
author maintainer
#7 lore raw

PATCH v3 5/7 soc: rockchip: power-domain: add rk3066 powerdomains

In reply to Heiko Stuebner

Add 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
index 58bd39cd3369..4587b27eeb9f 100644
@@ -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
author maintainer
#8 lore raw

PATCH v3 6/7 ARM: dts: rockchip: add qos nodes found on rk3066 and rk3188

In reply to Heiko Stuebner

QoS 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
index d752dc611fd7..97307a405e60 100644
@@ -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
author maintainer
#9 lore raw

PATCH v3 7/7 ARM: dts: rockchip: add rk3066/rk3188 power-domains

In reply to Heiko Stuebner

Add 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
index 2ab3c4b32003..112d2bf8e998 100644
@@ -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
author maintainer
#10 lore raw

v3 cover ARM: rockchip: add power-domains for Cortex-A9 socs

In reply to Heiko Stuebner

Am 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