summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-08-22 14:44:02 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-08-23 15:36:30 -0700
commit8fd12a56f171ddc54158eace07df6b8cf79a7c3a (patch)
tree4646d94fa3e9dbca059260c6a9c47859186986b2
parent40a4bd1d639249abf0a5b0f71d79c486a890a1ad (diff)
downloadchrome-ec-8fd12a56f171ddc54158eace07df6b8cf79a7c3a.tar.gz
npcx: Don't enable GPIO interrupts by default
GPIO interrupts must first be enabled with a call to gpio_enable_interrupt() to prevent ISRs from being run before prerequiste modules are initialized. BUG=chrome-os-partner:56486 BRANCH=None TEST=Manual on kevin, stress test sysjump for ~1 hour (~700 sysjumps) without failure. Change-Id: Ia4006ef1b0c3218dfe5c92fde6713c10b0d22d2a Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/374020 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Mulin Chao <mlchao@nuvoton.com>
-rw-r--r--board/kevin/board.c21
-rw-r--r--chip/npcx/gpio.c11
2 files changed, 14 insertions, 18 deletions
diff --git a/board/kevin/board.c b/board/kevin/board.c
index 34f2c3ee3a..a152ea94b5 100644
--- a/board/kevin/board.c
+++ b/board/kevin/board.c
@@ -258,9 +258,17 @@ int pd_snk_is_vbus_provided(int port)
static void board_init(void)
{
+ /* Enable TCPC alert interrupts */
+ gpio_enable_interrupt(GPIO_USB_C0_PD_INT_L);
+ gpio_enable_interrupt(GPIO_USB_C1_PD_INT_L);
+
/* Enable charger interrupt for BC1.2 detection on attach / detach */
gpio_enable_interrupt(GPIO_CHARGER_INT_L);
+ /* Enable reboot / shutdown control inputs from AP */
+ gpio_enable_interrupt(GPIO_WARM_RESET_REQ);
+ gpio_enable_interrupt(GPIO_AP_OVERTEMP);
+
/* Sensor Init */
gpio_config_module(MODULE_SPI_MASTER, 1);
spi_enable(CONFIG_SPI_ACCEL_PORT, 1);
@@ -390,19 +398,6 @@ static void board_config_check(void)
DECLARE_HOOK(HOOK_INIT, board_config_check, HOOK_PRIO_LAST);
#endif /* ifndef CONFIG_USB_PD_5V_EN_ACTIVE_LOW */
-static void overtemp_interrupt_enable(void)
-{
- gpio_enable_interrupt(GPIO_AP_OVERTEMP);
-}
-DECLARE_HOOK(HOOK_CHIPSET_RESUME, overtemp_interrupt_enable,
- HOOK_PRIO_DEFAULT);
-static void overtemp_interrupt_disable(void)
-{
- gpio_disable_interrupt(GPIO_AP_OVERTEMP);
-}
-DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, overtemp_interrupt_disable,
- HOOK_PRIO_DEFAULT);
-
/* Motion sensors */
#ifdef HAS_TASK_MOTIONSENSE
/* Mutexes */
diff --git a/chip/npcx/gpio.c b/chip/npcx/gpio.c
index 1d701203c7..4e3b19e31c 100644
--- a/chip/npcx/gpio.c
+++ b/chip/npcx/gpio.c
@@ -472,7 +472,6 @@ static void gpio_interrupt_type_sel(uint8_t port, uint8_t mask, uint32_t flags)
NPCX_WKEDG(table, group) |= pmask;
/* Enable wake-up input sources */
- NPCX_WKEN(table, group) |= pmask;
NPCX_WKINEN(table, group) |= pmask;
/*
* Clear pending bit since it might be set
@@ -505,7 +504,6 @@ static void gpio_interrupt_type_sel(uint8_t port, uint8_t mask, uint32_t flags)
}
/* Enable wake-up input sources */
- NPCX_WKEN(table, group) |= pmask;
NPCX_WKINEN(table, group) |= pmask;
/*
* Clear pending bit since it might be set
@@ -682,10 +680,13 @@ void gpio_pre_init(void)
SET_BIT(NPCX_DEVALT(ALT_GROUP_1), NPCX_DEVALT1_NO_LPC_ESPI);
#endif
- /* Clear all pending bits of GPIOS*/
- for (i = 0; i < 2; i++)
- for (j = 0; j < 8; j++)
+ /* Clear all interrupt pending and enable bits of GPIOS */
+ for (i = 0; i < 2; i++) {
+ for (j = 0; j < 8; j++) {
NPCX_WKPCL(i, j) = 0xFF;
+ NPCX_WKEN(i, j) = 0;
+ }
+ }
/* No support enable clock for the GPIO port in run and sleep. */
/* Set flag for each GPIO pin in gpio_list */