summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorElizabeth Liner <eliner@us.ibm.com>2017-12-14 12:26:42 -0600
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2017-12-22 15:31:10 -0500
commit6b43bcadea886d324aa94971130f3567fbeb60b1 (patch)
tree69ba58faef995900636e61b232c1d06e7760b402 /src
parent2e5deae5db69e175c2e4eb06f2afa4a48d00c66a (diff)
downloadtalos-hostboot-6b43bcadea886d324aa94971130f3567fbeb60b1.tar.gz
talos-hostboot-6b43bcadea886d324aa94971130f3567fbeb60b1.zip
Adding advanced restart logic after detecting vital attentions
This code sets up and calls the SbeRetryHandler class to attempt an SBE restart. Additionally, we need more than one way to restart the SBE: p9_start_cbs and hreset. This commit sets up the structure to use one of the two methods while waiting on hreset to be available. Change-Id: I17dfb4047268efa84e388391698b668cec2e13e4 RTC:180243 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/50953 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: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/sbeio/sbe_retry_handler.H22
-rw-r--r--src/usr/sbeio/sbe_attn.C12
-rw-r--r--src/usr/sbeio/sbe_retry_handler.C30
3 files changed, 52 insertions, 12 deletions
diff --git a/src/include/usr/sbeio/sbe_retry_handler.H b/src/include/usr/sbeio/sbe_retry_handler.H
index 90b74f1bb..baa2a1b6c 100644
--- a/src/include/usr/sbeio/sbe_retry_handler.H
+++ b/src/include/usr/sbeio/sbe_retry_handler.H
@@ -61,6 +61,11 @@ class SbeRetryHandler
// the action the SBE thinks we should attempt.
};
+ enum SBE_RESTART_METHOD
+ {
+ START_CBS = 0, // Use p9_start_cbs to restart the SBE
+ HRESET = 1, // Use Hreset to restart the SBE
+ };
/**
* @brief Constructor
*/
@@ -106,6 +111,14 @@ class SbeRetryHandler
{
return this->iv_currentSBEState;
}
+ inline SBE_RESTART_METHOD getSbeRestartMethod()
+ {
+ return this->iv_sbeRestartMethod;
+ }
+ inline void setSbeRestartMethod(SBE_RESTART_METHOD i_method)
+ {
+ this->iv_sbeRestartMethod = i_method;
+ }
inline SBE_MODE_OF_OPERATION getSBEMode()
{
@@ -250,6 +263,15 @@ class SbeRetryHandler
* SBE_MODE_OF_OPERATION enum
*/
SBE_MODE_OF_OPERATION iv_sbeMode;
+
+ /*
+ * @brief If true, use the HWP p9_start_cbs to restart the SBE. This
+ * HWP kills the proc we're on, so there are some situations
+ * where we want to use hreset instead. Each choice is noted
+ * in the SBE_RESTART_METHOD enum
+ */
+ SBE_RESTART_METHOD iv_sbeRestartMethod;
+
}; // End of class SbeRetryHandler
} // End of namespace SBEIO
diff --git a/src/usr/sbeio/sbe_attn.C b/src/usr/sbeio/sbe_attn.C
index 502f8d0d9..248fd8d7c 100644
--- a/src/usr/sbeio/sbe_attn.C
+++ b/src/usr/sbeio/sbe_attn.C
@@ -35,6 +35,7 @@
#include <fapi2/plat_hwp_invoker.H>
#include <p9_extract_sbe_rc.H>
#include <sbeio/sbeioreasoncodes.H>
+#include <sbeio/sbe_retry_handler.H>
extern trace_desc_t* g_trac_sbeio;
@@ -57,7 +58,16 @@ namespace SBEIO
l_sbePlid);
// @todo - RTC:180242 - Restart SBE
- // @todo - RTC:180243 - Advanced error handling
+
+ SbeRetryHandler l_sbeObj = SbeRetryHandler(
+ SbeRetryHandler::SBE_MODE_OF_OPERATION::ATTEMPT_REBOOT);
+ // @todo - RTC:180242. Once the hreset method is finalized,
+ // we can call the sbe handler with that method
+ //l_sbeObj.setSbeRestartMethod(SbeRetryHandler::
+ // SBE_RESTART_METHOD::HRESET);
+
+ l_sbeObj.main_sbe_handler(i_procTarg);
+
// @todo - RTC:180244 - Disable the OCC
// @todo - RTC:180245 - Inform OPAL
diff --git a/src/usr/sbeio/sbe_retry_handler.C b/src/usr/sbeio/sbe_retry_handler.C
index 41700f343..b9fa1c50e 100644
--- a/src/usr/sbeio/sbe_retry_handler.C
+++ b/src/usr/sbeio/sbe_retry_handler.C
@@ -85,6 +85,7 @@ SbeRetryHandler::SbeRetryHandler(SBE_MODE_OF_OPERATION i_sbeMode)
, iv_switchSidesCount(0)
, iv_currentSBEState(SBE_REG_RETURN::SBE_FAILED_TO_BOOT)
, iv_retriggeredMain(false)
+, iv_sbeRestartMethod(SBE_RESTART_METHOD::START_CBS)
{
SBE_TRACF(ENTER_MRK "SbeRetryHandler::SbeRetryHandler()");
@@ -211,19 +212,26 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
}
}
- SBE_TRACF("Invoking p9_start_cbs HWP");
- 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);
- if(l_errl)
+ // Attempt SBE restart
+ if(this->iv_sbeRestartMethod == SBE_RESTART_METHOD::START_CBS)
{
- SBE_TRACF("ERROR: call p9_start_cbs, PLID=0x%x",
- l_errl->plid() );
- l_errl->collectTrace( "ISTEPS_TRACE", 256 );
+ SBE_TRACF("Invoking p9_start_cbs HWP");
+ const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>
+ l_fapi2_proc_target (i_target);
- errlCommit( l_errl, ISTEP_COMP_ID);
+ FAPI_INVOKE_HWP(l_errl, p9_start_cbs,
+ l_fapi2_proc_target, true);
+ if(l_errl)
+ {
+ SBE_TRACF("ERROR: call p9_start_cbs, PLID=0x%x",
+ l_errl->plid() );
+ l_errl->collectTrace( "ISTEPS_TRACE", 256 );
+
+ errlCommit( l_errl, ISTEP_COMP_ID);
+ }
+ }else
+ {
+ //@todo - RTC:180242 - Restart SBE
}
// Get the sbe register
OpenPOWER on IntegriCloud