ANDROID: ufs: add quirk to fix abnormal ocs fatal error

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.

Bug: 149781764
Change-Id: I1b62e620c71e1f3a80922ebbc417fe037a8c12d5
Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Kiwoong Kim
2020-02-08 16:14:48 +09:00
committed by Greg Kroah-Hartman
parent 8ec7bddd87
commit 3c18a42802
2 changed files with 12 additions and 0 deletions

View File

@@ -4805,6 +4805,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);

View File

@@ -681,6 +681,12 @@ struct ufs_hba {
*/
#define UFSHCD_QUIRK_BROKEN_CRYPTO 0x800
/*
* 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 0x1000
unsigned int quirks; /* Deviations from standard UFSHCI spec. */
/* Device deviations from standard UFS device spec. */