summaryrefslogtreecommitdiff
path: root/power/icelake.c
diff options
context:
space:
mode:
Diffstat (limited to 'power/icelake.c')
-rw-r--r--power/icelake.c24
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) {