diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2016-12-21 15:43:29 -0600 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2017-02-10 13:21:45 -0500 |
commit | 552bbd0310ce37d7d7b4e4afa72646070288d355 (patch) | |
tree | da1b66c325ebbe08c7ae97e15394e62d62572181 /src/usr/diag/prdf | |
parent | f5cb7f98631c4a10cacfad75fba2a427a794def9 (diff) | |
download | talos-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.rule | 4 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/rule/prdfRuleMetaData.C | 21 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/rule/prdrCommon.H | 12 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/rule/prdrCompile.lex | 3 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/rule/prdrCompile.y | 16 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/rule/prdrGroup.H | 45 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/rule/prdrLoadChip.C | 19 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/rule/prdrLoadChip.H | 12 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/util/prdfFilters.C | 55 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/util/prdfFilters.H | 35 |
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 |