scsi: ufs: core: Improve ufshcd_mcq_sq_cleanup()
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: 8d72903489 ("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>
This commit is contained in:
committed by
Martin K. Petersen
parent
2a36646012
commit
2c73fb138d
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user