summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2016-12-21 15:43:29 -0600
committerZane C. Shelley <zshelle@us.ibm.com>2017-02-10 13:21:45 -0500
commit552bbd0310ce37d7d7b4e4afa72646070288d355 (patch)
treeda1b66c325ebbe08c7ae97e15394e62d62572181 /src/usr/diag/prdf
parentf5cb7f98631c4a10cacfad75fba2a427a794def9 (diff)
downloadtalos-hostboot-552bbd0310ce37d7d7b4e4afa72646070288d355.tar.gz
talos-hostboot-552bbd0310ce37d7d7b4e4afa72646070288d355.zip
PRD: Create cs_root_cause filter in rule code
Change-Id: Id6edb95aca715b2140e16e54751de71510f120c7 RTC: 159410 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/34180 Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36071 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf')
-rw-r--r--src/usr/diag/prdf/common/plat/p9/p9_mca.rule4
-rw-r--r--src/usr/diag/prdf/common/rule/prdfRuleMetaData.C21
-rwxr-xr-xsrc/usr/diag/prdf/common/rule/prdrCommon.H12
-rwxr-xr-xsrc/usr/diag/prdf/common/rule/prdrCompile.lex3
-rw-r--r--src/usr/diag/prdf/common/rule/prdrCompile.y16
-rwxr-xr-xsrc/usr/diag/prdf/common/rule/prdrGroup.H45
-rw-r--r--src/usr/diag/prdf/common/rule/prdrLoadChip.C19
-rwxr-xr-xsrc/usr/diag/prdf/common/rule/prdrLoadChip.H12
-rwxr-xr-xsrc/usr/diag/prdf/common/util/prdfFilters.C55
-rwxr-xr-xsrc/usr/diag/prdf/common/util/prdfFilters.H35
10 files changed, 204 insertions, 18 deletions
diff --git a/src/usr/diag/prdf/common/plat/p9/p9_mca.rule b/src/usr/diag/prdf/common/plat/p9/p9_mca.rule
index 80aac84dd..edd6d9bf2 100644
--- a/src/usr/diag/prdf/common/plat/p9/p9_mca.rule
+++ b/src/usr/diag/prdf/common/plat/p9/p9_mca.rule
@@ -219,7 +219,7 @@ rule rMCACALFIR
MCACALFIR & ~MCACALFIR_MASK & MCACALFIR_ACT0 & MCACALFIR_ACT1;
};
-group gMCACALFIR filter singlebit
+group gMCACALFIR filter singlebit, cs_root_cause
{
/** MCACALFIR[0]
* A MBA recoverable error has occurred.
@@ -324,7 +324,7 @@ rule rMCAECCFIR
MCAECCFIR & ~MCAECCFIR_MASK & MCAECCFIR_ACT0 & MCAECCFIR_ACT1;
};
-group gMCAECCFIR filter singlebit
+group gMCAECCFIR filter singlebit, cs_root_cause( 14 )
{
/** MCAECCFIR[0]
* Mainline read MPE on rank 0
diff --git a/src/usr/diag/prdf/common/rule/prdfRuleMetaData.C b/src/usr/diag/prdf/common/rule/prdfRuleMetaData.C
index 0a99b8069..ea3fa7f76 100644
--- a/src/usr/diag/prdf/common/rule/prdfRuleMetaData.C
+++ b/src/usr/diag/prdf/common/rule/prdfRuleMetaData.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -1070,6 +1070,25 @@ void RuleMetaData::createGroup(Group * i_group,
}
+ std::vector<uint8_t> l_bits;
+ CreateBitString::execute(l_bits,
+ i_data.cv_loadChip->cv_groupCsRootCauseBits[i_groupId]);
+
+ // Do CS_ROOT_CAUSE filter flags
+ if ( i_data.cv_loadChip->cv_groupFlags[i_groupId] &
+ Prdr::PRDR_GROUP_FILTER_CS_ROOT_CAUSE )
+ {
+ FilterClass * l_filter = new CsRootCauseFilter( l_bits );
+ i_group->AddFilter( l_filter, true );
+ }
+
+ if ( i_data.cv_loadChip->cv_groupFlags[i_groupId] &
+ Prdr::PRDR_GROUP_FILTER_CS_ROOT_CAUSE_NULL )
+ {
+ FilterClass * l_filter = new CsRootCauseFilter();
+ i_group->AddFilter( l_filter, true );
+ }
+
// Do Priority filter flag.
if (i_data.cv_loadChip->cv_groupFlags[i_groupId] &
Prdr::PRDR_GROUP_FILTER_PRIORITY)
diff --git a/src/usr/diag/prdf/common/rule/prdrCommon.H b/src/usr/diag/prdf/common/rule/prdrCommon.H
index 8e13adfe3..398ded377 100755
--- a/src/usr/diag/prdf/common/rule/prdrCommon.H
+++ b/src/usr/diag/prdf/common/rule/prdrCommon.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -83,11 +83,15 @@ namespace Prdr
enum GroupFlags
{
/** Single Bit Filter */
- PRDR_GROUP_FILTER_SINGLE_BIT = 0x1,
+ PRDR_GROUP_FILTER_SINGLE_BIT = 0x1,
/** Priority Bit Filter */
- PRDR_GROUP_FILTER_PRIORITY = 0x2,
+ PRDR_GROUP_FILTER_PRIORITY = 0x2,
/** Secondary Bit Filter */
- PRDR_GROUP_FILTER_SECONDARY = 0x4,
+ PRDR_GROUP_FILTER_SECONDARY = 0x4,
+ /** CS Root Cause Filter */
+ PRDR_GROUP_FILTER_CS_ROOT_CAUSE = 0x8,
+ /** CS Root Cause Null Filter */
+ PRDR_GROUP_FILTER_CS_ROOT_CAUSE_NULL = 0x10,
};
/**
diff --git a/src/usr/diag/prdf/common/rule/prdrCompile.lex b/src/usr/diag/prdf/common/rule/prdrCompile.lex
index a47bd61eb..48963f1d9 100755
--- a/src/usr/diag/prdf/common/rule/prdrCompile.lex
+++ b/src/usr/diag/prdf/common/rule/prdrCompile.lex
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -150,6 +150,7 @@ filter { return PRDR_FILTER; }
singlebit { return PRDR_FILTER_SINGLE_BIT; }
priority { return PRDR_FILTER_PRIORITY; }
secondarybits { return PRDR_FILTER_SECONDARY; }
+cs_root_cause { return PRDR_FILTER_CS_ROOT_CAUSE; }
"\<\<" { return PRDR_OP_LEFTSHIFT; }
"\>\>" { return PRDR_OP_RIGHTSHIFT; }
diff --git a/src/usr/diag/prdf/common/rule/prdrCompile.y b/src/usr/diag/prdf/common/rule/prdrCompile.y
index 0553e8c5a..68e2c5c98 100644
--- a/src/usr/diag/prdf/common/rule/prdrCompile.y
+++ b/src/usr/diag/prdf/common/rule/prdrCompile.y
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -161,6 +161,7 @@ using namespace PRDR_COMPILER;
%token PRDR_FILTER_SINGLE_BIT
%token PRDR_FILTER_PRIORITY
%token PRDR_FILTER_SECONDARY
+%token PRDR_FILTER_CS_ROOT_CAUSE
/* Terminal tokens for Doxygen-style comments */
%token <str_ptr> PRDR_DOX_COMMENT
@@ -607,6 +608,19 @@ grpfilt_item: PRDR_FILTER_SECONDARY '(' bitandlist ')'
}
;
+grpfilt_item: PRDR_FILTER_CS_ROOT_CAUSE '(' bitandlist ')'
+ {
+ $$ = new std::list<Group_Filter *>;
+ $$->push_back(new Group_Filter_CS_Root_Cause($3));
+ }
+;
+
+grpfilt_item: PRDR_FILTER_CS_ROOT_CAUSE
+ {
+ $$ = new std::list<Group_Filter *>;
+ $$->push_back(new Group_Filter_CS_Root_Cause_Null);
+ }
+;
grouplines: { $$ = new Group(); }
| grouplines groupline ';'
diff --git a/src/usr/diag/prdf/common/rule/prdrGroup.H b/src/usr/diag/prdf/common/rule/prdrGroup.H
index 567b222a6..f2aa41c78 100755
--- a/src/usr/diag/prdf/common/rule/prdrGroup.H
+++ b/src/usr/diag/prdf/common/rule/prdrGroup.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -47,6 +47,7 @@ class Group
std::list<Expr *> cv_rules;
Expr * cv_priorityList;
Expr * cv_secondaryList;
+ Expr * cv_csRootCauseList;
char cv_op;
uint8_t cv_flags;
@@ -55,12 +56,14 @@ class Group
Group() :
cv_priorityList(NULL),
cv_secondaryList(NULL),
+ cv_csRootCauseList(NULL),
cv_op(Prdr::GROUP),
cv_flags(0),
cv_doxcomment() {};
Group(char o) :
cv_priorityList(NULL),
cv_secondaryList(NULL),
+ cv_csRootCauseList(NULL),
cv_op(o),
cv_flags(0),
cv_doxcomment() {};
@@ -85,6 +88,12 @@ class Group
i_r->cv_secondaryList = i_l->cv_secondaryList;
}
+ // Set CS root cause bit list
+ if ( NULL != i_l->cv_csRootCauseList )
+ {
+ i_r->cv_csRootCauseList = i_l->cv_csRootCauseList;
+ }
+
};
void setComment(std::string & i_comment)
@@ -199,6 +208,13 @@ class Group
{
cv_secondaryList->output( i_file );
}
+ if ( Prdr::PRDR_GROUP_FILTER_CS_ROOT_CAUSE & cv_flags)
+ {
+ if ( NULL != cv_csRootCauseList )
+ {
+ cv_csRootCauseList->output( i_file );
+ }
+ }
}
for (std::list<Expr *>::iterator i = cv_rules.begin();
@@ -263,6 +279,33 @@ class Group_Filter_Secondary : public Group_Filter
private:
Expr * iv_secList;
};
+
+class Group_Filter_CS_Root_Cause : public Group_Filter
+{
+ public:
+ Group_Filter_CS_Root_Cause() : iv_csCauseList(NULL) {};
+
+ Group_Filter_CS_Root_Cause( Expr * i_list ) : iv_csCauseList( i_list ) {};
+
+ void AddFilter( Group * i_group )
+ {
+ i_group->cv_flags |= Prdr::PRDR_GROUP_FILTER_CS_ROOT_CAUSE;
+ i_group->cv_csRootCauseList = iv_csCauseList;
+ };
+
+ private:
+ Expr * iv_csCauseList;
+};
+
+class Group_Filter_CS_Root_Cause_Null : public Group_Filter
+{
+ public:
+ void AddFilter(Group * i_group)
+ {
+ i_group->cv_flags |= Prdr::PRDR_GROUP_FILTER_CS_ROOT_CAUSE_NULL;
+ };
+};
+
} // end namespace PRDR_COMPILER
#endif
diff --git a/src/usr/diag/prdf/common/rule/prdrLoadChip.C b/src/usr/diag/prdf/common/rule/prdrLoadChip.C
index 3cf3e22c5..cd66ad2d2 100644
--- a/src/usr/diag/prdf/common/rule/prdrLoadChip.C
+++ b/src/usr/diag/prdf/common/rule/prdrLoadChip.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -232,6 +232,7 @@ errlHndl_t LoadChip(UtilStream & i_stream, Chip & o_chip)
o_chip.cv_groupFlags = new uint8_t[o_chip.cv_groupCount];
o_chip.cv_groupPriorityBits = new Expr * [o_chip.cv_groupCount];
o_chip.cv_groupSecondaryBits = new Expr * [o_chip.cv_groupCount];
+ o_chip.cv_groupCsRootCauseBits = new Expr * [o_chip.cv_groupCount];
for (uint32_t i = 0; i < o_chip.cv_groupCount; i++)
{
i_stream >> l_temp[0]; // should be 'G'
@@ -246,7 +247,7 @@ errlHndl_t LoadChip(UtilStream & i_stream, Chip & o_chip)
}
else
{
- o_chip.cv_groupPriorityBits[i] = NULL;
+ o_chip.cv_groupPriorityBits[i] = nullptr;
}
//check if secondary filter has been specified
@@ -257,8 +258,20 @@ errlHndl_t LoadChip(UtilStream & i_stream, Chip & o_chip)
}
else
{
- o_chip.cv_groupSecondaryBits[i] = NULL;
+ o_chip.cv_groupSecondaryBits[i] = nullptr;
}
+
+ //check if cs_root_cause filter has been specified
+ if( PRDR_GROUP_FILTER_CS_ROOT_CAUSE & o_chip.cv_groupFlags[i] )
+ {
+ o_chip.cv_groupCsRootCauseBits[i] = new Expr();
+ ReadExpr(i_stream, *o_chip.cv_groupCsRootCauseBits[i]);
+ }
+ else
+ {
+ o_chip.cv_groupCsRootCauseBits[i] = nullptr;
+ }
+
if (0 != o_chip.cv_groupSize[i])
{
o_chip.cv_groups[i] = new Expr[o_chip.cv_groupSize[i]];
diff --git a/src/usr/diag/prdf/common/rule/prdrLoadChip.H b/src/usr/diag/prdf/common/rule/prdrLoadChip.H
index fb7ec9dd1..dba0e1f21 100755
--- a/src/usr/diag/prdf/common/rule/prdrLoadChip.H
+++ b/src/usr/diag/prdf/common/rule/prdrLoadChip.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -202,6 +202,7 @@ namespace Prdr
uint8_t * cv_groupFlags;
Expr ** cv_groupPriorityBits;
Expr ** cv_groupSecondaryBits;
+ Expr ** cv_groupCsRootCauseBits;
Expr ** cv_groups;
uint16_t cv_actionCount;
uint16_t * cv_actionSize;
@@ -211,7 +212,8 @@ namespace Prdr
cv_ruleCount(0), cv_rules(NULL),
cv_groupCount(0), cv_groupSize(NULL),
cv_groupFlags(NULL), cv_groupPriorityBits(NULL),
- cv_groupSecondaryBits(NULL), cv_groups(NULL),
+ cv_groupSecondaryBits(NULL),
+ cv_groupCsRootCauseBits(NULL), cv_groups(NULL),
cv_actionCount(0), cv_actionSize(NULL),
cv_actions(NULL)
{
@@ -228,6 +230,10 @@ namespace Prdr
if ( NULL != cv_groupSecondaryBits[i] )
delete cv_groupSecondaryBits[i];
+
+ if ( NULL != cv_groupCsRootCauseBits[i] )
+ delete cv_groupCsRootCauseBits[i];
+
if (NULL != cv_groups[i])
delete[] cv_groups[i];
}
@@ -237,6 +243,8 @@ namespace Prdr
if (NULL != cv_groupPriorityBits) delete[] cv_groupPriorityBits;
if ( NULL != cv_groupSecondaryBits )
delete[] cv_groupSecondaryBits;
+ if ( NULL != cv_groupCsRootCauseBits )
+ delete[] cv_groupCsRootCauseBits;
for (int i = 0; i < cv_actionCount; i++)
if (NULL != cv_actions[i]) delete[] cv_actions[i];
if (NULL != cv_actions) delete[] cv_actions;
diff --git a/src/usr/diag/prdf/common/util/prdfFilters.C b/src/usr/diag/prdf/common/util/prdfFilters.C
index 7cc5bef45..27ff9243e 100755
--- a/src/usr/diag/prdf/common/util/prdfFilters.C
+++ b/src/usr/diag/prdf/common/util/prdfFilters.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
+/* Contributors Listed Below - COPYRIGHT 2012,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -224,5 +224,58 @@ bool SecondaryBitsFilter::Apply( BitKey & io_bitList,
#undef PRDF_FUNC
}
+//------------------------------------------------------------------------------
+
+bool CsRootCauseFilter::Apply( BitKey & io_bitList,
+ STEP_CODE_DATA_STRUCT & io_sdc )
+{
+ #define PRDF_FUNC "[CsRootCauseFilter::Apply] "
+
+ bool l_modified = false;
+
+ do
+ {
+
+ // This filter should only be applied on the primary pass.
+ if ( !io_sdc.service_data->isPrimaryPass() ) break;
+
+ // This filter should only be applied if the primary attention type is
+ // CHECK_STOP
+ if ( CHECK_STOP != io_sdc.service_data->getPrimaryAttnType() ) break;
+
+ // This filter should only be applied if the secondary attention type is
+ // RE or UNIT_CS
+ if ( (RECOVERABLE != io_sdc.service_data->getSecondaryAttnType()) &&
+ (UNIT_CS != io_sdc.service_data->getSecondaryAttnType()) ) break;
+
+ // If no bit is set in the bit key, let us skip this apply
+ if ( 0 == io_bitList.size() )
+ break;
+
+ // Return bits from the bit list that are in the filter list
+ BitKey removalList(io_bitList);
+ if ( !iv_csCauseBitList.empty() )
+ {
+ removalList.removeBits(iv_csCauseBitList);
+ }
+ if (0 != removalList.size())
+ {
+ io_bitList.removeBits(removalList);
+ l_modified = true;
+ }
+
+ if ( 0 == io_bitList.size() )
+ {
+ // We have no primary bits on, but one or more cs_root_cause bits on
+ io_sdc.service_data->setSecondaryErrFlag();
+ }
+
+ }while(0);
+
+ return l_modified;
+
+ #undef PRDF_FUNC
+}
+
} //End namespace PRDF
diff --git a/src/usr/diag/prdf/common/util/prdfFilters.H b/src/usr/diag/prdf/common/util/prdfFilters.H
index bdad805d8..2ca98834b 100755
--- a/src/usr/diag/prdf/common/util/prdfFilters.H
+++ b/src/usr/diag/prdf/common/util/prdfFilters.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -397,7 +397,7 @@ class SecondaryBitsFilter: public FilterClass
* @param io_sdc reference to STEP_CODE_DATA struct.
* @return true if bit key is modified false otherwise.
*/
- virtual bool Apply( BitKey & ioBitList, STEP_CODE_DATA_STRUCT & io_sdc );
+ virtual bool Apply( BitKey & io_bitList, STEP_CODE_DATA_STRUCT & io_sdc );
private: // data
@@ -405,6 +405,37 @@ class SecondaryBitsFilter: public FilterClass
};
+class CsRootCauseFilter: public FilterClass
+{
+ public:
+
+ /** @brief default constructor */
+ CsRootCauseFilter() = default;
+
+ /**
+ * @brief constructor
+ * @param i_bitList list of bits identifed as cs_root_cause in a FIR
+ */
+ CsRootCauseFilter( const std::vector<uint8_t> & i_bitList )
+ {
+ iv_csCauseBitList = i_bitList;
+ }
+
+ /**
+ * @brief will only consider bits specified in cs_root_cause filter as
+ * possible checkstop root causes in the given BitKey
+ * @param i_bitList bitkey on which cs_root_cause filter needs to act
+ * @param io_sdc reference to STEP_CODE_DATA struct
+ * @return true if bit key is modified, false otherwise
+ */
+ virtual bool Apply( BitKey & io_bitList, STEP_CODE_DATA_STRUCT & io_sdc );
+
+ private: // data
+
+ // list of bit pos marked as cs_root_cause
+ std::vector<uint8_t> iv_csCauseBitList;
+};
+
} //End namespace PRDF
#endif
OpenPOWER on IntegriCloud