• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)7 void 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)19 int 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)36 void wakeup_enable_uart(void)
37 {
38 	power_release_uart_retention();
39 }
40