carl9170 firmware: fix random reboot failures
[carl9170fw.git] / carlfw / usb / main.c
index 00c9326163b0c46d19f17153c835a14f54216e62..fac37805be7f555a90f5ef128e258932bf1fee5e 100644 (file)
@@ -222,6 +222,8 @@ static void turn_power_off(void)
 
        set(AR9170_PWR_REG_BASE, 0x40021);
 
+       set(AR9170_MAC_REG_DMA_TRIGGER, 0);
+
        set(AR9170_MAC_REG_POWER_STATE_CTRL,
            AR9170_MAC_POWER_STATE_CTRL_RESET);
 
@@ -268,14 +270,16 @@ static void turn_power_off(void)
        set(AR9170_PHY_REG_ADC_SERIAL_CTL, AR9170_PHY_ADC_SCTL_SEL_INTERNAL_ADDAC);
 }
 
-void __attribute__((noreturn)) reboot(void)
+void __noreturn reboot(void)
 {
+       set(AR9170_MAC_REG_DMA_TRIGGER, 0);
+
        /* write watchdog magic pattern for suspend  */
        andl(AR9170_PWR_REG_WATCH_DOG_MAGIC, 0xffff);
        orl(AR9170_PWR_REG_WATCH_DOG_MAGIC, 0x98760000);
 
        /* Disable watchdog */
-       orl(AR9170_TIMER_REG_WATCH_DOG, 0xffff);
+       set(AR9170_TIMER_REG_WATCH_DOG, 0xffff);
 
        /* Turn off power */
        turn_power_off();
@@ -384,25 +388,3 @@ void handle_usb(void)
                usb_trigger_in();
 }
 
-#ifdef CONFIG_CARL9170FW_USB_WATCHDOG
-void usb_watchdog_timer(void)
-{
-       if (fw.usb.watchdog.state == cpu_to_le32(CARL9170_USB_WATCHDOG_INACTIVE))
-               return;
-
-       fw.usb.watchdog.state++;
-
-       if (le32_to_cpu(fw.usb.watchdog.state) >= CARL9170_USB_WATCHDOG_TRIGGER_THRESHOLD) {
-               for (;;) {
-                       /*
-                        * Simply wait until the HW watchdog
-                        * timer has elapsed.
-                        */
-               }
-       }
-
-       send_cmd_to_host(sizeof(fw.usb.watchdog), CARL9170_RSP_USB_WD,
-                        0x80, (uint8_t *) &fw.usb.watchdog);
-}
-#endif /* CONFIG_CARL9170FW_USB_WATCHDOG */
-