diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2020-01-30 14:42:56 -0600 |
---|---|---|
committer | Zane C Shelley <zshelle@us.ibm.com> | 2020-02-10 10:23:00 -0600 |
commit | da3c3ba336135135b6448841f4e0adbd837d0bdb (patch) | |
tree | 853edc02884f5916f68644b90b549a238d028a5d | |
parent | 39a6f147bdf876d50f3b53129992ab3424c4af1e (diff) | |
download | blackbird-hostboot-da3c3ba336135135b6448841f4e0adbd837d0bdb.tar.gz blackbird-hostboot-da3c3ba336135135b6448841f4e0adbd837d0bdb.zip |
PRD: Add workaround for OMIDLFIR channel fails
The OMIDLFIR can't be set up to report UNIT_CS attentions.
As such, as a workaround, the relevant channel fail attentions
will be set as recoverable bits.
Change-Id: I37d244d1bfbc10d1abc4217dcdbf97e05b875821
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/90691
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Benjamen G Tyner <ben.tyner@ibm.com>
Reviewed-by: Zane C Shelley <zshelle@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/91321
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>
-rw-r--r-- | src/usr/diag/prdf/common/plat/axone/axone_omic.rule | 10 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C | 8 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/plat/mem/prdfMemUtils.C | 14 |
3 files changed, 24 insertions, 8 deletions
diff --git a/src/usr/diag/prdf/common/plat/axone/axone_omic.rule b/src/usr/diag/prdf/common/plat/axone/axone_omic.rule index 9e1e6ebc0..7b26f7a3a 100644 --- a/src/usr/diag/prdf/common/plat/axone/axone_omic.rule +++ b/src/usr/diag/prdf/common/plat/axone/axone_omic.rule @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2018,2019 +# Contributors Listed Below - COPYRIGHT 2018,2020 # [+] International Business Machines Corp. # # @@ -196,8 +196,10 @@ rule rOMIC }; group gOMIC attntype CHECK_STOP, RECOVERABLE, UNIT_CS, HOST_ATTN - filter singlebit + filter priority(2,0,1) { + # We need to prioritize analysis to the OMIDLFIR here because of potential + # Channel Fail attentions in that FIR that will be reported as RECOVERABLE. (rOMIC, bit(0)) ? analyzeIOOMIFIR; (rOMIC, bit(1)) ? analyzeMCPPEFIR; (rOMIC, bit(2)) ? analyzeOMIDLFIR; @@ -359,8 +361,8 @@ rule rOMIDLFIR }; group gOMIDLFIR - filter singlebit, - cs_root_cause + filter priority(0,20,40), + cs_root_cause(0,20,40) { /** OMIDLFIR[0] * OMI-DL0 fatal error diff --git a/src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C b/src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C index 04f2d0735..f6ea182b9 100644 --- a/src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C +++ b/src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2019 */ +/* Contributors Listed Below - COPYRIGHT 2019,2020 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -106,6 +106,12 @@ int32_t DlFatalError( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc, do { + // Note: The OMIDLFIR can't actually be set up to report UNIT_CS + // attentions, instead, as a workaround, the relevant channel fail + // bits will be set as recoverable bits and we will manually set + // the attention types to UNIT_CS in our handling of these errors. + io_sc.service_data->setPrimaryAttnType( UNIT_CS ); + char reg[64]; sprintf( reg, "DL%d_ERROR_HOLD", i_dl ); diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemUtils.C b/src/usr/diag/prdf/common/plat/mem/prdfMemUtils.C index 6914f9e92..64677f1ae 100755 --- a/src/usr/diag/prdf/common/plat/mem/prdfMemUtils.C +++ b/src/usr/diag/prdf/common/plat/mem/prdfMemUtils.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2019 */ +/* Contributors Listed Below - COPYRIGHT 2013,2020 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -1387,8 +1387,12 @@ bool __queryUcsOmic( ExtensibleChip * i_omic, ExtensibleChip * i_mcc, uint8_t bitOff = omiPosRelOmic * 20; // Check if there is a UNIT_CS for the relevant bits in the OMIDLFIR + // Note: The OMIDLFIR can't actually be set up to report UNIT_CS + // attentions, instead, as a workaround, the relevant channel fail + // bits will be set as recoverable bits and we will manually set + // the attention types to UNIT_CS in our handling of those errors. if ( fir->IsBitSet(bitOff) && !mask->IsBitSet(bitOff) && - act0->IsBitSet(bitOff) && act1->IsBitSet(bitOff) ) + !act0->IsBitSet(bitOff) && act1->IsBitSet(bitOff) ) { o_activeAttn = true; } @@ -1586,7 +1590,11 @@ bool __analyzeChnlFail<TYPE_OMI>( TargetHandle_t i_omi, if ( __queryUcsOmic( omicChip, mccChip, i_omi ) ) { // Analyze UNIT_CS on the OMIC chip - if ( SUCCESS == omicChip->Analyze(io_sc, UNIT_CS) ) + // Note: The OMIDLFIR can't actually be set up to report UNIT_CS + // attentions, instead, as a workaround, the relevant channel fail + // bits will be set as recoverable bits and we will manually set + // the attention types to UNIT_CS in our handling of those errors. + if ( SUCCESS == omicChip->Analyze(io_sc, RECOVERABLE) ) { o_analyzed = true; break; |