diff options
author | Brad Bishop <bradleyb@us.ibm.com> | 2013-03-25 08:45:41 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-04-03 14:42:53 -0500 |
commit | 114a2cdd8ab5f16cd092edadc3a4cdf544392ab3 (patch) | |
tree | 79238e836a478648dc51361944ced5834b3ca71b | |
parent | 37a2e17a5c84b9828a1edcafdbbf528b435c71d5 (diff) | |
download | talos-hostboot-114a2cdd8ab5f16cd092edadc3a4cdf544392ab3.tar.gz talos-hostboot-114a2cdd8ab5f16cd092edadc3a4cdf544392ab3.zip |
MDIA: Restore inits after random init, read.
Restore inits after random init, read.
Set start address after stop condition.
Attempt to stop running commands after PLL error.
Change-Id: If064d7570c001fa289ffc87660505ab768ba0079
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3714
Reviewed-by: Christopher T. Phan <cphan@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rw-r--r-- | src/usr/diag/mdia/mdiasm.C | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/usr/diag/mdia/mdiasm.C b/src/usr/diag/mdia/mdiasm.C index 6cd521812..80da8ac3a 100644 --- a/src/usr/diag/mdia/mdiasm.C +++ b/src/usr/diag/mdia/mdiasm.C @@ -149,6 +149,16 @@ void StateMachine::processCommandTimeout(const MonitorIDs & i_monitorIDs) errlCommit(err, MDIA_COMP_ID); } + fapirc = (*cit)->cleanupCmd(); + + err = fapiRcToErrl(fapirc); + + if(err) + { + MDIA_ERR("sm: mss_MaintCmd::cleanupCmd failed"); + errlCommit(err, MDIA_COMP_ID); + } + delete (*cit); } } @@ -526,6 +536,34 @@ errlHndl_t StateMachine::doMaintCommand(WorkFlowProperties & i_wfp) } startAddr.setDoubleWord(0, address); + startAddr.insert(static_cast<uint32_t>(0), 40, 24); // addr is 0:39 + + switch(workItem) + { + case START_RANDOM_PATTERN: + static_cast<mss_SuperFastRandomInit *>( + cmd)->setStartAddr(startAddr); + break; + case START_SCRUB: + static_cast<mss_SuperFastRead *>( + cmd)->setStartAddr(startAddr); + break; + case START_PATTERN_0: + case START_PATTERN_1: + case START_PATTERN_2: + case START_PATTERN_3: + case START_PATTERN_4: + case START_PATTERN_5: + case START_PATTERN_6: + case START_PATTERN_7: + static_cast<mss_SuperFastInit *>( + cmd)->setStartAddr(startAddr); + break; + default: + MDIA_ERR("sm: unrecognized maint command type %d:", + workItem); + break; + } } else @@ -648,6 +686,8 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event) bool resume = true, dispatched = false; mss_MaintCmd * cmd = NULL; + ReturnCode fapirc; + errlHndl_t err = NULL; mutex_lock(&iv_mutex); @@ -719,6 +759,17 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event) cmd = static_cast<mss_MaintCmd *>(wfp.data); wfp.data = NULL; + MDIA_FAST("sm: stopping command: %p", cmd); + + fapirc = cmd->stopCmd(); + err = fapiRcToErrl(fapirc); + + if(err) + { + MDIA_ERR("sm: mss_MaintCmd::stopCmd failed"); + errlCommit(err, MDIA_COMP_ID); + } + break; case RESET_TIMER: @@ -730,6 +781,20 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event) break; } + if(cmd) + { + // restore any init settings that + // may have been changed by the command + + fapirc = cmd->cleanupCmd(); + err = fapiRcToErrl(fapirc); + if(err) + { + MDIA_ERR("sm: mss_MaintCmd::cleanupCmd failed"); + errlCommit(err, MDIA_COMP_ID); + } + } + // schedule the next work item if(resume && !iv_shutdown) |