diff options
author | Stephen Cprek <smcprek@us.ibm.com> | 2013-12-17 15:46:21 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-16 11:19:10 -0600 |
commit | 63f42d36ee3f78e59d0acb19ccdcf1766f0050bd (patch) | |
tree | 46c2f3096d795bf28a27979e551f27b1dc7b5e39 /src/usr/initservice | |
parent | 542d9f0c4bb7e1b37a15823fa0b642e4f3bf7410 (diff) | |
download | talos-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.C | 38 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/istepdispatcher.H | 11 |
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 |