mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00

RK3528 is a cost down SoC with high CPU performance. However, it has poor PCIe performance (same for RK3576). Also CPU 0/1 can't get any rest due to rkbin limitation. Some code references: https://github.com/warpme/minimyth2
104 lines
3.6 KiB
Diff
104 lines
3.6 KiB
Diff
From 2ed777fcd035089bd7996bfa09c023521ecf0e24 Mon Sep 17 00:00:00 2001
|
|
From: Finley Xiao <finley.xiao@rock-chips.com>
|
|
Date: Fri, 30 Sep 2022 20:11:50 +0800
|
|
Subject: [PATCH] soc: rockchip: power-domain: add power domain support for
|
|
rk3528
|
|
|
|
This driver is modified to support RK3528 SoCs.
|
|
|
|
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
|
|
Change-Id: If024916eb7b52ec86ff7533aedefc1bda457b612
|
|
---
|
|
drivers/soc/rockchip/pm_domains.c | 47 +++++++++++++++++++++++++++++++
|
|
1 file changed, 47 insertions(+)
|
|
|
|
--- a/drivers/soc/rockchip/pm_domains.c
|
|
+++ b/drivers/soc/rockchip/pm_domains.c
|
|
@@ -30,6 +30,7 @@
|
|
#include <dt-bindings/power/rk3366-power.h>
|
|
#include <dt-bindings/power/rk3368-power.h>
|
|
#include <dt-bindings/power/rk3399-power.h>
|
|
+#include <dt-bindings/power/rk3528-power.h>
|
|
#include <dt-bindings/power/rk3568-power.h>
|
|
#include <dt-bindings/power/rk3588-power.h>
|
|
|
|
@@ -120,6 +121,20 @@ struct rockchip_pmu {
|
|
.active_wakeup = wakeup, \
|
|
}
|
|
|
|
+#define DOMAIN_M_A(_name, pwr, status, req, idle, ack, always, wakeup) \
|
|
+{ \
|
|
+ .name = _name, \
|
|
+ .pwr_w_mask = (pwr) << 16, \
|
|
+ .pwr_mask = (pwr), \
|
|
+ .status_mask = (status), \
|
|
+ .req_w_mask = (req) << 16, \
|
|
+ .req_mask = (req), \
|
|
+ .idle_mask = (idle), \
|
|
+ .ack_mask = (ack), \
|
|
+ .always_on = always, \
|
|
+ .active_wakeup = wakeup, \
|
|
+}
|
|
+
|
|
#define DOMAIN_M_O_R(_name, p_offset, pwr, status, r_status, r_offset, req, idle, ack, wakeup) \
|
|
{ \
|
|
.name = _name, \
|
|
@@ -164,6 +179,9 @@ struct rockchip_pmu {
|
|
#define DOMAIN_RK3399(name, pwr, status, req, wakeup) \
|
|
DOMAIN(name, pwr, status, req, req, req, wakeup)
|
|
|
|
+#define DOMAIN_RK3528(name, pwr, req, always, wakeup) \
|
|
+ DOMAIN_M_A(name, pwr, pwr, req, req, req, always, wakeup)
|
|
+
|
|
#define DOMAIN_RK3568(name, pwr, req, wakeup) \
|
|
DOMAIN_M(name, pwr, pwr, req, req, req, wakeup)
|
|
|
|
@@ -1037,6 +1055,18 @@ static const struct rockchip_domain_info
|
|
[RK3399_PD_SDIOAUDIO] = DOMAIN_RK3399("sdioaudio", BIT(31), BIT(31), BIT(29), true),
|
|
};
|
|
|
|
+static const struct rockchip_domain_info rk3528_pm_domains[] = {
|
|
+ [RK3528_PD_PMU] = DOMAIN_RK3528("pmu", 0, BIT(0), true, false),
|
|
+ [RK3528_PD_BUS] = DOMAIN_RK3528("bus", 0, BIT(1), true, false),
|
|
+ [RK3528_PD_DDR] = DOMAIN_RK3528("ddr", 0, BIT(2), true, false),
|
|
+ [RK3528_PD_MSCH] = DOMAIN_RK3528("msch", 0, BIT(3), true, false),
|
|
+ [RK3528_PD_GPU] = DOMAIN_RK3528("gpu", BIT(0), BIT(4), true, false),
|
|
+ [RK3528_PD_RKVDEC] = DOMAIN_RK3528("vdec", 0, BIT(5), true, false),
|
|
+ [RK3528_PD_RKVENC] = DOMAIN_RK3528("venc", 0, BIT(6), true, false),
|
|
+ [RK3528_PD_VO] = DOMAIN_RK3528("vo", 0, BIT(7), true, false),
|
|
+ [RK3528_PD_VPU] = DOMAIN_RK3528("vpu", 0, BIT(8), true, false),
|
|
+};
|
|
+
|
|
static const struct rockchip_domain_info rk3568_pm_domains[] = {
|
|
[RK3568_PD_NPU] = DOMAIN_RK3568("npu", BIT(1), BIT(2), false),
|
|
[RK3568_PD_GPU] = DOMAIN_RK3568("gpu", BIT(0), BIT(1), false),
|
|
@@ -1216,6 +1246,17 @@ static const struct rockchip_pmu_info rk
|
|
.domain_info = rk3399_pm_domains,
|
|
};
|
|
|
|
+static const struct rockchip_pmu_info rk3528_pmu = {
|
|
+ .pwr_offset = 0x1210,
|
|
+ .status_offset = 0x1230,
|
|
+ .req_offset = 0x1110,
|
|
+ .idle_offset = 0x1128,
|
|
+ .ack_offset = 0x1120,
|
|
+
|
|
+ .num_domains = ARRAY_SIZE(rk3528_pm_domains),
|
|
+ .domain_info = rk3528_pm_domains,
|
|
+};
|
|
+
|
|
static const struct rockchip_pmu_info rk3568_pmu = {
|
|
.pwr_offset = 0xa0,
|
|
.status_offset = 0x98,
|
|
@@ -1296,6 +1337,10 @@ static const struct of_device_id rockchi
|
|
.data = (void *)&rk3399_pmu,
|
|
},
|
|
{
|
|
+ .compatible = "rockchip,rk3528-power-controller",
|
|
+ .data = (void *)&rk3528_pmu,
|
|
+ },
|
|
+ {
|
|
.compatible = "rockchip,rk3568-power-controller",
|
|
.data = (void *)&rk3568_pmu,
|
|
},
|