X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=carlfw%2Fusb%2Fmain.c;h=6545ec0931180e709936c264afb8394d4ed52a14;hb=7ead3acecfdbd6f92bfd5b88909c9aa7edf03c47;hp=00c9326163b0c46d19f17153c835a14f54216e62;hpb=1dbab55a460484fd655c44c99fc192b9e3702485;p=carl9170fw.git diff --git a/carlfw/usb/main.c b/carlfw/usb/main.c index 00c9326..6545ec0 100644 --- a/carlfw/usb/main.c +++ b/carlfw/usb/main.c @@ -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,18 +270,23 @@ 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(); + /* clean bootloader workspace */ + memset(&dma_mem, 0, sizeof(dma_mem)); + /* add by ygwei for work around USB PHY chirp sequence problem */ set(0x10f100, 0x12345678); @@ -384,25 +391,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 */ -