diff options
-rw-r--r-- | board/falco/board.c | 2 | ||||
-rw-r--r-- | common/chipset_x86_common.c | 15 |
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(); |