From 2290f868532f30a3acf8c977891886f8e1c6d8ea Mon Sep 17 00:00:00 2001 From: JaeHun Jung Date: Tue, 3 Dec 2019 15:08:00 +0900 Subject: [PATCH] [RAMEN9610-21009][COMMON] scsi: ufs: Add device reset for malfunction in bkops. When UFS device goes to malfunction in bkops setting. UFS device return response error code to host. In case, Add device reset for need recover. Change-Id: I2ec2ad3c280f2bc7cd29b76251fe4fef580f9eab Signed-off-by: JaeHun Jung --- drivers/scsi/ufs/ufshcd.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index ddc0bc75d28f..0df92e999879 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5204,18 +5204,22 @@ out: * as well. This function would change the auto-bkops state based on * UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND. */ -static void ufshcd_force_reset_auto_bkops(struct ufs_hba *hba) +static int ufshcd_force_reset_auto_bkops(struct ufs_hba *hba) { + int ret = 0; + if (ufshcd_keep_autobkops_enabled_except_suspend(hba)) { hba->auto_bkops_enabled = false; hba->ee_ctrl_mask |= MASK_EE_URGENT_BKOPS; - ufshcd_enable_auto_bkops(hba); + ret = ufshcd_enable_auto_bkops(hba); } else { hba->auto_bkops_enabled = true; hba->ee_ctrl_mask &= ~MASK_EE_URGENT_BKOPS; - ufshcd_disable_auto_bkops(hba); + ret = ufshcd_disable_auto_bkops(hba); } hba->is_urgent_bkops_lvl_checked = false; + + return ret; } static inline int ufshcd_get_bkops_status(struct ufs_hba *hba, u32 *status) @@ -6829,7 +6833,11 @@ retry: /* UFS device is also active now */ ufshcd_set_ufs_dev_active(hba); - ufshcd_force_reset_auto_bkops(hba); + ret = ufshcd_force_reset_auto_bkops(hba); + if (ret) { + device_reset = 1; + goto out; + } hba->wlun_dev_clr_ua = true; if (ufshcd_get_max_pwr_mode(hba)) { -- 2.20.1