Message ID | 20201222072905.32221-2-stanley.chu@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | scsi: ufs: Fix power drain and hci quirk for WriteBooster | expand |
On 2020-12-22 15:29, Stanley Chu wrote: > Currently if device needs to do flush or BKOP operations, > the device VCC power is kept during runtime-suspend period. > > However, if system suspend is happening while device is > runtime-suspended, such power may not be disabled successfully. > > The reasons may be, > > 1. If current PM level is the same as SPM level, device will > keep runtime-suspended by ufshcd_system_suspend(). > > 2. Flush recheck work may not be scheduled successfully > during system suspend period. If it can wake up the system, > this is also not the intention of the recheck work. > > To fix this issue, simply runtime-resume the device if the flush > is allowed during runtime suspend period. Flush capability will be > disabled while leaving runtime suspend, and also not be allowed in > system suspend period. > > Fixes: 51dd905bd2f6 ("scsi: ufs: Fix WriteBooster flush during runtime > suspend") > Reviewed-by: Chaotian Jing <chaotian.jing@mediatek.com> > Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> > --- > drivers/scsi/ufs/ufshcd.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index e221add25a7e..9d61dc3eb842 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -8903,7 +8903,8 @@ int ufshcd_system_suspend(struct ufs_hba *hba) > if ((ufs_get_pm_lvl_to_dev_pwr_mode(hba->spm_lvl) == > hba->curr_dev_pwr_mode) && > (ufs_get_pm_lvl_to_link_pwr_state(hba->spm_lvl) == > - hba->uic_link_state)) > + hba->uic_link_state) && > + !hba->dev_info.b_rpm_dev_flush_capable) > goto out; > > if (pm_runtime_suspended(hba->dev)) { Reviewed-by: Can Guo <cang@codeaurora.org>
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index e221add25a7e..9d61dc3eb842 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -8903,7 +8903,8 @@ int ufshcd_system_suspend(struct ufs_hba *hba) if ((ufs_get_pm_lvl_to_dev_pwr_mode(hba->spm_lvl) == hba->curr_dev_pwr_mode) && (ufs_get_pm_lvl_to_link_pwr_state(hba->spm_lvl) == - hba->uic_link_state)) + hba->uic_link_state) && + !hba->dev_info.b_rpm_dev_flush_capable) goto out; if (pm_runtime_suspended(hba->dev)) {