| From 4fe4c5cc216698e5df3c9f7a3313840274a19760 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 25 Apr 2021 20:48:38 -0700 |
| Subject: scsi: ufs: core: Do not put UFS power into LPM if link is broken |
| |
| From: Can Guo <cang@codeaurora.org> |
| |
| [ Upstream commit 23043dd87b153d02eaf676e752d32429be5e5126 ] |
| |
| During resume, if link is broken due to AH8 failure, make sure |
| ufshcd_resume() does not put UFS power back into LPM. |
| |
| Link: https://lore.kernel.org/r/1619408921-30426-2-git-send-email-cang@codeaurora.org |
| Fixes: 4db7a2360597 ("scsi: ufs: Fix concurrency of error handler and other error recovery paths") |
| Reviewed-by: Daejun Park <daejun7.park@samsung.com> |
| Signed-off-by: Can Guo <cang@codeaurora.org> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/ufs/ufshcd.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c |
| index 4215d9a8e5de..d1900ea31b0d 100644 |
| --- a/drivers/scsi/ufs/ufshcd.c |
| +++ b/drivers/scsi/ufs/ufshcd.c |
| @@ -8459,7 +8459,7 @@ static void ufshcd_vreg_set_lpm(struct ufs_hba *hba) |
| } else if (!ufshcd_is_ufs_dev_active(hba)) { |
| ufshcd_toggle_vreg(hba->dev, hba->vreg_info.vcc, false); |
| vcc_off = true; |
| - if (!ufshcd_is_link_active(hba)) { |
| + if (ufshcd_is_link_hibern8(hba) || ufshcd_is_link_off(hba)) { |
| ufshcd_config_vreg_lpm(hba, hba->vreg_info.vccq); |
| ufshcd_config_vreg_lpm(hba, hba->vreg_info.vccq2); |
| } |
| @@ -8481,7 +8481,7 @@ static int ufshcd_vreg_set_hpm(struct ufs_hba *hba) |
| !hba->dev_info.is_lu_power_on_wp) { |
| ret = ufshcd_setup_vreg(hba, true); |
| } else if (!ufshcd_is_ufs_dev_active(hba)) { |
| - if (!ret && !ufshcd_is_link_active(hba)) { |
| + if (!ufshcd_is_link_active(hba)) { |
| ret = ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq); |
| if (ret) |
| goto vcc_disable; |
| -- |
| 2.30.2 |
| |