diff options
author | Louis Yung-Chieh Lo <yjlou@chromium.org> | 2014-04-29 17:39:35 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-05-02 23:22:09 +0000 |
commit | ea316e0d437902b7b23c44e1df64815d872875fc (patch) | |
tree | 569c9086f0b5fd2c18421afef64c4e5c66a78e16 | |
parent | 23f1337cb90b74ae440b658c9a80475cfdefe566 (diff) | |
download | chrome-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.c | 17 |
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 */ |