summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/mdia
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/diag/mdia')
-rw-r--r--src/usr/diag/mdia/makefile7
-rw-r--r--src/usr/diag/mdia/mdia.C13
-rw-r--r--src/usr/diag/mdia/mdiafwd.H6
-rw-r--r--src/usr/diag/mdia/mdiasm.C79
-rw-r--r--src/usr/diag/mdia/mdiasm.H4
-rw-r--r--src/usr/diag/mdia/test/mdiatestmba.H113
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
OpenPOWER on IntegriCloud