summaryrefslogtreecommitdiff
path: root/chip
diff options
context:
space:
mode:
authorMulin Chao <MLChao@nuvoton.com>2018-02-05 13:27:39 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-02-08 01:24:30 -0800
commit96470c4dfb35e380f87c86f9d809687613cdc01e (patch)
tree99e7cf496ee161c8847282e5495a685b8b5c1177 /chip
parentbb5f21ed1a773dcfa58e8482918c60521e00b538 (diff)
downloadchrome-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>
Diffstat (limited to 'chip')
-rw-r--r--chip/npcx/lpc.c8
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,