summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-06-27 10:48:53 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-06-28 17:17:26 -0700
commit2f92ff3612394fe800962062c0422a46e91dbc59 (patch)
tree2b74188eada8e0116f147235c640051151194137
parent6feb319a8710bd54bf9ad30beabd82fa828831d0 (diff)
downloadchrome-ec-2f92ff3612394fe800962062c0422a46e91dbc59.tar.gz
npcx: shi: Ensure SHI is initialized prior to enabling CS interrupt
shi_init() must be called before shi_enable(). BUG=chrome-os-partner:54810 BRANCH=None TEST=Manual on gru. Power-up EC, verify no SHI error prints are encountered. Boot to OS, run "sysjump rw", verify that host commands continue to be handled correctly. Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: I6ff0db87115f5b1f358d7d98e7b7050ee3e3fe0a Reviewed-on: https://chromium-review.googlesource.com/356178 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Douglas Anderson <dianders@chromium.org> Tested-by: Vadim Bendebury <vbendeb@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--chip/npcx/shi.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/chip/npcx/shi.c b/chip/npcx/shi.c
index 54d6209e59..4d69220893 100644
--- a/chip/npcx/shi.c
+++ b/chip/npcx/shi.c
@@ -731,6 +731,18 @@ static void shi_enable(void)
}
DECLARE_HOOK(HOOK_CHIPSET_RESUME, shi_enable, HOOK_PRIO_DEFAULT);
+static void shi_reenable_on_sysjump(void)
+{
+#if !(DEBUG_SHI)
+ if (system_jumped_to_this_image() && chipset_in_state(CHIPSET_STATE_ON))
+#endif
+ shi_enable();
+}
+/* Call hook after chipset sets initial power state */
+DECLARE_HOOK(HOOK_INIT,
+ shi_reenable_on_sysjump,
+ HOOK_PRIO_INIT_CHIPSET + 1);
+
/* Disable SHI bus */
static void shi_disable(void)
{
@@ -799,15 +811,9 @@ static void shi_init(void)
/* Clear SHI events status register */
NPCX_EVSTAT = 0XFF;
-
- /* If chipset is already on, prepare for transactions */
-#if !(DEBUG_SHI)
- if (chipset_in_state(CHIPSET_STATE_ON))
-#endif
- shi_enable();
-
}
-DECLARE_HOOK(HOOK_INIT, shi_init, HOOK_PRIO_DEFAULT);
+/* Call hook before chipset sets initial power state and calls resume hooks */
+DECLARE_HOOK(HOOK_INIT, shi_init, HOOK_PRIO_INIT_CHIPSET - 1);
/**
* Get protocol information