diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2015-09-17 15:27:41 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-09-22 11:07:39 -0500 |
commit | 22cc0426d2e2507908a74bd31a4e05584aa1c4a8 (patch) | |
tree | 787c695b6805ff1ab127b28f2039e179fe6cb8bc /src/usr/diag | |
parent | 3ca8532849d8d9349355e08e20f45575755f709c (diff) | |
download | talos-hostboot-22cc0426d2e2507908a74bd31a4e05584aa1c4a8.tar.gz talos-hostboot-22cc0426d2e2507908a74bd31a4e05584aa1c4a8.zip |
PRD: Mask side-effects of RCD Parity Error
Change-Id: I886347b979cc6f000f81c7108d4ebf8f3897c95c
CQ: SW322138
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/20594
Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/20633
Tested-by: Jenkins OP Build CI
Tested-by: FSP CI Jenkins
Tested-by: Jenkins OP HW
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Diffstat (limited to 'src/usr/diag')
-rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/Mba.rule | 26 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C | 55 |
2 files changed, 79 insertions, 2 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Mba.rule b/src/usr/diag/prdf/common/plat/pegasus/Mba.rule index 3666142aa..87d9b4c85 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Mba.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Mba.rule @@ -81,6 +81,14 @@ chip Mba capture group MemChipletRegs; }; + register MBAFIR_MASK_OR + { + name "MBU.MBA_MCBIST.SCOMFIR.MBAFIRMASK OR"; + scomaddr 0x03010605; + capture group never; + access write_only; + }; + register MBAFIR_ACT0 { name "MBU.MBA_MCBIST.SCOMFIR.MBAFIRACT0"; @@ -693,7 +701,7 @@ group gMbaCalFir filter priority( 4, 7 ), /** MBACALFIR[4] * MBACALFIRQ_RCD_PARITY_ERROR_0 */ - (MbaCalFir, bit(4)) ? CalloutMbaAndDimmOnPort0; + (MbaCalFir, bit(4)) ? RcdParityError0; /** MBACALFIR[5] * MBACALFIRQ_DDR0_CAL_TIMEOUT_ERR @@ -708,7 +716,7 @@ group gMbaCalFir filter priority( 4, 7 ), /** MBACALFIR[7] * MBACALFIRQ_RCD_PARITY_ERROR_1 */ - (MbaCalFir, bit(7)) ? CalloutMbaAndDimmOnPort1; + (MbaCalFir, bit(7)) ? RcdParityError1; /** MBACALFIR[8] * MBACALFIRQ_MBX_TO_MBA_PAR_ERROR @@ -916,6 +924,20 @@ actionclass CalloutMbaAndDimmOnPort1 threshold1; }; +/** Handle RCD Parity Error 0 */ +actionclass RcdParityError0 +{ + funccall("maskRcdParitySideEffects"); + CalloutMbaAndDimmOnPort0; +}; + +/** Handle RCD Parity Error 1 */ +actionclass RcdParityError1 +{ + funccall("maskRcdParitySideEffects"); + CalloutMbaAndDimmOnPort1; +}; + /** Callouts specific to MBASECUREFIR attentions. */ actionclass secureFirCallout { diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C index d8ad78bd3..2a701d3bd 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C @@ -164,6 +164,61 @@ int32_t CalloutMbaAndDimm( ExtensibleChip * i_chip, return o_rc; } +/** + * @brief Plugin to mask the side effects of an RCD parity error + * @param i_mbaChip A Centaur MBA chip. + * @param i_sc The step code data struct. + * @return SUCCESS + */ +int32_t maskRcdParitySideEffects( ExtensibleChip * i_mbaChip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + #define PRDF_FUNC "[maskRcdParitySideEffects] " + + int32_t l_rc = SUCCESS; + + do + { + //use a data bundle to get the membuf chip + CenMbaDataBundle * mbadb = getMbaDataBundle( i_mbaChip ); + ExtensibleChip * membChip = mbadb->getMembChip(); + if (NULL == membChip) + { + PRDF_ERR(PRDF_FUNC "getMembChip() failed"); + break; + } + + //get the masks for each FIR + SCAN_COMM_REGISTER_CLASS * mbsFirMaskOr = + membChip->getRegister("MBSFIR_MASK_OR"); + SCAN_COMM_REGISTER_CLASS * mbaCalMaskOr = + i_mbaChip->getRegister("MBACALFIR_MASK_OR"); + SCAN_COMM_REGISTER_CLASS * mbaFirMaskOr = + i_mbaChip->getRegister("MBAFIR_MASK_OR"); + + mbaFirMaskOr->SetBit(2); + mbaCalMaskOr->SetBit(2); + mbaCalMaskOr->SetBit(17); + mbsFirMaskOr->SetBit(4); + + l_rc = mbaFirMaskOr->Write(); + l_rc |= mbaCalMaskOr->Write(); + l_rc |= mbsFirMaskOr->Write(); + + if (SUCCESS != l_rc) + { + PRDF_ERR(PRDF_FUNC "MBAFIR_MASK_OR/MBACALFIR_MASK_OR/MBSFIR_MASK_OR" + " write failed for 0x%08x", i_mbaChip->GetId()); + break; + } + }while(0); + + return SUCCESS; + #undef PRDF_FUNC +} +PRDF_PLUGIN_DEFINE( Mba, maskRcdParitySideEffects ); + + //------------------------------------------------------------------------------ /** |