Skip to content

Commit

Permalink
scsi: ufs: core: Improve ufshcd_mcq_sq_cleanup()
Browse files Browse the repository at this point in the history
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: 8d72903 ("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>
  • Loading branch information
bvanassche authored and martinkpetersen committed Oct 25, 2024
1 parent 2a36646 commit 2c73fb1
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions drivers/ufs/core/ufs-mcq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 2c73fb1

Please sign in to comment.