From 2ed777fcd035089bd7996bfa09c023521ecf0e24 Mon Sep 17 00:00:00 2001 From: Finley Xiao 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 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 #include #include +#include #include #include @@ -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, },