ANDROID: scsi: ufs: add UFSHCD_ANDROID_QUIRK_SET_IID_TO_ONE

This patch forward-ports the three patches together for 6.12.

6336a9a84b
("ANDROID: ufs: core: move Android quirks into separate field")

f10cf63d3ff9
("ANDROID: scsi: ufs: add UFSHCD_ANDROID_QUIRK_SET_IID_TO_ONE")

0de12a814a2d
("ANDROID: scsi: ufs: Fix a race condition related to device command processing")

Bug: 303649600
Bug: 397077931
Change-Id: I43b410e947cffdf0b4acd2c38ba6b1432b2f1342
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Konstantin Vyshetsky <vkon@google.com>
Signed-off-by: Bart Van Assche <bvanassche@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
This commit is contained in:
Jaegeuk Kim
2025-02-18 11:08:43 -08:00
committed by Carlos Llamas
parent 75adb09e2f
commit 0dd21f133b
3 changed files with 14 additions and 1 deletions

View File

@@ -565,7 +565,7 @@ int ufshcd_mcq_sq_cleanup(struct ufs_hba *hba, int task_tag)
goto unlock;
/* SQCTI = EXT_IID, IID, LUN, Task Tag */
nexus = lrbp->lun << 8 | task_tag;
nexus = lrbp->ucd_req_ptr->header.iid << 16 | lrbp->lun << 8 | task_tag;
opr_sqd_base = mcq_opr_base(hba, OPR_SQD, id);
writel(nexus, opr_sqd_base + REG_SQCTI);

View File

@@ -2909,6 +2909,9 @@ static int ufshcd_compose_devman_upiu(struct ufs_hba *hba,
else
ret = -EINVAL;
if (!ret && hba->android_quirks & UFSHCD_ANDROID_QUIRK_SET_IID_TO_ONE)
lrbp->ucd_req_ptr->header.iid = 1;
return ret;
}
@@ -2928,6 +2931,9 @@ static void ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
if (ioprio_class == IOPRIO_CLASS_RT)
upiu_flags |= UPIU_CMD_FLAGS_CP;
ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags);
if (hba->android_quirks & UFSHCD_ANDROID_QUIRK_SET_IID_TO_ONE)
lrbp->ucd_req_ptr->header.iid = 1;
}
/**

View File

@@ -703,6 +703,11 @@ enum ufshcd_quirks {
UFSHCD_QUIRK_BROKEN_LSDBS_CAP = 1 << 25,
};
enum ufshcd_android_quirks {
/* Set IID to one. */
UFSHCD_ANDROID_QUIRK_SET_IID_TO_ONE = 1 << 0,
};
enum ufshcd_caps {
/* Allow dynamic clk gating */
UFSHCD_CAP_CLK_GATING = 1 << 0,
@@ -1037,6 +1042,8 @@ struct ufs_hba {
unsigned int quirks; /* Deviations from standard UFSHCI spec. */
unsigned int android_quirks; /* for UFSHCD_ANDROID_QUIRK_* flags */
/* Device deviations from standard UFS device spec. */
unsigned int dev_quirks;