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:
committed by
Carlos Llamas
parent
75adb09e2f
commit
0dd21f133b
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user