diff options
author | Matt Derksen <mderkse1@us.ibm.com> | 2018-01-31 10:28:57 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-02-07 17:40:16 -0500 |
commit | d5bdfe28f46fe9b68994b77212497c25bddcdc93 (patch) | |
tree | a776781b9c35bc7ca6abfae3c8e2725bbec71522 /src/usr/targeting/runtime | |
parent | 975d6f745c830cb54cff7a2cf751d57b44db83c0 (diff) | |
download | blackbird-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/makefile | 3 | ||||
-rw-r--r-- | src/usr/targeting/runtime/rt_startup.C | 110 |
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 |