diff options
Diffstat (limited to 'src/usr/diag')
-rw-r--r-- | src/usr/diag/mdia/mdiasm.C | 95 | ||||
-rw-r--r-- | src/usr/diag/mdia/test/mdiatestsm.H | 40 |
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; |