* [PATCH v17 0/3] pmdomain: rockchip: RK3576 NPU domain supply and settle delay
@ 2026-11-14 3:04 Jiaxing Hu
2026-11-14 3:04 ` [PATCH v17 1/3] pmdomain: rockchip: switch off the subdomains of a regulator domain at probe Jiaxing Hu
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Jiaxing Hu @ 2026-11-14 3:04 UTC (permalink / raw)
To: ulf.hansson, ulfh, heiko
Cc: finley.xiao, shawn.lin, sebastian.reichel, vlwwwwww, leonard,
abel.vesa, tomeu, linux-pm, linux-rockchip, linux-arm-kernel,
linux-kernel
This series fixes how the Rockchip power-domain driver initializes
domains that need a regulator, adds proper regulator handling for the
RK3576 NPU power domain, and adds a settle wait after power-on for some
RK3576 power domains.
These are the pmdomain patches of the RK3576 NPU series, split out and
rebased on Ulf's next, as Ulf asked after dropping v15 7, 9 and 10:
https://lore.kernel.org/all/CAPx+jO-KKvgRS0br-3QGh6Jt4efWJ+A6YoRZKFV_bcfB+8sm6w@mail.gmail.com/
The accel/rocket and DT patches follow as their own v17:
https://lore.kernel.org/all/cover.1794615324.git.gahing@gahingwoo.com/
Based on: Ulf's next (844a13010b0b)
Changes in v17:
- Reorganized the series as Ulf asked, and split the fix for regulator
domain initialization from the RK3576 NPU regulator handling.
- Following Finley Xiao's (Rockchip) review of v16, the RK3576 delay is
now 15 us on NPUTOP and VOP only.
- Fixed the subdomains of a regulator domain being left in the wrong
state at probe, reported by Vladimir Bely (1/3).
- The RK3576 NPU power domain uses DOMAIN_RK3576_R, the same macro
Leonard Lausen's GPU patch added (2/3).
Testing:
Tested on a Radxa ROCK 4D, with these patches and the rest of v17
backported to Armbian's 7.3 kernel:
- With the NPU disabled in the DT, NPUTOP, NPU0 and NPU1 are switched
off and idled at probe on every boot (16 boots). Without 1/3, all 14
boots left them on, and one of them hung.
- With the NPU enabled, 30 NPU power-ups after a warm reboot and 30
after a cold power-on, with identical output and no SError.
Logs: https://github.com/gahingwoo/linux-rk3576-npu/tree/main/board-logs
Tag changes:
- 3/3 changes the delay values of the v16 patch and is organized
differently, so I've dropped Abel's and Heiko's Reviewed-by. Abel,
Heiko, could you take another look?
Jiaxing Hu (3):
pmdomain: rockchip: switch off the subdomains of a regulator domain at
probe
pmdomain: rockchip: manage the RK3576 NPU domain supply
pmdomain: rockchip: settle RK3576 NPUTOP and VOP after power-on
drivers/pmdomain/rockchip/pm-domains.c | 115 ++++++++++++++++++++++++---------
1 file changed, 85 insertions(+), 30 deletions(-)
base-commit: 844a13010b0b93f8561ef2c088f843647d5e552d
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v17 1/3] pmdomain: rockchip: switch off the subdomains of a regulator domain at probe 2026-11-14 3:04 [PATCH v17 0/3] pmdomain: rockchip: RK3576 NPU domain supply and settle delay Jiaxing Hu @ 2026-11-14 3:04 ` Jiaxing Hu 2026-11-14 9:45 ` Vladimir Bely 2026-11-14 3:05 ` [PATCH v17 2/3] pmdomain: rockchip: manage the RK3576 NPU domain supply Jiaxing Hu 2026-11-14 3:05 ` [PATCH v17 3/3] pmdomain: rockchip: settle RK3576 NPUTOP and VOP after power-on Jiaxing Hu 2 siblings, 1 reply; 5+ messages in thread From: Jiaxing Hu @ 2026-11-14 3:04 UTC (permalink / raw) To: ulf.hansson, ulfh, heiko Cc: finley.xiao, shawn.lin, sebastian.reichel, vlwwwwww, leonard, abel.vesa, tomeu, linux-pm, linux-rockchip, linux-arm-kernel, linux-kernel A power domain that needs a regulator is switched off at probe, because the state of its regulator is unknown at that point. Its subdomains are added only after that, so a subdomain the bootloader left on stays powered and not idled behind a parent that is off. genpd reads it as off and never touches it again, and when the regulator core later disables the regulator as unused, the bus hangs on the NIUs of those subdomains. On the RK3576 this hangs boards that do not enable the NPU once PD_NPU manages its supply (next patch): U-Boot leaves NPUTOP, NPU0 and NPU1 on, and the SoC locks up when regulator_late_cleanup() disables vdd_npu_s0. Mark a regulator domain and every domain below it as off when it is added, and once the subtree is complete, switch it off from the leaves up. If a subdomain fails to switch off, leave its parents on and warn. Tested on a Radxa ROCK 4D with the NPU disabled in the DT. Without this patch, all 14 boots left NPUTOP, NPU0 and NPU1 on, and one of them hung. With it, all 10 boots switched them off, with no hang. Reported-by: Vladimir Bely <vlwwwwww@gmail.com> Closes: https://lore.kernel.org/all/20261113132323.159015-1-vlwwwwww@gmail.com/ Signed-off-by: Jiaxing Hu <gahing@gahingwoo.com> --- drivers/pmdomain/rockchip/pm-domains.c | 60 +++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c index 3699918d17d0..5cc2094e87cc 100644 --- a/drivers/pmdomain/rockchip/pm-domains.c +++ b/drivers/pmdomain/rockchip/pm-domains.c @@ -101,6 +101,7 @@ struct rockchip_pm_domain { struct clk_bulk_data *clks; struct device_node *node; struct regulator *supply; + bool off_at_probe; }; struct rockchip_pmu { @@ -798,7 +799,8 @@ static void rockchip_pd_detach_dev(struct generic_pm_domain *genpd, } static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu, - struct device_node *node) + struct device_node *node, + struct rockchip_pm_domain *parent) { const struct rockchip_domain_info *pd_info; struct rockchip_pm_domain *pd; @@ -910,9 +912,16 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu, * the regulator state is unknown at probe time. Also the regulator * state cannot be checked, since that usually requires IP needing * (a different) power domain. + * + * The domains below such a domain have to start off too, or genpd + * would see them off behind a parent that is off while the + * bootloader left them on, and never idle them before the regulator + * is cut. Only mark them here: the subdomains are not added yet, so + * rockchip_pm_power_off_subtree() switches the whole subtree off, + * children first, once it is complete. */ - if (pd->info->need_regulator) - rockchip_pd_power(pd, false); + pd->off_at_probe = pd->info->need_regulator || + (parent && parent->off_at_probe); pd->genpd.power_off = rockchip_pd_power_off; pd->genpd.power_on = rockchip_pd_power_on; @@ -922,7 +931,7 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu, if (pd_info->active_wakeup) pd->genpd.flags |= GENPD_FLAG_ACTIVE_WAKEUP; pm_genpd_init(&pd->genpd, NULL, - !rockchip_pmu_domain_is_on(pd) || + pd->off_at_probe || !rockchip_pmu_domain_is_on(pd) || (pd->info->mem_status_mask && !rockchip_pmu_domain_is_mem_on(pd))); pmu->genpd_data.domains[id] = &pd->genpd; @@ -986,6 +995,41 @@ static void rockchip_configure_pd_cnt(struct rockchip_pmu *pmu, regmap_write(pmu->regmap, domain_reg_offset + 4, count); } +/* + * Switch off the domains marked off_at_probe below and including @np, + * children before their parent. If a child fails to switch off, leave its + * ancestors on. + */ +static int rockchip_pm_power_off_subtree(struct rockchip_pmu *pmu, + struct device_node *np) +{ + struct rockchip_pm_domain *pd; + u32 idx; + int ret; + + for_each_child_of_node_scoped(np, child) { + ret = rockchip_pm_power_off_subtree(pmu, child); + if (ret) + return ret; + } + + if (of_property_read_u32(np, "reg", &idx) || + idx >= pmu->genpd_data.num_domains || + !pmu->genpd_data.domains[idx]) + return 0; + + pd = to_rockchip_pd(pmu->genpd_data.domains[idx]); + if (!pd->off_at_probe) + return 0; + + ret = rockchip_pd_power(pd, false); + if (ret) + dev_warn(pmu->dev, "failed to switch off %s at probe: %d\n", + pd->genpd.name, ret); + + return ret; +} + static int rockchip_pm_add_subdomain(struct rockchip_pmu *pmu, struct device_node *parent) { @@ -1004,7 +1048,8 @@ static int rockchip_pm_add_subdomain(struct rockchip_pmu *pmu, } parent_domain = pmu->genpd_data.domains[idx]; - error = rockchip_pm_add_one_domain(pmu, np); + error = rockchip_pm_add_one_domain(pmu, np, + to_rockchip_pd(parent_domain)); if (error) { dev_err(pmu->dev, "failed to handle node %pOFn: %d\n", np, error); @@ -1098,7 +1143,7 @@ static int rockchip_pm_domain_probe(struct platform_device *pdev) guard(mutex)(&dmc_pmu_mutex); for_each_available_child_of_node_scoped(np, node) { - error = rockchip_pm_add_one_domain(pmu, node); + error = rockchip_pm_add_one_domain(pmu, node, NULL); if (error) { dev_err(dev, "failed to handle node %pOFn: %d\n", node, error); @@ -1111,6 +1156,9 @@ static int rockchip_pm_domain_probe(struct platform_device *pdev) node, error); goto err_out; } + + /* A domain left on is not fatal; carry on with the others. */ + rockchip_pm_power_off_subtree(pmu, node); } if (error) { -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v17 1/3] pmdomain: rockchip: switch off the subdomains of a regulator domain at probe 2026-11-14 3:04 ` [PATCH v17 1/3] pmdomain: rockchip: switch off the subdomains of a regulator domain at probe Jiaxing Hu @ 2026-11-14 9:45 ` Vladimir Bely 0 siblings, 0 replies; 5+ messages in thread From: Vladimir Bely @ 2026-11-14 9:45 UTC (permalink / raw) To: Jiaxing Hu Cc: ulf.hansson, ulfh, heiko, finley.xiao, shawn.lin, sebastian.reichel, leonard, abel.vesa, tomeu, linux-pm, linux-rockchip, linux-arm-kernel, linux-kernel On Sat, Nov 14, 2026 at 04:04:59PM +1300, Jiaxing Hu wrote: > Mark a regulator domain and every domain below it as off when it is > added, and once the subtree is complete, switch it off from the leaves > up. If a subdomain fails to switch off, leave its parents on and warn. I tested this patch on the board I reported the hang on, a FriendlyElec NanoPi R76S (RK3576), and it fixes it. What I ran: Armbian's 7.3.4 edge kernel (armbian/build main, which carries v14 of the RK3576 NPU series, so PD_NPU already needs a regulator there) plus this patch as armbian/build#11366 carries it. The code is the same as this 1/3 (I compared the diff). I did not test 2/3 and 3/3 of v17. DT: the R76S DT with the NPU disabled, i.e. no domain-supply on pd_npu, which is the case that hung. No regulator_ignore_unused, no regulator-always-on. Serial console attached, warm reboots, PMU read from the regmap debugfs about 42 s after the kernel started, after regulator_late_cleanup() has turned vdd_npu_s0 off. Without the patch (Armbian 7.3.3, same DT): hung on 3 of 4 boots; on the boots that survived, NPUTOP, NPU0 and NPU1 were still powered and not idled while genpd listed them off. With the patch: 11 of 11 boots, no hang. "vdd_npu_s0: disabling" is in the log on every boot, and every boot reads without with this patch 0x110 req 0x000013e0 0x000013fe 0x214 pwr 0x0000003e 0x000001fe so the three subdomains are idled and off before the rail goes away. (Bit 9 of 0x214 is clear because the GPU is in use on this board.) With the NPU enabled on the same kernel, rocket probes both cores and an LLM runs on them, with identical output on two runs. Tested-by: Vladimir Bely <vlwwwwww@gmail.com> Thanks for the quick fix, Vladimir ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v17 2/3] pmdomain: rockchip: manage the RK3576 NPU domain supply 2026-11-14 3:04 [PATCH v17 0/3] pmdomain: rockchip: RK3576 NPU domain supply and settle delay Jiaxing Hu 2026-11-14 3:04 ` [PATCH v17 1/3] pmdomain: rockchip: switch off the subdomains of a regulator domain at probe Jiaxing Hu @ 2026-11-14 3:05 ` Jiaxing Hu 2026-11-14 3:05 ` [PATCH v17 3/3] pmdomain: rockchip: settle RK3576 NPUTOP and VOP after power-on Jiaxing Hu 2 siblings, 0 replies; 5+ messages in thread From: Jiaxing Hu @ 2026-11-14 3:05 UTC (permalink / raw) To: ulf.hansson, ulfh, heiko Cc: finley.xiao, shawn.lin, sebastian.reichel, vlwwwwww, leonard, abel.vesa, tomeu, linux-pm, linux-rockchip, linux-arm-kernel, linux-kernel rockchip_pd_regulator_enable() only reads domain-supply for a domain marked need_regulator, and the RK3576 NPU power domain is not marked. A board that sets domain-supply on pd_npu therefore still has to keep vdd_npu_s0 always on. Use DOMAIN_RK3576_R for PD_NPU, as for the GPU domain, so the NPU rail is switched on and off with the domain. This needs the previous patch, or boards that leave the NPU disabled hang when the unused rail is turned off. Tested on a Radxa ROCK 4D without regulator-always-on on vdd_npu_s0: the rail is off while the NPU is idle and on while it runs. Signed-off-by: Jiaxing Hu <gahing@gahingwoo.com> --- drivers/pmdomain/rockchip/pm-domains.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c index 5cc2094e87cc..cb5487ed1e55 100644 --- a/drivers/pmdomain/rockchip/pm-domains.c +++ b/drivers/pmdomain/rockchip/pm-domains.c @@ -1360,7 +1360,7 @@ static const struct rockchip_domain_info rk3568_pm_domains[] = { }; static const struct rockchip_domain_info rk3576_pm_domains[] = { - [RK3576_PD_NPU] = DOMAIN_RK3576("npu", 0x0, BIT(0), BIT(0), 0, 0x0, 0, 0, 0, false), + [RK3576_PD_NPU] = DOMAIN_RK3576_R("npu", 0x0, BIT(0), BIT(0), 0, 0x0, 0, 0, 0, false), [RK3576_PD_NVM] = DOMAIN_RK3576("nvm", 0x0, BIT(6), 0, BIT(6), 0x4, BIT(2), BIT(18), BIT(2), false), [RK3576_PD_SDGMAC] = DOMAIN_RK3576("sdgmac", 0x0, BIT(7), 0, BIT(7), 0x4, BIT(1), BIT(17), 0x6, false), [RK3576_PD_AUDIO] = DOMAIN_RK3576("audio", 0x0, BIT(8), 0, BIT(8), 0x4, BIT(0), BIT(16), BIT(0), false), -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v17 3/3] pmdomain: rockchip: settle RK3576 NPUTOP and VOP after power-on 2026-11-14 3:04 [PATCH v17 0/3] pmdomain: rockchip: RK3576 NPU domain supply and settle delay Jiaxing Hu 2026-11-14 3:04 ` [PATCH v17 1/3] pmdomain: rockchip: switch off the subdomains of a regulator domain at probe Jiaxing Hu 2026-11-14 3:05 ` [PATCH v17 2/3] pmdomain: rockchip: manage the RK3576 NPU domain supply Jiaxing Hu @ 2026-11-14 3:05 ` Jiaxing Hu 2 siblings, 0 replies; 5+ messages in thread From: Jiaxing Hu @ 2026-11-14 3:05 UTC (permalink / raw) To: ulf.hansson, ulfh, heiko Cc: finley.xiao, shawn.lin, sebastian.reichel, vlwwwwww, leonard, abel.vesa, tomeu, linux-pm, linux-rockchip, linux-arm-kernel, linux-kernel Some RK3576 power domains need extra time to settle after their idle request is released. If the QoS registers are restored before the domain has settled, the first power-on after a cold boot can raise an SError. Add an optional delay_us field: the time a domain waits after the idle request is released and before its QoS is restored. In his review of v16, Finley Xiao (Rockchip) pointed out that the 15 us wait is only needed on the top-level domain, NPUTOP. genpd powers on the parent NPUTOP first, so by the time NPU0 and NPU1 power on, the parent has already settled and no further wait is needed. Finley also pointed out that VOP needs the same 15 us wait. This matches the delay table in the vendor kernel: NPUTOP: 15 us NPU0: 0 us NPU1: 0 us VOP: 15 us Tested on a Radxa ROCK 4D with the 15 us delay on NPUTOP only: 30 NPU power-ons after a warm reboot and 30 after a cold power-on, with no problems. The VOP delay made no visible difference on this board, but it is kept at 15 us as Rockchip recommends. Suggested-by: Finley Xiao <finley.xiao@rock-chips.com> Link: https://lore.kernel.org/all/4043eb42-ce62-41ff-9a7d-d840bb90364d@rock-chips.com/ Signed-off-by: Jiaxing Hu <gahing@gahingwoo.com> --- drivers/pmdomain/rockchip/pm-domains.c | 55 +++++++++++++++----------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c index cb5487ed1e55..073d1bba890b 100644 --- a/drivers/pmdomain/rockchip/pm-domains.c +++ b/drivers/pmdomain/rockchip/pm-domains.c @@ -18,6 +18,7 @@ #include <linux/of_address.h> #include <linux/of_clk.h> #include <linux/clk.h> +#include <linux/delay.h> #include <linux/regmap.h> #include <linux/regulator/consumer.h> #include <linux/mfd/syscon.h> @@ -59,6 +60,7 @@ struct rockchip_domain_info { u32 pwr_offset; u32 mem_offset; u32 req_offset; + u32 delay_us; }; struct rockchip_pmu_info { @@ -186,7 +188,7 @@ struct rockchip_pmu { .need_regulator = regulator, \ } -#define DOMAIN_M_O_R_G(_name, p_offset, pwr, status, m_offset, m_status, r_status, r_offset, req, idle, ack, g_mask, wakeup, regulator) \ +#define DOMAIN_M_O_R_G(_name, p_offset, pwr, status, m_offset, m_status, r_status, r_offset, req, idle, ack, g_mask, delay, wakeup, regulator) \ { \ .name = _name, \ .pwr_offset = p_offset, \ @@ -201,6 +203,7 @@ struct rockchip_pmu { .req_mask = (req), \ .idle_mask = (idle), \ .clk_ungate_mask = (g_mask), \ + .delay_us = (delay), \ .ack_mask = (ack), \ .active_wakeup = wakeup, \ .need_regulator = regulator, \ @@ -260,11 +263,11 @@ struct rockchip_pmu { #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, false) +#define DOMAIN_RK3576(name, p_offset, pwr, status, r_status, r_offset, req, idle, g_mask, delay, wakeup) \ + DOMAIN_M_O_R_G(name, p_offset, pwr, status, 0, r_status, r_status, r_offset, req, idle, idle, g_mask, delay, wakeup, false) -#define DOMAIN_RK3576_R(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, true) +#define DOMAIN_RK3576_R(name, p_offset, pwr, status, r_status, r_offset, req, idle, g_mask, delay, wakeup) \ + DOMAIN_M_O_R_G(name, p_offset, pwr, status, 0, r_status, r_status, r_offset, req, idle, idle, g_mask, delay, wakeup, true) /* * Dynamic Memory Controller may need to coordinate with us -- see @@ -686,6 +689,10 @@ static int rockchip_pd_power(struct rockchip_pm_domain *pd, bool power_on) if (ret < 0) goto out; + /* Some domains need to settle before the QoS registers answer. */ + if (pd->info->delay_us) + udelay(pd->info->delay_us); + rockchip_pmu_restore_qos(pd); } @@ -1360,25 +1367,25 @@ static const struct rockchip_domain_info rk3568_pm_domains[] = { }; static const struct rockchip_domain_info rk3576_pm_domains[] = { - [RK3576_PD_NPU] = DOMAIN_RK3576_R("npu", 0x0, BIT(0), BIT(0), 0, 0x0, 0, 0, 0, false), - [RK3576_PD_NVM] = DOMAIN_RK3576("nvm", 0x0, BIT(6), 0, BIT(6), 0x4, BIT(2), BIT(18), BIT(2), false), - [RK3576_PD_SDGMAC] = DOMAIN_RK3576("sdgmac", 0x0, BIT(7), 0, BIT(7), 0x4, BIT(1), BIT(17), 0x6, false), - [RK3576_PD_AUDIO] = DOMAIN_RK3576("audio", 0x0, BIT(8), 0, BIT(8), 0x4, BIT(0), BIT(16), BIT(0), false), - [RK3576_PD_PHP] = DOMAIN_RK3576("php", 0x0, BIT(9), 0, BIT(9), 0x0, BIT(15), BIT(15), BIT(15), false), - [RK3576_PD_SUBPHP] = DOMAIN_RK3576("subphp", 0x0, BIT(10), 0, BIT(10), 0x0, 0, 0, 0, false), - [RK3576_PD_VOP] = DOMAIN_RK3576("vop", 0x0, BIT(11), 0, BIT(11), 0x0, 0x6000, 0x6000, 0x6000, false), - [RK3576_PD_VO1] = DOMAIN_RK3576("vo1", 0x0, BIT(14), 0, BIT(14), 0x0, BIT(12), BIT(12), 0x7000, false), - [RK3576_PD_VO0] = DOMAIN_RK3576("vo0", 0x0, BIT(15), 0, BIT(15), 0x0, BIT(11), BIT(11), 0x6800, false), - [RK3576_PD_USB] = DOMAIN_RK3576("usb", 0x4, BIT(0), 0, BIT(16), 0x0, BIT(10), BIT(10), 0x6400, true), - [RK3576_PD_VI] = DOMAIN_RK3576("vi", 0x4, BIT(1), 0, BIT(17), 0x0, BIT(9), BIT(9), BIT(9), false), - [RK3576_PD_VEPU0] = DOMAIN_RK3576("vepu0", 0x4, BIT(2), 0, BIT(18), 0x0, BIT(7), BIT(7), 0x280, false), - [RK3576_PD_VEPU1] = DOMAIN_RK3576("vepu1", 0x4, BIT(3), 0, BIT(19), 0x0, BIT(8), BIT(8), BIT(8), false), - [RK3576_PD_VDEC] = DOMAIN_RK3576("vdec", 0x4, BIT(4), 0, BIT(20), 0x0, BIT(6), BIT(6), BIT(6), false), - [RK3576_PD_VPU] = DOMAIN_RK3576("vpu", 0x4, BIT(5), 0, BIT(21), 0x0, BIT(5), BIT(5), BIT(5), false), - [RK3576_PD_NPUTOP] = DOMAIN_RK3576("nputop", 0x4, BIT(6), 0, BIT(22), 0x0, 0x18, 0x18, 0x18, false), - [RK3576_PD_NPU0] = DOMAIN_RK3576("npu0", 0x4, BIT(7), 0, BIT(23), 0x0, BIT(1), BIT(1), 0x1a, false), - [RK3576_PD_NPU1] = DOMAIN_RK3576("npu1", 0x4, BIT(8), 0, BIT(24), 0x0, BIT(2), BIT(2), 0x1c, false), - [RK3576_PD_GPU] = DOMAIN_RK3576_R("gpu", 0x4, BIT(9), 0, BIT(25), 0x0, BIT(0), BIT(0), BIT(0), false), + [RK3576_PD_NPU] = DOMAIN_RK3576_R("npu", 0x0, BIT(0), BIT(0), 0, 0x0, 0, 0, 0, 0, false), + [RK3576_PD_NVM] = DOMAIN_RK3576("nvm", 0x0, BIT(6), 0, BIT(6), 0x4, BIT(2), BIT(18), BIT(2), 0, false), + [RK3576_PD_SDGMAC] = DOMAIN_RK3576("sdgmac", 0x0, BIT(7), 0, BIT(7), 0x4, BIT(1), BIT(17), 0x6, 0, false), + [RK3576_PD_AUDIO] = DOMAIN_RK3576("audio", 0x0, BIT(8), 0, BIT(8), 0x4, BIT(0), BIT(16), BIT(0), 0, false), + [RK3576_PD_PHP] = DOMAIN_RK3576("php", 0x0, BIT(9), 0, BIT(9), 0x0, BIT(15), BIT(15), BIT(15), 0, false), + [RK3576_PD_SUBPHP] = DOMAIN_RK3576("subphp", 0x0, BIT(10), 0, BIT(10), 0x0, 0, 0, 0, 0, false), + [RK3576_PD_VOP] = DOMAIN_RK3576("vop", 0x0, BIT(11), 0, BIT(11), 0x0, 0x6000, 0x6000, 0x6000, 15, false), + [RK3576_PD_VO1] = DOMAIN_RK3576("vo1", 0x0, BIT(14), 0, BIT(14), 0x0, BIT(12), BIT(12), 0x7000, 0, false), + [RK3576_PD_VO0] = DOMAIN_RK3576("vo0", 0x0, BIT(15), 0, BIT(15), 0x0, BIT(11), BIT(11), 0x6800, 0, false), + [RK3576_PD_USB] = DOMAIN_RK3576("usb", 0x4, BIT(0), 0, BIT(16), 0x0, BIT(10), BIT(10), 0x6400, 0, true), + [RK3576_PD_VI] = DOMAIN_RK3576("vi", 0x4, BIT(1), 0, BIT(17), 0x0, BIT(9), BIT(9), BIT(9), 0, false), + [RK3576_PD_VEPU0] = DOMAIN_RK3576("vepu0", 0x4, BIT(2), 0, BIT(18), 0x0, BIT(7), BIT(7), 0x280, 0, false), + [RK3576_PD_VEPU1] = DOMAIN_RK3576("vepu1", 0x4, BIT(3), 0, BIT(19), 0x0, BIT(8), BIT(8), BIT(8), 0, false), + [RK3576_PD_VDEC] = DOMAIN_RK3576("vdec", 0x4, BIT(4), 0, BIT(20), 0x0, BIT(6), BIT(6), BIT(6), 0, false), + [RK3576_PD_VPU] = DOMAIN_RK3576("vpu", 0x4, BIT(5), 0, BIT(21), 0x0, BIT(5), BIT(5), BIT(5), 0, false), + [RK3576_PD_NPUTOP] = DOMAIN_RK3576("nputop", 0x4, BIT(6), 0, BIT(22), 0x0, 0x18, 0x18, 0x18, 15, false), + [RK3576_PD_NPU0] = DOMAIN_RK3576("npu0", 0x4, BIT(7), 0, BIT(23), 0x0, BIT(1), BIT(1), 0x1a, 0, false), + [RK3576_PD_NPU1] = DOMAIN_RK3576("npu1", 0x4, BIT(8), 0, BIT(24), 0x0, BIT(2), BIT(2), 0x1c, 0, false), + [RK3576_PD_GPU] = DOMAIN_RK3576_R("gpu", 0x4, BIT(9), 0, BIT(25), 0x0, BIT(0), BIT(0), BIT(0), 0, false), }; static const struct rockchip_domain_info rk3588_pm_domains[] = { -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-11-14 9:45 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-11-14 3:04 [PATCH v17 0/3] pmdomain: rockchip: RK3576 NPU domain supply and settle delay Jiaxing Hu 2026-11-14 3:04 ` [PATCH v17 1/3] pmdomain: rockchip: switch off the subdomains of a regulator domain at probe Jiaxing Hu 2026-11-14 9:45 ` Vladimir Bely 2026-11-14 3:05 ` [PATCH v17 2/3] pmdomain: rockchip: manage the RK3576 NPU domain supply Jiaxing Hu 2026-11-14 3:05 ` [PATCH v17 3/3] pmdomain: rockchip: settle RK3576 NPUTOP and VOP after power-on Jiaxing Hu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®