summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubhash Jadavani <subhashj@codeaurora.org>2013-08-30 11:46:47 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 10:55:25 -0700
commit84bbb68e0d55ef43f4db9cdd93ef2d21bffd5eca (patch)
tree032e0217b9dba7dceec49f9714fd46ba4138859b
parent893e612aeb23d4154a55772360bd12c1f9f4409b (diff)
scsi: ufs-msm: fix UFS version register bug
Qualcomm MSM UFS controller version register (VER) wrongly advertise the version as v1.0 though controller implementation is as per UFSHCI v1.1 specification. This patch corrects this HW behaviour with appropriate quirk handling. Change-Id: Idc99e8504617e7828043e06afdaecb7ddc4218f8 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
-rw-r--r--drivers/scsi/ufs/ufs-msm.c3
-rw-r--r--drivers/scsi/ufs/ufshcd.c3
-rw-r--r--drivers/scsi/ufs/ufshcd.h7
3 files changed, 12 insertions, 1 deletions
diff --git a/drivers/scsi/ufs/ufs-msm.c b/drivers/scsi/ufs/ufs-msm.c
index 327ee18cb68b..2fd4b8f75fed 100644
--- a/drivers/scsi/ufs/ufs-msm.c
+++ b/drivers/scsi/ufs/ufs-msm.c
@@ -1319,7 +1319,8 @@ static void msm_ufs_advertise_quirks(struct ufs_hba *hba)
*/
if ((major == 0x1) && (minor == 0x001) && (step == 0x0000))
hba->quirks |= (UFSHCD_QUIRK_BROKEN_INTR_AGGR
- | UFSHCD_QUIRK_BROKEN_HIBERN8);
+ | UFSHCD_QUIRK_BROKEN_HIBERN8
+ | UFSHCD_QUIRK_BROKEN_VER_REG_1_1);
}
/**
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index ea4273c34999..71e1140fa2ce 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -5585,6 +5585,9 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
/* Get UFS version supported by the controller */
hba->ufs_version = ufshcd_get_ufs_version(hba);
+ if ((hba->quirks & UFSHCD_QUIRK_BROKEN_VER_REG_1_1) &&
+ (hba->ufs_version == UFSHCI_VERSION_10))
+ hba->ufs_version = UFSHCI_VERSION_11;
/* Get Interrupt bit mask per version */
hba->intr_mask = ufshcd_get_intr_mask(hba);
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index d3b6b37a8dd6..1e2e10a283ca 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -497,6 +497,13 @@ struct ufs_hba {
/* HIBERN8 support is broken */
#define UFSHCD_QUIRK_BROKEN_HIBERN8 (1<<1)
+ /*
+ * UFS controller version register (VER) wrongly advertise the version
+ * as v1.0 though controller implementation is as per UFSHCI v1.1
+ * specification.
+ */
+ #define UFSHCD_QUIRK_BROKEN_VER_REG_1_1 (1<<2)
+
struct uic_command *active_uic_cmd;
struct mutex uic_cmd_mutex;
struct completion *uic_async_done;