summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/falco/board.c2
-rw-r--r--common/chipset_x86_common.c15
2 files changed, 16 insertions, 1 deletions
diff --git a/board/falco/board.c b/board/falco/board.c
index 486239ae82..511a77f033 100644
--- a/board/falco/board.c
+++ b/board/falco/board.c
@@ -54,7 +54,7 @@ const struct gpio_info gpio_list[] = {
x86_interrupt},
{"PP1350_PGOOD", LM4_GPIO_H, (1<<6), GPIO_INT_BOTH,
x86_interrupt},
- {"PP5000_PGOOD", LM4_GPIO_N, (1<<0), GPIO_INT_BOTH,
+ {"PP5000_PGOOD", LM4_GPIO_N, (1<<0), GPIO_INT_BOTH_DSLEEP,
x86_interrupt},
{"VCORE_PGOOD", LM4_GPIO_C, (1<<6), GPIO_INT_BOTH,
x86_interrupt},
diff --git a/common/chipset_x86_common.c b/common/chipset_x86_common.c
index 34c2647990..1913270381 100644
--- a/common/chipset_x86_common.c
+++ b/common/chipset_x86_common.c
@@ -347,6 +347,21 @@ void x86_interrupt(enum gpio_signal signal)
}
#endif
+#ifdef BOARD_falco
+ /* Catch the PP5000 rail going down unexpectedly as it is likely the
+ * PP3300_EC rail is going down with it. (http://crosbug.com/p/30575)
+ */
+ if (signal == GPIO_PP5000_PGOOD && (gpio_get_level(signal) == 0) &&
+ (gpio_get_level(GPIO_PP5000_EN) == 1)) {
+ gpio_set_level(GPIO_PP5000_EN, 0);
+ usb_port_all_ports_off();
+ CPRINTF("[%T PP5000_PGOOD lost unexpectedly.");
+ CPRINTF(" Disabled 5V regulator and shutting down.]\n");
+ chipset_force_shutdown();
+ return;
+ }
+#endif
+
/* Shadow signals and compare with our desired signal state. */
x86_update_signals();