summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarty Gloff <mgloff@us.ibm.com>2018-04-23 12:01:45 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-05-15 18:08:42 -0400
commitd7355b73ce6b9b6b2a8634a4f349d3ca2c25104c (patch)
tree20d045a74925c387f773fe39896270e36f48faee
parenta5982dd2d6a9e5169b9563e89b45f09d487b7856 (diff)
downloadtalos-hostboot-d7355b73ce6b9b6b2a8634a4f349d3ca2c25104c.tar.gz
talos-hostboot-d7355b73ce6b9b6b2a8634a4f349d3ca2c25104c.zip
Improve resource recovery path to handle memory plugging rules
Resource recovery is a RAS feature wherein we do not apply certain gard records if those records would result in a boot fail due to a lack of hardware. Change the logic from applying speculative deconfiguration one by one to applying all predictive gard records and then removing those records if minimal hardware is not available. Also add BLOCK_SPEC_DECONFIG attribute to flag when speculative deconfiguration is not allowed. This flag is set if minimum hardware is not available and is cleared after a hardware change. Change-Id: Ia065de3a44ab29fbf33ad4ce98bc42ea5144463f RTC: 191414 CQ: SW424137 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/58041 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-rw-r--r--src/include/usr/hwas/common/deconfigGard.H10
-rw-r--r--src/usr/hwas/common/deconfigGard.C283
-rw-r--r--src/usr/hwas/common/hwas.C8
-rw-r--r--src/usr/hwas/test/hwasGardTest.H452
-rw-r--r--src/usr/hwas/test/hwasSysAvailSvcTest.H142
-rw-r--r--src/usr/targeting/common/predicates/predicatehwaschanged.C7
-rw-r--r--src/usr/targeting/common/test/testcommontargeting.H3
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/attribute_types.xml23
-rw-r--r--src/usr/targeting/common/xmltohb/simics_CUMULUS.system.xml134
-rw-r--r--src/usr/targeting/common/xmltohb/simics_CUMULUS_CDIMM.system.xml134
-rw-r--r--src/usr/targeting/common/xmltohb/target_types.xml67
-rw-r--r--src/usr/util/runtime/rt_cmds.C42
12 files changed, 916 insertions, 389 deletions
diff --git a/src/include/usr/hwas/common/deconfigGard.H b/src/include/usr/hwas/common/deconfigGard.H
index e27836522..90aa61822 100644
--- a/src/include/usr/hwas/common/deconfigGard.H
+++ b/src/include/usr/hwas/common/deconfigGard.H
@@ -513,6 +513,16 @@ public:
const errlHndl_t i_deconfigErrl);
#endif
+ /**
+ * @brief Clears attribute which blocks speculative deconfiguration
+ * (ATTR_BLOCK_SPEC_DECONFIG) so that resource recovery is allowed to
+ * apply speculative deconfigurations / predictive gards. Attribute
+ * is cleared only if a target has been replaced.
+ *
+ * @return ATTR_BLOCK_SPEC_DECONFIG.
+ */
+ uint8_t clearBlockSpecDeconfigForReplacedTargets();
+
protected:
/**
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C
index b070c03ec..a1ab9bfc2 100644
--- a/src/usr/hwas/common/deconfigGard.C
+++ b/src/usr/hwas/common/deconfigGard.C
@@ -234,8 +234,9 @@ errlHndl_t DeconfigGard::clearGardRecordsForReplacedTargets()
{
// could be a platform specific target for the other
// ie, we are hostboot and this is an FSP target, or vice-versa
- HWAS_INF("Could not find Target for %.8X",
- get_huid(l_pTarget));
+ HWAS_INF_BIN("Could not find Target for:",
+ &(l_gardRecord.iv_targetId),
+ sizeof(l_gardRecord.iv_targetId));
// we just skip this GARD record
continue;
@@ -329,8 +330,9 @@ errlHndl_t DeconfigGard::clearGardRecordsForReplacedTargets()
// could be a platform specific target for the other
// ie, we are hostboot and this is an FSP target,
// or vice-versa
- HWAS_INF("Could not find Target for %08X",
- get_huid(l_pTarget));
+ HWAS_INF_BIN("Could not find Target for:",
+ &(l_gardRecord.iv_targetId),
+ sizeof(l_gardRecord.iv_targetId));
// we just skip this GARD record
continue;
@@ -581,13 +583,29 @@ errlHndl_t DeconfigGard::deconfigureTargetsFromGardRecordsForIpl(
break;
}
- //Now loop through all gard records and apply recoverable
- //gard records(non Fatal and non Unrecoverable) check
- //whether system can be booted after applying each gard record
- //if system cant be booted after applying gard record that need
- //to be rolled back and try with next one.
+ // If any targets have been replaced, clear Block Spec Deconfig
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_block_spec_deconfig =
+ DeconfigGard::clearBlockSpecDeconfigForReplacedTargets();
+
+ if(l_block_spec_deconfig != 0)
+ {
+#if (!defined(CONFIG_CONSOLE_OUTPUT_TRACE) && defined(CONFIG_CONSOLE))
+ CONSOLE::displayf("HWAS", "Blocking Speculative Deconfig");
+#endif
+ HWAS_INF("Blocking Speculative Deconfig: "
+ "skipping Predictive GARD Records");
+ }
+
+ GardRecords_t l_specDeconfigVector;
+
+ //If allowed, that is if Block Spec Deconfig is cleared,
+ //loop through all gard records and apply recoverable
+ //gard records(non Fatal and non Unrecoverable). Check
+ //whether system can be booted after applying all gard
+ //records. If system can't be booted after applying gard
+ //records, then need to rolled them back.
for (GardRecordsCItr_t l_itr = l_gardRecords.begin();
- l_itr != l_gardRecords.end();
+ (l_block_spec_deconfig == 0) && (l_itr != l_gardRecords.end());
++l_itr)
{
GardRecord l_gardRecord = *l_itr;
@@ -640,73 +658,81 @@ errlHndl_t DeconfigGard::deconfigureTargetsFromGardRecordsForIpl(
}
continue;
}
- l_pErr = applyGardRecord(l_pTarget,l_gardRecord,SPEC_DECONFIG);
+
+ //Apply the gard record.
+ l_pErr = applyGardRecord(l_pTarget, l_gardRecord, SPEC_DECONFIG);
if (l_pErr)
{
HWAS_ERR("applyGardRecord returned an error");
break;
}
-
- l_pErr = checkMinimumHardware(pSys,&l_isSystemBootable);
- if (l_pErr)
+ else
{
- HWAS_ERR("checkMinimumHardware returned an error");
- break;
+ // Keep track of spec deconfig gard record
+ l_specDeconfigVector.push_back(l_gardRecord);
}
+ } // for
- if(!l_isSystemBootable)
+ if(l_pErr)
+ {
+ break;
+ }
+
+ l_pErr = checkMinimumHardware(pSys,&l_isSystemBootable);
+ if (l_pErr)
+ {
+ HWAS_ERR("checkMinimumHardware returned an error");
+ break;
+ }
+
+ if(!l_isSystemBootable)
+ {
+ HWAS_INF("System cannot ipl, rolling back the gard for "
+ "speculatively deconfigured targets");
+
+ const uint64_t userdata1 = l_specDeconfigVector.size();
+ const uint64_t userdata2 = 0;
+ /*@
+ * @errortype
+ * @severity ERRL_SEV_INFORMATIONAL
+ * @moduleid MOD_DECONFIG_TARGETS_FROM_GARD
+ * @reasoncode RC_RESOURCE_RECOVERED
+ * @devdesc Gard record(s) not applied due to a
+ * lack of resources.
+ * @custdesc A previously discovered hardware issue is
+ * being ignored to allow the system to boot.
+ * @userdata1 Number of gard records not applied
+ * @userdata2 0
+ */
+
+ l_pErr = hwasError(ERRL_SEV_INFORMATIONAL,
+ MOD_DECONFIG_TARGETS_FROM_GARD,
+ RC_RESOURCE_RECOVERED,
+ userdata1,
+ userdata2);
+ errlCommit(l_pErr, HWAS_COMP_ID);
+
+ //Now go through all targets which are speculatively
+ //deconfigured and roll back gard on them.
+ PredicateHwas predSpecDeconfig;
+ predSpecDeconfig.specdeconfig(true);
+ TargetHandleList l_specDeconfgList;
+ targetService().getAssociated(l_specDeconfgList, pSys,
+ TargetService::CHILD, TargetService::ALL,
+ &predSpecDeconfig);
+
+ //Loop through gard records where spec deconfig was applied
+ for (TargetHandleList::const_iterator
+ l_sdIter = l_specDeconfgList.begin();
+ l_sdIter != l_specDeconfgList.end();
+ ++l_sdIter)
{
- HWAS_INF("System cannot ipl, rolling back the gard Target 0x%08x",
- get_huid(l_pTarget));
- HwasState l_state = l_pTarget->getAttr<ATTR_HWAS_STATE>();
- l_state.deconfiguredByEid = CONFIGURED_BY_RESOURCE_RECOVERY;
+ HwasState l_state = (*l_sdIter)->getAttr<ATTR_HWAS_STATE>();
+ l_state.deconfiguredByEid = 0;
l_state.specdeconfig = 0;
- l_pTarget->setAttr<ATTR_HWAS_STATE>(l_state);
-
- //Now go through all other targets which are speculatively
- //deconfigured and roll back gard on that too.
- PredicateHwas predSpecDeconfig;
- predSpecDeconfig.specdeconfig(true);
- TargetHandleList l_specDeconfgList;
- targetService().getAssociated(l_specDeconfgList, pSys,
- TargetService::CHILD, TargetService::ALL,
- &predSpecDeconfig);
-
- for (TargetHandleList::const_iterator
- l_sdIter = l_specDeconfgList.begin();
- l_sdIter != l_specDeconfgList.end();
- ++l_sdIter)
- {
- l_state = (*l_sdIter)->getAttr<ATTR_HWAS_STATE>();
- l_state.deconfiguredByEid = 0;
- l_state.specdeconfig = 0;
- (*l_sdIter)->setAttr<ATTR_HWAS_STATE>(l_state);
- }
+ (*l_sdIter)->setAttr<ATTR_HWAS_STATE>(l_state);
- /*@
- * @errortype
- * @severity ERRL_SEV_INFORMATIONAL
- * @moduleid MOD_DECONFIG_TARGETS_FROM_GARD
- * @reasoncode RC_RESOURCE_RECOVERED
- * @devdesc A gard record was not applied due to a
- * lack of resources.
- * @custdesc A previously discovered hardware issue is
- * being ignored to allow the system to boot.
- * @userdata1[00:31] HUID the resource
- * @userdata2[00:31] EID from the gard record.
- */
- const uint64_t userdata1 =
- (static_cast<uint64_t>(get_huid(l_pTarget)) << 32);
- const uint64_t userdata2 =
- (static_cast<uint64_t>(l_gardRecord.iv_errlogEid) << 32);
-
- l_pErr = hwasError(ERRL_SEV_INFORMATIONAL,
- MOD_DECONFIG_TARGETS_FROM_GARD,
- RC_RESOURCE_RECOVERED,
- userdata1,
- userdata2);
- errlCommit(l_pErr, HWAS_COMP_ID);
- l_pErr = platLogEvent(l_pTarget, RESOURCE_RECOVERED);
+ l_pErr = platLogEvent(*l_sdIter, RESOURCE_RECOVERED);
if (l_pErr)
{
HWAS_ERR("platLogEvent returned an error");
@@ -721,7 +747,7 @@ errlHndl_t DeconfigGard::deconfigureTargetsFromGardRecordsForIpl(
nodeCheckExpr.push(&predNode).push(&predFunctional).And();
TargetHandleList pNodeList;
- targetService().getAssociated(pNodeList, l_pTarget,
+ targetService().getAssociated(pNodeList, *l_sdIter,
TargetService::PARENT, TargetService::ALL,
&nodeCheckExpr);
if(!pNodeList.empty())
@@ -732,45 +758,53 @@ errlHndl_t DeconfigGard::deconfigureTargetsFromGardRecordsForIpl(
CONFIGURED_BY_RESOURCE_RECOVERY;
pNodeList[0]->setAttr<ATTR_HWAS_STATE>(l_state);
}
- continue;
- }
-
- //The system can be booted even after garding this resource
- //Apply the gard record.
- l_pErr = applyGardRecord(l_pTarget, l_gardRecord);
- if (l_pErr)
- {
- HWAS_ERR("applyGardRecord returned an error");
- break;
- }
- uint32_t l_errlogEid = l_gardRecord.iv_errlogEid;
- //If the errlogEid is already in the errLogEidList, then
- //don't need to log it again as a single error log can
- //create multiple guard records and we only need to repost
- //it once.
- std::vector<uint32_t>::iterator low =
- std::lower_bound(errlLogEidList.begin(),
- errlLogEidList.end(), l_errlogEid);
- if((low == errlLogEidList.end()) || ((*low) != l_errlogEid))
+ } // for
+ }
+ else
+ {
+ //Loop through gard records where spec deconfig was applied
+ while(!l_specDeconfigVector.empty())
{
- errlLogEidList.insert(low, l_errlogEid);
- l_pErr = platReLogGardError(l_gardRecord);
+ // Get gard record and associated target
+ GardRecord l_gardRecord = l_specDeconfigVector.front();
+ Target * l_pTarget =
+ targetService().toTarget(l_gardRecord.iv_targetId);
+
+ //Apply the gard record.
+ l_pErr = applyGardRecord(l_pTarget, l_gardRecord);
if (l_pErr)
{
- HWAS_ERR("platReLogGardError returned an error");
+ HWAS_ERR("applyGardRecord returned an error");
break;
}
- }
+
+ uint32_t l_errlogEid = l_gardRecord.iv_errlogEid;
+ //If the errlogEid is already in the errLogEidList, then
+ //don't need to log it again as a single error log can
+ //create multiple guard records and we only need to repost
+ //it once.
+ std::vector<uint32_t>::iterator low =
+ std::lower_bound(errlLogEidList.begin(),
+ errlLogEidList.end(), l_errlogEid);
+ if((low == errlLogEidList.end()) || ((*low) != l_errlogEid))
+ {
+ errlLogEidList.insert(low, l_errlogEid);
+ l_pErr = platReLogGardError(l_gardRecord);
+ if (l_pErr)
+ {
+ HWAS_ERR("platReLogGardError returned an error");
+ break;
+ }
+ }
#if (!defined(CONFIG_CONSOLE_OUTPUT_TRACE) && defined(CONFIG_CONSOLE))
- CONSOLE::displayf("HWAS", "Deconfig HUID 0x%08X, %s",
+ CONSOLE::displayf("HWAS", "Deconfig HUID 0x%08X, %s",
get_huid(l_pTarget),
l_pTarget->getAttr<TARGETING::ATTR_PHYS_PATH>().toString());
#endif
- } // for
- if(l_pErr)
- {
- break;
+
+ l_specDeconfigVector.erase(l_specDeconfigVector.begin());
+ } // while
}
if (iv_XAOBusEndpointDeconfigured)
@@ -2936,5 +2970,62 @@ errlHndl_t DeconfigGard::deconfigureTargetAtRuntime(
return l_errl ;
}
#endif
+
+//******************************************************************************
+uint8_t DeconfigGard::clearBlockSpecDeconfigForReplacedTargets()
+{
+ HWAS_INF("Clear Block Spec Deconfig for replaced Targets");
+
+ // Get Block Spec Deconfig value
+ Target *pSys;
+ targetService().getTopLevelTarget(pSys);
+ ATTR_BLOCK_SPEC_DECONFIG_type l_block_spec_deconfig =
+ pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+
+ do
+ {
+ // Check Block Spec Deconfig value
+ if(l_block_spec_deconfig == 0)
+ {
+ // Block Spec Deconfig is already cleared
+ HWAS_INF("Block Spec Deconfig already cleared");
+ }
+
+ // Create the predicate with HWAS changed state and our RESRC_RECOV bit
+ PredicateHwasChanged l_predicateHwasChanged;
+ l_predicateHwasChanged.changedBit(HWAS_CHANGED_BIT_RESRC_RECOV, true);
+
+ // Go through all targets
+ for (TargetIterator t_iter = targetService().begin();
+ t_iter != targetService().end();
+ ++t_iter)
+ {
+ Target* l_pTarget = *t_iter;
+
+ // Check if target has changed
+ if (l_predicateHwasChanged(l_pTarget))
+ {
+ // Check if Block Spec Deconfig is set
+ if(l_block_spec_deconfig == 1)
+ {
+ l_block_spec_deconfig = 0;
+ pSys->setAttr
+ <ATTR_BLOCK_SPEC_DECONFIG>(l_block_spec_deconfig);
+ HWAS_INF("Block Spec Deconfig cleared due to HWAS state "
+ "change for 0x%.8x",
+ get_huid(l_pTarget));
+ }
+
+ // Clear RESRC_RECOV bit in changed flags for the target
+ HWAS_DBG("RESRC_RECOV bit cleared for 0x%.8x",
+ get_huid(l_pTarget));
+ clear_hwas_changed_bit(l_pTarget, HWAS_CHANGED_BIT_RESRC_RECOV);
+ }
+ } // for
+ } while (0);
+
+ return l_block_spec_deconfig;
+} // clearBlockSpecDeconfigForReplacedTargets
+
} // namespace HWAS
diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C
index 3f242aefe..a6fa872b5 100644
--- a/src/usr/hwas/common/hwas.C
+++ b/src/usr/hwas/common/hwas.C
@@ -2200,6 +2200,14 @@ errlHndl_t checkMinimumHardware(const TARGETING::ConstTargetHandle_t i_nodeOrSys
HWAS_INF("checkMinimumHardware exit - minimum hardware %s",
((l_errl != NULL)||((o_bootable!=NULL)&&(!*o_bootable))) ?
"NOT available" : "available");
+ if((l_errl != NULL)||((o_bootable!=NULL)&&(!*o_bootable)))
+ {
+ // Minimum hardware not available, block speculative deconfigs
+ Target *pSys;
+ targetService().getTopLevelTarget(pSys);
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(1);
+ }
+
return l_errl ;
} // checkMinimumHardware
diff --git a/src/usr/hwas/test/hwasGardTest.H b/src/usr/hwas/test/hwasGardTest.H
index 7d1fcc5fa..bc74bfca4 100644
--- a/src/usr/hwas/test/hwasGardTest.H
+++ b/src/usr/hwas/test/hwasGardTest.H
@@ -43,6 +43,13 @@
#include <hwas/common/deconfigGard.H>
#include <hwas/common/hwas_reasoncodes.H>
+// $$ make sure these are disabled before checking in!!
+#define DISABLE_UNIT_TESTS 1
+#define DISABLE_MBA_UNIT_TESTS 1
+#define DISABLE_MEM_UNIT_TESTS 1
+#define DISABLE_EX_UNIT_TESTS 1
+//$$#define DISABLE_UNIT_TESTS 0
+
using namespace HWAS;
using namespace TARGETING;
@@ -62,13 +69,14 @@ public:
void testDeconfigure2()
{
TS_TRACE(INFO_MRK "testDeconfigure2: Started");
+ HWAS_INF("testDeconfigure2: Started");
errlHndl_t l_pErr = NULL;
DeconfigGard::DeconfigureRecords_t l_records;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -83,7 +91,7 @@ public:
if (pExList.empty())
{
- TS_FAIL("testDeconfigure3a: empty pExList");
+ TS_FAIL("testDeconfigure2: empty pExList");
break;
}
TargetHandle_t l_pTarget = *pExList.begin();
@@ -137,8 +145,8 @@ public:
void testDeconfigure3()
{
TS_TRACE(INFO_MRK "testDeconfigure3: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -147,13 +155,15 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeconfigure3: Skipped");
#else
+ HWAS_INF("testDeconfigure3: Started");
errlHndl_t l_pErr = NULL;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -221,8 +231,8 @@ public:
void testDeconfigure4()
{
TS_TRACE(INFO_MRK "testDeconfigure4: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -231,13 +241,15 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeconfigure4: Skipped");
#else
+ HWAS_INF("testDeconfigure4: Started");
errlHndl_t l_pErr = NULL;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -260,9 +272,6 @@ public:
// Get the current HWAS_STATE of the target
HwasState l_origState = l_pTarget->getAttr<ATTR_HWAS_STATE>();
- // get the current status/counter
- uint32_t l_origStatus = theDeconfigGard().getDeconfigureStatus();
-
// Deconfigure the target.
l_pErr = theDeconfigGard().
deconfigureTarget(*l_pTarget, 0xA);
@@ -272,12 +281,6 @@ public:
break;
}
- // confirm the counter changed
- if (l_origStatus == theDeconfigGard().getDeconfigureStatus())
- {
- TS_FAIL("testDeconfigure4: unchanged deconfigureStatus");
- }
-
// Deconfigure the target again
l_pErr = theDeconfigGard().
deconfigureTarget(*l_pTarget, 0xB);
@@ -319,8 +322,8 @@ public:
{
TS_TRACE(INFO_MRK "testDeconfigurePECTarget: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -329,8 +332,10 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
-
+ HWAS_INF("testDeconfigurePECTarget: Skipped");
#else
+ HWAS_INF("testDeconfigurePECTarget: Started");
+
errlHndl_t l_pErr = NULL;
do
@@ -449,8 +454,8 @@ public:
void testDeconfigurePECwithAllBadPHBs()
{
TS_TRACE(INFO_MRK "testDeconfigurePECwithAllBadPHBs: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -459,8 +464,10 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
-
+ HWAS_INF("testDeconfigurePECwithAllBadPHBs: Skipped");
#else
+ HWAS_INF("testDeconfigurePECwithAllBadPHBs: Started");
+
errlHndl_t l_pErr = NULL;
do
@@ -574,8 +581,8 @@ public:
void testDeconfigureEQTarget()
{
TS_TRACE(INFO_MRK "testDeconfigureEQTarget: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -584,7 +591,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeconfigureEQTarget: Skipped");
#else
+ HWAS_INF("testDeconfigureEQTarget: Started");
errlHndl_t l_pErr = NULL;
@@ -748,8 +757,8 @@ public:
void testDeconfigureAssoc1()
{
TS_TRACE(INFO_MRK "testDeconfigureAssoc1: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_MBA_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -758,7 +767,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeconfigureAssoc1: Skipped");
#else
+ HWAS_INF("testDeconfigureAssoc1: Started");
errlHndl_t l_pErr = NULL;
@@ -836,8 +847,8 @@ public:
void testDeconfigureAssoc2()
{
TS_TRACE(INFO_MRK "testDeconfigureAssoc2: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_MEM_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -846,7 +857,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeconfigureAssoc2: Skipped");
#else
+ HWAS_INF("testDeconfigureAssoc2: Started");
errlHndl_t l_pErr = NULL;
@@ -913,8 +926,8 @@ public:
void testDeconfigureAssoc3()
{
TS_TRACE(INFO_MRK "testDeconfigureAssoc3: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -923,7 +936,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeconfigureAssoc3: Skipped");
#else
+ HWAS_INF("testDeconfigureAssoc3: Started");
errlHndl_t l_pErr = NULL;
@@ -989,8 +1004,8 @@ public:
void testDeconfigureAssoc4()
{
TS_TRACE(INFO_MRK "testDeconfigureAssoc4: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -999,7 +1014,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeconfigureAssoc4: Skipped");
#else
+ HWAS_INF("testDeconfigureAssoc4: Started");
errlHndl_t l_pErr = NULL;
@@ -1066,7 +1083,7 @@ public:
void testDeconfigureAssoc5()
{
TS_TRACE(INFO_MRK "testDeconfigureAssoc5: Started");
-#if 1
+#if DISABLE_MBA_UNIT_TESTS
// these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
@@ -1076,7 +1093,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE(" - SKIPPING -- other tests could be adversely affected");
+ HWAS_INF("testDeconfigureAssoc5: Skipped");
#else
+ HWAS_INF("testDeconfigureAssoc5: Started");
errlHndl_t l_pErr = NULL;
@@ -1183,8 +1202,8 @@ public:
void testDeConfigEX2BadCores()
{
TS_TRACE(INFO_MRK "testDeConfigEX2BadCores: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -1193,13 +1212,15 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeConfigEX2BadCores: Skipped");
#else
+ HWAS_INF("testDeConfigEX2BadCores: Started");
errlHndl_t l_pErr = NULL;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -1298,8 +1319,8 @@ public:
void testDeConfigEX1BadCore()
{
TS_TRACE(INFO_MRK "testDeConfigEX1BadCore: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -1308,13 +1329,15 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeConfigEX1BadCore: Skipped");
#else
+ HWAS_INF("testDeConfigEX1BadCore: Started");
errlHndl_t l_pErr = NULL;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -1412,8 +1435,8 @@ public:
void testDeConfigEQ2BadEXs()
{
TS_TRACE(INFO_MRK "testDeConfigEQ2BadEXs: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -1422,7 +1445,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeConfigEQ2BadEXs: Skipped");
#else
+ HWAS_INF("testDeConfigEQ2BadEXs: Started");
errlHndl_t l_pErr = NULL;
@@ -1528,8 +1553,8 @@ public:
void testDeConfigEQ1BadEX()
{
TS_TRACE(INFO_MRK "testDeConfigEQ1BadEX: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -1538,7 +1563,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeConfigEQ1BadEX: Skipped");
#else
+ HWAS_INF("testDeConfigEQ1BadEX: Started");
errlHndl_t l_pErr = NULL;
do
@@ -1644,8 +1671,8 @@ public:
void testDeConfigEXInFusedCoreMode()
{
TS_TRACE(INFO_MRK "testDeConfigEXInFusedCoreMode: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -1654,13 +1681,15 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeConfigEXInFusedCoreMode: Skipped");
#else
+ HWAS_INF("testDeConfigEXInFusedCoreMode: Started");
errlHndl_t l_pErr = NULL;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -1771,8 +1800,8 @@ public:
void testDefDeconfig1()
{
TS_TRACE(INFO_MRK "testDefDeconfig1: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -1780,14 +1809,16 @@ public:
// tests are left in the code so that a developer can enable them
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
+ HWAS_INF("testDefDeconfig1: Skipped");
#else
+ HWAS_INF("testDefDeconfig1: Started");
errlHndl_t l_pErr = NULL;
DeconfigGard::DeconfigureRecords_t l_records;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -1825,27 +1856,12 @@ public:
// Get the original HWAS_STATE of the target
HwasState l_origState = l_pTarget->getAttr<ATTR_HWAS_STATE>();
- // get the current status/counter
- uint32_t l_origStatus = theDeconfigGard().getDeconfigureStatus();
-
// create a deconfigure record
theDeconfigGard().
registerDeferredDeconfigure(*l_pTarget, 0x12);
- // confirm the counter changed
- if (l_origStatus == theDeconfigGard().getDeconfigureStatus())
- {
- TS_FAIL("testDefDeconfig1: unchanged deconfigureStatus");
- }
-
// call function to process deferred deconfigure records
- bool l_processed = processDeferredDeconfig();
-
- if (!l_processed)
- {
- TS_FAIL("testDefDeconfig1: processDeferredDeconfig found no work");
- break;
- }
+ theDeconfigGard().processDeferredDeconfig();
// Get the new HWAS_STATE of the target
HwasState l_state = l_pTarget->getAttr<ATTR_HWAS_STATE>();
@@ -1893,6 +1909,7 @@ public:
void testGard1()
{
TS_TRACE(INFO_MRK "testGard1: Started");
+ HWAS_INF("testGard1: Started");
errlHndl_t l_pErr = NULL;
DeconfigGard::GardRecords_t l_records;
@@ -1918,8 +1935,8 @@ public:
void testGard4()
{
TS_TRACE(INFO_MRK "testGard4: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -1928,14 +1945,16 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testGard4: Skipped");
#else
+ HWAS_INF("testGard4: Started");
errlHndl_t l_pErr = NULL;
DeconfigGard::GardRecords_t l_records;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -2047,8 +2066,8 @@ public:
void testGard5()
{
TS_TRACE(INFO_MRK "testGard5: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -2057,14 +2076,16 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testGard5: Skipped");
#else
+ HWAS_INF("testGard5: Started");
errlHndl_t l_pErr = NULL;
DeconfigGard::GardRecords_t l_records;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -2180,8 +2201,8 @@ public:
void testGard6()
{
TS_TRACE(INFO_MRK "testGard6: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -2190,14 +2211,16 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testGard6: Skipped");
#else
+ HWAS_INF("testGard6: Started");
errlHndl_t l_pErr = NULL;
DeconfigGard::GardRecords_t l_records;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -2321,8 +2344,8 @@ public:
void testGard7()
{
TS_TRACE(INFO_MRK "testGard7: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -2331,14 +2354,16 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testGard7: Skipped");
#else
+ HWAS_INF("testGard7: Started");
errlHndl_t l_pErr = NULL;
DeconfigGard::GardRecords_t l_records;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -2430,8 +2455,8 @@ public:
void testGard8()
{
TS_TRACE(INFO_MRK "testGard8: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -2440,7 +2465,10 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testGard8: Skipped");
#else
+ HWAS_INF("testGard8: Started");
+
errlHndl_t l_pErr = NULL;
DeconfigGard::GardRecords_t l_records;
@@ -2460,7 +2488,7 @@ public:
l_records.size());
break;
}
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -2486,7 +2514,7 @@ public:
// create GARD record, call 'doGard' step and confirm target is
// deconfigured
l_pErr = theDeconfigGard().
- platCreateGardRecord(l_target, 0x12, GARD_User_Manual);
+ platCreateGardRecord(l_target, 0x12, GARD_Void);
if (l_pErr)
{
TS_FAIL("testGard8: Error from platCreateGardRecord");
@@ -2568,13 +2596,13 @@ public:
}
/**
- * @brief Test CDM modes to restrict createing GARD records
+ * @brief Test CDM modes to restrict creating GARD records
*/
void testGard9()
{
TS_TRACE(INFO_MRK "testGard9: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -2583,14 +2611,16 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testGard9: Skipped");
#else
+ HWAS_INF("testGard9: Started");
errlHndl_t l_pErr = NULL;
DeconfigGard::GardRecords_t l_records;
do
{
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -2710,8 +2740,8 @@ public:
void testGard10()
{
TS_TRACE(INFO_MRK "testGard10: Started");
-#if 1
- // these tests deconfigure and gard targets. and even tho they
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
// restore their state after the tests, since the cxxtests are
// all run in parallel, during the time that a target is non-
// functional due to this test, another test may be running that
@@ -2720,7 +2750,10 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testGard10: Skipped");
#else
+ HWAS_INF("testGard10: Started");
+
errlHndl_t l_pErr = NULL;
DeconfigGard::GardRecords_t l_records;
@@ -2741,7 +2774,7 @@ public:
break;
}
- // find a ex unit that we can play with
+ // find an ex unit that we can play with
Target * pSys;
targetService().getTopLevelTarget(pSys);
@@ -2895,6 +2928,208 @@ public:
#endif
}
+ /**
+ * @brief Test create GARD record, call collect GARD to confirm targets
+ * are deconfigured, set changed bit ala HCDB, reprocess GARD to
+ * confirm GARD record is deleted.
+ */
+ void testGard11()
+ {
+ TS_TRACE(INFO_MRK "testGard11: Started");
+#if DISABLE_EX_UNIT_TESTS
+ // these tests deconfigure and gard targets. and even though they
+ // restore their state after the tests, since the cxxtests are
+ // all run in parallel, during the time that a target is non-
+ // functional due to this test, another test may be running that
+ // might be adversly affected.
+ // tests are left in the code so that a developer can enable them
+ // to test these specific functions - just keep in mind that there
+ // could be side effects in other cxxtests.
+ TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testGard11: Skipped");
+#else
+ HWAS_INF("testGard11: Started");
+
+ errlHndl_t l_pErr = NULL;
+ DeconfigGard::GardRecords_t l_records;
+
+ do
+ {
+ l_pErr = theDeconfigGard().getGardRecords(NULL, l_records);
+ if (l_pErr)
+ {
+ errlCommit(l_pErr,HWAS_COMP_ID);
+ TS_FAIL("testGard11: Error from getGardRecords");
+ break;
+ }
+
+ if (l_records.size() > 0)
+ {
+ TS_FAIL("testGard11: already GARD records here. %d records",
+ l_records.size());
+ break;
+ }
+
+ // Go through all targets to ensure changed flags are cleared
+ for (TargetIterator t_iter = targetService().begin();
+ t_iter != targetService().end();
+ ++t_iter)
+ {
+ Target* l_pTarget = *t_iter;
+
+ // Clear bits in changed flags for the target
+ ATTR_HWAS_STATE_CHANGED_SUBSCRIPTION_MASK_type l_mask =
+ l_pTarget->
+ getAttr<ATTR_HWAS_STATE_CHANGED_SUBSCRIPTION_MASK>();
+ clear_hwas_changed_bit(l_pTarget,
+ static_cast<HWAS_CHANGED_BIT>(l_mask));
+ } // for
+
+ // find an ex unit that we can play with
+ Target * pSys;
+ targetService().getTopLevelTarget(pSys);
+
+ PredicateCTM predEx(CLASS_UNIT, TYPE_EX);
+ PredicateHwas predFunctional;
+ predFunctional.poweredOn(true).present(true).functional(true);
+ PredicatePostfixExpr checkExpr;
+ checkExpr.push(&predEx).push(&predFunctional).And();
+
+ TargetHandleList pExList;
+ targetService().getAssociated( pExList, pSys,
+ TargetService::CHILD, TargetService::ALL, &checkExpr );
+
+ if (pExList.empty())
+ {
+ TS_FAIL("testGard11: empty pExList");
+ break;
+ }
+
+ TargetHandle_t l_target = *pExList.begin();
+
+ // Save ATTR_BLOCK_SPEC_DECONFIG value
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_orig_block_spec_deconfig
+ = pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+
+ // Allow speculative deconfigs (clear ATTR_BLOCK_SPEC_DECONFIG)
+ HWAS_INF("testGard11: Allow speculative deconfigs");
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(0);
+
+ // create GARD record, call 'doGard' step and confirm target is
+ // deconfigured
+ l_pErr = theDeconfigGard().
+ platCreateGardRecord(l_target, 0x12, GARD_Predictive);
+ if (l_pErr)
+ {
+ TS_FAIL("testGard11: Error from platCreateGardRecord");
+ break;
+ }
+
+ l_pErr = theDeconfigGard().getGardRecords(NULL, l_records);
+ if (l_pErr)
+ {
+ errlCommit(l_pErr,HWAS_COMP_ID);
+ TS_FAIL("testGard11: Error from getGardRecords");
+ break;
+ }
+ if (l_records.size() != 1)
+ {
+ TS_FAIL("testGard11: should be 1 record; instead %d records",
+ l_records.size());
+ break;
+ }
+
+ // Note that collectGard() makes various calls, including calls of
+ // clearGardRecordsForReplacedTargets() and
+ // deconfigureTargetsFromGardRecordsForIpl(i_pPredicate)
+ // which in turn calls clearBlockSpecDeconfigForReplacedTargets().
+ l_pErr = collectGard();
+ if (l_pErr)
+ {
+ TS_FAIL("testGard11: Error from collectGard");
+ break;
+ }
+
+ HwasState l_state = l_target->getAttr<ATTR_HWAS_STATE>();
+ if (l_state.functional)
+ {
+ TS_FAIL("testGard11: target still functional");
+ break;
+ }
+
+ // Block speculative deconfigs(set ATTR_BLOCK_SPEC_DECONFIG)
+ HWAS_INF("testGard11: Block speculative deconfigs");
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(1);
+
+ // restore functional state
+ l_state.functional = true;
+ l_target->setAttr<ATTR_HWAS_STATE>(l_state);
+
+ // call collectGard and confirm Block speculative deconfigs stays
+ // set and target stays functional
+ l_pErr = collectGard();
+ if (l_pErr)
+ {
+ TS_FAIL("testGard11: Error from collectGard call 2");
+ break;
+ }
+
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_block_spec_deconfig
+ = pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+ if(l_block_spec_deconfig == 0)
+ {
+ TS_FAIL("testGard11: block spec deconfig cleared");
+ break;
+ }
+
+ l_state = l_target->getAttr<ATTR_HWAS_STATE>();
+ if (!l_state.functional)
+ {
+ TS_FAIL("testGard11: target NOT functional");
+ break;
+ }
+
+ // emulate HCDB - target changed, call collectGard and confirm Block
+ // speculative deconfigs is cleared and target is deconfigured
+ update_hwas_changed_mask(l_target);
+ l_pErr = collectGard();
+ if (l_pErr)
+ {
+ TS_FAIL("testGard11: Error from collectGard call 2");
+ break;
+ }
+
+ l_block_spec_deconfig = pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+ if(l_block_spec_deconfig != 0)
+ {
+ TS_FAIL("testGard11: block spec deconfig NOT cleared, is %d",
+ l_block_spec_deconfig);
+ break;
+ }
+
+ l_state = l_target->getAttr<ATTR_HWAS_STATE>();
+ if (!l_state.functional)
+ {
+ TS_FAIL("testGard11: target NOT functional");
+ break;
+ }
+
+ // Restore
+ l_state.functional = true;
+ l_target->setAttr<ATTR_HWAS_STATE>(l_state);
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(l_orig_block_spec_deconfig);
+
+ TS_TRACE(INFO_MRK "testGard11: Success");
+ }
+ while (0);
+
+ if (l_pErr)
+ {
+ errlCommit(l_pErr,HWAS_COMP_ID);
+ }
+#endif
+ }
+
/**
* @brief Test Deconfigure Associated Proc1
@@ -2902,6 +3137,7 @@ public:
void testDeconfigureAssocProc1()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc1: Started");
+ HWAS_INF("testDeconfigureAssocProc1: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -3010,6 +3246,7 @@ public:
void testDeconfigureAssocProc2()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc2: Started");
+ HWAS_INF("testDeconfigureAssocProc2: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -3115,6 +3352,7 @@ public:
void testDeconfigureAssocProc3()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc3: Started");
+ HWAS_INF("testDeconfigureAssocProc3: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -3284,6 +3522,7 @@ public:
void testDeconfigureAssocProc4()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc4: Started");
+ HWAS_INF("testDeconfigureAssocProc4: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -3455,6 +3694,7 @@ public:
void testDeconfigureAssocProc5()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc5: Started");
+ HWAS_INF("testDeconfigureAssocProc5: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -3633,6 +3873,7 @@ public:
void testDeconfigureAssocProc6()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc6: Started");
+ HWAS_INF("testDeconfigureAssocProc6: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -3738,7 +3979,7 @@ public:
void testDeconfigureAssocProc7()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc7: Started");
-#if 1
+#if DISABLE_UNIT_TESTS
// This test deconfigures proc2-xbus1 and proc3-xbus1 in a
// TULETA-2S4U system. Even though this test
// restores their states after the test, since the cxxtests are
@@ -3749,7 +3990,9 @@ public:
// to test these specific functions - just keep in mind that there
// could be side effects in other cxxtests.
TS_TRACE( " - SKIPPING -- other tests could be adversly affected");
+ HWAS_INF("testDeconfigureAssocProc7: Skipped");
#else
+ HWAS_INF("testDeconfigureAssocProc7: Started");
errlHndl_t l_pErr = NULL;
@@ -3885,6 +4128,7 @@ public:
void testDeconfigureAssocProc8()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc8: Started");
+ HWAS_INF("testDeconfigureAssocProc8: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -3992,6 +4236,7 @@ public:
void testDeconfigureAssocProc9()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc9: Started");
+ HWAS_INF("testDeconfigureAssocProc9: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -4088,6 +4333,7 @@ public:
void testDeconfigureAssocProc10()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc10: Started");
+ HWAS_INF("testDeconfigureAssocProc10: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -4190,6 +4436,7 @@ public:
void testDeconfigureAssocProc11()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc11: Started");
+ HWAS_INF("testDeconfigureAssocProc11: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -4292,6 +4539,7 @@ public:
void testDeconfigureAssocProc12()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc12: Started");
+ HWAS_INF("testDeconfigureAssocProc12: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -4394,6 +4642,7 @@ public:
void testDeconfigureAssocProc13()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc13: Started");
+ HWAS_INF("testDeconfigureAssocProc13: Started");
// This test populates structs which contain information
// regarding a processor and its child chiplet's linkage
@@ -4499,6 +4748,8 @@ public:
void testdeconfigPresentByAssoc1()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc1: Started");
+ HWAS_INF("testdeconfigPresentByAssoc1: Started");
+
// This tests the scenario where there is 1 mc, mi, dmi, membuff, mba and dimm
// This is done to ensure that the algorithm works on each edge case
@@ -4606,6 +4857,8 @@ public:
void testdeconfigPresentByAssoc2()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc2: Started");
+ HWAS_INF("testdeconfigPresentByAssoc2: Started");
+
// This test the scenario where MC Group 0 does not have a membuf
// MC Group 1 is fully populated
@@ -4707,6 +4960,8 @@ public:
void testdeconfigPresentByAssoc3()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc3: Started");
+ HWAS_INF("testdeconfigPresentByAssoc3: Started");
+
// This test the scenario where MEMBUF Group 1 has no DMI and then
// DIMM Group 1 has no MEMBUF because MEMBUF 1 will be marked for
// deconfigure
@@ -4834,6 +5089,8 @@ public:
void testdeconfigPresentByAssoc4()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc4: Started");
+ HWAS_INF("testdeconfigPresentByAssoc4: Started");
+
// This test the scenario where MEMBUF Group 0 has no MBAs causing
// MC Group 0 to also be deconfigured.
@@ -4910,6 +5167,8 @@ public:
void testdeconfigPresentByAssoc5()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc5: Started");
+ HWAS_INF("testdeconfigPresentByAssoc5: Started");
+
// This test the scenario where MEMBUF Group 0 and MBA Group 0 having
// no DMI. This tests the DMIINDEX edge case because one never existed
@@ -4973,6 +5232,8 @@ public:
void testdeconfigPresentByAssoc6()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc6: Started");
+ HWAS_INF("testdeconfigPresentByAssoc6: Started");
+
// This test the scenario where MBA Group 0 and DIMM Group 0 having
// no MEMBUF. This tests the MEMBUFIndex edge case because one never existed
@@ -5038,6 +5299,8 @@ public:
void testdeconfigPresentByAssoc7()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc7: Started");
+ HWAS_INF("testdeconfigPresentByAssoc7: Started");
+
// This test the scenario where MBA Group 1 has no DIMMS
// User-defined number of targets
@@ -5141,6 +5404,8 @@ public:
void testdeconfigPresentByAssoc8()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc8: Started");
+ HWAS_INF("testdeconfigPresentByAssoc8: Started");
+
// This test the scenario where each type is missing it's child
// and the cascade
@@ -5304,6 +5569,8 @@ public:
void testdeconfigPresentByAssoc9()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc9: Started");
+ HWAS_INF("testdeconfigPresentByAssoc9: Started");
+
// This test the scenario where each type is missing it's parent
// and the cascade
@@ -5410,4 +5677,9 @@ public:
};
+#undef DISABLE_UNIT_TESTS
+#undef DISABLE_MBA_UNIT_TESTS
+#undef DISABLE_MEM_UNIT_TESTS
+#undef DISABLE_EX_UNIT_TESTS
+
#endif
diff --git a/src/usr/hwas/test/hwasSysAvailSvcTest.H b/src/usr/hwas/test/hwasSysAvailSvcTest.H
index a76603431..7bd889cc5 100644
--- a/src/usr/hwas/test/hwasSysAvailSvcTest.H
+++ b/src/usr/hwas/test/hwasSysAvailSvcTest.H
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2013,2014 */
+/* Contributors Listed Below - COPYRIGHT 2013,2018 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -66,7 +68,7 @@ public:
* will be called first with SET_NONFUNC to fill in i_origStates.
* @param i_state - SET_NONFUNC or RESTORE
* @param i_targetHList - TargetHandleList of targets to work on
- * @param i_origStatew - array of HWasStates to store the original
+ * @param i_origStates - array of HWasStates to store the original
* state in.
* @param l_keep - number of states to keep (i.e. leave alone)
* when running SET_NONFUNC
@@ -109,9 +111,11 @@ public:
}
else
{
+ // Get fake HWAS state setting
+ l_fakeState = l_target->getAttr<TARGETING::ATTR_HWAS_STATE>();
+
// Restore to original state.
l_target->setAttr<TARGETING::ATTR_HWAS_STATE>(i_origStates[i]);
-
}
} // endfor
}
@@ -128,9 +132,12 @@ public:
// may cause other tests to fail.
// Do not leave this test enabled for normal operations.
TS_TRACE(INFO_MRK "SKIPPING: other tests could be affected.");
+ HWAS_INF("testCheckMinimumHardwareCore: Skipped");
#else
+
errlHndl_t l_errl = NULL;
TS_TRACE(INFO_MRK "testCheckMinimumHardwareCore");
+ HWAS_INF("testCheckMinimumHardwareCore: Started");
TargetHandleList l_cores;
getAllChiplets(l_cores, TYPE_CORE, true );
@@ -141,12 +148,36 @@ public:
TS_TRACE( "testCheckMinimumHardwareCore: set cores nonfunctional");
setTargetStates( SET_NONFUNC, l_cores, &l_origStates[0] );
+ // Save original Block Spec Deconfig value
+ Target * pSys;
+ targetService().getTopLevelTarget(pSys);
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_orig_block_spec_deconfig =
+ pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+
+ // If original attribute value is non-zero, clear it
+ if(l_orig_block_spec_deconfig != 0)
+ {
+ // Clear attribute to test that checkMinimumHardware() sets it
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(0);
+ }
+
TS_TRACE( "testCheckMinimumHardwareCore: check for minimum hardware" );
l_errl = HWAS::checkMinimumHardware();
if ( l_errl )
{
- // got an errorlog, no cores
- TS_TRACE( "testCheckMinimumHardwareCore: PASSED");
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_block_spec_deconfig =
+ pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+ if(l_block_spec_deconfig == 0)
+ {
+ TS_FAIL("testCheckMinimumHardwareCore: Expected non-zero value "
+ "for ATTR_BLOCK_SPEC_DECONFIG");
+ }
+ else
+ {
+ // got an errorlog, no cores
+ TS_TRACE( "testCheckMinimumHardwareCore: PASSED");
+ }
+ // Commit the errorlog.
errlCommit( l_errl, HWAS_COMP_ID );
}
else
@@ -157,6 +188,7 @@ public:
TS_TRACE( "testCheckMinimumHardwareCore: restore original states");
setTargetStates( RESTORE, l_cores, &(l_origStates[0]) );
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(l_orig_block_spec_deconfig);
#endif
}
@@ -173,9 +205,12 @@ public:
// may cause other tests to fail.
// Do not leave this test enabled for normal operations.
TS_TRACE(INFO_MRK "SKIPPING: other tests could be affected.");
+ HWAS_INF("testCheckMinimumHardwareDimm: Skipped");
#else
+
errlHndl_t l_errl = NULL;
TS_TRACE(INFO_MRK "testCheckMinimumHardwareDimm");
+ HWAS_INF("testCheckMinimumHardwareDimm: Started");
// check for functional dimms
TargetHandleList l_dimms;
@@ -187,12 +222,36 @@ public:
setTargetStates( SET_NONFUNC, l_dimms, &(l_origStates[0]) );
+ // Save original Block Spec Deconfig value
+ Target * pSys;
+ targetService().getTopLevelTarget(pSys);
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_orig_block_spec_deconfig =
+ pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+
+ // If original attribute value is non-zero, clear it
+ if(l_orig_block_spec_deconfig != 0)
+ {
+ // Clear attribute to test that checkMinimumHardware() sets it
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(0);
+ }
+
TS_TRACE( "testCheckMinimumHardwareDimm: check for minimum hardware" );
l_errl = HWAS::checkMinimumHardware();
if ( l_errl )
{
- // got an errorlog, no dimms
- TS_TRACE( "testCheckMinimumHardwareDimm: PASSED");
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_block_spec_deconfig
+ = pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+ if(l_block_spec_deconfig == 0)
+ {
+ TS_FAIL("testCheckMinimumHardwareDimm: Expected non-zero value "
+ "for ATTR_BLOCK_SPEC_DECONFIG");
+ }
+ else
+ {
+ // got an errorlog, no dimms
+ TS_TRACE( "testCheckMinimumHardwareDimm: PASSED");
+ }
+ // Commit the errorlog.
errlCommit( l_errl, HWAS_COMP_ID );
}
else
@@ -202,6 +261,7 @@ public:
}
setTargetStates( RESTORE, l_dimms, &(l_origStates[0]) );
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(l_orig_block_spec_deconfig);
#endif
}
@@ -220,9 +280,12 @@ public:
// may cause other tests to fail.
// Do not leave this test enabled for normal operations.
TS_TRACE(INFO_MRK "SKIPPING: other tests could be affected.");
+ HWAS_INF("testCheckMinimumHardwareBoth: Skipped");
#else
+
errlHndl_t l_errl = NULL;
TS_TRACE(INFO_MRK "testCheckMinimumHardwareBoth");
+ HWAS_INF("testCheckMinimumHardwareBoth: Started");
// set all cores nonfunctional
TargetHandleList l_cores;
@@ -242,13 +305,37 @@ public:
TS_TRACE( "testCheckMinimumHardwareBoth: set dimms nonfunctional");
setTargetStates( SET_NONFUNC, l_dimms, &(l_origDimmStates[0]) );
+ // Save original Block Spec Deconfig value
+ Target * pSys;
+ targetService().getTopLevelTarget(pSys);
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_orig_block_spec_deconfig =
+ pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+
+ // If original attribute value is non-zero, clear it
+ if(l_orig_block_spec_deconfig != 0)
+ {
+ // Clear attribute to test that checkMinimumHardware() sets it
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(0);
+ }
+
TS_TRACE( "testCheckMinimumHardwareBoth: check for minimum hardware" );
l_errl = HWAS::checkMinimumHardware();
if ( l_errl )
{
- // got an errorlog, this is good. Commit the errorlog.
- // There should be 2 errorlogs with a common plid.
- TS_TRACE( "testCheckMinimumHardwareBoth: PASSED");
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_block_spec_deconfig
+ = pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+ if(l_block_spec_deconfig == 0)
+ {
+ TS_FAIL("testCheckMinimumHardwareBoth: Expected non-zero value "
+ "for ATTR_BLOCK_SPEC_DECONFIG");
+ }
+ else
+ {
+ // got an errorlog, this is good.
+ // There should be 2 errorlogs with a common plid.
+ TS_TRACE( "testCheckMinimumHardwareBoth: PASSED");
+ }
+ // Commit the errorlog.
errlCommit( l_errl, HWAS_COMP_ID );
}
else
@@ -260,6 +347,7 @@ public:
// restore everything to normal.
setTargetStates( RESTORE, l_cores, &(l_origCoreStates[0]) );
setTargetStates( RESTORE, l_dimms, &(l_origDimmStates[0]) );
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(l_orig_block_spec_deconfig);
#endif
}
@@ -278,9 +366,12 @@ public:
// may cause other tests to fail.
// Do not leave this test enabled for normal operations.
TS_TRACE(INFO_MRK "SKIPPING: other tests could be affected.");
+ HWAS_INF("testCheckMinimumHardwareOneDimm: Skipped");
#else
+
errlHndl_t l_errl = NULL;
TS_TRACE(INFO_MRK "testCheckMinimumHardwareOneDimm");
+ HWAS_INF("testCheckMinimumHardwareOneDimm: Started");
// check for functional dimms
TargetHandleList l_dimms;
@@ -292,6 +383,19 @@ public:
setTargetStates( SET_NONFUNC, l_dimms, &(l_origStates[0]), 1 );
+ // Save original Block Spec Deconfig value
+ Target * pSys;
+ targetService().getTopLevelTarget(pSys);
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_orig_block_spec_deconfig =
+ pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+
+ // If original attribute value is non-zero, clear it
+ if(l_orig_block_spec_deconfig != 0)
+ {
+ // Clear attribute, test that checkMinimumHardware() does NOT set it
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(0);
+ }
+
TS_TRACE( "testCheckMinimumHardwareOneDimm: "
"check for minimum hardware" );
l_errl = HWAS::checkMinimumHardware();
@@ -303,15 +407,29 @@ public:
}
else
{
- // No errorlog, this is good.
- TS_TRACE( "testCheckMinimumHardwareOneDimm: PASSED");
+ TARGETING::ATTR_BLOCK_SPEC_DECONFIG_type l_block_spec_deconfig
+ = pSys->getAttr<ATTR_BLOCK_SPEC_DECONFIG>();
+ if(l_block_spec_deconfig != 0)
+ {
+ TS_FAIL("testCheckMinimumHardwareOneDimm: Expected zero value "
+ "for ATTR_BLOCK_SPEC_DECONFIG, not %d",
+ l_block_spec_deconfig);
+ }
+ else
+ {
+ // No errorlog, this is good.
+ TS_TRACE( "testCheckMinimumHardwareOneDimm: PASSED");
+ }
}
setTargetStates( RESTORE, l_dimms, &(l_origStates[0]), 1 );
+ pSys->setAttr<ATTR_BLOCK_SPEC_DECONFIG>(l_orig_block_spec_deconfig);
#endif
}
}; // end class
+#undef DISABLE_UNIT_TESTS
+
#endif
diff --git a/src/usr/targeting/common/predicates/predicatehwaschanged.C b/src/usr/targeting/common/predicates/predicatehwaschanged.C
index 03e83ff2c..f694a4f85 100644
--- a/src/usr/targeting/common/predicates/predicatehwaschanged.C
+++ b/src/usr/targeting/common/predicates/predicatehwaschanged.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2013,2014 */
+/* Contributors Listed Below - COPYRIGHT 2013,2018 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -98,7 +100,8 @@ bool PredicateHwasChanged::operator()(
ATTR_HWAS_STATE_CHANGED_SUBSCRIPTION_MASK_type subscriptionMask =
i_pTarget->getAttr<ATTR_HWAS_STATE_CHANGED_SUBSCRIPTION_MASK>();
- return ((actual.rawValue & (iv_valid.rawValue & subscriptionMask)) ==
+ return ((subscriptionMask != 0) &&
+ (actual.rawValue & (iv_valid.rawValue & subscriptionMask)) ==
(iv_desired.rawValue & (iv_valid.rawValue & subscriptionMask)));
#undef TARG_FUNC
diff --git a/src/usr/targeting/common/test/testcommontargeting.H b/src/usr/targeting/common/test/testcommontargeting.H
index d766cd8b1..ff30566d5 100644
--- a/src/usr/targeting/common/test/testcommontargeting.H
+++ b/src/usr/targeting/common/test/testcommontargeting.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2016 */
+/* Contributors Listed Below - COPYRIGHT 2012,2018 */
/* [+] Google Inc. */
/* [+] International Business Machines Corp. */
/* */
@@ -672,6 +672,7 @@ class CommonTargetingTestSuite: public CxxTest::TestSuite
void testPredicateHwasChanged()
{
TARG_TS_TRACE(ENTER_MRK "testPredicateHwasChanged" );
+ TARG_INF(ENTER_MRK "testPredicateHwasChanged" );
do {
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index ab456ceaf..0c37f955d 100755
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -496,6 +496,25 @@
</attribute>
<attribute>
+ <description>Block speculative deconfig in reconfig loop.
+ Flags when speculative deconfigurations should not be done for
+ predictive gard records on a reconfig loop IPL due to out of
+ hardware condition on prior IPL.
+ 0 = Allow speculative deconfiguration
+ 1 = Block speculative deconfiguration
+ </description>
+ <id>BLOCK_SPEC_DECONFIG</id>
+ <persistency>non-volatile</persistency>
+ <readable></readable>
+ <simpleType>
+ <uint8_t>
+ <default>0x0</default>
+ </uint8_t>
+ </simpleType>
+ <writeable></writeable>
+ </attribute>
+
+ <attribute>
<complexType>
<description>Numeric POD type test structure</description>
<field>
@@ -5092,6 +5111,10 @@
<name>HOSTSVC_HBEL</name>
<value>0x00000008</value>
</enumerator>
+ <enumerator>
+ <name>RESRC_RECOV</name>
+ <value>0x00000010</value>
+ </enumerator>
<id>HWAS_CHANGED_BIT</id>
</enumerationType>
diff --git a/src/usr/targeting/common/xmltohb/simics_CUMULUS.system.xml b/src/usr/targeting/common/xmltohb/simics_CUMULUS.system.xml
index 6912dd62e..887d1d0c9 100644
--- a/src/usr/targeting/common/xmltohb/simics_CUMULUS.system.xml
+++ b/src/usr/targeting/common/xmltohb/simics_CUMULUS.system.xml
@@ -678,7 +678,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000009</default>
+ <default>0x00000019</default>
</attribute>
@@ -959,7 +959,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1341,7 +1341,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1424,7 +1424,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1507,7 +1507,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1590,7 +1590,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1673,7 +1673,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1756,7 +1756,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1839,7 +1839,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1922,7 +1922,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2005,7 +2005,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2088,7 +2088,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2171,7 +2171,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2254,7 +2254,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2337,7 +2337,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2420,7 +2420,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2503,7 +2503,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2586,7 +2586,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2669,7 +2669,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2752,7 +2752,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2835,7 +2835,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2918,7 +2918,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3001,7 +3001,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3084,7 +3084,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3167,7 +3167,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3250,7 +3250,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3984,7 +3984,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4065,7 +4065,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4144,7 +4144,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4223,7 +4223,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4302,7 +4302,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4381,7 +4381,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4460,7 +4460,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4538,7 +4538,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4616,7 +4616,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4694,7 +4694,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4772,7 +4772,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4850,7 +4850,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4928,7 +4928,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5006,7 +5006,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5084,7 +5084,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5162,7 +5162,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5240,7 +5240,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5318,7 +5318,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5517,7 +5517,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000003</default>
+ <default>0x00000013</default>
</attribute>
<attribute>
<id>I2C_BUS_SPEED_ARRAY</id>
@@ -5908,7 +5908,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000003</default>
+ <default>0x00000013</default>
</attribute>
<attribute>
<id>I2C_BUS_SPEED_ARRAY</id>
@@ -6928,7 +6928,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7011,7 +7011,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7094,7 +7094,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7177,7 +7177,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7260,7 +7260,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7343,7 +7343,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7426,7 +7426,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7509,7 +7509,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7592,7 +7592,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7675,7 +7675,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7758,7 +7758,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7841,7 +7841,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11319,7 +11319,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11410,7 +11410,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11501,7 +11501,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11592,7 +11592,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11683,7 +11683,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11774,7 +11774,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -13405,7 +13405,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -13499,7 +13499,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -13593,7 +13593,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
diff --git a/src/usr/targeting/common/xmltohb/simics_CUMULUS_CDIMM.system.xml b/src/usr/targeting/common/xmltohb/simics_CUMULUS_CDIMM.system.xml
index 1d050fe72..934f83e2b 100644
--- a/src/usr/targeting/common/xmltohb/simics_CUMULUS_CDIMM.system.xml
+++ b/src/usr/targeting/common/xmltohb/simics_CUMULUS_CDIMM.system.xml
@@ -691,7 +691,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000009</default>
+ <default>0x00000019</default>
</attribute>
@@ -972,7 +972,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1354,7 +1354,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1437,7 +1437,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1520,7 +1520,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1603,7 +1603,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1686,7 +1686,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1769,7 +1769,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1852,7 +1852,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -1935,7 +1935,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2018,7 +2018,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2101,7 +2101,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2184,7 +2184,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2267,7 +2267,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2350,7 +2350,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2433,7 +2433,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2516,7 +2516,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2599,7 +2599,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2682,7 +2682,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2765,7 +2765,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2848,7 +2848,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -2931,7 +2931,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3014,7 +3014,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3097,7 +3097,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3180,7 +3180,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3263,7 +3263,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -3979,7 +3979,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4060,7 +4060,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4139,7 +4139,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4218,7 +4218,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4297,7 +4297,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4376,7 +4376,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -4455,7 +4455,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4533,7 +4533,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4611,7 +4611,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4689,7 +4689,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4767,7 +4767,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4845,7 +4845,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -4923,7 +4923,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5001,7 +5001,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5079,7 +5079,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5157,7 +5157,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5235,7 +5235,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5313,7 +5313,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
<attribute>
@@ -5510,7 +5510,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000003</default>
+ <default>0x00000013</default>
</attribute>
<attribute>
<id>I2C_BUS_SPEED_ARRAY</id>
@@ -5901,7 +5901,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000003</default>
+ <default>0x00000013</default>
</attribute>
<attribute>
<id>I2C_BUS_SPEED_ARRAY</id>
@@ -6921,7 +6921,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7004,7 +7004,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7087,7 +7087,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7170,7 +7170,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7253,7 +7253,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7336,7 +7336,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7419,7 +7419,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7502,7 +7502,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7585,7 +7585,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7668,7 +7668,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7751,7 +7751,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -7834,7 +7834,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11312,7 +11312,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11403,7 +11403,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11494,7 +11494,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11585,7 +11585,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11676,7 +11676,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -11767,7 +11767,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -13398,7 +13398,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -13488,7 +13488,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
@@ -13578,7 +13578,7 @@
<attribute>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000001</default>
+ <default>0x00000011</default>
</attribute>
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index 36497b876..b03c87409 100644
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -166,7 +166,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -359,7 +359,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000003</default>
+ <default>0x00000013</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -497,7 +497,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000003</default>
+ <default>0x00000013</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -724,6 +724,9 @@
<id>RCD_PARITY_RECONFIG_LOOPS_ALLOWED</id>
</attribute>
<attribute>
+ <id>BLOCK_SPEC_DECONFIG</id>
+ </attribute>
+ <attribute>
<id>MAX_PROC_CHIPS_PER_NODE</id>
</attribute>
<attribute>
@@ -995,7 +998,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000009</default>
+ <default>0x00000019</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1265,7 +1268,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1292,7 +1295,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1315,7 +1318,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1343,7 +1346,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000003</default>
+ <default>0x00000013</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1391,7 +1394,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000003</default>
+ <default>0x00000013</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1428,7 +1431,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000003</default>
+ <default>0x00000013</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1500,7 +1503,7 @@
</attribute>
<attribute><id>DECONFIG_GARDABLE</id><default>1</default></attribute>
<attribute>
- <default>0x00000003</default>
+ <default>0x00000013</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute><id>PARENT_PERVASIVE</id></attribute>
@@ -1517,11 +1520,6 @@
<id>MODEL</id>
<default>CUMULUS</default>
</attribute>
- <attribute><id>DECONFIG_GARDABLE</id><default>1</default></attribute>
- <attribute>
- <default>0x00000003</default>
- <id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- </attribute>
</targetType>
<!-- MI
@@ -1539,7 +1537,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000003</default>
+ <default>0x00000013</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1558,11 +1556,6 @@
<default>CUMULUS</default>
<id>MODEL</id>
</attribute>
- <attribute><id>DECONFIG_GARDABLE</id><default>1</default></attribute>
- <attribute>
- <default>0x00000003</default>
- <id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- </attribute>
</targetType>
<!-- DMI
@@ -1580,7 +1573,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000003</default>
+ <default>0x00000013</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1599,11 +1592,6 @@
<default>CUMULUS</default>
<id>MODEL</id>
</attribute>
- <attribute><id>DECONFIG_GARDABLE</id><default>1</default></attribute>
- <attribute>
- <default>0x00000003</default>
- <id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- </attribute>
</targetType>
<!-- PEC corresponds to IOP. Use same PEC target for Nimbus and Cumulus
@@ -1648,7 +1636,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1693,7 +1681,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1758,7 +1746,7 @@
<id>CDM_DOMAIN</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -1957,7 +1945,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -2009,7 +1997,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
@@ -2143,7 +2131,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute><id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000003</default>
+ <default>0x00000013</default>
</attribute>
</targetType>
@@ -2158,13 +2146,6 @@
<id>CDM_DOMAIN</id>
<default>MEM</default>
</attribute>
- <attribute>
- <default>1</default>
- <id>DECONFIG_GARDABLE</id>
- </attribute>
- <attribute><id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000003</default>
- </attribute>
</targetType>
<!-- Centaur MBA -->
@@ -2177,7 +2158,7 @@
</attribute>
<attribute><id>DECONFIG_GARDABLE</id><default>1</default></attribute>
<attribute><id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
- <default>0x00000003</default>
+ <default>0x00000013</default>
</attribute>
<attribute>
<id>CDM_DOMAIN</id>
@@ -2197,7 +2178,7 @@
<id>DECONFIG_GARDABLE</id>
</attribute>
<attribute>
- <default>0x00000001</default>
+ <default>0x00000011</default>
<id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
</attribute>
<attribute>
diff --git a/src/usr/util/runtime/rt_cmds.C b/src/usr/util/runtime/rt_cmds.C
index af49e71e9..e350e42dc 100644
--- a/src/usr/util/runtime/rt_cmds.C
+++ b/src/usr/util/runtime/rt_cmds.C
@@ -646,16 +646,21 @@ void cmd_putscom( char*& o_output,
* @param[in] i_word2 Userdata 3 & 4
* @param[in] i_callout HUID of target to callout (zero if none)
* @param[in] i_ffdcLength Additional ffdc data bytes to add to the error log
+ * @param[in] i_deconfig Indication if callout target should be deconfigured
+ * @param[in] i_gard Indication of type of failure for callout
*/
void cmd_errorlog( char*& o_output,
uint64_t i_word1,
uint64_t i_word2,
uint32_t i_callout,
- uint32_t i_ffdcLength )
+ uint32_t i_ffdcLength,
+ HWAS::DeconfigEnum i_deconfig,
+ HWAS::GARD_ErrorType i_gard )
{
- UTIL_FT( "cmd_errorlog> word1=%.8X%.8X, word2=%.8X%.8X, i_callout=%.8X ffdcLength=%ld",
+ UTIL_FT( "cmd_errorlog> word1=%.8X%.8X, word2=%.8X%.8X, i_callout=%.8X ffdcLength=%ld, deconfig=%.2X, gard=%.2X",
(uint32_t)(i_word1>>32), (uint32_t)i_word1,
- (uint32_t)(i_word2>>32), (uint32_t)i_word2, i_callout, i_ffdcLength );
+ (uint32_t)(i_word2>>32), (uint32_t)i_word2, i_callout,
+ i_ffdcLength, i_deconfig, i_gard );
o_output = new char[100];
errlHndl_t l_err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_PREDICTIVE,
@@ -669,8 +674,8 @@ void cmd_errorlog( char*& o_output,
{
l_err->addHwCallout( l_targ,
HWAS::SRCI_PRIORITY_HIGH,
- HWAS::NO_DECONFIG,
- HWAS::GARD_NULL );
+ i_deconfig,
+ i_gard );
}
if (i_ffdcLength > 0)
@@ -1158,24 +1163,39 @@ int hbrtCommand( int argc,
}
else if( !strcmp( argv[0], "errorlog" ) )
{
- // errorlog <word1> <word2> <huid to callout>
- if( (argc == 3) || (argc == 4) || (argc == 5) )
+ // errorlog <word1> <word2> <huid to callout> <size> <deconfig> <gard>
+ if( (argc == 3) || (argc == 4) || (argc == 5) || (argc == 6) ||
+ (argc == 7) )
{
uint32_t l_huid = 0;
uint32_t l_ffdcLength = 0;
- if( argc == 4 )
+ HWAS::DeconfigEnum l_deconfig = HWAS::NO_DECONFIG;
+ HWAS::GARD_ErrorType l_gard = HWAS::GARD_NULL;
+ if( argc >= 4 )
{
l_huid = strtou64( argv[3], NULL, 16 );
}
- if (argc == 5)
+ if (argc >= 5)
{
l_ffdcLength = strtou64( argv[4], NULL, 16 );
}
+ if( argc >= 6 )
+ {
+ l_deconfig = static_cast<HWAS::DeconfigEnum>(
+ strtou64( argv[5], NULL, 16 ));
+ }
+ if( argc >= 7 )
+ {
+ l_gard = static_cast<HWAS::GARD_ErrorType>(
+ strtou64( argv[6], NULL, 16 ));
+ }
cmd_errorlog( *l_output,
strtou64( argv[1], NULL, 16 ),
strtou64( argv[2], NULL, 16 ),
l_huid,
- l_ffdcLength );
+ l_ffdcLength,
+ l_deconfig,
+ l_gard );
}
else
{
@@ -1249,7 +1269,7 @@ int hbrtCommand( int argc,
strcat( *l_output, l_tmpstr );
sprintf( l_tmpstr, "putscom <huid> <address> <data>\n" );
strcat( *l_output, l_tmpstr );
- sprintf( l_tmpstr, "errorlog <word1> <word2> [<huid to callout>] [size]\n" );
+ sprintf( l_tmpstr, "errorlog <word1> <word2> [<huid to callout>] [size] [deconfig] [gard]\n" );
strcat( *l_output, l_tmpstr );
sprintf( l_tmpstr, "sbemsg <chipid>\n" );
strcat( *l_output, l_tmpstr );
OpenPOWER on IntegriCloud