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