Google/Snow: Enable suspend/resume.

Add the suspend/resume feature into bootblock and romstage.

Note, resuming with X and touchpad driver may be still unstable.

Verified by building and booting successfully on Google/Snow, and then executing
the "suspend_stress_test" in text mode ("stop ui; suspend_stress_test") in
Chromium OS, passed at least 20 iterations.

Change-Id: I65681c42eeef2736e55bb906595f42a5b1dfdf11
Signed-off-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-on: http://review.coreboot.org/3102
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Hung-Te Lin 2013-04-25 19:49:40 +08:00
parent 31039e315c
commit 3f73eec4d3
2 changed files with 23 additions and 8 deletions

View File

@ -25,16 +25,24 @@
#include <console/console.h>
#include <cpu/samsung/exynos5250/periph.h>
#include <cpu/samsung/exynos5250/pinmux.h>
#include "mainboard.h"
void bootblock_mainboard_init(void);
void bootblock_mainboard_init(void)
{
/* kick off the microsecond timer. We want to do this as early
* as we can.
switch (snow_get_wakeup_state()) {
case SNOW_WAKEUP_DIRECT:
snow_wakeup();
break;
case SNOW_IS_NOT_WAKEUP:
/* kick off the microsecond timer.
* We want to do this as early as we can.
*/
timer_start();
exynos_pinmux_config(PERIPH_ID_SPI1, PINMUX_FLAG_NONE);
break;
}
#if CONFIG_EARLY_CONSOLE
exynos_pinmux_config(PERIPH_ID_UART3, PINMUX_FLAG_NONE);
console_init();

View File

@ -170,15 +170,22 @@ void main(void)
{
struct mem_timings *mem;
void *entry;
int is_resume = (snow_get_wakeup_state() != SNOW_IS_NOT_WAKEUP);
/* Clock must be initialized before console_init, otherwise you may need
* to re-initialize serial console drivers again. */
mem = snow_setup_clock();
if (!is_resume) {
console_init();
snow_setup_power();
}
snow_setup_memory(mem, 0);
snow_setup_memory(mem, is_resume);
if (is_resume) {
snow_wakeup();
}
snow_setup_storage();
snow_setup_gpio();