Commit 2c73fb13 authored by Bart Van Assche's avatar Bart Van Assche Committed by Martin K. Petersen
Browse files

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: 8d729034 ("scsi: ufs: mcq: Add supporting functions for MCQ abort")
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20241022193130.2733293-7-bvanassche@acm.org


Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 2a366460
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -572,13 +572,17 @@ 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,
		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))