[...] > + > +#ifdef CONFIG_PM_SLEEP > +static int ufs_rockchip_system_suspend(struct device *dev) > +{ > + struct ufs_hba *hba = dev_get_drvdata(dev); > + struct ufs_rockchip_host *host = ufshcd_get_variant(hba); > + int err; > + > + if (hba->spm_lvl < UFS_PM_LVL_5) > + device_set_awake_path(dev); > + > + err = ufshcd_system_suspend(dev); > + if (err) { > + dev_err(hba->dev, "system susped failed %d\n", err); > + return err; > + } > + > + clk_disable_unprepare(host->ref_out_clk); I am not sure that the host is always runtime resumed at this point, or is there? If not, we need to call pm_runtime_get_sync() somewhere here and a corresponding pm_runtime_put* in the ->suspend() callback. Of course, if you could make use of pm_runtime_force_suspend|resume() that would be even better, but then probably need some additional re-work in the ufs-core layer first, to make this work, I think. [...] Kind regards Uffe