1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #include <arch/cache.h> 4 #include <soc/power.h> 5 #include <soc/wakeup.h> 6 wakeup(void)7void wakeup(void) 8 { 9 if (wakeup_need_reset()) 10 power_reset(); 11 12 power_init(); /* Ensure ps_hold_setup() for early wakeup. */ 13 dcache_mmu_disable(); 14 power_exit_wakeup(); 15 /* Should never return. If we do, reset. */ 16 power_reset(); 17 } 18 get_wakeup_state(void)19int get_wakeup_state(void) 20 { 21 uint32_t status = power_read_reset_status(); 22 23 /* DIDLE/LPA can be resumed without clock reset (ex, bootblock), 24 * and SLEEP requires resetting clock (should be done in ROM stage). 25 */ 26 27 if (status == S5P_CHECK_DIDLE || status == S5P_CHECK_LPA) 28 return WAKEUP_DIRECT; 29 30 if (status == S5P_CHECK_SLEEP) 31 return WAKEUP_NEED_CLOCK_RESET; 32 33 return IS_NOT_WAKEUP; 34 } 35 wakeup_enable_uart(void)36void wakeup_enable_uart(void) 37 { 38 power_release_uart_retention(); 39 } 40