summaryrefslogtreecommitdiffstats
path: root/src/usr/sbeio
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2018-03-22 14:56:08 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-04-09 14:31:53 -0400
commit5192636a15d9fd36653952eaad5dac0974094f00 (patch)
treec6ab6f954f0e3210a5794cfbff3ea2bcd164efc0 /src/usr/sbeio
parenta027c49b4ca5e60a17746a6eb8c6ca0d89bc6f3f (diff)
downloadtalos-hostboot-5192636a15d9fd36653952eaad5dac0974094f00.tar.gz
talos-hostboot-5192636a15d9fd36653952eaad5dac0974094f00.zip
Hook up FSP runtime support for sbe_retry_handler (hreset path)
In the sbe_retry_handler code we have two methods we can use to restart the sbe. They are restarting the cfam boot sequence (start_cbs HWP) and performing a hw reset on the PPE (hreset HWP). We use start_cbs if there are issues with initial power on of the slave proc's SBE because we will not lose any state info (fabric isn't up yet). During runtime we will want to use the hreset HWP to recover the SBE. Hreset is handy because it will not force a reboot of the entire proc chip, so the fabric can stay up while we reset the PPE in the SBE. This commit implements the code path for the hreset HWP in the sbe_retry_handler. In addition this commit enables calls to the sbe_retry_handler in rt_fwnotify's sbeAttemptRecovery function which handles PHYP requests to recover the SBE. (Also some small typos in related code fixed) Change-Id: I8f85c38a09e8d5ab80b2809e5665c77a54e35bc4 CQ: SW415675 RTC: 180242 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/56276 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: 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/sbeio')
-rw-r--r--src/usr/sbeio/common/common.mk5
-rw-r--r--src/usr/sbeio/common/sbe_retry_handler.C82
-rw-r--r--src/usr/sbeio/sbe_fifodd.C2
-rw-r--r--src/usr/sbeio/sbe_psudd.C2
4 files changed, 39 insertions, 52 deletions
diff --git a/src/usr/sbeio/common/common.mk b/src/usr/sbeio/common/common.mk
index 2163f81bb..b3d1154e9 100644
--- a/src/usr/sbeio/common/common.mk
+++ b/src/usr/sbeio/common/common.mk
@@ -25,8 +25,9 @@
#Common .mk files to include
include ${ROOTPATH}/procedure.rules.mk
-include ${ROOTPATH}/src/import/chips/p9/procedures/hwp/sbe/p9_get_sbe_msg_register.mk
-include ${ROOTPATH}/src/import/chips/p9/procedures/hwp/perv/p9_start_cbs.mk
+include ${PROCEDURES_PATH}/hwp/sbe/p9_get_sbe_msg_register.mk
+include ${PROCEDURES_PATH}/hwp/perv/p9_start_cbs.mk
+include ${PROCEDURES_PATH}/hwp/perv/p9_sbe_hreset.mk
#Common Include Paths
EXTRAINCDIR += ${PROCEDURES_PATH}/hwp/ffdc
diff --git a/src/usr/sbeio/common/sbe_retry_handler.C b/src/usr/sbeio/common/sbe_retry_handler.C
index 0af3eedb2..f68c587d3 100644
--- a/src/usr/sbeio/common/sbe_retry_handler.C
+++ b/src/usr/sbeio/common/sbe_retry_handler.C
@@ -49,6 +49,7 @@
#include <ipmi/ipmiwatchdog.H>
#include <p9_start_cbs.H>
+#include <p9_sbe_hreset.H>
#include <p9_get_sbe_msg_register.H>
#include <p9_perv_scom_addresses.H>
#include <sbe/sbe_update.H>
@@ -183,7 +184,6 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
else if(!this->iv_sbeRegister.sbeBooted)
{
SBE_TRACF("main_sbe_handler(): SBE reports it was never booted, calling p9_sbe_extract_rc will fail. Setting action to be RESTART_SBE");
- //Maybe commit log here saying initial start_cbs didnt run
this->iv_currentAction = P9_EXTRACT_SBE_RC::RESTART_SBE;
}
@@ -326,6 +326,9 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
// switching seeprom sides
}
+ // Both of the retry methods require a FAPI2 version of the target because they
+ // are fapi2 HWPs
+ const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> l_fapi2_proc_target (i_target);
if(this->iv_currentSideBootAttempts >= MAX_SIDE_BOOT_ATTEMPTS)
{
/*@
@@ -365,8 +368,6 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
else if(this->iv_sbeRestartMethod == SBE_RESTART_METHOD::START_CBS)
{
SBE_TRACF("Invoking p9_start_cbs HWP on processor %.8X", get_huid(i_target));
- const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>
- l_fapi2_proc_target (i_target);
FAPI_INVOKE_HWP(l_errl, p9_start_cbs,
l_fapi2_proc_target, true);
@@ -400,56 +401,41 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
// will work so we will break out of the retry loop
break;
}
- }else
+ }
+ // The only other type of reset method is HRESET
+ else
{
- //@todo RTC:180242 Right now we don't have the support
- // to perform an hreset, when we do remove this error
- // log and perform the hreset.
-
- //Increment attempt count for this side
this->iv_currentSideBootAttempts++;
- /*@
- * @errortype
- * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
- * @moduleid SBEIO_EXTRACT_RC_HANDLER
- * @reasoncode SBEIO_UNSUPPORTED_REQUEST
- * @userdata1 HUID of proc that had the SBE timeout
- * @userdata2 SBE failing code
- *
- * @devdesc SBE did not start, this function is looking at
- * the error to determine next course of action
- *
- * @custdesc The SBE did not start, we will attempt a reboot
- * if possible
- */
- l_errl = new ERRORLOG::ErrlEntry(
- ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- SBEIO_EXTRACT_RC_HANDLER,
- SBEIO_UNSUPPORTED_REQUEST,
- TARGETING::get_huid(i_target),
- this->iv_currentAction);
- l_errl->collectTrace( SBEIO_COMP_NAME, 256 );
-
- // Gard the proc, when SBE Retry fails
- l_errl->addHwCallout(i_target,
- HWAS::SRCI_PRIORITY_HIGH,
- HWAS::NO_DECONFIG,
- HWAS::GARD_Predictive);
-
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
+ // For now we only use HRESET during runtime, the bool param
+ // we are passing in is supposed to be FALSE if runtime, TRUE is ipl time
+ FAPI_INVOKE_HWP(l_errl, p9_sbe_hreset,
+ l_fapi2_proc_target, false);
+ if(l_errl)
{
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ SBE_TRACF("ERROR: call p9_sbe_hreset, PLID=0x%x",
+ l_errl->plid() );
+ l_errl->collectTrace( SBEIO_COMP_NAME, 256 );
- errlCommit(l_errl, ISTEP_COMP_ID);
+ // Gard the target, when SBE Retry fails
+ l_errl->addHwCallout(i_target,
+ HWAS::SRCI_PRIORITY_HIGH,
+ HWAS::NO_DECONFIG,
+ HWAS::GARD_Predictive);
- // If we got an errlog while attempting hreset
- // we will assume that no future retry actions
- // will work so we will exit
- break;
+ // Set the PLID of the error log to caller's PLID,
+ // if provided
+ if (iv_callerErrorLogPLID)
+ {
+ l_errl->plid(iv_callerErrorLogPLID);
+ }
+
+ errlCommit( l_errl, ISTEP_COMP_ID);
+ // If we got an errlog while attempting p9_sbe_hreset
+ // we will assume that no future retry actions
+ // will work so we will exit
+ break;
+ }
}
// We have performed the action, so make sure that ffdcSetAction is set back to 0
@@ -1193,7 +1179,7 @@ errlHndl_t SbeRetryHandler::switch_sbe_sides(TARGETING::Target * i_target)
DEVICE_SCOM_ADDRESS(PERV_SB_CS_SCOM) );
if( l_errl )
{
- SBE_TRACF( ERR_MRK"switch_sbe_sides: FSI device write "
+ SBE_TRACF( ERR_MRK"switch_sbe_sides: SCOM device write "
"PERV_SB_CS_SCOM (0x%.4X), proc target = %.8X, "
"RC=0x%X, PLID=0x%lX",
PERV_SB_CS_SCOM, // 0x50008
diff --git a/src/usr/sbeio/sbe_fifodd.C b/src/usr/sbeio/sbe_fifodd.C
index 66b533540..d82f038f2 100644
--- a/src/usr/sbeio/sbe_fifodd.C
+++ b/src/usr/sbeio/sbe_fifodd.C
@@ -662,7 +662,7 @@ errlHndl_t SbeFifo::waitDnFifoReady(TARGETING::Target * i_target,
// so the error logs it creates will be linked
uint32_t l_errPlid = errl->plid();
- // Commit errlor log now if this is a FSP system because
+ // Commit error log now if this is a FSP system because
// we will not return from retry handler
if(INITSERVICE::spBaseServicesEnabled())
{
diff --git a/src/usr/sbeio/sbe_psudd.C b/src/usr/sbeio/sbe_psudd.C
index d97f34d26..a4916d5c2 100644
--- a/src/usr/sbeio/sbe_psudd.C
+++ b/src/usr/sbeio/sbe_psudd.C
@@ -538,7 +538,7 @@ errlHndl_t SbePsu::pollForPsuComplete(TARGETING::Target * i_target,
// so the error logs it creates will be linked
uint32_t l_errPlid = l_errl->plid();
- // Commit errlor log now if this is a FSP system because
+ // Commit error log now if this is a FSP system because
// we will not return from retry handler
if(INITSERVICE::spBaseServicesEnabled())
{
OpenPOWER on IntegriCloud