summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVenkat Gopalakrishnan <venkatg@codeaurora.org>2016-05-24 12:11:32 -0700
committerKyle Yan <kyan@codeaurora.org>2016-06-08 15:15:39 -0700
commit813edfeb4d198dd2bb29df132d4e417051e2e14f (patch)
tree6202ea80e2b390c62ceda52d18f93f4887580c10
parentc4fcd60d6908b3efa94a514f692d06b6a2d10c56 (diff)
scsi: ufs-qcom : Add quirk for broken auto hibern8
Some platforms might not support auto hibern8 even though the controller exposes this capability. Add a quirk to disable auto hibern8 for such platforms. Change-Id: I4a027f89deddff4735df45da9cffbfb1849af5f4 Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
-rw-r--r--drivers/scsi/ufs/ufs-qcom.c3
-rw-r--r--drivers/scsi/ufs/ufshcd.h6
2 files changed, 8 insertions, 1 deletions
diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index 96088afea4ca..319ce7a4cfe2 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -1355,6 +1355,9 @@ static void ufs_qcom_advertise_quirks(struct ufs_hba *hba)
| UFSHCD_QUIRK_DME_PEER_ACCESS_AUTO_MODE
| UFSHCD_QUIRK_BROKEN_PA_RXHSUNTERMCAP);
}
+
+ if (host->disable_lpm)
+ hba->quirks |= UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8;
}
static void ufs_qcom_set_caps(struct ufs_hba *hba)
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 84bf9d59ad50..1ccda45743d6 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -776,6 +776,9 @@ struct ufs_hba {
*/
#define UFSHCD_QUIRK_BROKEN_UFS_HCI_VERSION UFS_BIT(5)
+ /* Auto hibern8 support is broken */
+ #define UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8 UFS_BIT(6)
+
unsigned int quirks; /* Deviations from standard UFSHCI spec. */
/* Device deviations from standard UFS device spec. */
@@ -936,7 +939,8 @@ static inline bool ufshcd_is_intr_aggr_allowed(struct ufs_hba *hba)
static inline bool ufshcd_is_auto_hibern8_supported(struct ufs_hba *hba)
{
- return !!(hba->capabilities & MASK_AUTO_HIBERN8_SUPPORT);
+ return !!((hba->capabilities & MASK_AUTO_HIBERN8_SUPPORT) &&
+ !(hba->quirks & UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8));
}
static inline bool ufshcd_is_crypto_supported(struct ufs_hba *hba)