]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: ufs: core: Improve ufshcd_mcq_sq_cleanup()
authorBart Van Assche <bvanassche@acm.org>
Tue, 22 Oct 2024 19:31:02 +0000 (12:31 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 25 Oct 2024 19:01:11 +0000 (15:01 -0400)
From the UFSHCI specification: "CleanUp Command Return Code (RTC): host
controller sets this return code to provide more details of the cleanup
process. It is valid only when CUS is 1." Hence, do not read RTC if the
CUS bitfield is zero.

Cc: Bao D. Nguyen <quic_nguyenb@quicinc.com>
Fixes: 8d7290348992 ("scsi: ufs: mcq: Add supporting functions for MCQ abort")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20241022193130.2733293-7-bvanassche@acm.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/core/ufs-mcq.c

index 57ced1729b73ccbd9ce76a980de1e5e9d273025a..9884005005605cb4a8b578a6c5b9962b7f6a16b4 100644 (file)
@@ -572,14 +572,18 @@ int ufshcd_mcq_sq_cleanup(struct ufs_hba *hba, int task_tag)
        /* SQRTCy.ICU = 1 */
        writel(SQ_ICU, opr_sqd_base + REG_SQRTC);
 
-       /* Poll SQRTSy.CUS = 1. Return result from SQRTSy.RTC */
+       /* Wait until SQRTSy.CUS = 1. Report SQRTSy.RTC. */
        reg = opr_sqd_base + REG_SQRTS;
        err = read_poll_timeout(readl, val, val & SQ_CUS, 20,
                                MCQ_POLL_US, false, reg);
        if (err)
-               dev_err(hba->dev, "%s: failed. hwq=%d, tag=%d err=%ld\n",
-                       __func__, id, task_tag,
-                       FIELD_GET(SQ_ICU_ERR_CODE_MASK, readl(reg)));
+               dev_err(hba->dev, "%s: failed. hwq=%d, tag=%d err=%d\n",
+                       __func__, id, task_tag, err);
+       else
+               dev_info(hba->dev,
+                        "%s, hwq %d: cleanup return code (RTC) %ld\n",
+                        __func__, id,
+                        FIELD_GET(SQ_ICU_ERR_CODE_MASK, readl(reg)));
 
        if (ufshcd_mcq_sq_start(hba, hwq))
                err = -ETIMEDOUT;