summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-08-24 07:30:56 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-08-29 17:12:37 -0700
commit0f8a0fad8a4beb0036327d2781abed04983dba60 (patch)
treefd9e74ba3afd4c32fc04ee41e9cf95df78979979
parent9f4e724426ce80c227ca549d581ac9306322f97c (diff)
downloadchrome-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.c20
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);