summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/diag')
-rw-r--r--src/usr/diag/mdia/mdiasm.C95
-rw-r--r--src/usr/diag/mdia/test/mdiatestsm.H40
2 files changed, 99 insertions, 36 deletions
diff --git a/src/usr/diag/mdia/mdiasm.C b/src/usr/diag/mdia/mdiasm.C
index 6c0d626fd..f272d27d4 100644
--- a/src/usr/diag/mdia/mdiasm.C
+++ b/src/usr/diag/mdia/mdiasm.C
@@ -1076,6 +1076,7 @@ CommandMonitor & StateMachine::getMonitor()
bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event)
{
+ MDIA_FAST("sm: processMaintCommandEvent");
enum
{
@@ -1088,9 +1089,7 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event)
uint64_t flags = 0;
-/* TODO RTC 145132
- mss_MaintCmd * cmd = NULL;
- ReturnCode fapirc;
+ TargetHandle_t target = NULL;
errlHndl_t err = NULL;
mutex_lock(&iv_mutex);
@@ -1126,10 +1125,11 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event)
getMonitor().removeMonitor(wfp.timer);
- cmd = static_cast<mss_MaintCmd *>(wfp.data);
+ target = getTarget(**wit);
+ TYPE trgtType = target->getAttr<ATTR_TYPE>();
- MDIA_FAST("sm: processing event for: %x, cmd: %p, type: %x",
- get_huid(getTarget(wfp)), cmd, i_event.type);
+ MDIA_FAST("sm: processing event for: %x, target: %x, type: %x",
+ get_huid(getTarget(wfp)), get_huid(target), i_event.type);
MaintCommandEventType eventType = i_event.type;
@@ -1145,8 +1145,8 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event)
& iv_globals.mfgPolicy)))
{
MDIA_FAST("sm: shutdown requested, overrding event "
- "for: %x, cmd: %p, type: %x, globals: %x",
- get_huid(getTarget(wfp)), cmd,
+ "for: %x, target: %p, type: %x, globals: %x",
+ get_huid(getTarget(wfp)), target,
i_event.type, iv_globals.mfgPolicy);
eventType = STOP_TESTING;
@@ -1206,34 +1206,63 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event)
break;
}
- if(cmd && (flags & STOP_CMD))
+ //target type is MBA
+ if(TYPE_MBA == trgtType)
{
- 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);
- }
+ //TODO RTC 155857
+ //mss_MaintCmd * cmd = static_cast<mss_MaintCmd *>(wfp.data);
+ //
+ //if(cmd && (flags & STOP_CMD))
+ //{
+ // MDIA_FAST("sm: stopping command: %p", target);
+
+ // fapi2::ReturnCode fapirc = cmd->stopCmd();
+ // err = fapi2::rcToErrl(fapirc);
+
+ // if (nullptr != err)
+ // {
+ // MDIA_ERR("sm: mss_MaintCmd::stopCmd failed");
+ // errlCommit(err, MDIA_COMP_ID);
+ // }
+ //}
+
+ //if(cmd && (flags & CLEANUP_CMD))
+ //{
+ // // restore any init settings that
+ // // may have been changed by the command
+
+ // fapi2::ReturnCode fapirc = cmd->cleanupCmd();
+ // err = fapi2::rcToErrl(fapirc);
+ // if(nullptr != err)
+ // {
+ // MDIA_ERR("sm: mss_MaintCmd::cleanupCmd failed");
+ // errlCommit(err, MDIA_COMP_ID);
+ // }
+ //}
+
+ //if(cmd && (flags & DELETE_CMD))
+ //{
+ // delete cmd;
+ //}
}
-
- if(cmd && (flags & CLEANUP_CMD))
+ //target type is MCBIST
+ else
{
- // restore any init settings that
- // may have been changed by the command
-
- fapirc = cmd->cleanupCmd();
- err = fapiRcToErrl(fapirc);
- if(err)
+ if(flags & STOP_CMD)
{
- MDIA_ERR("sm: mss_MaintCmd::cleanupCmd failed");
- errlCommit(err, MDIA_COMP_ID);
+ MDIA_FAST("sm: stopping command: %p", target);
+
+ fapi2::Target<fapi2::TARGET_TYPE_MCBIST> fapiMcbist(target);
+ fapi2::ReturnCode fapirc = memdiags::stop(fapiMcbist);
+ err = fapi2::rcToErrl(fapirc);
+
+ if(nullptr != err)
+ {
+ MDIA_ERR("sm: memdiags::stop failed");
+ errlCommit(err, MDIA_COMP_ID);
+ }
}
}
-
// schedule the next work item
if((flags & START_NEXT_CMD) && !iv_shutdown)
{
@@ -1246,12 +1275,6 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event)
mutex_unlock(&iv_mutex);
- if(cmd && (flags & DELETE_CMD))
- {
- delete cmd;
- }
-*/
-
return (flags & DISPATCHED);
}
diff --git a/src/usr/diag/mdia/test/mdiatestsm.H b/src/usr/diag/mdia/test/mdiatestsm.H
index 7a8716a2a..489a68dd8 100644
--- a/src/usr/diag/mdia/test/mdiatestsm.H
+++ b/src/usr/diag/mdia/test/mdiatestsm.H
@@ -591,6 +591,46 @@ class MdiaSmTest : public CxxTest::TestSuite
}
+ void testProcessMaintCommandEvent(void)
+ {
+ TS_TRACE(ENTER_MRK "testProcessMaintCommandEvent");
+
+ StateMachine sm;
+ WorkFlowAssocMap list;
+ TargetHandleList targets;
+
+ getTargets(2, targets);
+
+ list[targets[0]].push_back(DUMMY_SYNC_PHASE);
+ list[targets[1]].push_back(DUMMY_SYNC_PHASE);
+
+ sm.setup(list);
+
+ TargetHandleList mcbistList;
+ getAllChiplets(mcbistList, TYPE_MCBIST);
+ TargetHandle_t mcbist = mcbistList[0];
+
+ MaintCommandEvent event;
+ event.target = mcbist;
+ event.type = COMMAND_COMPLETE;
+ bool rc = false;
+
+ rc = sm.processMaintCommandEvent(event);
+ if (true == rc)
+ {
+ TS_TRACE("testProcessMaintCommandEvent: "
+ "a work item was dispatched");
+ }
+ else
+ {
+ TS_TRACE("testProcessMaintCommandEvent: "
+ "a work item was not dispatched");
+
+ }
+
+ TS_TRACE(EXIT_MRK "testProcessMaintCommandEvent");
+ }
+
void testSmRun(void)
{
using namespace MDIA;
OpenPOWER on IntegriCloud