|
|
|
@ -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(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|