Activate 5s watchdog timer in bcm kernel. Reference: /n/sources/patch/applied/bcm-watchdog Date: Wed Feb 20 15:40:15 CET 2013 Signed-off-by: miller@hamnavoe.com --- /sys/src/9/bcm/archbcm.c Wed Feb 20 15:39:21 2013 +++ /sys/src/9/bcm/archbcm.c Wed Feb 20 15:39:19 2013 @@ -18,6 +18,7 @@ enum { Wdogfreq = 65536, + Wdogtime = 5, /* seconds, ≤ 15 */ }; /* @@ -28,6 +29,7 @@ Password = 0x5A<<24, CfgMask = 0x03<<4, CfgReset = 0x02<<4, + Rsts = 0x20>>2, Wdog = 0x24>>2, }; @@ -50,6 +52,25 @@ ; } +static void +wdogfeed(void) +{ + u32int *r; + + r = (u32int*)POWERREGS; + r[Wdog] = Password | (Wdogtime * Wdogfreq); + r[Rstc] = Password | (r[Rstc] & ~CfgMask) | CfgReset; +} + +void +wdogoff(void) +{ + u32int *r; + + r = (u32int*)POWERREGS; + r[Rstc] = Password | (r[Rstc] & ~CfgMask); +} + void cpuidprint(void) { @@ -59,6 +80,7 @@ void archbcmlink(void) { + addclock0link(wdogfeed, HZ); } int --- /sys/src/9/bcm/clock.c Wed Feb 20 15:39:24 2013 +++ /sys/src/9/bcm/clock.c Wed Feb 20 15:39:22 2013 @@ -84,6 +84,7 @@ tm = (Armtimer*)ARMTIMER; tm->ctl = 0; + wdogoff(); } void --- /sys/src/9/bcm/fns.h Wed Feb 20 15:39:28 2013 +++ /sys/src/9/bcm/fns.h Wed Feb 20 15:39:26 2013 @@ -73,6 +73,7 @@ extern int userureg(Ureg*); extern void vectors(void); extern void vtable(void); +extern void wdogoff(void); /* * floating point emulation