Re: [PATCH] pmdomain: rockchip: Add a regulator to the RK3568 NPU power domain
Ulf Hansson <[email protected]>
| Newsgroups | org.infradead.lists.linux-rockchip,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm |
|---|---|
| Message-ID | <CAPx+jO8vL4Ne14r+bR3De7riiNVRJK8Djm=b+jTsOscUynHwAA@mail.gmail.com> |
On Thu, Jul 9, 2026 at 1:43 AM MidG971 <[email protected]> wrote: > > From: Midgy BALON <[email protected]> > > The RK3568 NPU rail (vdd_npu) needs to be enabled before the domain is > powered on and disabled after it is powered off. Give DOMAIN_RK3568 a > regulator parameter (like DOMAIN_RK3588 already has) so the NPU domain > can set need_regulator, letting genpd manage the rail wired up as the > domain's domain-supply instead of marking it always-on in DT. > > Suggested-by: Chaoyi Chen <[email protected]> > Signed-off-by: Midgy BALON <[email protected]> Applied for next, thanks! Kind regards Uffe > --- > This patch was part of the RFC NPU series [1]; Ulf Hansson and Heiko > Stübner reviewed it there and confirmed it can be applied independently of > the rest of the (still-RFC) rocket driver and DT patches, so it is reposted > standalone. The NPU domain's domain-supply DT wiring follows in a separate > patch, so this change alone is a no-op at runtime. > > Changes since the RFC posting: > - Move DOMAIN_M_R below the other DOMAIN_M_* macros so they stay > alphabetically sorted (Heiko Stübner). > > [1] https://lore.kernel.org/linux-rockchip/[email protected]/ > > drivers/pmdomain/rockchip/pm-domains.c | 36 ++++++++++++++++++-------- > 1 file changed, 25 insertions(+), 11 deletions(-) > > diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c > index 490bbb1d1d8e8..ba66ae7194289 100644 > --- a/drivers/pmdomain/rockchip/pm-domains.c > +++ b/drivers/pmdomain/rockchip/pm-domains.c > @@ -204,6 +204,20 @@ struct rockchip_pmu { > .active_wakeup = wakeup, \ > } > > +#define DOMAIN_M_R(_name, pwr, status, req, idle, ack, wakeup, regulator) \ > +{ \ > + .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), \ > + .active_wakeup = wakeup, \ > + .need_regulator = regulator, \ > +} > + > #define DOMAIN_RK3036(_name, req, ack, idle, wakeup) \ > { \ > .name = _name, \ > @@ -241,8 +255,8 @@ struct rockchip_pmu { > #define DOMAIN_RK3562(name, pwr, req, g_mask, mem, wakeup) \ > DOMAIN_M_G_SD(name, pwr, pwr, req, req, req, g_mask, mem, wakeup, false) > > -#define DOMAIN_RK3568(name, pwr, req, wakeup) \ > - DOMAIN_M(name, pwr, pwr, req, req, req, wakeup) > +#define DOMAIN_RK3568(name, pwr, req, wakeup, regulator) \ > + DOMAIN_M_R(name, pwr, pwr, req, req, req, wakeup, regulator) > > #define DOMAIN_RK3576(name, p_offset, pwr, status, r_status, r_offset, req, idle, g_mask, wakeup) \ > DOMAIN_M_O_R_G(name, p_offset, pwr, status, 0, r_status, r_status, r_offset, req, idle, idle, g_mask, wakeup) > @@ -1274,15 +1288,15 @@ static const struct rockchip_domain_info rk3562_pm_domains[] = { > }; > > 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), > - [RK3568_PD_VI] = DOMAIN_RK3568("vi", BIT(6), BIT(3), false), > - [RK3568_PD_VO] = DOMAIN_RK3568("vo", BIT(7), BIT(4), false), > - [RK3568_PD_RGA] = DOMAIN_RK3568("rga", BIT(5), BIT(5), false), > - [RK3568_PD_VPU] = DOMAIN_RK3568("vpu", BIT(2), BIT(6), false), > - [RK3568_PD_RKVDEC] = DOMAIN_RK3568("vdec", BIT(4), BIT(8), false), > - [RK3568_PD_RKVENC] = DOMAIN_RK3568("venc", BIT(3), BIT(7), false), > - [RK3568_PD_PIPE] = DOMAIN_RK3568("pipe", BIT(8), BIT(11), false), > + [RK3568_PD_NPU] = DOMAIN_RK3568("npu", BIT(1), BIT(2), false, true), > + [RK3568_PD_GPU] = DOMAIN_RK3568("gpu", BIT(0), BIT(1), false, false), > + [RK3568_PD_VI] = DOMAIN_RK3568("vi", BIT(6), BIT(3), false, false), > + [RK3568_PD_VO] = DOMAIN_RK3568("vo", BIT(7), BIT(4), false, false), > + [RK3568_PD_RGA] = DOMAIN_RK3568("rga", BIT(5), BIT(5), false, false), > + [RK3568_PD_VPU] = DOMAIN_RK3568("vpu", BIT(2), BIT(6), false, false), > + [RK3568_PD_RKVDEC] = DOMAIN_RK3568("vdec", BIT(4), BIT(8), false, false), > + [RK3568_PD_RKVENC] = DOMAIN_RK3568("venc", BIT(3), BIT(7), false, false), > + [RK3568_PD_PIPE] = DOMAIN_RK3568("pipe", BIT(8), BIT(11), false, false), > }; > > static const struct rockchip_domain_info rk3576_pm_domains[] = { > -- > 2.39.5 > _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip