from richard: update reboot code for the pi2 Reference: /n/atom/patch/applied/pi2reboot Date: Mon Jan 4 17:53:29 CET 2016 Signed-off-by: quanstro@quanstro.net --- /sys/src/9/bcm/fns.h Mon Jan 4 17:53:14 2016 +++ /sys/src/9/bcm/fns.h Mon Jan 4 17:53:16 2016 @@ -64,6 +64,7 @@ extern void irqenable(int, void (*)(Ureg*, void*), void*); extern void intrcpushutdown(void); #define intrenable(i, f, a, b, n) irqenable((i), (f), (a)) +extern void intrshutdown(void); extern void intrsoff(void); extern int l2ap(int); extern void l2cacheuwbinv(void); --- /sys/src/9/bcm/main.c Mon Jan 4 17:53:18 2016 +++ /sys/src/9/bcm/main.c Mon Jan 4 17:53:19 2016 @@ -659,6 +659,11 @@ if (m->machno != 0) procwired(up, 0); + /* setup reboot trampoline function */ + f = (void*)REBOOTADDR; + memmove(f, rebootcode, sizeof(rebootcode)); + cachedwbse(f, sizeof(rebootcode)); + shutdown(0); /* @@ -684,15 +689,11 @@ clockshutdown(); splfhi(); - intrsoff(); + intrshutdown(); - /* setup reboot trampoline function */ - f = (void*)REBOOTADDR; - memmove(f, rebootcode, sizeof(rebootcode)); + /* off we go - never to return */ cacheuwbinv(); l2cacheuwbinv(); - - /* off we go - never to return */ (*f)(PADDR(entry), PADDR(code), size); iprint("loaded kernel returned!\n");