|
@@ -288,10 +288,24 @@ int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
|
|
|
*/
|
|
|
static inline u32 ufshcd_get_intr_mask(struct ufs_hba *hba)
|
|
|
{
|
|
|
- if (hba->ufs_version == UFSHCI_VERSION_10)
|
|
|
- return INTERRUPT_MASK_ALL_VER_10;
|
|
|
- else
|
|
|
- return INTERRUPT_MASK_ALL_VER_11;
|
|
|
+ u32 intr_mask = 0;
|
|
|
+
|
|
|
+ switch (hba->ufs_version) {
|
|
|
+ case UFSHCI_VERSION_10:
|
|
|
+ intr_mask = INTERRUPT_MASK_ALL_VER_10;
|
|
|
+ break;
|
|
|
+ /* allow fall through */
|
|
|
+ case UFSHCI_VERSION_11:
|
|
|
+ case UFSHCI_VERSION_20:
|
|
|
+ intr_mask = INTERRUPT_MASK_ALL_VER_11;
|
|
|
+ break;
|
|
|
+ /* allow fall through */
|
|
|
+ case UFSHCI_VERSION_21:
|
|
|
+ default:
|
|
|
+ intr_mask = INTERRUPT_MASK_ALL_VER_21;
|
|
|
+ }
|
|
|
+
|
|
|
+ return intr_mask;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -6667,6 +6681,13 @@ 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->ufs_version != UFSHCI_VERSION_10) &&
|
|
|
+ (hba->ufs_version != UFSHCI_VERSION_11) &&
|
|
|
+ (hba->ufs_version != UFSHCI_VERSION_20) &&
|
|
|
+ (hba->ufs_version != UFSHCI_VERSION_21))
|
|
|
+ dev_err(hba->dev, "invalid UFS version 0x%x\n",
|
|
|
+ hba->ufs_version);
|
|
|
+
|
|
|
/* Get Interrupt bit mask per version */
|
|
|
hba->intr_mask = ufshcd_get_intr_mask(hba);
|
|
|
|