diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2016-04-13 16:31:25 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-04-14 17:28:22 -0700 |
commit | a39347573064dd36e1907e083c6ef07e1bb42828 (patch) | |
tree | c6199917b7d26f6ce5881b436b5656135aebfb6e /power | |
parent | 533a536140c13bb853e51a62af36bd56c6d85b0d (diff) | |
download | chrome-ec-a39347573064dd36e1907e083c6ef07e1bb42828.tar.gz |
power/rk3399: Implement chipset reset / shutdown routines
Implement warm reset and force shutdown routines, which are called from
other modules.
BUG=chrome-os-partner:51926, chrome-os-partner:51923
BRANCH=None
TEST=Verify 'apshutdown' on EC console goes to G3. Verify 'apreset'
causes AP reset while staying in S0.
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Change-Id: Ifb479287f87f31ac49e007c337cc0c24a79898e6
Reviewed-on: https://chromium-review.googlesource.com/338923
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'power')
-rw-r--r-- | power/rk3399.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/power/rk3399.c b/power/rk3399.c index 1ae89e3d3f..c3ed2cfc08 100644 --- a/power/rk3399.c +++ b/power/rk3399.c @@ -60,7 +60,7 @@ static const struct power_signal_info power_control_outputs[] = { { GPIO_SYS_RST_L, 0 }, }; -static int want_s0_exit; +static int forcing_shutdown; void chipset_force_shutdown(void) { @@ -70,13 +70,19 @@ void chipset_force_shutdown(void) * Force power off. This condition will reset once the state machine * transitions to G3. */ - /* TODO: Implement */ + forcing_shutdown = 1; + task_wake(TASK_ID_CHIPSET); } void chipset_reset(int cold_reset) { - /* TODO: implement */ + /* TODO: handle cold_reset */ CPRINTS("%s(%d)", __func__, cold_reset); + + /* Pulse SYS_RST */ + gpio_set_level(GPIO_SYS_RST_L, 0); + udelay(10); + gpio_set_level(GPIO_SYS_RST_L, 1); } enum power_state power_chipset_init(void) @@ -103,23 +109,25 @@ enum power_state power_handle_state(enum power_state state) break; case POWER_S5: - if (want_s0_exit) + if (forcing_shutdown) return POWER_S5G3; else return POWER_S5S3; case POWER_S3: - if (want_s0_exit) + if (forcing_shutdown) return POWER_S3S5; else return POWER_S3S0; case POWER_S0: - if (want_s0_exit) + if (forcing_shutdown) return POWER_S0S3; break; case POWER_G3S5: + forcing_shutdown = 0; + /* Power up to next state */ return POWER_S5; @@ -212,7 +220,6 @@ enum power_state power_handle_state(enum power_state state) return POWER_S5; case POWER_S5G3: - want_s0_exit = 0; /* Initialize power signal outputs to default. */ return power_chipset_init(); } @@ -230,7 +237,7 @@ static void power_button_changed(void) /* Power up */ chipset_exit_hard_off(); else - want_s0_exit = 1; + forcing_shutdown = 1; task_wake(TASK_ID_CHIPSET); } |