armv7/exynos: Prevent unexpected reboots in resume.

In resume path, if memory setup takes too long without setting PS_HOLD, EC watch
dog may power off or reboot the system. To prevent that, we should enable
PS_HOLD in same timing as cold boot - right before starting memory setup.

Change-Id: I5c294fa7ae015f8cff57b1fd81e5b80902647b15
Signed-off-by: Hung-Te Lin <hungte@chromium.org>
Signed-off-by: Gabe Black <gabeblack@chromium.org>
Reviewed-on: http://review.coreboot.org/3718
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Hung-Te Lin 2013-06-28 17:27:17 +08:00 committed by Stefan Reinauer
parent c0b2144f69
commit da7b8e4de9
2 changed files with 12 additions and 10 deletions

View File

@ -74,13 +74,17 @@ struct pmic_write pmic_writes[] =
MAX77802_BUCK_TYPE1_IGNORE_PWRREQ } MAX77802_BUCK_TYPE1_IGNORE_PWRREQ }
}; };
static void setup_power(void) static void setup_power(int is_resume)
{ {
int error = 0; int error = 0;
int i; int i;
power_init(); power_init();
if (is_resume) {
return;
}
/* Initialize I2C bus to configure PMIC. */ /* Initialize I2C bus to configure PMIC. */
exynos_pinmux_i2c4(); exynos_pinmux_i2c4();
i2c_init(4, I2C_4_SPEED, 0x00); i2c_init(4, I2C_4_SPEED, 0x00);
@ -264,10 +268,7 @@ void main(void)
console_init(); console_init();
if (!is_resume) { setup_power(is_resume);
setup_power();
}
setup_memory(&mem_timings, is_resume); setup_memory(&mem_timings, is_resume);
primitive_mem_test(); primitive_mem_test();

View File

@ -43,12 +43,16 @@
#define PMIC_BUS 0 #define PMIC_BUS 0
#define MMC0_GPIO_PIN (58) #define MMC0_GPIO_PIN (58)
static void setup_power(void) static void setup_power(int is_resume)
{ {
int error = 0; int error = 0;
power_init(); power_init();
if (is_resume) {
return;
}
/* Initialize I2C bus to configure PMIC. */ /* Initialize I2C bus to configure PMIC. */
exynos_pinmux_i2c0(); exynos_pinmux_i2c0();
i2c_init(0, I2C_0_SPEED, 0x00); i2c_init(0, I2C_0_SPEED, 0x00);
@ -171,10 +175,7 @@ void main(void)
console_init(); console_init();
if (!is_resume) { setup_power(is_resume);
setup_power();
}
setup_memory(mem, is_resume); setup_memory(mem, is_resume);
if (is_resume) { if (is_resume) {