diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2020-07-31 17:20:38 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-08-01 00:12:19 +0000 |
commit | 744a611d80219aa430501e2a1923e2d06af7fe0a (patch) | |
tree | d129f1a8027faee950f2b7036cd11d77ead26771 | |
parent | eaffee8a2567be9be30a2290456dc3d4c0f39147 (diff) | |
download | chrome-ec-744a611d80219aa430501e2a1923e2d06af7fe0a.tar.gz |
Revert "power: Clear AP_IDLE when waking up by PB or LID"
This reverts commit 27ee378bb78a299a0983379be83eb6d55860b4ae.
Reason for revert: b/162508724
A wake-up source from hibernation needs to be determined only by RO. Reverting back to the original implementation: CL:2236589.
Original change's description:
> power: Clear AP_IDLE when waking up by PB or LID
>
> Currently, AP_IDLE is cleared when EC wakes up by the power button or
> the lid open.
>
> This patch extends the logic from CONFIG_EXTPOWER_GPIO to
> CONFIG_EXTPOWER so that the bug (chromium:1073960) can be also fixed
> on the boards using non-GPIO method for extpower_is_present.
>
> Tested as follows on Trembyle:
> 1. Put DUT in hibernation.
> 2. Wake up DUT and observe:
> a. When waking up by power button, AP is turned on.
> b. When waking up by lid open, AP is turned on.
> c. When waking up by AC, AP is left idle.
>
> BUG=b:157077589, chromium:1073960, b:159350276
> BRANCH=none
> TEST=See above.
>
> Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
> Change-Id: I944aaac036ce58659e81b7021e52a3291f31e951
> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2283946
> Reviewed-by: Jett Rink <jettrink@chromium.org>
Bug: b:157077589
Bug: chromium:1073960
Bug: b:159350276
Bug: b:162508724
Change-Id: Iaf9d0af2ca8c48bbf2529c4ba05493837dd76287
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2333106
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
Auto-Submit: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Commit-Queue: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r-- | board/boten/gpio.inc | 1 | ||||
-rw-r--r-- | board/drawcia/gpio.inc | 1 | ||||
-rw-r--r-- | board/madoo/gpio.inc | 1 | ||||
-rw-r--r-- | board/magolor/gpio.inc | 1 | ||||
-rw-r--r-- | board/waddledee/gpio.inc | 1 | ||||
-rw-r--r-- | board/waddledoo/gpio.inc | 1 | ||||
-rw-r--r-- | board/wheelie/gpio.inc | 1 | ||||
-rw-r--r-- | common/vboot/efs2.c | 12 | ||||
-rw-r--r-- | power/common.c | 25 |
9 files changed, 20 insertions, 24 deletions
diff --git a/board/boten/gpio.inc b/board/boten/gpio.inc index 8ce426b2ab..b73f53c091 100644 --- a/board/boten/gpio.inc +++ b/board/boten/gpio.inc @@ -62,6 +62,7 @@ GPIO(ALL_SYS_PWRGD, PIN(B, 7), GPIO_OUT_LOW) GPIO(EN_SLP_Z, PIN(K, 3), GPIO_OUT_LOW) /* Required for icelake chipset code, but implemented through other means for dedede */ +UNIMPLEMENTED(AC_PRESENT) UNIMPLEMENTED(PG_EC_DSW_PWROK) UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD) diff --git a/board/drawcia/gpio.inc b/board/drawcia/gpio.inc index 0f80d6443c..4c709c72c3 100644 --- a/board/drawcia/gpio.inc +++ b/board/drawcia/gpio.inc @@ -63,6 +63,7 @@ GPIO(ALL_SYS_PWRGD, PIN(B, 7), GPIO_OUT_LOW) GPIO(EN_SLP_Z, PIN(K, 3), GPIO_OUT_LOW) /* Required for icelake chipset code, but implemented through other means for dedede */ +UNIMPLEMENTED(AC_PRESENT) UNIMPLEMENTED(PG_EC_DSW_PWROK) UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD) diff --git a/board/madoo/gpio.inc b/board/madoo/gpio.inc index 0e0f5c216e..4f75cfe4a0 100644 --- a/board/madoo/gpio.inc +++ b/board/madoo/gpio.inc @@ -96,6 +96,7 @@ GPIO(EC_BATTERY_PRES_ODL, PIN(E, 1), GPIO_INPUT) * Waddledoo doesn't have these physical pins coming to the EC but uses other * logic. */ +UNIMPLEMENTED(AC_PRESENT) UNIMPLEMENTED(PG_EC_DSW_PWROK) UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD) diff --git a/board/magolor/gpio.inc b/board/magolor/gpio.inc index 1da5624b0a..2358addc21 100644 --- a/board/magolor/gpio.inc +++ b/board/magolor/gpio.inc @@ -96,6 +96,7 @@ GPIO(EC_BATTERY_PRES_ODL, PIN(E, 1), GPIO_INPUT) * Waddledoo doesn't have these physical pins coming to the EC but uses other * logic. */ +UNIMPLEMENTED(AC_PRESENT) UNIMPLEMENTED(PG_EC_DSW_PWROK) UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD) diff --git a/board/waddledee/gpio.inc b/board/waddledee/gpio.inc index 63e1843d00..612e3f0f5d 100644 --- a/board/waddledee/gpio.inc +++ b/board/waddledee/gpio.inc @@ -64,6 +64,7 @@ GPIO(ALL_SYS_PWRGD, PIN(B, 7), GPIO_OUT_LOW) GPIO(EN_SLP_Z, PIN(K, 3), GPIO_OUT_LOW) /* Required for icelake chipset code, but implemented through other means for dedede */ +UNIMPLEMENTED(AC_PRESENT) UNIMPLEMENTED(PG_EC_DSW_PWROK) UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD) diff --git a/board/waddledoo/gpio.inc b/board/waddledoo/gpio.inc index 0e0f5c216e..4f75cfe4a0 100644 --- a/board/waddledoo/gpio.inc +++ b/board/waddledoo/gpio.inc @@ -96,6 +96,7 @@ GPIO(EC_BATTERY_PRES_ODL, PIN(E, 1), GPIO_INPUT) * Waddledoo doesn't have these physical pins coming to the EC but uses other * logic. */ +UNIMPLEMENTED(AC_PRESENT) UNIMPLEMENTED(PG_EC_DSW_PWROK) UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD) diff --git a/board/wheelie/gpio.inc b/board/wheelie/gpio.inc index abd18ecbe3..80f6a63a64 100644 --- a/board/wheelie/gpio.inc +++ b/board/wheelie/gpio.inc @@ -64,6 +64,7 @@ GPIO(ALL_SYS_PWRGD, PIN(B, 7), GPIO_OUT_LOW) GPIO(EN_SLP_Z, PIN(K, 3), GPIO_OUT_LOW) /* Required for icelake chipset code, but implemented through other means for dedede */ +UNIMPLEMENTED(AC_PRESENT) UNIMPLEMENTED(PG_EC_DSW_PWROK) UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD) diff --git a/common/vboot/efs2.c b/common/vboot/efs2.c index e608fd5841..963d10a4b2 100644 --- a/common/vboot/efs2.c +++ b/common/vboot/efs2.c @@ -253,6 +253,18 @@ void vboot_main(void) return; } + if (IS_ENABLED(CONFIG_HIBERNATE) + && IS_ENABLED(CONFIG_EXTPOWER_GPIO) + && !gpio_get_level(GPIO_AC_PRESENT)) { + /* + * EC doesn't hibernate from G3 when AC is present. Thus if AC + * is not present here, it implies we woke up by power button or + * by lid. Clear AP_IDLE to avoid interfering with the AP boot. + */ + CPRINTS("Clear AP_IDLE, assuming wake-up by PB or LID"); + system_clear_reset_flags(EC_RESET_FLAG_AP_IDLE); + } + if (system_is_manual_recovery() || (system_get_reset_flags() & EC_RESET_FLAG_STAY_IN_RO)) { if (system_is_manual_recovery()) diff --git a/power/common.c b/power/common.c index 6dc0ebc666..0cdabca0fa 100644 --- a/power/common.c +++ b/power/common.c @@ -440,13 +440,7 @@ static enum power_state power_common_state(enum power_state state) &target, now)) { case CRITICAL_SHUTDOWN_HIBERNATE: CPRINTS("Hibernate due to G3 idle"); - /* - * Set AP_IDLE when hibernating so that AC plug - * won't boot the system. If EFS2 isn't enabled, - * we need to boot the AP to get PD power though - * it's inconsistent with the S5 behavior. - */ - if (IS_ENABLED(CONFIG_EXTPOWER) && + if (IS_ENABLED(CONFIG_EXTPOWER_GPIO) && IS_ENABLED(CONFIG_VBOOT_EFS2)) { uint32_t reset_flags; reset_flags = chip_read_reset_flags() | @@ -737,23 +731,6 @@ static void power_ac_change(void) DECLARE_HOOK(HOOK_AC_CHANGE, power_ac_change, HOOK_PRIO_DEFAULT); #endif -#if defined(CONFIG_EXTPOWER) && defined(CONFIG_HIBERNATE) \ - && defined(CONFIG_VBOOT_EFS2) -static void power_init_ap_idle(void) -{ - if (extpower_is_present()) - return; - /* - * EC doesn't hibernate from G3 when AC is present. Thus if AC is not - * present here, it implies we woke up by the power button or by the - * lid. Clear AP_IDLE to avoid interfering with the boot. - */ - CPRINTS("Clear AP_IDLE, assuming wake-up by PB or LID"); - system_clear_reset_flags(EC_RESET_FLAG_AP_IDLE); -} -DECLARE_HOOK(HOOK_INIT, power_init_ap_idle, HOOK_PRIO_INIT_EXTPOWER + 1); -#endif - /*****************************************************************************/ /* Interrupts */ |