diff options
| author | Subhash Jadavani <subhashj@codeaurora.org> | 2013-08-30 11:46:47 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-22 10:55:25 -0700 |
| commit | 84bbb68e0d55ef43f4db9cdd93ef2d21bffd5eca (patch) | |
| tree | 032e0217b9dba7dceec49f9714fd46ba4138859b | |
| parent | 893e612aeb23d4154a55772360bd12c1f9f4409b (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.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/ufs/ufshcd.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/ufs/ufshcd.h | 7 |
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; |
