/* SPDX-License-Identifier: GPL-2.0-only */

#include <arch/cache.h>
#include <soc/power.h>
#include <soc/wakeup.h>

void wakeup(void)
{
	if (wakeup_need_reset())
		power_reset();

	power_init();  /* Ensure ps_hold_setup() for early wakeup. */
	dcache_mmu_disable();
	power_exit_wakeup();
	/* Should never return. If we do, reset. */
	power_reset();
}

int get_wakeup_state(void)
{
	uint32_t status = power_read_reset_status();

	/* DIDLE/LPA can be resumed without clock reset (ex, bootblock),
	 * and SLEEP requires resetting clock (should be done in ROM stage).
	 */

	if (status == S5P_CHECK_DIDLE || status == S5P_CHECK_LPA)
		return WAKEUP_DIRECT;

	if (status == S5P_CHECK_SLEEP)
		return WAKEUP_NEED_CLOCK_RESET;

	return IS_NOT_WAKEUP;
}

void wakeup_enable_uart(void)
{
	power_release_uart_retention();
}
