diff options
author | Louis Yung-Chieh Lo <yjlou@chromium.org> | 2013-12-10 15:40:57 -0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2013-12-14 02:31:46 +0000 |
commit | dd59e5f5da03cc584113fad9ede13bc81c48dee8 (patch) | |
tree | 6f55d52bc6b78e9e58399326f5d4a3112d80b2b2 /power | |
parent | f749c9363cb694836b0c9471e7847d33e3515711 (diff) | |
download | chrome-ec-dd59e5f5da03cc584113fad9ede13bc81c48dee8.tar.gz |
nyan: propagate EC reset to the AP reset for old boards.
New boards (rev >= 2.2) are not affected since chipset_force_shutdown()
is called. On old boards the power rails of old boards are not removed
completely. This CL ensures the AP is warm-reset after EC is reset.
BUG=None
BRANCH=nyan
TEST=nVidia verified on old boards.
Change-Id: Ia2c2b243534d8a73b9b4d5320aad4664b1ac8b12
Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/179521
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'power')
-rw-r--r-- | power/tegra.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/power/tegra.c b/power/tegra.c index 83dc47bd58..f2f38e123b 100644 --- a/power/tegra.c +++ b/power/tegra.c @@ -78,6 +78,12 @@ */ #define XPSHOLD_DEBOUNCE (30 * 1000) /* 30 ms */ +/* + * The hold time for pulling down the PMIC_WARM_RESET_L pin so that + * the AP can entery the recovery mode (flash SPI flash from USB). + */ +#define PMIC_WARM_RESET_L_HOLD_TIME (4 * MSEC) + /* Application processor power state */ static int ap_on; static int ap_suspended; @@ -318,6 +324,16 @@ static int tegra_power_init(void) if (!(system_get_reset_flags() & RESET_FLAG_SYSJUMP)) { CPRINTF("[%T not sysjump; forcing AP shutdown]\n"); chipset_force_shutdown(); + + /* + * The warm reset triggers AP into the Tegra recovery mode ( + * flash SPI from USB). + */ + CPRINTF("[%T assert GPIO_PMIC_WARM_RESET_L for %d ms]\n", + PMIC_WARM_RESET_L_HOLD_TIME / MSEC); + gpio_set_level(GPIO_PMIC_WARM_RESET_L, 0); + usleep(PMIC_WARM_RESET_L_HOLD_TIME); + gpio_set_level(GPIO_PMIC_WARM_RESET_L, 1); } /* Leave power off only if requested by reset flags */ |