atheros: fix reboot on ar2315 devices which do not implement the atheros reference...
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 9 Dec 2008 01:53:02 +0000 (01:53 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 9 Dec 2008 01:53:02 +0000 (01:53 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13556 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/atheros/files/arch/mips/atheros/ar5315/board.c

index fad5783..6ee75a9 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/platform_device.h>
 #include <linux/kernel.h>
 #include <linux/reboot.h>
+#include <linux/delay.h>
 #include <asm/bootinfo.h>
 #include <asm/reboot.h>
 #include <asm/time.h>
@@ -279,15 +280,21 @@ static void ar5315_power_off(void)
 
 static void ar5315_restart(char *command)
 {
-       for(;;) {
-               /* reset the system */
-               sysRegWrite(AR5315_COLD_RESET,AR5317_RESET_SYSTEM);
-
-               /*
-                * Cold reset does not work on the AR2315/6, use the GPIO reset bits a workaround.
-                */
-               gpio_direction_output(AR5315_RESET_GPIO, 0);
-       }
+       void (*mips_reset_vec)(void) = (void *) 0xbfc00000;
+
+       /* reset the system */
+       sysRegWrite(AR5315_COLD_RESET,AR5317_RESET_SYSTEM);
+
+       /* Cold reset does not work on the AR2315/6, use the GPIO reset bits a workaround.
+        * give it some time to attempt a gpio based hardware reset
+        * (atheros reference design workaround) */
+       gpio_direction_output(AR5315_RESET_GPIO, 0);
+       mdelay(100);
+
+       /* Some boards (e.g. Senao EOC-2610) don't implement the reset logic
+        * workaround. Attempt to jump to the mips reset location -
+        * the boot loader itself might be able to recover the system */
+       mips_reset_vec();
 }
 
 
This page took 0.025329 seconds and 4 git commands to generate.