From 2f92ff3612394fe800962062c0422a46e91dbc59 Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Mon, 27 Jun 2016 10:48:53 -0700 Subject: 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 Change-Id: I6ff0db87115f5b1f358d7d98e7b7050ee3e3fe0a Reviewed-on: https://chromium-review.googlesource.com/356178 Commit-Ready: Shawn N Tested-by: Douglas Anderson Tested-by: Vadim Bendebury Tested-by: Shawn N Reviewed-by: Randall Spangler --- chip/npcx/shi.c | 22 ++++++++++++++-------- 1 file 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 -- cgit v1.2.1