mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
scsi: ufs: Clear UAC for RPMB after ufshcd resets
If RPMB is not provisioned, we may see RPMB failure after UFS suspend/resume. Inject request_sense to clear uac in ufshcd reset flow. Link: https://lore.kernel.org/r/20201201041402.3860525-1-jaegeuk@kernel.org Reported-by: kernel test robot <lkp@intel.com> Reviewed-by: Stanley Chu <stanley.chu@mediatek.com> Signed-off-by: Randall Huang <huangrandall@google.com> Signed-off-by: Leo Liou <leoliou@google.com> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
1fa0570002
commit
1918651f2d
@ -225,6 +225,7 @@ static int ufshcd_reset_and_restore(struct ufs_hba *hba);
|
||||
static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd);
|
||||
static int ufshcd_clear_tm_cmd(struct ufs_hba *hba, int tag);
|
||||
static void ufshcd_hba_exit(struct ufs_hba *hba);
|
||||
static int ufshcd_clear_ua_wluns(struct ufs_hba *hba);
|
||||
static int ufshcd_probe_hba(struct ufs_hba *hba, bool async);
|
||||
static int ufshcd_setup_clocks(struct ufs_hba *hba, bool on);
|
||||
static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
|
||||
@ -6895,7 +6896,8 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba)
|
||||
|
||||
/* Establish the link again and restore the device */
|
||||
err = ufshcd_probe_hba(hba, false);
|
||||
|
||||
if (!err)
|
||||
ufshcd_clear_ua_wluns(hba);
|
||||
out:
|
||||
if (err)
|
||||
dev_err(hba->dev, "%s: Host init failed %d\n", __func__, err);
|
||||
@ -8379,13 +8381,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
|
||||
* handling context.
|
||||
*/
|
||||
hba->host->eh_noresume = 1;
|
||||
if (hba->wlun_dev_clr_ua) {
|
||||
ret = ufshcd_send_request_sense(hba, sdp);
|
||||
if (ret)
|
||||
goto out;
|
||||
/* Unit attention condition is cleared now */
|
||||
hba->wlun_dev_clr_ua = false;
|
||||
}
|
||||
ufshcd_clear_ua_wluns(hba);
|
||||
|
||||
cmd[4] = pwr_mode << 4;
|
||||
|
||||
@ -8406,7 +8402,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
|
||||
|
||||
if (!ret)
|
||||
hba->curr_dev_pwr_mode = pwr_mode;
|
||||
out:
|
||||
|
||||
scsi_device_put(sdp);
|
||||
hba->host->eh_noresume = 0;
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user