summaryrefslogtreecommitdiffstats
path: root/src/usr/sbeio
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2018-06-28 16:54:16 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2018-07-19 15:35:30 -0500
commitbe6ed717c7a1de17f3934ed229b64c30f7a9e58b (patch)
tree6db151f880ded4fce78a9314ea256e886213ebe6 /src/usr/sbeio
parentba8d9b8321dd40f157753247111b0a969152af34 (diff)
downloadblackbird-hostboot-be6ed717c7a1de17f3934ed229b64c30f7a9e58b.tar.gz
blackbird-hostboot-be6ed717c7a1de17f3934ed229b64c30f7a9e58b.zip
Only switch sides and perform hreset if SEEPROM side versions match
In the event that the SBE fails hostboot will attempt to recover it. During runtime hostboot will attempt an HRESET if the SBE is in a failed state. When the SBE performs the HRESET it will save some important information that will persist through the reset. If one side is failing to recover the retry code will attempt to switch sides and do the hreset. If the SBE seeproms have different versions of the SBE code the data that was supposed to persist through the HRESET will be in incorrect places because the version mismatch. Because of this we cannot switch seeprom sides and perform a hreset if the seeproms have different level of the SBE code. CQ: SW438029 Change-Id: Ic7078a886088cc4d5355cc076e72d0fc36f85027 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/61605 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: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/sbeio')
-rw-r--r--src/usr/sbeio/common/sbe_retry_handler.C44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/usr/sbeio/common/sbe_retry_handler.C b/src/usr/sbeio/common/sbe_retry_handler.C
index 5e74233a7..4410d089d 100644
--- a/src/usr/sbeio/common/sbe_retry_handler.C
+++ b/src/usr/sbeio/common/sbe_retry_handler.C
@@ -291,6 +291,7 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
if(this->iv_currentAction == P9_EXTRACT_SBE_RC::NO_RECOVERY_ACTION)
{
+ SBE_TRACF("main_sbe_handler(): We have concluded there are no further recovery actions to take, deconfiguring proc and exiting handler");
// There is no action possible. Gard and Callout the proc
/*@
* @errortype ERRL_SEV_UNRECOVERABLE
@@ -321,7 +322,6 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
errlCommit(l_errl, SBEIO_COMP_ID);
this->iv_currentSBEState = SBE_REG_RETURN::PROC_DECONFIG;
- SBE_TRACF("main_sbe_handler(): We have concluded there are no further recovery actions to take, deconfiguring proc and exiting handler");
break;
}
@@ -334,6 +334,48 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
this->iv_currentAction ==
P9_EXTRACT_SBE_RC::REIPL_UPD_SEEPROM))
{
+ // We cannot switch sides and perform an hreset if the seeprom's
+ // versions do not match. If this happens, log an error and stop
+ // trying to recover the SBE
+ if(this->iv_sbeRestartMethod == HRESET)
+ {
+ TARGETING::ATTR_HB_SBE_SEEPROM_VERSION_MISMATCH_type l_versionsMismatch =
+ i_target->getAttr<TARGETING::ATTR_HB_SBE_SEEPROM_VERSION_MISMATCH>();
+
+ if(l_versionsMismatch)
+ {
+ SBE_TRACF("main_sbe_handler(): We cannot switch SEEPROM sides if their versions do not match, exiting handler");
+ /*@
+ * @errortype ERRL_SEV_UNRECOVERABLE
+ * @moduleid SBEIO_EXTRACT_RC_HANDLER
+ * @reasoncode SBEIO_SEEPROM_VERSION_MISMATCH
+ * @userdata1 HUID of proc
+ * @userdata2 unused
+ * @devdesc Attempted to swap seeprom sides and
+ * boot using hreset but version mismatched
+ * @custdesc Processor Error
+ */
+ l_errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ SBEIO_EXTRACT_RC_HANDLER,
+ SBEIO_SEEPROM_VERSION_MISMATCH,
+ TARGETING::get_huid(i_target),0);
+ l_errl->collectTrace( "ISTEPS_TRACE", 256);
+ l_errl->collectTrace( SBEIO_COMP_NAME, 256);
+ l_errl->addHwCallout( i_target,
+ HWAS::SRCI_PRIORITY_HIGH,
+ HWAS::NO_DECONFIG,
+ HWAS::GARD_NULL );
+
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
+
+ errlCommit(l_errl, SBEIO_COMP_ID);
+ // break out of the retry loop
+ break;
+ }
+ }
if(this->iv_switchSidesCount >= MAX_SWITCH_SIDE_COUNT)
{
/*@
OpenPOWER on IntegriCloud