[PATCH] scsi: ufs: Check for bkops in runtime suspend

From: Avri Altman
Date: Sun Apr 18 2021 - 03:22:33 EST


The UFS driver allowed BKOPS and WB Flush operations to be completed on
Runtime suspend. Adding the DeepSleep support, this is no longer true:
the driver will ignore BKOPS and WB Flush states, and force a link state
transition to UIC_LINK_OFF_STATE.

Do not ignore BKOPS and WB Flush on runtme suspend flow.

fixes: fe1d4c2ebcae (scsi: ufs: Add DeepSleep feature)

Suggested-by: Alex Lemberg <alex.lemberg@xxxxxxx>
Signed-off-by: Avri Altman <avri.altman@xxxxxxx>
---
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 58d7f264c664..1a0cac670aba 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -8755,7 +8755,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
* In the case of DeepSleep, the device is expected to remain powered
* with the link off, so do not check for bkops.
*/
- check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba);
+ check_for_bkops = !ufshcd_is_ufs_dev_deepsleep(hba) ||
+ hba->dev_info.b_rpm_dev_flush_capable;
ret = ufshcd_link_state_transition(hba, req_link_state, check_for_bkops);
if (ret)
goto set_dev_active;
--
2.25.1