Jelajahi Sumber

Merge "msm: camera: icp: Add WD clear logic for lx7" into camera-kernel.lnx.5.0

Haritha Chintalapati 3 tahun lalu
induk
melakukan
ecb3d1cd6c

+ 9 - 2
drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c

@@ -857,8 +857,15 @@ irqreturn_t cam_lx7_handle_irq(int irq_num, void *data)
 	cam_io_w_mb(status, cirq_base + ICP_LX7_CIRQ_OB_CLEAR);
 	cam_io_w_mb(LX7_IRQ_CLEAR_CMD, cirq_base + ICP_LX7_CIRQ_OB_IRQ_CMD);
 
-	if (status & (LX7_WDT_BITE_WS0 | LX7_WDT_BITE_WS1)) {
-		CAM_ERR_RATE_LIMIT(CAM_ICP, "got watchdog interrupt from LX7");
+	if (status & LX7_WDT_BITE_WS0) {
+		/* WD clear sequence - SW listens only to WD0 */
+		cam_io_w_mb(0x0,
+			lx7_info->soc_info.reg_map[LX7_WD0_BASE].mem_base +
+			ICP_LX7_WD_CTRL);
+		cam_io_w_mb(0x1,
+			lx7_info->soc_info.reg_map[LX7_WD0_BASE].mem_base +
+			ICP_LX7_WD_INTCLR);
+		CAM_ERR_RATE_LIMIT(CAM_ICP, "Fatal: Watchdog Bite from LX7");
 		recover = true;
 	}
 

+ 1 - 0
drivers/cam_icp/icp_hw/lx7_hw/lx7_core.h

@@ -15,6 +15,7 @@
 enum cam_lx7_reg_base {
 	LX7_CSR_BASE,
 	LX7_CIRQ_BASE,
+	LX7_WD0_BASE,
 	LX7_SYS_BASE,
 	LX7_BASE_MAX,
 };

+ 4 - 0
drivers/cam_icp/icp_hw/lx7_hw/lx7_reg.h

@@ -20,6 +20,10 @@
 #define ICP_LX7_CIRQ_OB_CLEAR  0x4
 #define ICP_LX7_CIRQ_OB_STATUS 0xc
 
+/* ICP WD reg space */
+#define ICP_LX7_WD_CTRL        0x8
+#define ICP_LX7_WD_INTCLR      0xC
+
 /* These bitfields are shared by OB_MASK, OB_CLEAR, OB_STATUS */
 #define LX7_WDT_BITE_WS1       (1 << 6)
 #define LX7_WDT_BARK_WS1       (1 << 5)