| From 24366c2afbb0539fb14eff330d4e3a5db5c0a3ef Mon Sep 17 00:00:00 2001 |
| From: Asutosh Das <asutoshd@codeaurora.org> |
| Date: Mon, 25 Nov 2019 22:53:30 -0800 |
| Subject: scsi: ufs: Recheck bkops level if bkops is disabled |
| |
| From: Asutosh Das <asutoshd@codeaurora.org> |
| |
| commit 24366c2afbb0539fb14eff330d4e3a5db5c0a3ef upstream. |
| |
| bkops level should be rechecked upon receiving an exception. Currently the |
| level is being cached and never updated. |
| |
| Update bkops each time the level is checked. Also do not use the cached |
| bkops level value if it is disabled and then enabled. |
| |
| Fixes: afdfff59a0e0 (scsi: ufs: handle non spec compliant bkops behaviour by device) |
| Link: https://lore.kernel.org/r/1574751214-8321-2-git-send-email-cang@qti.qualcomm.com |
| Reviewed-by: Bean Huo <beanhuo@micron.com> |
| Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com> |
| Tested-by: Alim Akhtar <alim.akhtar@samsung.com> |
| Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> |
| Signed-off-by: Can Guo <cang@codeaurora.org> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/scsi/ufs/ufshcd.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/scsi/ufs/ufshcd.c |
| +++ b/drivers/scsi/ufs/ufshcd.c |
| @@ -5044,6 +5044,7 @@ static int ufshcd_disable_auto_bkops(str |
| |
| hba->auto_bkops_enabled = false; |
| trace_ufshcd_auto_bkops_state(dev_name(hba->dev), "Disabled"); |
| + hba->is_urgent_bkops_lvl_checked = false; |
| out: |
| return err; |
| } |
| @@ -5068,6 +5069,7 @@ static void ufshcd_force_reset_auto_bkop |
| hba->ee_ctrl_mask &= ~MASK_EE_URGENT_BKOPS; |
| ufshcd_disable_auto_bkops(hba); |
| } |
| + hba->is_urgent_bkops_lvl_checked = false; |
| } |
| |
| static inline int ufshcd_get_bkops_status(struct ufs_hba *hba, u32 *status) |
| @@ -5114,6 +5116,7 @@ static int ufshcd_bkops_ctrl(struct ufs_ |
| err = ufshcd_enable_auto_bkops(hba); |
| else |
| err = ufshcd_disable_auto_bkops(hba); |
| + hba->urgent_bkops_lvl = curr_status; |
| out: |
| return err; |
| } |