From aa14b36f1890e373424463afc584659b2834dce6 Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Thu, 13 Aug 2015 18:49:35 -0700 Subject: skylake: Wake from Deep S5 after battery low is deasserted The system will not wake from Deep S5 if BATLOW# is asserted, so wait for that to deassert, then pulse the wake pin and wait for SLP_SUS_L to deassert. BUG=chrome-os-partner:43545,chrome-os-partner:44079 BRANCH=none TEST=verified on P2 board Change-Id: I3b36159b574d418c9b79c478d0a41f753474fa6a Signed-off-by: Duncan Laurie Reviewed-on: https://chromium-review.googlesource.com/293595 Reviewed-by: Shawn N --- power/skylake.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/power/skylake.c b/power/skylake.c index d0fafb0bc2..54866cb72e 100644 --- a/power/skylake.c +++ b/power/skylake.c @@ -100,7 +100,7 @@ void chipset_reset(int cold_reset) } } -void chipset_thottle_cpu(int throttle) +void chipset_throttle_cpu(int throttle) { if (chipset_in_state(CHIPSET_STATE_ON)) gpio_set_level(GPIO_CPU_PROCHOT, throttle); @@ -192,11 +192,6 @@ enum power_state power_handle_state(enum power_state state) /* Call hooks to initialize PMIC */ hook_notify(HOOK_CHIPSET_PRE_INIT); - if (power_wait_signals(IN_PCH_SLP_SUS_DEASSERTED)) { - chipset_force_shutdown(); - return POWER_G3; - } - #ifndef BOARD_KUNIMITSU /* * Allow up to 1s for charger to be initialized, in case @@ -216,10 +211,24 @@ enum power_state power_handle_state(enum power_state state) } /* Allow AP to power on */ - gpio_set_level(GPIO_PMIC_SLP_SUS_L, 1); gpio_set_level(GPIO_PCH_BATLOW_L, 1); + + /* Assert wake pin to PCH to wake from Deep S5 */ + if (gpio_get_level(GPIO_PCH_WAKE_L) == 1) { + gpio_set_level(GPIO_PCH_WAKE_L, 0); + udelay(65); + gpio_set_level(GPIO_PCH_WAKE_L, 1); + } #endif + if (power_wait_signals(IN_PCH_SLP_SUS_DEASSERTED)) { + chipset_force_shutdown(); + return POWER_G3; + } + +#ifndef BOARD_KUNIMITSU + gpio_set_level(GPIO_PMIC_SLP_SUS_L, 1); +#endif return POWER_S5; case POWER_S5S3: -- cgit v1.2.1