Merge drm/drm-next into drm-misc-next
[sfrench/cifs-2.6.git] / drivers / accel / qaic / mhi_controller.c
index 364eede0ac02282a451a207402a3bc26c30d2be0..51cb85d0387b2c71ed3bc7fc4bedc75fd83ec01c 100644 (file)
@@ -436,8 +436,21 @@ static struct mhi_controller_config aic100_config = {
 
 static int mhi_read_reg(struct mhi_controller *mhi_cntrl, void __iomem *addr, u32 *out)
 {
-       u32 tmp = readl_relaxed(addr);
+       u32 tmp;
 
+       /*
+        * SOC_HW_VERSION quirk
+        * The SOC_HW_VERSION register (offset 0x224) is not reliable and
+        * may contain uninitialized values, including 0xFFFFFFFF. This could
+        * cause a false positive link down error.  Instead, intercept any
+        * reads and provide the correct value of the register.
+        */
+       if (addr - mhi_cntrl->regs == 0x224) {
+               *out = 0x60110200;
+               return 0;
+       }
+
+       tmp = readl_relaxed(addr);
        if (tmp == U32_MAX)
                return -EIO;