summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/runtime
diff options
context:
space:
mode:
authorMatt Derksen <mderkse1@us.ibm.com>2018-01-31 10:28:57 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-02-07 17:40:16 -0500
commitd5bdfe28f46fe9b68994b77212497c25bddcdc93 (patch)
treea776781b9c35bc7ca6abfae3c8e2725bbec71522 /src/usr/targeting/runtime
parent975d6f745c830cb54cff7a2cf751d57b44db83c0 (diff)
downloadblackbird-hostboot-d5bdfe28f46fe9b68994b77212497c25bddcdc93.tar.gz
blackbird-hostboot-d5bdfe28f46fe9b68994b77212497c25bddcdc93.zip
Initialize SBE message communication on HBRT start
Need to clear first 2 bits in CFAM register 0x283B. This basically resets our SBE communication stream just incase HBRT restarts after processing SBE interrupt. Clearing these bits tells the sender to resend the command. Change-Id: I1a1c5b80cc99414649d38c06b93428c87299f242 RTC:186334 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53225 Reviewed-by: Martin Gloff <mgloff@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> Reviewed-by: Brian E. Bakke <bbakke@us.ibm.com> Reviewed-by: Roland Veloz <rveloz@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/targeting/runtime')
-rw-r--r--src/usr/targeting/runtime/makefile3
-rw-r--r--src/usr/targeting/runtime/rt_startup.C110
2 files changed, 112 insertions, 1 deletions
diff --git a/src/usr/targeting/runtime/makefile b/src/usr/targeting/runtime/makefile
index c2279f8b2..ffb2e8a14 100644
--- a/src/usr/targeting/runtime/makefile
+++ b/src/usr/targeting/runtime/makefile
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2013,2017
+# Contributors Listed Below - COPYRIGHT 2013,2018
# [+] International Business Machines Corp.
#
#
@@ -41,6 +41,7 @@ HOSTBOOT_RUNTIME_SPECIFIC_OBJS += attrPlatOverride_rt.o
HOSTBOOT_RUNTIME_SPECIFIC_OBJS += errludattribute.o
HOSTBOOT_RUNTIME_SPECIFIC_OBJS += attributestrings.o
HOSTBOOT_RUNTIME_SPECIFIC_OBJS += attrsync.o
+HOSTBOOT_RUNTIME_SPECIFIC_OBJS += rt_startup.o
OBJS += ${COMMON_TARGETING_OBJS}
OBJS += ${HOSTBOOT_RT_IPL_COMMON_OBJS}
diff --git a/src/usr/targeting/runtime/rt_startup.C b/src/usr/targeting/runtime/rt_startup.C
new file mode 100644
index 000000000..578750006
--- /dev/null
+++ b/src/usr/targeting/runtime/rt_startup.C
@@ -0,0 +1,110 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/targeting/runtime/rt_startup.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#include <runtime/rt_targeting.H>
+#include <runtime/interface.h>
+#include <targeting/common/target.H>
+#include <targeting/common/targetservice.H>
+#include <targeting/common/trace.H>
+#include <targeting/common/utilFilter.H>
+#include <sbeio/runtime/sbe_msg_passing.H>
+#include <sbeio/sbeioreasoncodes.H>
+
+
+using namespace TARGETING;
+
+namespace RT_TARG
+{
+
+void clearPendingSbeMsgs()
+{
+ TRACFCOMP(g_trac_targeting, ENTER_MRK"clearPendingSbeMsgs");
+ errlHndl_t l_errl = nullptr;
+ do
+ {
+ //get runtime interfaces
+ runtimeInterfaces_t* l_rt = getRuntimeInterfaces();
+ if(nullptr == l_rt)
+ {
+ TRACFCOMP(g_trac_targeting,"clearPendingSbeMsgs: "
+ "Unable to get runtime interfaces.");
+ break;
+ }
+ else if(not l_rt->sbe_message_passing)
+ {
+ TRACFCOMP(g_trac_targeting,"clearPendingSbeMsgs: "
+ "sbe_message_passing runtime interface "
+ "has not been set.");
+ break;
+ }
+
+ TARGETING::TargetHandleList l_procList;
+ getAllChips(l_procList, TARGETING::TYPE_PROC, true);
+
+ if(0 == l_procList.size())
+ {
+ TRACFCOMP(g_trac_targeting,"clearPendingSbeMsgs: "
+ "Unable to get proc targets."
+ );
+ break;
+ }
+
+ for( const auto & l_procTarget : l_procList )
+ {
+ // clear out the two bits for this processor target
+ l_errl = SBE_MSG::process_sbe_msg_update_cfam( l_procTarget, 0x0,
+ (SBE_MSG::SBE_MESSAGE_PROCESSING_IN_PROGRESS |
+ SBE_MSG::SBE_MESSAGE_PROCESSING_COMPLETE) );
+
+ if (l_errl)
+ {
+ TRACFCOMP(g_trac_targeting,ERR_MRK"clearPendingSbeMsgs: "
+ "Failed to clear bits for processor 0x%04X, "
+ "EID %.8X:%.4X", TARGETING::get_huid(l_procTarget),
+ ERRL_GETEID_SAFE(l_errl),
+ ERRL_GETRC_SAFE(l_errl) );
+ errlCommit (l_errl, SBE_COMP_ID);
+ }
+ }
+ }
+ while(0);
+
+ TRACFCOMP(g_trac_targeting, EXIT_MRK"clearPendingSbeMsgs");
+}
+
+ //------------------------------------------------------------------------
+
+ struct registerRtStartup
+ {
+ registerRtStartup()
+ {
+ // Register interface for Host to call
+ postInitCalls_t * rt_post = getPostInitCalls();
+ rt_post->callClearPendingSbeMsgs = &clearPendingSbeMsgs;
+ }
+ };
+
+ registerRtStartup g_registerRtStartup;
+
+}; // End namespace RT_TARG
OpenPOWER on IntegriCloud