summaryrefslogtreecommitdiff
path: root/sysutils/u-boot/patches/patch-arch_arm_mach-sunxi_board.c
blob: d6688fadf8c3fd1a9599df986bf4f23952becb20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$NetBSD: patch-arch_arm_mach-sunxi_board.c,v 1.1 2020/04/04 15:20:35 thorpej Exp $

H6-specific workaround for a broken watchdog timer which breaks
reboot/reset.  Use R_WDOG instead.

--- arch/arm/mach-sunxi/board.c.orig	2020-03-27 00:42:23.478886897 +0000
+++ arch/arm/mach-sunxi/board.c	2020-03-27 00:46:14.553859057 +0000
@@ -287,8 +287,14 @@ void reset_cpu(ulong addr)
 		writel(WDT_MODE_RESET_EN | WDT_MODE_EN, &wdog->mode);
 	}
 #elif defined(CONFIG_SUNXI_GEN_SUN6I) || defined(CONFIG_MACH_SUN50I_H6)
+#if defined(CONFIG_MACH_SUN50I_H6)
+	/* WDOG is broken for H6 use the R_WDOG instead */
+	static const struct sunxi_wdog *wdog =
+		 (struct sunxi_wdog *)SUNXI_R_WDOG_BASE;
+#else
 	static const struct sunxi_wdog *wdog =
 		 ((struct sunxi_timer_reg *)SUNXI_TIMER_BASE)->wdog;
+#endif
 
 	/* Set the watchdog for its shortest interval (.5s) and wait */
 	writel(WDT_CFG_RESET, &wdog->cfg);