Hi, On Tue, Nov 10, 2026 at 07:11:50AM +0000, Arun Iyengar via B4 Relay wrote: > From: Arun Iyengar > > On some platforms the SMMU's clock is controlled by the OS, and without a > consumer the clock framework gates it as unused late in boot. Any later > register access, for example the CR0 write in the shutdown path, then > stalls the interconnect. This happens on the RK3588 when no PCIe > controller keeps the PCIe MMU-600 clock running. > > Get and enable all clocks described in the firmware node before the > registers are first accessed, and keep them enabled while the driver is > bound. Nodes without clocks are not affected. > > Signed-off-by: Arun Iyengar > --- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > index 6d4520c47308..cce66db93219 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > @@ -12,6 +12,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -5786,6 +5787,7 @@ static int arm_smmu_device_probe(struct platform_device *pdev) > resource_size_t ioaddr; > struct arm_smmu_device *smmu; > struct device *dev = &pdev->dev; > + struct clk_bulk_data *clks; > > smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL); > if (!smmu) > @@ -5800,6 +5802,11 @@ static int arm_smmu_device_probe(struct platform_device *pdev) > if (ret) > return ret; > > + /* Optional clocks: keep them running for as long as we are bound */ useless comment, otherwise Reviewed-by: Sebastian Reichel Greetings, -- Sebastian > + ret = devm_clk_bulk_get_all_enabled(dev, &clks); > + if (ret < 0) > + return dev_err_probe(dev, ret, "failed to enable clocks\n"); > + > smmu = arm_smmu_impl_probe(smmu); > if (IS_ERR(smmu)) > return PTR_ERR(smmu); > > -- > 2.55.0 > > >