summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@us.ibm.com>2013-03-25 08:45:41 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-04-03 14:42:53 -0500
commit114a2cdd8ab5f16cd092edadc3a4cdf544392ab3 (patch)
tree79238e836a478648dc51361944ced5834b3ca71b
parent37a2e17a5c84b9828a1edcafdbbf528b435c71d5 (diff)
downloadtalos-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.C65
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)
OpenPOWER on IntegriCloud