diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2016-08-24 07:30:56 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-08-29 17:12:37 -0700 |
commit | 0f8a0fad8a4beb0036327d2781abed04983dba60 (patch) | |
tree | fd9e74ba3afd4c32fc04ee41e9cf95df78979979 | |
parent | 9f4e724426ce80c227ca549d581ac9306322f97c (diff) | |
download | chrome-ec-0f8a0fad8a4beb0036327d2781abed04983dba60.tar.gz |
power: rk3399: Hold SYS_RST low before powering on P1.8_PMU
Holding SYS_RST low will keep the TPM in reset, and prevent a
reset-too-soon-after-power-on case that put the TPM into a bad state.
BUG=chrome-os-partner:56414
BRANCH=None
TEST=Manual on kevin rev5, verify board still seqences from G3->S0 and
back, S0->S5 and back, S0->S3 and back.
Change-Id: I07671079deedb757314679608d848b1620aa67d6
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/374899
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Catherine Xu <caxu@google.com>
Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r-- | power/rk3399.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/power/rk3399.c b/power/rk3399.c index 58056b98dc..bb0cd81f3e 100644 --- a/power/rk3399.c +++ b/power/rk3399.c @@ -99,7 +99,7 @@ DECLARE_DEFERRED(force_shutdown); enum power_state power_handle_state(enum power_state state) { - static int sys_reset_needed; + static int sys_reset_asserted; int tries = 0; switch (state) { @@ -178,6 +178,14 @@ enum power_state power_handle_state(enum power_state state) gpio_set_level(GPIO_PP900_USB_EN, 1); gpio_set_level(GPIO_PP900_PCIE_EN, 1); msleep(2); + + /* + * Assert SYS_RST now, to be released in S3S0, to avoid + * resetting the TPM soon after power-on. + */ + gpio_set_level(GPIO_SYS_RST_L, 0); + sys_reset_asserted = 1; + gpio_set_level(GPIO_PP1800_PMU_EN_L, 0); msleep(2); /* TODO(crosbug.com/p/55981): De-power CLOGIC in S3 */ @@ -205,9 +213,6 @@ enum power_state power_handle_state(enum power_state state) /* Call hooks now that rails are up */ hook_notify(HOOK_CHIPSET_STARTUP); - /* We came from S5, so be sure to pulse sys_rst later */ - sys_reset_needed = 1; - /* Power up to next state */ return POWER_S3; @@ -222,13 +227,12 @@ enum power_state power_handle_state(enum power_state state) msleep(2); gpio_set_level(GPIO_PP3300_S0_EN_L, 0); - if (sys_reset_needed) { - /* Pulse SYS_RST if we came from S5 */ - gpio_set_level(GPIO_SYS_RST_L, 0); + /* Release SYS_RST if we came from S5 */ + if (sys_reset_asserted) { msleep(10); gpio_set_level(GPIO_SYS_RST_L, 1); - sys_reset_needed = 0; + sys_reset_asserted = 0; } gpio_set_level(GPIO_PP1800_SIXAXIS_EN_L, 0); |