add reboot fix from #1312
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 14 Mar 2007 01:26:57 +0000 (01:26 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 14 Mar 2007 01:26:57 +0000 (01:26 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6563 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/brcm47xx-2.6/files/arch/mips/bcm947xx/setup.c
target/linux/brcm47xx-2.6/files/drivers/ssb/driver_chipcommon/chipcommon.c
target/linux/brcm47xx-2.6/files/include/linux/ssb/ssb_driver_chipcommon.h

index 547c50a..f7687d4 100644 (file)
@@ -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();
 }
index c3d893d..6d3412b 100644 (file)
@@ -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);
index 3d4fbdd..ba0b870 100644 (file)
@@ -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,