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:
parent
31039e315c
commit
3f73eec4d3
@ -25,16 +25,24 @@
|
|||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <cpu/samsung/exynos5250/periph.h>
|
#include <cpu/samsung/exynos5250/periph.h>
|
||||||
#include <cpu/samsung/exynos5250/pinmux.h>
|
#include <cpu/samsung/exynos5250/pinmux.h>
|
||||||
|
#include "mainboard.h"
|
||||||
|
|
||||||
void bootblock_mainboard_init(void);
|
void bootblock_mainboard_init(void);
|
||||||
void bootblock_mainboard_init(void)
|
void bootblock_mainboard_init(void)
|
||||||
{
|
{
|
||||||
/* kick off the microsecond timer. We want to do this as early
|
switch (snow_get_wakeup_state()) {
|
||||||
* as we can.
|
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();
|
timer_start();
|
||||||
|
|
||||||
exynos_pinmux_config(PERIPH_ID_SPI1, PINMUX_FLAG_NONE);
|
exynos_pinmux_config(PERIPH_ID_SPI1, PINMUX_FLAG_NONE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
#if CONFIG_EARLY_CONSOLE
|
#if CONFIG_EARLY_CONSOLE
|
||||||
exynos_pinmux_config(PERIPH_ID_UART3, PINMUX_FLAG_NONE);
|
exynos_pinmux_config(PERIPH_ID_UART3, PINMUX_FLAG_NONE);
|
||||||
console_init();
|
console_init();
|
||||||
|
@ -170,15 +170,22 @@ void main(void)
|
|||||||
{
|
{
|
||||||
struct mem_timings *mem;
|
struct mem_timings *mem;
|
||||||
void *entry;
|
void *entry;
|
||||||
|
int is_resume = (snow_get_wakeup_state() != SNOW_IS_NOT_WAKEUP);
|
||||||
|
|
||||||
/* Clock must be initialized before console_init, otherwise you may need
|
/* Clock must be initialized before console_init, otherwise you may need
|
||||||
* to re-initialize serial console drivers again. */
|
* to re-initialize serial console drivers again. */
|
||||||
mem = snow_setup_clock();
|
mem = snow_setup_clock();
|
||||||
|
|
||||||
|
if (!is_resume) {
|
||||||
console_init();
|
console_init();
|
||||||
snow_setup_power();
|
snow_setup_power();
|
||||||
|
}
|
||||||
|
|
||||||
snow_setup_memory(mem, 0);
|
snow_setup_memory(mem, is_resume);
|
||||||
|
|
||||||
|
if (is_resume) {
|
||||||
|
snow_wakeup();
|
||||||
|
}
|
||||||
|
|
||||||
snow_setup_storage();
|
snow_setup_storage();
|
||||||
snow_setup_gpio();
|
snow_setup_gpio();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user