summaryrefslogtreecommitdiffstats
path: root/src/usr/initservice
diff options
context:
space:
mode:
authorStephen Cprek <smcprek@us.ibm.com>2013-12-17 15:46:21 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-01-16 11:19:10 -0600
commit63f42d36ee3f78e59d0acb19ccdcf1766f0050bd (patch)
tree46c2f3096d795bf28a27979e551f27b1dc7b5e39 /src/usr/initservice
parent542d9f0c4bb7e1b37a15823fa0b642e4f3bf7410 (diff)
downloadtalos-hostboot-63f42d36ee3f78e59d0acb19ccdcf1766f0050bd.tar.gz
talos-hostboot-63f42d36ee3f78e59d0acb19ccdcf1766f0050bd.zip
Perform Reconfig Loop on Bad DQ set
Change-Id: I43be1bbab5dca2be6f70d47b747b6b418820bc2b RTC: 92037 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7773 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/initservice')
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.C38
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.H11
2 files changed, 26 insertions, 23 deletions
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C
index cf0718126..90007d6fe 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.C
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C
@@ -257,7 +257,7 @@ errlHndl_t IStepDispatcher::executeAllISteps()
errlHndl_t err = NULL;
uint32_t istep = 0;
uint32_t substep = 0;
- bool l_deconfigs = false;
+ bool l_doReconfig = false;
uint32_t numReconfigs = 0;
const uint32_t MAX_NUM_RECONFIG_ATTEMPTS = 30;
@@ -268,10 +268,10 @@ errlHndl_t IStepDispatcher::executeAllISteps()
substep = 0;
while (substep < g_isteps[istep].numitems)
{
- err = doIstep(istep, substep, l_deconfigs);
+ err = doIstep(istep, substep, l_doReconfig);
- // there were HW deconfigures that happened during the istep
- if (l_deconfigs)
+ // Something occurred that requires a reconfig loop
+ if (l_doReconfig)
{
TRACFCOMP(g_trac_initsvc,
ERR_MRK"executeAllISteps: Deconfigure(s) during IStep %d:%d",
@@ -402,10 +402,10 @@ errlHndl_t IStepDispatcher::executeAllISteps()
// ----------------------------------------------------------------------------
errlHndl_t IStepDispatcher::doIstep(uint32_t i_istep,
uint32_t i_substep,
- bool & o_deconfigs)
+ bool & o_doReconfig)
{
errlHndl_t err = NULL;
- o_deconfigs = false;
+ o_doReconfig = false;
// Get the Task Info for this step
const TaskInfo * theStep = findTaskInfo(i_istep, i_substep);
@@ -463,7 +463,10 @@ errlHndl_t IStepDispatcher::doIstep(uint32_t i_istep,
iv_istepModulesLoaded = i_istep;
}
- uint32_t preDeconfigs = HWAS::theDeconfigGard().getDeconfigureStatus();
+ // Zero ATTR_RECONFIGURE_LOOP
+ TARGETING::Target* l_pTopLevel = NULL;
+ TARGETING::targetService().getTopLevelTarget(l_pTopLevel);
+ l_pTopLevel->setAttr<TARGETING::ATTR_RECONFIGURE_LOOP>(0);
err = InitService::getTheInstance().executeFn(theStep, NULL);
@@ -526,13 +529,13 @@ errlHndl_t IStepDispatcher::doIstep(uint32_t i_istep,
HWAS::theDeconfigGard().processDeferredDeconfig();
}
- uint32_t postDeconfigs = HWAS::theDeconfigGard().getDeconfigureStatus();
-
- if (postDeconfigs != preDeconfigs)
+ // Check if ATTR_RECONFIGURE_LOOP is non-zero
+ TARGETING::ATTR_RECONFIGURE_LOOP_type l_reconfigAttr = l_pTopLevel->getAttr<TARGETING::ATTR_RECONFIGURE_LOOP>();
+ if (l_reconfigAttr)
{
- TRACFCOMP(g_trac_initsvc, ERR_MRK"doIstep: Deconfigs happened, pre:%d, post:%d",
- preDeconfigs, postDeconfigs);
- o_deconfigs = true;
+ TRACFCOMP(g_trac_initsvc, ERR_MRK"doIstep: Reconfigure needed, ATTR_RECONFIGURE_LOOP = %d",
+ l_reconfigAttr);
+ o_doReconfig = true;
}
TRACFCOMP(g_trac_initsvc, EXIT_MRK"doIstep: step %d, substep %d",
@@ -1081,7 +1084,7 @@ void IStepDispatcher::iStepBreakPoint(uint32_t i_info)
void IStepDispatcher::handleIStepRequestMsg(msg_t * & io_pMsg)
{
errlHndl_t err = NULL;
- bool l_deconfigs = false;
+ bool l_doReconfig = false;
// find the step/substep. The step is in the top 32bits, the substep is in
// the bottom 32bits and is a byte
@@ -1101,10 +1104,11 @@ void IStepDispatcher::handleIStepRequestMsg(msg_t * & io_pMsg)
io_pMsg = NULL;
mutex_unlock(&iv_mutex);
- err = doIstep (istep, substep, l_deconfigs);
+ err = doIstep (istep, substep, l_doReconfig);
- // If there was no IStep error, but there were deconfig(s)
- if ((!err) && l_deconfigs)
+ // If there was no IStep error, but something happened that requires a
+ // reconfigure
+ if ((!err) && l_doReconfig)
{
uint8_t newIstep = 0;
uint8_t newSubstep = 0;
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.H b/src/usr/initservice/istepdispatcher/istepdispatcher.H
index c3382fe3b..2cd8000da 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.H
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.H
@@ -193,15 +193,14 @@ private:
/**
* @brief Executes the given istep
*
- * @param[in] i_istep The istep to be executed.
- * @param[in] i_substep The substep to be executed.
- * @param[out] o_deconfigs If error returned then true if HW was
- * deconfigured during the istep
- * @return errlHndl_t
+ * @param[in] i_istep The istep to be executed.
+ * @param[in] i_substep The substep to be executed.
+ * @param[out] o_doReconfig True if something ocurred that requires a
+ * reconfigure, false otherwise
*/
errlHndl_t doIstep(uint32_t i_istep,
uint32_t i_substep,
- bool & o_deconfigs);
+ bool & o_doReconfig);
/**
* @brief Handles all messages from the FSP or SPless user console
OpenPOWER on IntegriCloud