diff options
author | Aseda Aboagye <aaboagye@google.com> | 2020-02-03 11:25:29 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-02-05 08:28:47 +0000 |
commit | 1e544609affc989a0b4bb75d69659d6a86291ec3 (patch) | |
tree | 4e523d2e6691563363efc1be77c0cf06791a2531 /power | |
parent | fc1e135e21727c73e25c7876fb8ef1ae4f54ce9e (diff) | |
download | chrome-ec-1e544609affc989a0b4bb75d69659d6a86291ec3.tar.gz |
power/icelake: JSL: Handle EC_AP_VCCST_PWRGD
For Jasperlake, the EC needs to assert EC_AP_VCCST power good with a 2ms
minimum delay after receiving the DRAM power good and the PP1050_ST
power good.
BUG=b:148688874
BRANCH=None
TEST=`make -j buildall`
Change-Id: Ieedabf5a8a7af3951910118504dc702f7f8058bc
Signed-off-by: Aseda Aboagye <aaboagye@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2036453
Tested-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'power')
-rw-r--r-- | power/icelake.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/power/icelake.c b/power/icelake.c index 9fc92f7ff8..2a2d484b85 100644 --- a/power/icelake.c +++ b/power/icelake.c @@ -8,6 +8,7 @@ #include "chipset.h" #include "console.h" #include "gpio.h" +#include "hooks.h" #include "intel_x86.h" #include "power.h" #include "power_button.h" @@ -159,11 +160,19 @@ static void enable_pp5000_rail(void) } +#ifdef CONFIG_CHIPSET_JASPERLAKE +static void assert_ec_ap_vccst_pwrgd(void) +{ + GPIO_SET_LEVEL(GPIO_EC_AP_VCCST_PWRGD_OD, 1); +} +DECLARE_DEFERRED(assert_ec_ap_vccst_pwrgd); +#endif /* CONFIG_CHIPSET_JASPERLAKE */ + enum power_state power_handle_state(enum power_state state) { int dswpwrok_in = intel_x86_get_pg_ec_dsw_pwrok(); static int dswpwrok_out = -1; - int all_sys_pwrgd_in; + int all_sys_pwrgd_in = intel_x86_get_pg_ec_all_sys_pwrgd(); int all_sys_pwrgd_out; /* Pass-through DSW_PWROK to ICL. */ @@ -178,6 +187,19 @@ enum power_state power_handle_state(enum power_state state) dswpwrok_out = dswpwrok_in; } +#ifdef CONFIG_CHIPSET_JASPERLAKE + /* + * Assert VCCST power good when ALL_SYS_PWRGD is received with a 2ms + * delay minimum. + */ + if (all_sys_pwrgd_in && !gpio_get_level(GPIO_EC_AP_VCCST_PWRGD_OD)) { + hook_call_deferred(&assert_ec_ap_vccst_pwrgd_data, 2 * MSEC); + } else if (!all_sys_pwrgd_in && + gpio_get_level(GPIO_EC_AP_VCCST_PWRGD_OD)) { + GPIO_SET_LEVEL(GPIO_EC_AP_VCCST_PWRGD_OD, 0); + } +#endif /* CONFIG_CHIPSET_JASPERLAKE */ + common_intel_x86_handle_rsmrst(state); switch (state) { |