diff options
author | Brian Bakke <bbakke@us.ibm.com> | 2018-04-11 09:34:37 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-04-17 14:15:53 -0400 |
commit | 05f5369161fd8725ca3fc090a9a10e314f4f67ac (patch) | |
tree | 5326b9b02a716de7a31bfab68d9424b9a16c7e35 | |
parent | 67bce7927b46080e76f048d9c305b29dcbb5cc3f (diff) | |
download | talos-hostboot-05f5369161fd8725ca3fc090a9a10e314f4f67ac.tar.gz talos-hostboot-05f5369161fd8725ca3fc090a9a10e314f4f67ac.zip |
Check for pending OCC messages on HBRT start in OpenPOWER
The OCC will set an interrupt for the Host to look for a pending
message/action. If opal-prd is not running at the time that this
interrupt happens, HTMGT will never see the message. Therefore
we need to have HTMGT explicitly check for anything pending any
time HBRT starts up.
Change-Id: Iaae075ae6828a9de5a7bd5afe55c541b0076f2d2
RTC: 187912
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57175
Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com>
Reviewed-by: Matt Derksen <mderkse1@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-rw-r--r-- | src/include/runtime/interface.h | 6 | ||||
-rw-r--r-- | src/runtime/rt_main.C | 11 | ||||
-rw-r--r-- | src/usr/htmgt/runtime/rt_occ.C | 36 |
3 files changed, 51 insertions, 2 deletions
diff --git a/src/include/runtime/interface.h b/src/include/runtime/interface.h index 823f44eda..aca952616 100644 --- a/src/include/runtime/interface.h +++ b/src/include/runtime/interface.h @@ -983,6 +983,12 @@ struct postInitCalls_t */ void (*callClearPendingSbeMsgs)(); + /** + * @brief Clear pending OCC messages + * + */ + void (*callClearPendingOccMsgs)(); + }; extern hostInterfaces_t* g_hostInterfaces; diff --git a/src/runtime/rt_main.C b/src/runtime/rt_main.C index 19a15e518..7aa631c7e 100644 --- a/src/runtime/rt_main.C +++ b/src/runtime/rt_main.C @@ -142,6 +142,17 @@ runtimeInterfaces_t* rt_start(hostInterfaces_t* intf) // check for possible missed in-flight messages/interrupts rtPost->callClearPendingSbeMsgs(); + // check for possible missed in-flight messages/interrupts + if (rtPost->callClearPendingOccMsgs != nullptr ) + { + // vector ptr has been initted, use it + rtPost->callClearPendingOccMsgs(); + } + else + { + // (HTMGT not compiled in by default) + } + // do any version mismatch fixups rt_version_fixup(); diff --git a/src/usr/htmgt/runtime/rt_occ.C b/src/usr/htmgt/runtime/rt_occ.C index a3e8a3750..7c453ffc2 100644 --- a/src/usr/htmgt/runtime/rt_occ.C +++ b/src/usr/htmgt/runtime/rt_occ.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2017 */ +/* Contributors Listed Below - COPYRIGHT 2014,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -158,5 +158,37 @@ namespace HTMGT }; registerOcc g_registerOcc; -} + +//------------------------------------------------------------------------ + + void process_occ_clr_msgs( void ) + { +#ifdef CONFIG_HTMGT + // a NULL parameter will cause processOccError() to poll + // all of the OCCs (since the parm was invalid) + TARGETING::Target * l_DummyOccTarget = nullptr; + HTMGT::processOccError(l_DummyOccTarget); +#else + TMGT_ERR("Unexpected call to process_occ_clr_msgs" + " when HTMGT is not enabled"); +#endif + } + + + //------------------------------------------------------------------------ + + struct registerOccStartup + { + registerOccStartup() + { + // Register interface for Host to call + postInitCalls_t * rt_post = getPostInitCalls(); + rt_post->callClearPendingOccMsgs = &process_occ_clr_msgs; + } + + }; + + registerOccStartup g_registerOccStartup; + +} // end namespace HTMGT |