scsi: ufs-pci: Fix recovery from hibernate exit errors for Intel controllers
Intel controllers can end up in an unrecoverable state after a hibernate exit error unless a full reset and restore is done before anything else. Force that to happen. Link: https://lore.kernel.org/r/20201207083120.26732-4-adrian.hunter@intel.com Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
af423534d2
commit
044d5bda71
|
@ -178,6 +178,23 @@ static int ufs_intel_resume(struct ufs_hba *hba, enum ufs_pm_op op)
|
|||
REG_UTP_TASK_REQ_LIST_BASE_L);
|
||||
ufshcd_writel(hba, upper_32_bits(hba->utmrdl_dma_addr),
|
||||
REG_UTP_TASK_REQ_LIST_BASE_H);
|
||||
|
||||
if (ufshcd_is_link_hibern8(hba)) {
|
||||
int ret = ufshcd_uic_hibern8_exit(hba);
|
||||
|
||||
if (!ret) {
|
||||
ufshcd_set_link_active(hba);
|
||||
} else {
|
||||
dev_err(hba->dev, "%s: hibern8 exit failed %d\n",
|
||||
__func__, ret);
|
||||
/*
|
||||
* Force reset and restore. Any other actions can lead
|
||||
* to an unrecoverable state.
|
||||
*/
|
||||
ufshcd_set_link_off(hba);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue