[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200417175944.47189-6-alim.akhtar@samsung.com>
Date: Fri, 17 Apr 2020 23:29:39 +0530
From: Alim Akhtar <alim.akhtar@...sung.com>
To: robh@...nel.org
Cc: devicetree@...r.kernel.org, linux-scsi@...r.kernel.org,
krzk@...nel.org, avri.altman@....com, martin.petersen@...cle.com,
kwmad.kim@...sung.com, stanley.chu@...iatek.com,
cang@...eaurora.org, linux-samsung-soc@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
Alim Akhtar <alim.akhtar@...sung.com>
Subject: [PATCH v6 05/10] scsi: ufs: add quirk to fix abnormal ocs fatal
error
From: Kiwoong Kim <kwmad.kim@...sung.com>
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@...sung.com>
Signed-off-by: Alim Akhtar <alim.akhtar@...sung.com>
---
drivers/scsi/ufs/ufshcd.c | 6 ++++++
drivers/scsi/ufs/ufshcd.h | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index b32fcedcdcb9..8c07caff0a5c 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -4794,6 +4794,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 a9b9ace9fc72..e1d09c2c4302 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -541,6 +541,12 @@ enum ufshcd_quirks {
* resolution of the values of PRDTO and PRDTL in UTRD as byte.
*/
UFSHCD_QUIRK_PRDT_BYTE_GRAN = 1 << 9,
+
+ /*
+ * This quirk needs to be enabled if the host controller reports
+ * OCS FATAL ERROR with device error through sense data
+ */
+ UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR = 1 << 10,
};
enum ufshcd_caps {
--
2.17.1
Powered by blists - more mailing lists