diff mbox series

[V5,20/44] arm: imx8ulp: disable wdog3

Message ID 20210807080113.16020-21-peng.fan@oss.nxp.com
State New
Headers show
Series imx: add i.MX8ULP support | expand

Commit Message

Peng Fan (OSS) Aug. 7, 2021, 8 a.m. UTC
From: Peng Fan <peng.fan@nxp.com>


Disable wdog3 which is configured by ROM

Signed-off-by: Peng Fan <peng.fan@nxp.com>

---
 arch/arm/mach-imx/imx8ulp/soc.c | 36 ++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

-- 
2.30.0
diff mbox series

Patch

diff --git a/arch/arm/mach-imx/imx8ulp/soc.c b/arch/arm/mach-imx/imx8ulp/soc.c
index 33aec228e3..051dec1a5a 100644
--- a/arch/arm/mach-imx/imx8ulp/soc.c
+++ b/arch/arm/mach-imx/imx8ulp/soc.c
@@ -144,9 +144,43 @@  int print_cpuinfo(void)
 }
 #endif
 
+#define UNLOCK_WORD0 0xC520 /* 1st unlock word */
+#define UNLOCK_WORD1 0xD928 /* 2nd unlock word */
+#define REFRESH_WORD0 0xA602 /* 1st refresh word */
+#define REFRESH_WORD1 0xB480 /* 2nd refresh word */
+
+static void disable_wdog(void __iomem *wdog_base)
+{
+	u32 val_cs = readl(wdog_base + 0x00);
+
+	if (!(val_cs & 0x80))
+		return;
+
+	dmb();
+	__raw_writel(REFRESH_WORD0, (wdog_base + 0x04)); /* Refresh the CNT */
+	__raw_writel(REFRESH_WORD1, (wdog_base + 0x04));
+	dmb();
+
+	if (!(val_cs & 800)) {
+		dmb();
+		__raw_writel(UNLOCK_WORD0, (wdog_base + 0x04));
+		__raw_writel(UNLOCK_WORD1, (wdog_base + 0x04));
+		dmb();
+
+		while (!(readl(wdog_base + 0x00) & 0x800))
+			;
+	}
+	writel(0x0, (wdog_base + 0x0C)); /* Set WIN to 0 */
+	writel(0x400, (wdog_base + 0x08)); /* Set timeout to default 0x400 */
+	writel(0x120, (wdog_base + 0x00)); /* Disable it and set update */
+
+	while (!(readl(wdog_base + 0x00) & 0x400))
+		;
+}
+
 void init_wdog(void)
 {
-	/* TODO */
+	disable_wdog((void __iomem *)WDG3_RBASE);
 }
 
 static struct mm_region imx8ulp_arm64_mem_map[] = {