diff options
author | Felix Fietkau <nbd@openwrt.org> | 2007-03-14 01:26:57 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2007-03-14 01:26:57 +0000 |
commit | 53a5d4131f8971d4f4a32228e78ba1a55a0381c6 (patch) | |
tree | 9a65732cf43edf1faebb64ad9a4fd7f632da2282 /target | |
parent | bf622ab0ae504d01ca9f589b8d67d3902c068133 (diff) | |
download | upstream-53a5d4131f8971d4f4a32228e78ba1a55a0381c6.tar.gz upstream-53a5d4131f8971d4f4a32228e78ba1a55a0381c6.tar.bz2 upstream-53a5d4131f8971d4f4a32228e78ba1a55a0381c6.zip |
add reboot fix from #1312
SVN-Revision: 6563
Diffstat (limited to 'target')
3 files changed, 13 insertions, 2 deletions
diff --git a/target/linux/brcm47xx-2.6/files/arch/mips/bcm947xx/setup.c b/target/linux/brcm47xx-2.6/files/arch/mips/bcm947xx/setup.c index 547c50a737..f7687d4dd1 100644 --- a/target/linux/brcm47xx-2.6/files/arch/mips/bcm947xx/setup.c +++ b/target/linux/brcm47xx-2.6/files/arch/mips/bcm947xx/setup.c @@ -54,7 +54,7 @@ static void bcm47xx_machine_restart(char *command) */ /* Set the watchdog timer to reset immediately */ -//TODO sb_watchdog(sbh, 1); + ssb_chipco_watchdog(&ssb.chipco, 1); while (1) cpu_relax(); } @@ -63,7 +63,7 @@ static void bcm47xx_machine_halt(void) { /* Disable interrupts and watchdog and spin forever */ local_irq_disable(); -//TODO sb_watchdog(sbh, 0); + ssb_chipco_watchdog(&ssb.chipco, 0); while (1) cpu_relax(); } diff --git a/target/linux/brcm47xx-2.6/files/drivers/ssb/driver_chipcommon/chipcommon.c b/target/linux/brcm47xx-2.6/files/drivers/ssb/driver_chipcommon/chipcommon.c index c3d893d879..6d3412b585 100644 --- a/target/linux/brcm47xx-2.6/files/drivers/ssb/driver_chipcommon/chipcommon.c +++ b/target/linux/brcm47xx-2.6/files/drivers/ssb/driver_chipcommon/chipcommon.c @@ -401,3 +401,13 @@ int ssb_chipco_serial_init(struct ssb_chipcommon *cc, return nr_ports; } #endif /* CONFIG_SSB_SERIAL */ + +/* Set chip watchdog reset timer to fire in 'ticks' backplane cycles */ +int +ssb_chipco_watchdog(struct ssb_chipcommon *cc, uint ticks) +{ + /* instant NMI */ + chipco_write32(cc, SSB_CHIPCO_WATCHDOG, ticks); + return 0; +} +EXPORT_SYMBOL(ssb_chipco_watchdog); diff --git a/target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_chipcommon.h b/target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_chipcommon.h index 3d4fbdd77e..ba0b8702c2 100644 --- a/target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_chipcommon.h +++ b/target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_chipcommon.h @@ -417,6 +417,7 @@ static inline u32 ssb_chipco_gpio_polarity(struct ssb_chipcommon *cc, } /* TODO: GPIO reservation */ +extern int ssb_chipco_watchdog(struct ssb_chipcommon *cc, uint ticks); #ifdef CONFIG_SSB_SERIAL extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, |