diff options
author | Furquan Shaikh <furquan@chromium.org> | 2016-09-22 22:16:55 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-09-23 12:21:29 -0700 |
commit | 773c5db6d4253b651789dd11a2267b92fc9aaf83 (patch) | |
tree | e721235ac30b72b60d18ba904966ab76f8612890 | |
parent | 4a974141a5b70ce97800f209a6bc0644d8249c99 (diff) | |
download | chrome-ec-773c5db6d4253b651789dd11a2267b92fc9aaf83.tar.gz |
chip/npcx: Close LPC window before sysjump
Before performing a sysjump, ensure that:
1. LPC interrupts are disabled : Ensures interrupts are not taken until
next enable.
2. LPC window is closed by writing 0xfffffff8 to window base addresses:
Prevents any memory corruption by host.
BUG=chrome-os-partner:57642
BRANCH=None
TEST=Verfied that LPC communication works after sysjump to RW.
Change-Id: I7b7826b2544f1c94cfa9c96b6ac82bc3517b1820
Signed-off-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/388755
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Mulin Chao <mlchao@nuvoton.com>
-rw-r--r-- | chip/npcx/lpc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/chip/npcx/lpc.c b/chip/npcx/lpc.c index 43330e906c..0ec1c904b9 100644 --- a/chip/npcx/lpc.c +++ b/chip/npcx/lpc.c @@ -608,6 +608,18 @@ DECLARE_IRQ(NPCX_IRQ_PORT80, lpc_port80_interrupt, 3); */ static void lpc_sysjump(void) { + lpc_task_disable_irq(); + + /* Disable protect for Win 1 and 2. */ + NPCX_WIN_WR_PROT(0) = 0; + NPCX_WIN_WR_PROT(1) = 0; + NPCX_WIN_RD_PROT(0) = 0; + NPCX_WIN_RD_PROT(1) = 0; + + /* Reset base address for Win 1 and 2. */ + NPCX_WIN_BASE(0) = 0xfffffff8; + NPCX_WIN_BASE(1) = 0xfffffff8; + system_add_jump_tag(LPC_SYSJUMP_TAG, 1, sizeof(event_mask), event_mask); } |