k2_fw_usb_api: workaround for EP4 bug.
[open-ath9k-htc-firmware.git] / target_firmware / magpie_fw_dev / target / hif / k2_fw_usb_api.c
index 0be8a8744ed0f89d5c11cd9085e33b7eea17efa8..83a72a94de7762b7f0c6bb0cd7b55a1bf8d301d8 100755 (executable)
@@ -402,6 +402,17 @@ void _fw_usb_reset_fifo(void)
     A_UART_HWINIT((22*1000*1000), 19200);
 }
 
+void cold_reboot(void)
+{
+       A_PRINTF("Cold reboot initiated.");
+#if defined(PROJECT_MAGPIE)
+       HAL_WORD_REG_WRITE(WATCH_DOG_MAGIC_PATTERN_ADDR, 0);
+#elif defined(PROJECT_K2)
+       HAL_WORD_REG_WRITE(MAGPIE_REG_RST_STATUS_ADDR, 0);
+#endif /* #if defined(PROJECT_MAGPIE) */
+       A_USB_JUMP_BOOT();
+}
+
 /*
  * -- support more than 64 bytes command on ep4 -- 
  */
@@ -420,7 +431,7 @@ void vUsb_Reg_Out_patch(void)
     usbfifolen = USB_BYTE_REG_READ(ZM_EP4_BYTE_COUNT_LOW_OFFSET);
     if (usbfifolen > 0x40) {
         A_PRINTF("EP4 FIFO Bug? Buffer is too big: %x\n", usbfifolen);
-        goto ERR;
+        cold_reboot();
     }
 
     // check is command is new