scsi: ufs: full reinit upon resume if link was off
authorAsutosh Das <asutoshd@codeaurora.org>
Tue, 14 Apr 2020 06:14:48 +0000 (23:14 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 17 Apr 2020 21:24:46 +0000 (17:24 -0400)
During suspend, if the link is put to off, it would require a full
initialization during resume. This patch resets and restores both the host
and the card during initialization, otherwise host-only reset and restore
would fail occasionally.

Link: https://lore.kernel.org/r/1586844892-22720-1-git-send-email-cang@codeaurora.org
Reviewed-by: Bean Huo <beanhuo@micron.com>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Acked-by: Stanley Chu <stanley.chu@mediatek.com>
Acked-by: Avri Altman <Avri.Altman@wdc.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>
drivers/scsi/ufs/ufshcd.c

index 698e8d2..7d1fa13 100644 (file)
@@ -8055,9 +8055,13 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
                else
                        goto vendor_suspend;
        } else if (ufshcd_is_link_off(hba)) {
-               ret = ufshcd_host_reset_and_restore(hba);
                /*
-                * ufshcd_host_reset_and_restore() should have already
+                * A full initialization of the host and the device is
+                * required since the link was put to off during suspend.
+                */
+               ret = ufshcd_reset_and_restore(hba);
+               /*
+                * ufshcd_reset_and_restore() should have already
                 * set the link state as active
                 */
                if (ret || !ufshcd_is_link_active(hba))