summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Yung-Chieh Lo <yjlou@chromium.org>2014-04-29 17:39:35 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-05-02 23:22:09 +0000
commitea316e0d437902b7b23c44e1df64815d872875fc (patch)
tree569c9086f0b5fd2c18421afef64c4e5c66a78e16
parent23f1337cb90b74ae440b658c9a80475cfdefe566 (diff)
downloadchrome-ec-ea316e0d437902b7b23c44e1df64815d872875fc.tar.gz
tegra: keeps AP in off state for "reboot ap-off"
XPSHOLD is not always removed after chipset_force_shutdown(). This is different to the GAIA design. So, check the RESET_FLAG_AP_OFF flag again while check_for_power_on_event(). BUG=chrome-os-partner:28371 BRANCH=tot,nyan TEST=verify on big. re-flash ec: power on 2, AP is up. AP is on, reboot@EC: power on 1, AP is up. AP is off, reboot@EC: power on 2, AP is up. AP is on, reboot ap-off@EC: AP keeps off (see FLAG_AP_OFF flag) AP is off, reboot ap-off@EC: AP keeps off (see FLAG_AP_OFF flag) reboot ap-off@EC, then 'powerbtn': AP is off at boot, then power on 4 reboot@EC: power on 2, AP is up. re-plug AC (remove battery): power on 2 re-plug battery (without AC): power on 2 (but my battery is dead) power off (S5), power on: power off 4, power on 5 power off (G3), power on: power off 4, power on 5 lid close / power off (S5)/ lid open: power on 3 lid close / power off (G3)/ lid open: power on 3 press power button and release: nothing happens after 15s. AP keeps in S5. button off (S5)/ on: power off 3, power on 4 button off (G3)/ on: power off 3, power on 4 power off (S5)/ button on: power off 4, power on 4 power off (G3)/ button on: power off 4, power on 4 button off (S5)/ power on: power off 3, power on 5 button off (G3)/ power on: power off 3, power on 4 button off (S5)/ lid open: power off 3, power on 3 button off (G3)/ lid open: power off 3, power on 3 is off, long press button (60s): power on 4, too long, shutdown, stay off is on, long press button (60s): power off 3, stay off AP is on, apreset cold: entered to S5, power off 3, power on 5 AP is on, apreset warm: power state is not changed, but reboots to BIOS Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org> (cherry picked from commit 413acdbf0dc5f3dfecc6dfbe448ce154dd493a61) Change-Id: I371ff5f7d92b05819089d23d8adb83dd31d236de Original-Change-Id: I3520969406a4cb8487b487c0612bca47de015eba Reviewed-on: https://chromium-review.googlesource.com/198053 Commit-Queue: Yung-chieh Lo <yjlou@chromium.org> Tested-by: Yung-chieh Lo <yjlou@chromium.org> Reviewed-by: Katie Roberts-Hoffman <katierh@chromium.org>
-rw-r--r--power/tegra.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/power/tegra.c b/power/tegra.c
index b8d9a239f7..b263980662 100644
--- a/power/tegra.c
+++ b/power/tegra.c
@@ -282,9 +282,20 @@ static int check_for_power_on_event(void)
{
/* check if system is already ON */
if (power_get_signals() & IN_XPSHOLD) {
- CPRINTF("[%T system is on, thus clear auto_power_on]\n");
- auto_power_on = 0; /* no need to arrange another power on */
- return 1;
+ if (system_get_reset_flags() & RESET_FLAG_AP_OFF) {
+ CPRINTF(
+ "[%T system is on, but "
+ "RESET_FLAG_AP_OFF is on]\n");
+ system_clear_reset_flags(RESET_FLAG_AP_OFF);
+ return 0;
+ } else {
+ CPRINTF(
+ "[%T system is on, thus clear "
+ "auto_power_on]\n");
+ /* no need to arrange another power on */
+ auto_power_on = 0;
+ return 1;
+ }
}
/* power on requested at EC startup for recovery */