From 813edfeb4d198dd2bb29df132d4e417051e2e14f Mon Sep 17 00:00:00 2001 From: Venkat Gopalakrishnan Date: Tue, 24 May 2016 12:11:32 -0700 Subject: [PATCH] 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 --- drivers/scsi/ufs/ufs-qcom.c | 3 +++ drivers/scsi/ufs/ufshcd.h | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) 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)