summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Bakke <bbakke@us.ibm.com>2018-04-11 09:34:37 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-04-17 14:15:53 -0400
commit05f5369161fd8725ca3fc090a9a10e314f4f67ac (patch)
tree5326b9b02a716de7a31bfab68d9424b9a16c7e35
parent67bce7927b46080e76f048d9c305b29dcbb5cc3f (diff)
downloadtalos-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.h6
-rw-r--r--src/runtime/rt_main.C11
-rw-r--r--src/usr/htmgt/runtime/rt_occ.C36
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
OpenPOWER on IntegriCloud