Hi, On Tue, Nov 10, 2026 at 07:11:51AM +0000, Arun Iyengar via B4 Relay wrote: > From: Arun Iyengar > > The MMU-600 for the PCIe controllers (mmu600_pcie) is enabled for every > RK3588 board, but its node does not describe that it lives in > RK3588_PD_PCIE. It only works today because TF-A leaves the domain on at > boot and, on most boards, an enabled PCIe controller holds it on later. > > On a board that disables all PCIe controllers using that domain (the > Orange Pi 5 with its M.2 slot in SATA mode is one), genpd powers > PD_PCIE off as unused after boot while arm-smmu-v3 is still bound. Then > at reboot arm_smmu_device_shutdown() writes CR0 and polls CR0ACK on the > unpowered block, which stalls the bus: the kernel never reaches > "reboot: Restarting system" and the board only comes back once the > watchdog fires. > > Describe the power domain, so genpd keeps it on for as long as the SMMU > is bound. > > Fixes: da92d3dfc871 ("arm64: dts: rockchip: enable the mmu600_pcie IOMMU on the rk3588 SoC") > Signed-off-by: Arun Iyengar > --- > arch/arm64/boot/dts/rockchip/rk3588-base.dtsi | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi > index aa69fd3793fd..bcd342c025c9 100644 > --- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi > +++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi > @@ -560,6 +560,7 @@ mmu600_pcie: iommu@fc900000 { > ; > interrupt-names = "eventq", "gerror", "priq", "cmdq-sync"; > #iommu-cells = <1>; > + power-domains = <&power RK3588_PD_PCIE>; The TRM says the power domain of MMU600_PCIE is PD_PHP, not PD_PCIE. See Table 7-1 RK3588 Voltage Domain and Power Domain Summary around page 1096 (depending on specific TRM version). Note, that PD_PCIE is a child of PD_PHP, so it makes sense that PD_PCIE also works. Greetings, -- Sebastian > }; > > mmu600_php: iommu@fcb00000 { > > -- > 2.55.0 > > >