On 2/09/21 8:07 pm, Asutosh Das (asd) wrote: > On 9/2/2021 3:18 AM, Adrian Hunter wrote: >> If the UFS Device WLUN is runtime suspended and is in the same power >> mode, link state and b_rpm_dev_flush_capable (BKOP or WB buffer flush etc) >> state, then it can remain runtime suspended instead of being runtime >> resumed and then system suspended. >> >> The following patches have cleared the way for that to happen: >> scsi: ufs: Fix runtime PM dependencies getting broken >> scsi: ufs: Fix error handler clear ua deadlock >> >> So amend the logic accordingly. >> >> Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> >> --- >> drivers/scsi/ufs/ufshcd.c | 45 ++++++++++++++++++++++++++++----------- >> drivers/scsi/ufs/ufshcd.h | 11 +++++++++- >> 2 files changed, 43 insertions(+), 13 deletions(-) >> > Hi Adrian, > Thanks for the change. > >> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c >> index 57ed4b93b949..8e799e47e095 100644 >> --- a/drivers/scsi/ufs/ufshcd.c >> +++ b/drivers/scsi/ufs/ufshcd.c >> @@ -9722,13 +9722,29 @@ void ufshcd_resume_complete(struct device *dev) >> ufshcd_rpm_put(hba); >> hba->complete_put = false; >> } >> - if (hba->rpmb_complete_put) { >> - ufshcd_rpmb_rpm_put(hba); >> - hba->rpmb_complete_put = false; >> - } >> } >> EXPORT_SYMBOL_GPL(ufshcd_resume_complete); >> +static bool ufshcd_rpm_ok_for_spm(struct ufs_hba *hba) >> +{ >> + struct device *dev = &hba->sdev_ufs_device->sdev_gendev; >> + enum ufs_dev_pwr_mode dev_pwr_mode; >> + enum uic_link_state link_state; >> + unsigned long flags; >> + bool res; >> + > In the current ufshcd_suspend(), there's a ufshcd_vops_suspend(). > That's invoked for different pm_ops independent of the rpm_lvl and spm_lvl. > I'm not sure if any vendor driver does different things for diff pm_op. > Perhaps something to check. > Good point. The logic was that way before "scsi: ufs: core: Enable power management for wlu" which was first in v5.14, so drivers should expect the behaviour of this patch. Checking shows only ufs-hisi does something different but it sets different rpm_lvl and spm_lvl so wouldn't see any change. However I am sending a V2 patch that makes it explicit.