diff options
Diffstat (limited to 'src/usr/diag/mdia')
-rw-r--r-- | src/usr/diag/mdia/makefile | 7 | ||||
-rw-r--r-- | src/usr/diag/mdia/mdia.C | 13 | ||||
-rw-r--r-- | src/usr/diag/mdia/mdiafwd.H | 6 | ||||
-rw-r--r-- | src/usr/diag/mdia/mdiasm.C | 79 | ||||
-rw-r--r-- | src/usr/diag/mdia/mdiasm.H | 4 | ||||
-rw-r--r-- | src/usr/diag/mdia/test/mdiatestmba.H | 113 |
6 files changed, 138 insertions, 84 deletions
diff --git a/src/usr/diag/mdia/makefile b/src/usr/diag/mdia/makefile index fff17dd96..c6279ee5c 100644 --- a/src/usr/diag/mdia/makefile +++ b/src/usr/diag/mdia/makefile @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2012,2017 +# Contributors Listed Below - COPYRIGHT 2012,2019 # [+] International Business Machines Corp. # # @@ -50,6 +50,11 @@ EXTRAINCDIR += ${ROOTPATH}/src/import/chips/centaur/common/include EXTRAINCDIR += ${ROOTPATH}/src/import/chips/centaur/procedures/hwp/memory EXTRAINCDIR += ${ROOTPATH}/src/import/chips/centaur/procedures/hwp/memory/lib/shared +EXTRAINCDIR += ${ROOTPATH}/src/import/generic/memory/lib/prd/ +EXTRAINCDIR += ${ROOTPATH}/src/import/generic/memory/lib/utils/mcbist/ +EXTRAINCDIR += ${ROOTPATH}/src/import/chips/ocmb/explorer/common/include/ +EXTRAINCDIR += ${ROOTPATH}/src/import/chips/ocmb/explorer/procedures/hwp/memory/ + MODULE = mdia OBJS += mdiamonitor.o diff --git a/src/usr/diag/mdia/mdia.C b/src/usr/diag/mdia/mdia.C index a13f28e59..f75ca1b60 100644 --- a/src/usr/diag/mdia/mdia.C +++ b/src/usr/diag/mdia/mdia.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2018 */ +/* Contributors Listed Below - COPYRIGHT 2012,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -115,14 +115,16 @@ errlHndl_t runStep(const TargetHandleList & i_targetList) // ensure threads and pools are shutdown when finished - doStepCleanup(globals); + if(nullptr == err) + { + err = doStepCleanup(globals); + } // If this step completes without the need for a reconfig due to an RCD // parity error, clear all RCD parity error counters. ATTR_RECONFIGURE_LOOP_type attr = top->getAttr<ATTR_RECONFIGURE_LOOP>(); if ( 0 == (attr & RECONFIGURE_LOOP_RCD_PARITY_ERROR) ) { - //TODO RTC 201293 - may need to update this for axone as well TargetHandleList trgtList; getAllChiplets( trgtList, TYPE_MCA ); for ( auto & trgt : trgtList ) { @@ -140,13 +142,14 @@ errlHndl_t runStep(const TargetHandleList & i_targetList) } -void doStepCleanup(const Globals & i_globals) +errlHndl_t doStepCleanup(const Globals & i_globals) { // stop the state machine - Singleton<StateMachine>::instance().shutdown(); + errlHndl_t l_errl = Singleton<StateMachine>::instance().shutdown(); // TODO ... stop the command monitor + return l_errl; } errlHndl_t processEvent(MaintCommandEvent & i_event) diff --git a/src/usr/diag/mdia/mdiafwd.H b/src/usr/diag/mdia/mdiafwd.H index e3395781e..eae069588 100644 --- a/src/usr/diag/mdia/mdiafwd.H +++ b/src/usr/diag/mdia/mdiafwd.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2018 */ +/* Contributors Listed Below - COPYRIGHT 2012,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -211,8 +211,10 @@ errlHndl_t getWorkFlow( * @brief doStepCleanup shut down threads and pools on step exit * * @param[in] i_globals contains objects to be cleaned up + * + * @return nullptr on success; non-nullptr on error */ -void doStepCleanup(const Globals & i_globals); +errlHndl_t doStepCleanup(const Globals & i_globals); /** * @brief check if hw state has been changed for an mba diff --git a/src/usr/diag/mdia/mdiasm.C b/src/usr/diag/mdia/mdiasm.C index bb1c123cf..ba00de6b0 100644 --- a/src/usr/diag/mdia/mdiasm.C +++ b/src/usr/diag/mdia/mdiasm.C @@ -43,12 +43,12 @@ #include <errl/errludlogregister.H> #include <initservice/istepdispatcherif.H> #include <ipmi/ipmiwatchdog.H> -#include <config.h> #include <initservice/initserviceif.H> #include <sys/time.h> #include <p9c_mss_maint_cmds.H> #include <dimmBadDqBitmapFuncs.H> #include <sys/misc.h> +#include <hwp_wrappers.H> using namespace TARGETING; using namespace ERRORLOG; @@ -632,16 +632,17 @@ void StateMachine::processCommandTimeout(const MonitorIDs & i_monitorIDs) // target type is MCBIST else if ( TYPE_MCBIST == trgtType ) { + #ifndef CONFIG_AXONE fapi2::Target<fapi2::TARGET_TYPE_MCBIST> fapiMcbist(target); - FAPI_INVOKE_HWP( err, mss::memdiags::stop, fapiMcbist ); + FAPI_INVOKE_HWP( err, nim_stop, fapiMcbist ); if ( nullptr != err ) { - MDIA_ERR("sm: mss::memdiags::stop failed"); + MDIA_ERR("sm: nim_stop failed"); errlCommit(err, MDIA_COMP_ID); } - //mss::memdiags::stop will set the command complete attention so + //nim_stop will set the command complete attention so //we need to clear those bitMask = ~bitMask; @@ -654,22 +655,23 @@ void StateMachine::processCommandTimeout(const MonitorIDs & i_monitorIDs) "0x%08X", firAddr, get_huid(target) ); errlCommit(err, MDIA_COMP_ID); } + #endif } // target type is OCMB_CHIP else if ( TYPE_OCMB_CHIP == trgtType ) { - /* TODO RTC 201293 uncomment once we have hwp support + #ifdef CONFIG_AXONE fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP> fapiOcmb(target); - FAPI_INVOKE_HWP( err, mss::memdiags::stop, fapiOcmb ); + FAPI_INVOKE_HWP( err, exp_stop, fapiOcmb ); if ( nullptr != err ) { - MDIA_ERR("sm: mss::memdiags::stop failed"); + MDIA_ERR("sm: exp_stop failed"); errlCommit(err, MDIA_COMP_ID); } - // mss::memdiags::stop will set the command complete + // exp_stop will set the command complete // attention so we need to clear those bitMask = ~bitMask; @@ -682,7 +684,7 @@ void StateMachine::processCommandTimeout(const MonitorIDs & i_monitorIDs) "0x%08X", firAddr, get_huid(target) ); errlCommit(err, MDIA_COMP_ID); } - */ + #endif } // Assert if unsupported type else @@ -782,7 +784,15 @@ void StateMachine::setup(const WorkFlowAssocMap & i_list) p->timeoutCnt = 0; p->data = NULL; - p->chipUnit = it->first->getAttr<ATTR_CHIP_UNIT>(); + if ( TYPE_OCMB_CHIP == it->first->getAttr<ATTR_TYPE>() ) + { + // There is no chip unit attribute for OCMBs, so just use 0 + p->chipUnit = 0; + } + else + { + p->chipUnit = it->first->getAttr<ATTR_CHIP_UNIT>(); + } iv_workFlowProperties.push_back(p); } @@ -1242,14 +1252,15 @@ errlHndl_t StateMachine::doMaintCommand(WorkFlowProperties & i_wfp) //target type is MCBIST else if (TYPE_MCBIST == trgtType) { + #ifndef CONFIG_AXONE fapi2::Target<fapi2::TARGET_TYPE_MCBIST> fapiMcbist(target); - mss::mcbist::stop_conditions stopCond; + mss::mcbist::stop_conditions<mss::mc_type::NIMBUS> stopCond; switch(workItem) { case START_RANDOM_PATTERN: - FAPI_INVOKE_HWP( err, mss::memdiags::sf_init, fapiMcbist, + FAPI_INVOKE_HWP( err, nim_sf_init, fapiMcbist, mss::mcbist::PATTERN_RANDOM ); MDIA_FAST("sm: random init %p on: %x", fapiMcbist, get_huid(target)); @@ -1270,7 +1281,7 @@ errlHndl_t StateMachine::doMaintCommand(WorkFlowProperties & i_wfp) stopCond.set_pause_on_nce_hard(mss::ON); } - FAPI_INVOKE_HWP( err, mss::memdiags::sf_read, fapiMcbist, + FAPI_INVOKE_HWP( err, nim_sf_read, fapiMcbist, stopCond ); MDIA_FAST("sm: scrub %p on: %x", fapiMcbist, get_huid(target)); @@ -1285,7 +1296,7 @@ errlHndl_t StateMachine::doMaintCommand(WorkFlowProperties & i_wfp) case START_PATTERN_6: case START_PATTERN_7: - FAPI_INVOKE_HWP( err, mss::memdiags::sf_init, fapiMcbist, + FAPI_INVOKE_HWP( err, nim_sf_init, fapiMcbist, workItem ); MDIA_FAST("sm: init %p on: %x", fapiMcbist, get_huid(target)); @@ -1301,19 +1312,20 @@ errlHndl_t StateMachine::doMaintCommand(WorkFlowProperties & i_wfp) MDIA_FAST("sm: Running Maint Cmd failed"); i_wfp.data = nullptr; } + #endif } // target type is OCMB_CHIP else if ( TYPE_OCMB_CHIP == trgtType ) { - /* TODO RTC 201293 - uncomment with hwp support + #ifdef CONFIG_AXONE fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP> fapiOcmb(target); - mss::mcbist::stop_conditions stopCond; + mss::mcbist::stop_conditions<mss::mc_type::EXPLORER> stopCond; switch(workItem) { case START_RANDOM_PATTERN: - FAPI_INVOKE_HWP( err, mss::memdiags::sf_init, fapiOcmb, + FAPI_INVOKE_HWP( err, exp_sf_init, fapiOcmb, mss::mcbist::PATTERN_RANDOM ); MDIA_FAST("sm: random init %p on: %x", fapiOcmb, get_huid(target)); @@ -1334,7 +1346,7 @@ errlHndl_t StateMachine::doMaintCommand(WorkFlowProperties & i_wfp) stopCond.set_pause_on_nce_hard(mss::ON); } - FAPI_INVOKE_HWP( err, mss::memdiags::sf_read, fapiOcmb, + FAPI_INVOKE_HWP( err, exp_sf_read, fapiOcmb, stopCond ); MDIA_FAST( "sm: scrub %p on: %x", fapiOcmb, get_huid(target) ); @@ -1349,7 +1361,7 @@ errlHndl_t StateMachine::doMaintCommand(WorkFlowProperties & i_wfp) case START_PATTERN_6: case START_PATTERN_7: - FAPI_INVOKE_HWP( err, mss::memdiags::sf_init, fapiOcmb, + FAPI_INVOKE_HWP( err, exp_sf_init, fapiOcmb, workItem ); MDIA_FAST( "sm: init %p on: %x", fapiOcmb, get_huid(target) ); @@ -1365,7 +1377,7 @@ errlHndl_t StateMachine::doMaintCommand(WorkFlowProperties & i_wfp) MDIA_FAST("sm: Running Maint Cmd failed"); i_wfp.data = nullptr; } - */ + #endif } else { @@ -1571,37 +1583,39 @@ bool StateMachine::processMaintCommandEvent(const MaintCommandEvent & i_event) //target type is MCBIST else if ( TYPE_MCBIST == trgtType ) { + #ifndef CONFIG_AXONE if(flags & STOP_CMD) { MDIA_FAST("sm: stopping command: %p", target); fapi2::Target<fapi2::TARGET_TYPE_MCBIST> fapiMcbist(target); - FAPI_INVOKE_HWP( err, mss::memdiags::stop, fapiMcbist ); + FAPI_INVOKE_HWP( err, nim_stop, fapiMcbist ); if(nullptr != err) { - MDIA_ERR("sm: mss::memdiags::stop failed"); + MDIA_ERR("sm: nim_stop failed"); errlCommit(err, MDIA_COMP_ID); } } + #endif } // target type is OCMB_CHIP else if ( TYPE_OCMB_CHIP == trgtType ) { + #ifdef CONFIG_AXONE if(flags & STOP_CMD) { MDIA_FAST("sm: stopping command: %p", target); - /* TODO RTC 201293 - reenable with hwp support fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP> fapiOcmb(target); - FAPI_INVOKE_HWP( err, mss::memdiags::stop, fapiOcmb ); + FAPI_INVOKE_HWP( err, exp_stop, fapiOcmb ); if(nullptr != err) { - MDIA_ERR("sm: mss::memdiags::stop failed"); + MDIA_ERR("sm: exp_stop failed"); errlCommit(err, MDIA_COMP_ID); } - */ } + #endif } else { @@ -1665,10 +1679,12 @@ void StateMachine::reset() mutex_unlock(&iv_mutex); } -void StateMachine::shutdown() +errlHndl_t StateMachine::shutdown() { mutex_lock(&iv_mutex); + errlHndl_t l_errl = nullptr; + Util::ThreadPool<WorkItem> * tp = iv_tp; CommandMonitor * monitor = iv_monitor; @@ -1684,7 +1700,7 @@ void StateMachine::shutdown() if(tp) { MDIA_FAST("Stopping threadPool..."); - tp->shutdown(); + l_errl = tp->shutdown(); delete tp; } @@ -1696,11 +1712,16 @@ void StateMachine::shutdown() } MDIA_FAST("sm: ...shutdown complete"); + return l_errl; } StateMachine::~StateMachine() { - shutdown(); + errlHndl_t l_errl = shutdown(); + if(l_errl) + { + errlCommit(l_errl, MDIA_COMP_ID); + } sync_cond_destroy(&iv_cond); mutex_destroy(&iv_mutex); diff --git a/src/usr/diag/mdia/mdiasm.H b/src/usr/diag/mdia/mdiasm.H index 924af567a..55cc8ed74 100644 --- a/src/usr/diag/mdia/mdiasm.H +++ b/src/usr/diag/mdia/mdiasm.H @@ -106,8 +106,10 @@ class StateMachine /** * @brief shutdown state machine + * + * @retval nullptr on success; non-nullptr on error */ - void shutdown(); + errlHndl_t shutdown(); /** * @brief processMaintCommandEvent process maint command event from prd diff --git a/src/usr/diag/mdia/test/mdiatestmba.H b/src/usr/diag/mdia/test/mdiatestmba.H index bca85c11d..97360c80a 100644 --- a/src/usr/diag/mdia/test/mdiatestmba.H +++ b/src/usr/diag/mdia/test/mdiatestmba.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2016 */ +/* Contributors Listed Below - COPYRIGHT 2012,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -47,33 +47,43 @@ class MdiaMbaTest : public CxxTest::TestSuite using namespace MDIA; using namespace TARGETING; - TS_TRACE(ENTER_MRK "testGetDiagnosticMode"); + TS_TRACE( ENTER_MRK "testGetDiagnosticMode" ); - TargetHandleList mbaList; - getAllChiplets(mbaList, TYPE_MBA); + TargetHandleList list; + fapi2::TargetType type = getMdiaTargetType(); + if ( fapi2::TARGET_TYPE_MBA_CHIPLET == type ) + { + TARGETING::getAllChiplets( list, TYPE_MBA ); + } + else if ( fapi2::TARGET_TYPE_MCBIST == type ) + { + TARGETING::getAllChiplets( list, TYPE_MCBIST ); + } + else if ( fapi2::TARGET_TYPE_OCMB_CHIP == type ) + { + TARGETING::getAllChiplets( list, TYPE_OCMB_CHIP ); + } - if( !mbaList.empty() ) + if( !list.empty() ) { DiagMode mode; Globals globals; - TargetHandle_t mba = mbaList[0]; + TargetHandle_t trgt = list[0]; - errlHndl_t err = getDiagnosticMode( - globals, mba, mode); + errlHndl_t err = getDiagnosticMode( globals, trgt, mode ); if(err) { - TS_FAIL("getDiagnosticMode failed " - "unexpectedly"); + TS_FAIL( "getDiagnosticMode failed unexpectedly" ); } if(mode != ONE_PATTERN) { - TS_FAIL("mode != ONE_PATTERN"); + TS_FAIL( "mode != ONE_PATTERN" ); } } - TS_TRACE(EXIT_MRK "testGetDiagnosticMode"); + TS_TRACE( EXIT_MRK "testGetDiagnosticMode" ); } void testGetWorkFlow(void) @@ -81,63 +91,74 @@ class MdiaMbaTest : public CxxTest::TestSuite using namespace MDIA; using namespace TARGETING; - TS_TRACE(ENTER_MRK "testGetWorkFlow"); + TS_TRACE( ENTER_MRK "testGetWorkFlow" ); Globals globals; - TargetHandle_t mba = 0; + TargetHandle_t trgt = 0; DiagMode mode; errlHndl_t err = NULL; - TargetHandleList mbaList; - getAllChiplets(mbaList, TYPE_MBA); - if( !mbaList.empty() ) + TargetHandleList list; + fapi2::TargetType type = getMdiaTargetType(); + if ( fapi2::TARGET_TYPE_MBA_CHIPLET == type ) { - mba = mbaList[0]; - err = getDiagnosticMode( - globals, mba, mode); + TARGETING::getAllChiplets( list, TYPE_MBA ); + } + else if ( fapi2::TARGET_TYPE_MCBIST == type ) + { + TARGETING::getAllChiplets( list, TYPE_MCBIST ); + } + else if ( fapi2::TARGET_TYPE_OCMB_CHIP == type ) + { + TARGETING::getAllChiplets( list, TYPE_OCMB_CHIP ); + } - if(err) + if( !list.empty() ) + { + trgt = list[0]; + err = getDiagnosticMode( globals, trgt, mode ); + + if( err ) { - TS_FAIL("getDiagnosticMode " - "failed unexpectedly"); + TS_FAIL( "getDiagnosticMode failed unexpectedly" ); } - if(mode != ONE_PATTERN) + if( mode != ONE_PATTERN ) { - TS_FAIL("mode != ONE_PATTERN"); + TS_FAIL( "mode != ONE_PATTERN" ); } - } - WorkFlow wf, expected; + WorkFlow wf, expected; - expected.push_back(RESTORE_DRAM_REPAIRS); - expected.push_back(START_PATTERN_0); - expected.push_back(START_SCRUB); - expected.push_back(CLEAR_HW_CHANGED_STATE); + expected.push_back( RESTORE_DRAM_REPAIRS ); + expected.push_back( START_PATTERN_0 ); + expected.push_back( START_SCRUB ); + expected.push_back( CLEAR_HW_CHANGED_STATE ); - err = getWorkFlow(mode, wf, globals); + err = getWorkFlow( mode, wf, globals ); - if(err) - { - TS_FAIL("getWorkFlow failed unexpectedly"); - } + if( err ) + { + TS_FAIL( "getWorkFlow failed unexpectedly" ); + } - if(wf.size() != expected.size()) - { - TS_FAIL("incorrect workflow size for init only mode"); - } + if( wf.size() != expected.size() ) + { + TS_FAIL( "incorrect workflow size for init only mode" ); + } - int64_t index = wf.size(); + int64_t index = wf.size(); - while(index-- != 0) - { - if(wf[index] != expected[index]) + while( index-- != 0 ) { - TS_FAIL("workflow entry incorrect or out of order"); + if( wf[index] != expected[index] ) + { + TS_FAIL( "workflow entry incorrect or out of order" ); + } } } - TS_TRACE(EXIT_MRK "testGetWorkFlow"); + TS_TRACE( EXIT_MRK "testGetWorkFlow" ); } }; #endif |