diff options
author | Mulin Chao <MLChao@nuvoton.com> | 2018-02-05 13:27:39 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-02-08 01:24:30 -0800 |
commit | 96470c4dfb35e380f87c86f9d809687613cdc01e (patch) | |
tree | 99e7cf496ee161c8847282e5495a685b8b5c1177 | |
parent | bb5f21ed1a773dcfa58e8482918c60521e00b538 (diff) | |
download | chrome-ec-96470c4dfb35e380f87c86f9d809687613cdc01e.tar.gz |
lpc: Prevent watchdog reset caused by KBC IBF interrupt on chromebox.
Since there is no KEYPROTO task on chromebox such as fizz and sion, lpc
driver doesn't declare KBC IBF/OBE ISRs for these events. If host put
data in ec's KBC input buffer unexpectedly, exception_panic() will be
executed in default_handler. Then we will see ec print
"=== PROCESS EXCEPTION: 29 ====== xPSR: 01000000 ===" message without
any hard fault and reset.
This CL fixed this symptom by turning off KBC if there is no KEYPROTO task.
We also run suspend stress test on fizz and no watchdog reset symptom
occurred.
BRANCH=none
BUG=b:72353876
TEST=No build errors. Run suspend stress test on fizz and no watchdog
reset occurred.
Change-Id: I4744fac0d6fb2628849c728d4860509434fa2cbb
Signed-off-by: Mulin Chao <mlchao@nuvoton.com>
Reviewed-on: https://chromium-review.googlesource.com/899706
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-by: Duncan Laurie <dlaurie@google.com>
-rw-r--r-- | chip/npcx/lpc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/chip/npcx/lpc.c b/chip/npcx/lpc.c index 5643474285..190c80b412 100644 --- a/chip/npcx/lpc.c +++ b/chip/npcx/lpc.c @@ -96,7 +96,9 @@ static void keyboard_irq_assert(void) static void lpc_task_enable_irq(void) { +#ifdef HAS_TASK_KEYPROTO task_enable_irq(NPCX_IRQ_KBC_IBF); +#endif task_enable_irq(NPCX_IRQ_PM_CHAN_IBF); task_enable_irq(NPCX_IRQ_PORT80); #ifdef CONFIG_ESPI @@ -113,7 +115,9 @@ static void lpc_task_enable_irq(void) static void lpc_task_disable_irq(void) { +#ifdef HAS_TASK_KEYPROTO task_disable_irq(NPCX_IRQ_KBC_IBF); +#endif task_disable_irq(NPCX_IRQ_PM_CHAN_IBF); task_disable_irq(NPCX_IRQ_PORT80); #ifdef CONFIG_ESPI @@ -738,8 +742,10 @@ void host_register_init(void) lpc_sib_write_reg(SIO_OFFSET, 0x30, 0x01); /* enable KBC*/ +#ifdef HAS_TASK_KEYPROTO lpc_sib_write_reg(SIO_OFFSET, 0x07, 0x06); lpc_sib_write_reg(SIO_OFFSET, 0x30, 0x01); +#endif /* Setting PMC2 */ /* LDN register = 0x12(PMC2) */ @@ -954,8 +960,10 @@ static void lpc_init(void) * IBF(K&M) INT enable, OBE(K&M) empty INT enable , * OBF Mouse Full INT enable and OBF KB Full INT enable */ +#ifdef HAS_TASK_KEYPROTO lpc_keyboard_clear_buffer(); NPCX_HICTRL = 0x0F; +#endif /* * Turn on enhance mode on PM channel-1, |