summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wang <peter.wang@mediatek.com>2025-09-03 10:44:38 +0800
committerMartin K. Petersen <martin.petersen@oracle.com>2025-09-09 22:46:22 -0400
commit15ef3f5aa822f32524cba1463422a2c9372443f0 (patch)
treee9dcfad44ada671e18249750e1492aff09284512
parentfaac32d4ece30609f1a0930ca0ae951cf6dc1786 (diff)
scsi: ufs: host: mediatek: Enhance recovery on resume failure
Improve the recovery process for failed resume operations. Log the device's power status and return 0 if both resume and recovery fail to prevent I/O hang. Signed-off-by: Peter Wang <peter.wang@mediatek.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/ufs/host/ufs-mediatek.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index e62f02b7ca76..804a18fe2198 100644
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -1775,8 +1775,21 @@ static int ufs_mtk_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
}
return 0;
+
fail:
- return ufshcd_link_recovery(hba);
+ /*
+ * Check if the platform (parent) device has resumed, and ensure that
+ * power, clock, and MTCMOS are all turned on.
+ */
+ err = ufshcd_link_recovery(hba);
+ if (err) {
+ dev_err(hba->dev, "Device PM: req=%d, status:%d, err:%d\n",
+ hba->dev->power.request,
+ hba->dev->power.runtime_status,
+ hba->dev->power.runtime_error);
+ }
+
+ return 0; /* Cannot return a failure, otherwise, the I/O will hang. */
}
static void ufs_mtk_dbg_register_dump(struct ufs_hba *hba)