Message ID | 20200218224307.8017-1-kwmad.kim@samsung.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | ufs: add quirk to fix abnormal ocs fatal error | expand |
On Wed, Feb 19, 2020 at 07:43:07AM +0900, Kiwoong Kim wrote: > Some architectures determines if fatal error for OCS > occurrs to check status in response upiu. This patch > is to prevent from reporting command results with that. This seems to be missing the hunk to actually set the quirk bit..
> On Wed, Feb 19, 2020 at 07:43:07AM +0900, Kiwoong Kim wrote: > > Some architectures determines if fatal error for OCS occurrs to check > > status in response upiu. This patch is to prevent from reporting > > command results with that. > > This seems to be missing the hunk to actually set the quirk bit.. Exynos specific driver sets and is using it but the driver is not updated yet. I'll do upstream it in the future.
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index f4aa10fdbb0c..39305076051e 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4731,6 +4731,12 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) /* overall command status of utrd */ ocs = ufshcd_get_tr_ocs(lrbp); + if (hba->quirks & UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR) { + if (be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_1) & + MASK_RSP_UPIU_RESULT) + ocs = OCS_SUCCESS; + } + switch (ocs) { case OCS_SUCCESS: result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 8f516b205c32..4757e1eadee0 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -635,6 +635,12 @@ struct ufs_hba { * enabled via HCE register. */ #define UFSHCI_QUIRK_BROKEN_HCE 0x400 + + /* + * This quirk needs to be enabled if the host controller reports + * OCS FATAL ERROR with device error through sense data + */ + #define UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR 0x800 unsigned int quirks; /* Deviations from standard UFSHCI spec. */ /* Device deviations from standard UFS device spec. */
Some architectures determines if fatal error for OCS occurrs to check status in response upiu. This patch is to prevent from reporting command results with that. Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com> --- drivers/scsi/ufs/ufshcd.c | 6 ++++++ drivers/scsi/ufs/ufshcd.h | 6 ++++++ 2 files changed, 12 insertions(+)