From cda40fd41b6921d307a384c600098d3ef395e01c Mon Sep 17 00:00:00 2001 From: Zane Shelley Date: Tue, 24 Apr 2018 20:52:07 -0500 Subject: PRD: additional MBSFIR and MBIFIR rule code changes Change-Id: Iaf9eb18a00299e0c2edbd8af76e75877001ae662 RTC: 187481 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57785 Reviewed-by: Zane C. Shelley Tested-by: Zane C. Shelley Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57931 CI-Ready: Zane C. Shelley Tested-by: Jenkins Server --- src/usr/diag/prdf/common/plat/cen/cen_centaur.rule | 13 +- .../prdf/common/plat/cen/cen_centaur_actions.rule | 28 +++ .../prdf/common/plat/cen/prdfCenMembuf_common.C | 117 ++++++++++ src/usr/diag/prdf/common/plat/pegasus/Mcs.rule | 11 +- src/usr/diag/prdf/common/plat/pegasus/Membuf.rule | 11 +- .../prdf/common/plat/pegasus/Membuf_acts_NEST.rule | 30 +-- .../diag/prdf/common/plat/pegasus/prdfCenMembuf.C | 246 --------------------- .../diag/prdf/common/plat/pegasus/prdfLaneRepair.C | 59 +---- .../diag/prdf/common/plat/pegasus/prdfLaneRepair.H | 13 +- src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C | 28 +-- 10 files changed, 165 insertions(+), 391 deletions(-) diff --git a/src/usr/diag/prdf/common/plat/cen/cen_centaur.rule b/src/usr/diag/prdf/common/plat/cen/cen_centaur.rule index d2e2b28fa..ea4724c10 100644 --- a/src/usr/diag/prdf/common/plat/cen/cen_centaur.rule +++ b/src/usr/diag/prdf/common/plat/cen/cen_centaur.rule @@ -1054,7 +1054,7 @@ group gMBIFIR filter priority( 8, 9, 19, 20, 6, 0, 16, 5, 10 ), /** MBIFIR[0] * Replay Timeout */ - (rMBIFIR, bit(0)) ? TBDDefaultCallout; + (rMBIFIR, bit(0)) ? replay_timeout_UERE; /** MBIFIR[1] * Channel Fail @@ -1154,7 +1154,7 @@ group gMBIFIR filter priority( 8, 9, 19, 20, 6, 0, 16, 5, 10 ), /** MBIFIR[20] * Replay Buffer Overrun */ - (rMBIFIR, bit(20)) ? TBDDefaultCallout; + (rMBIFIR, bit(20)) ? calloutBusInterface_dmibus_th1_UERE; /** MBIFIR[21] * WAT error @@ -1205,7 +1205,7 @@ group gMBSFIR filter singlebit, cs_root_cause( 0, 1, 2, 4, 6, 8, 10, 13, 16, 18, /** MBSFIR[2] * INVALID_ADDRESS_ERROR */ - (rMBSFIR, bit(2)) ? level2_th_1_UERE; + (rMBSFIR, bit(2)) ? calloutBusInterface_dmibus_th1; /** MBSFIR[3] * EXTERNAL_TIMEOUT @@ -1215,7 +1215,12 @@ group gMBSFIR filter singlebit, cs_root_cause( 0, 1, 2, 4, 6, 8, 10, 13, 16, 18, /** MBSFIR[4] * INTERNAL_TIMEOUT */ - (rMBSFIR, bit(4)) ? TBDDefaultCallout; + (rMBSFIR, bit(4)) ? mbs_internal_timeout; + + /** MBSFIR[3,4] + * EXTERNAL_TIMEOUT + */ + (rMBSFIR, bit(3,4)) ? mbs_int_ext_timeout; /** MBSFIR[5] * INT_BUFFER_CE diff --git a/src/usr/diag/prdf/common/plat/cen/cen_centaur_actions.rule b/src/usr/diag/prdf/common/plat/cen/cen_centaur_actions.rule index da827cec8..f60f534e7 100644 --- a/src/usr/diag/prdf/common/plat/cen/cen_centaur_actions.rule +++ b/src/usr/diag/prdf/common/plat/cen/cen_centaur_actions.rule @@ -115,6 +115,34 @@ actionclass tooManyBusErrors_dmibus # funccall("tooManyBusErrors"); }; +/** Callout the DMI bus, threshold 1. Also, clear secondary MBSFIR bits. */ +actionclass replayTimeoutCleanup +{ + calloutBusInterface_dmibus_th1_UERE; + funccall("ClearMbsSecondaryBits"); +}; + +/** Handles channel failures on the DMI side of the bus, if present. Otherwise, + * calls out self (TH 1). */ +actionclass replay_timeout_UERE +{ + try ( funccall("analyzeDmiChnlFail"), replayTimeoutCleanup ); +}; + +/** Handles RCD parity errors, if present. Otherwise, calls out self (TH 1). */ +actionclass mbs_internal_timeout +{ + try ( funccall("analyzeMbaRcdParityError0"), + try ( funccall("analyzeMbaRcdParityError1"), self_th_1 ) ); +}; + +/** Handles RCD parity errors, if present. Otherwise, calls out lvl 2 (TH 1). */ +actionclass mbs_int_ext_timeout +{ + try ( funccall("analyzeMbaRcdParityError0"), + try ( funccall("analyzeMbaRcdParityError1"), level2_th_1 ) ); +}; + /** L4 cache SRW CE */ actionclass l4_cache_srw_ce { diff --git a/src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C b/src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C index 102967617..af1b22761 100644 --- a/src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C +++ b/src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C @@ -77,6 +77,123 @@ int32_t PostAnalysis( ExtensibleChip * i_mbChip, STEP_CODE_DATA_STRUCT & io_sc ) } PRDF_PLUGIN_DEFINE( cen_centaur, PostAnalysis ); +//############################################################################## +// +// MBSFIR +// +//############################################################################## + +/** + * @brief Calls analyze() on the connected DMI target if there is an active + * channel fail attention on the DMI side of the bus. + * @param i_mbChip MEMBUF chip. + * @param io_sc Step code data struct + * @return SUCCESS if the channel fail error was present and analyzed properly. + * Non-SUCCESS otherwise. + */ +int32_t analyzeDmiChnlFail( ExtensibleChip * i_mbChip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + #define PRDF_FUNC "[analyzeDmiChnlFail] " + + int32_t o_rc = PRD_SCAN_COMM_REGISTER_ZERO; // default, nothing found + + do + { + ExtensibleChip * dmiChip = getConnectedParent( i_mbChip, TYPE_DMI ); + + // TODO: RTC 136123 Need to call new interface that queries if there was + // a channel fail attention on the other side of the interface. + bool dmiChnlFail = false; + + // If there is a channel fail attention on the other side of the bus, + // analyze the DMI target. + if ( dmiChnlFail ) + { + o_rc = dmiChip->Analyze( io_sc, + io_sc.service_data->getSecondaryAttnType() ); + } + + } while (0); + + return o_rc; + + #undef PRDF_FUNC +} +PRDF_PLUGIN_DEFINE( cen_centaur, analyzeDmiChnlFail ); + +//------------------------------------------------------------------------------ + +/** + * @brief Calls analyze() on the target MBA if there is an active RCD parity + * error. + * @param i_mbChip MEMBUF chip. + * @param io_sc Step code data struct + * @param i_mbaPos The MBA position relative to the MEMBUF. + * @return SUCCESS if the RCD parity error was present and analyzed properly. + * Non-SUCCESS otherwise. + */ +int32_t analyzeMbaRcdParityError( ExtensibleChip * i_mbChip, + STEP_CODE_DATA_STRUCT & io_sc, + uint32_t i_mbaPos ) +{ + #define PRDF_FUNC "[analyzeMbaRcdParityError] " + + int32_t o_rc = PRD_SCAN_COMM_REGISTER_ZERO; // default, nothing found + + do + { + ExtensibleChip * mbaChip = getConnectedChild( i_mbChip, TYPE_MBA, + i_mbaPos ); + if ( nullptr == mbaChip ) + { + o_rc = PRD_UNRESOLVED_CHIP_CONNECTION; // no chip + break; + } + + SCAN_COMM_REGISTER_CLASS * fir = mbaChip->getRegister("MBACALFIR"); + SCAN_COMM_REGISTER_CLASS * msk = mbaChip->getRegister("MBACALFIR_MASK"); + + int32_t l_rc = fir->Read() | msk->Read(); + + if ( SUCCESS != l_rc ) + { + PRDF_ERR( PRDF_FUNC "register read failed on 0x%08x", + mbaChip->getHuid() ); + o_rc = l_rc; // proper return code from SCOM error. + break; + } + + // If any of the MBACALFIR parity error bits are set, analyze the MBA. + if ( ( fir->IsBitSet(4) && !msk->IsBitSet(4) ) || + ( fir->IsBitSet(7) && !msk->IsBitSet(7) ) ) + { + o_rc = mbaChip->Analyze( io_sc, + io_sc.service_data->getSecondaryAttnType() ); + } + + } while (0); + + return o_rc; + + #undef PRDF_FUNC +} +PRDF_PLUGIN_DEFINE( cen_centaur, analyzeMbaRcdParityError ); + +// Define the plugins for RCD parity error memory UE side-effects +#define PLUGIN_RCD_PARITY_UE_SIDEEFFECTS( MBA ) \ +int32_t analyzeMbaRcdParityError##MBA( ExtensibleChip * i_mbChip, \ + STEP_CODE_DATA_STRUCT & io_sc) \ +{ \ + return analyzeMbaRcdParityError( i_mbChip, io_sc, MBA ); \ +} \ +PRDF_PLUGIN_DEFINE( cen_centaur, analyzeMbaRcdParityError##MBA ); + +PLUGIN_RCD_PARITY_UE_SIDEEFFECTS( 0 ) +PLUGIN_RCD_PARITY_UE_SIDEEFFECTS( 1 ) + +#undef PLUGIN_RCD_PARITY_UE_SIDEEFFECTS + //------------------------------------------------------------------------------ } // end namespace cen_centaur diff --git a/src/usr/diag/prdf/common/plat/pegasus/Mcs.rule b/src/usr/diag/prdf/common/plat/pegasus/Mcs.rule index f56bb9c60..3e8cced5f 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Mcs.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Mcs.rule @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2012,2016 +# Contributors Listed Below - COPYRIGHT 2012,2018 # [+] International Business Machines Corp. # # @@ -256,7 +256,7 @@ group gMciFir attntype CHECK_STOP, RECOVERABLE, SPECIAL, UNIT_CS /** MCIFIR[10] * MCIFIRQ_CRC_PERFORMANCE_DEGRADATION */ - (MciFir, bit(10)) ? analyzeSpareBitAndThr; + (MciFir, bit(10)) ? defaultMaskedError; /** MCIFIR[11] * MCIFIRQ_CHANNEL_INTERLOCK_FAIL @@ -549,13 +549,6 @@ actionclass CalloutDmiBusAndThr2pd threshold2pday; }; -/** If there is a lane repair attention, do nothing. Otherwise, callout DMI bus - with threshold of 2/day. */ -actionclass analyzeSpareBitAndThr -{ - try( funccall("checkSpareBit"), CalloutDmiBusAndThr2pd ); -}; - /** The plugin checks if the Proc is either Murano DD2 or Venice DD1. If neither, then callout thresholdAndMask_self and change signature to DD1: MCIFIRQ_INTERNAL_SCOM_ERROR. */ diff --git a/src/usr/diag/prdf/common/plat/pegasus/Membuf.rule b/src/usr/diag/prdf/common/plat/pegasus/Membuf.rule index b499a2981..61dd6bfba 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Membuf.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Membuf.rule @@ -1146,7 +1146,7 @@ group gMBIFIR filter priority( 8, 9, 19, 20, 6, 0, 16, 5, 10 ), /** MBIFIR[0] * Replay Timeout */ - (rMBIFIR, bit(0)) ? replayTimeOutError; + (rMBIFIR, bit(0)) ? replay_timeout_UERE; /** MBIFIR[1] * Channel Fail @@ -1196,7 +1196,7 @@ group gMBIFIR filter priority( 8, 9, 19, 20, 6, 0, 16, 5, 10 ), /** MBIFIR[10] * CRC Performance Degradation */ - (rMBIFIR, bit(10)) ? analyzeSpareBitAndThr; + (rMBIFIR, bit(10)) ? defaultMaskedError; /** MBIFIR[11] * Global Host MC Checkstop @@ -1307,15 +1307,12 @@ group gMBSFIR filter singlebit, cs_root_cause( 0, 1, 2, 4, 6, 8, 10, 13, 16, 18, /** MBSFIR[4] * INTERNAL_TIMEOUT */ - (rMBSFIR, bit(4)) ? internalTimeout; + (rMBSFIR, bit(4)) ? mbs_internal_timeout; /** MBSFIR[3,4] * EXTERNAL_TIMEOUT */ - # NOTE: The signature will match the external timeout, but we will still - # call the internalTimeout plugin because there is extra processing - # done to handle parity errors and such. - (rMBSFIR, bit(3,4)) ? internalTimeout; + (rMBSFIR, bit(3,4)) ? mbs_int_ext_timeout; /** MBSFIR[5] * INT_BUFFER_CE diff --git a/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule b/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule index 5f9c522e7..8a4869233 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule @@ -35,36 +35,16 @@ actionclass calloutDmiBus funccall("calloutInterface_dmi"); }; -/** Handles MCS Chnl XSTOP if present otherwise handles MBIFIR Replay Timeout */ -actionclass replayTimeOutError -{ - try( funccall("handleMcsChnlCs"), clearSecMbsBitsCalloutDmiBusTh1UE ); -}; - -/** Handles MBACAL parity err if present, else handles MBS Internal Timeout */ -actionclass internalTimeout -{ - threshold1; - funccall("internalTimeout"); # must be called last so rc is passed on -}; - /** Handles MBACAL parity err if present, else handles MBA0 MBSECC Memory UE */ actionclass mba0MemoryUe { - try ( funccall("handleSingleMbaCalParityErr0"), analyzeFetchUe0 ); + try ( funccall("analyzeMbaRcdParityError0"), analyzeFetchUe0 ); }; /** Handles MBACAL parity err if present, else handles MBA1 MBSECC Memory UE */ actionclass mba1MemoryUe { - try ( funccall("handleSingleMbaCalParityErr1"), analyzeFetchUe1 ); -}; - -/** Clear MBS SecondaryBits and calloutBusInterface_dmibus_th1_UERE */ -actionclass clearSecMbsBitsCalloutDmiBusTh1UE -{ - funccall("ClearMbsSecondaryBits"); - calloutBusInterface_dmibus_th1_UERE; + try ( funccall("analyzeMbaRcdParityError1"), analyzeFetchUe1 ); }; /** Callout the DMI bus, threshold 1 */ @@ -73,12 +53,6 @@ actionclass calloutDmiBusTh1 { calloutDmiBus; threshold1; }; /** Callout the DMI bus, threshold 2 per day */ actionclass calloutDmiBusTh2pday { calloutDmiBus; threshold2pday; }; -/** If no sparebit is set, execute calloutDmiBusTh2pday*/ -actionclass analyzeSpareBitAndThr -{ - try( funccall("checkSpareBit"), calloutDmiBusTh2pday ); -}; - /** Analyze a fetch MPE on MBA0 rank 0 */ actionclass analyzeFetchMpe0_0 { funccall("AnalyzeFetchMpe0_0"); }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C index 4053a5414..0ff352b44 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C @@ -264,29 +264,6 @@ int32_t maxSparesExceeded( ExtensibleChip * i_membChip, } PRDF_PLUGIN_DEFINE( Membuf, maxSparesExceeded ); -/** - * @brief Checks if spare deployed bit for DMI bus is set. - * @param i_mbChip Membuf chip - * @param i_sc The step code data struct. - * @return SUCCESS if bit is on, FAIL otherwise. - */ -int32_t checkSpareBit( ExtensibleChip * i_mbChip, - STEP_CODE_DATA_STRUCT & i_sc ) -{ - using namespace LaneRepair; - int32_t l_rc = FAIL; - - ExtensibleChip * mcsChip = getMembufDataBundle( i_mbChip )->getMcsChip(); - - if ( true == isSpareBitOnDMIBus( mcsChip, i_mbChip )) - { - l_rc = SUCCESS; - } - - return l_rc; -} -PRDF_PLUGIN_DEFINE( Membuf, checkSpareBit ); - //############################################################################## // // MBSECCFIRs @@ -647,217 +624,6 @@ PLUGIN_FETCH_UE_ERROR( 1 ) //------------------------------------------------------------------------------ -/** - * @brief Handles MCS Channel fail bits, if they exist. - * - * @param i_membChip The Centaur chip. - * @param i_sc ServiceDataColector. - * - * @return SUCCESS if MCS channel fail is present and properly - * handled, FAIL otherwise. - */ -int32_t handleMcsChnlCs( ExtensibleChip * i_membChip, - STEP_CODE_DATA_STRUCT & i_sc ) -{ - #define PRDF_FUNC "[handleMcsChnlCs] " - - // We will return FAIL from this function if MCS channel fail bits - // are not set. If MCS channel fail bits are set, we will try to analyze - // Mcs. If MCS is not analyzed properly, we will return FAIL. - // This will trigger rule code to execute alternate resolution. - - int32_t l_rc = SUCCESS; - do - { - CenMembufDataBundle * mbdb = getMembufDataBundle( i_membChip ); - ExtensibleChip * mcsChip = mbdb->getMcsChip(); - if( NULL == mcsChip ) - { - l_rc = FAIL; - break; - } - - SCAN_COMM_REGISTER_CLASS * mciFir = mcsChip->getRegister("MCIFIR"); - SCAN_COMM_REGISTER_CLASS * mciFirMask = - mcsChip->getRegister("MCIFIR_MASK"); - - l_rc = mciFir->Read(); - l_rc |= mciFirMask->Read(); - - if ( SUCCESS != l_rc ) - { - PRDF_ERR( PRDF_FUNC "MCIFIR/MCIFIR_MASK read failed for 0x%08x", - mcsChip->GetId()); - break; - } - - // If any of MCS channel fail bit is set, we will analyze - // MCS. It is safe to do hard coded check as channel fail - // bits are hard wired and and they can not change without HW - // change. - // bits 0,1, 6, 8, 9, 22, 23, 40 are channel fail bits. - uint64_t chnlCsBitsMask = 0xC2C0030000800000ull; - uint64_t mciFirBits = mciFir->GetBitFieldJustified(0, 64); - uint64_t mciFirMaskBits = mciFirMask->GetBitFieldJustified(0, 64); - - if ( mciFirBits & ~mciFirMaskBits & chnlCsBitsMask ) - { - l_rc = mcsChip->Analyze( i_sc, - i_sc.service_data->getSecondaryAttnType() ); - - if( SUCCESS == l_rc ) break; - } - - l_rc = FAIL; - - }while( 0 ); - - return l_rc; - #undef PRDF_FUNC - -} PRDF_PLUGIN_DEFINE( Membuf, handleMcsChnlCs ); - -//------------------------------------------------------------------------------ - -/** - * @brief Handles MBACALFIR RCD Parity error bits, if they exist on a single mba - * - * @param i_membChip The Centaur chip. - * @param i_sc ServiceDataCollector. - * @param i_mbaPos The MBA position. - * - * @return SUCCESS if MBACALFIR Parity error is present and properly - * handled, FAIL otherwise. - */ -int32_t handleSingleMbaCalParityErr( ExtensibleChip * i_membChip, - STEP_CODE_DATA_STRUCT & i_sc, - uint32_t i_mbaPos) -{ - #define PRDF_FUNC "[handleSingleMbaCalParityErr] " - - int32_t l_rc = SUCCESS; - - CenMembufDataBundle * mbdb = getMembufDataBundle( i_membChip ); - - do - { - ExtensibleChip * mbaChip = mbdb->getMbaChip(i_mbaPos); - if ( NULL == mbaChip ) - { - l_rc = FAIL; - break; - } - - SCAN_COMM_REGISTER_CLASS * mbaCalFir = - mbaChip->getRegister("MBACALFIR"); - SCAN_COMM_REGISTER_CLASS * mbaCalMask = - mbaChip->getRegister("MBACALFIR_MASK"); - - l_rc = mbaCalFir->Read(); - l_rc |= mbaCalMask->Read(); - - if ( SUCCESS != l_rc ) - { - PRDF_ERR( PRDF_FUNC "MBACALFIR/MBACALFIR_MASK read failed for" - "0x%08x", mbaChip->GetId()); - break; - } - - // If any of the MBACALFIR parity error bits are set, we will - // analyze the MBA. - // bits 4 and 7 are parity error bits - bool bit4 = mbaCalFir->IsBitSet(4); - bool mask4 = mbaCalMask->IsBitSet(4); - - bool bit7 = mbaCalFir->IsBitSet(7); - bool mask7 = mbaCalMask->IsBitSet(7); - - if ( ( bit4 && !mask4 ) || ( bit7 && !mask7 ) ) - { - l_rc = mbaChip->Analyze( i_sc, - i_sc.service_data->getSecondaryAttnType() ); - if ( SUCCESS == l_rc ) break; - } - - l_rc = FAIL; - - }while(0); - - return l_rc; - #undef PRDF_FUNC - -} PRDF_PLUGIN_DEFINE( Membuf, handleSingleMbaCalParityErr ); - -//------------------------------------------------------------------------------ - -/** - * @brief MBSFIR[4] - Internal Timeout error. - * @param i_mbChip The Centaur chip - * @param i_sc Step code data struct - * @return Non-SUCCESS if analysis fails. SUCCESS otherwise. - */ -int32_t internalTimeout( ExtensibleChip * i_mbChip, - STEP_CODE_DATA_STRUCT & i_sc ) -{ - #define PRDF_FUNC "[internalTimeout] " - - int32_t o_rc = SUCCESS; - - do - { - // First, check if there are any MBACALFIR parity errors. - for ( uint32_t i = 0; i < MAX_MBA_PER_MEMBUF; i++) - { - o_rc = handleSingleMbaCalParityErr( i_mbChip, i_sc, i ); - - // If SUCCESS is returned, then there was a parity error and - // analysis was successful. - if ( SUCCESS == o_rc ) break; - } - if ( SUCCESS == o_rc ) break; // nothing more to do. - - // Next, check if there was an MBSFIR external timeout. - SCAN_COMM_REGISTER_CLASS * fir = i_mbChip->getRegister("MBSFIR"); - o_rc = fir->Read(); - if ( SUCCESS != o_rc ) - { - PRDF_ERR( PRDF_FUNC "failed to read MBSFIR on 0x%08x", - i_mbChip->GetId() ); - break; - } - - if ( fir->IsBitSet(3) ) - { - if ( CHECK_STOP == i_sc.service_data->getPrimaryAttnType() ) - { - // In this case, we do not want the internal timeout to be - // blamed as the root cause of the checkstop. So move onto the - // next FIR bit. - o_rc = PRD_SCAN_COMM_REGISTER_ZERO; - } - else - { - // Make the callout of the external timeout error. - i_sc.service_data->SetCallout( LEVEL2_SUPPORT, - MRU_MED, NO_GARD ); - } - } - else - { - // The internal timeout error is on by itself. - i_sc.service_data->SetCallout( i_mbChip->GetChipHandle(), MRU_MED ); - } - - } while (0); - - return o_rc; - - #undef PRDF_FUNC - -} PRDF_PLUGIN_DEFINE( Membuf, internalTimeout ); - -//------------------------------------------------------------------------------ - // Define the plugins for memory ECC errors. #define PLUGIN_FETCH_ECC_ERROR( TYPE, MBA ) \ int32_t AnalyzeFetch##TYPE##MBA( ExtensibleChip * i_membChip, \ @@ -892,18 +658,6 @@ PLUGIN_FETCH_RCE_PREUE_ERROR( PreUe, 1, false ) #undef PLUGIN_FETCH_RCE_PREUE_ERROR -// Define the plugins for RCD parity error memory UE side-effects -#define PLUGIN_RCD_PARITY_UE_SIDEEFFECTS( MBA ) \ -int32_t handleSingleMbaCalParityErr##MBA( ExtensibleChip * i_membChip, \ - STEP_CODE_DATA_STRUCT & i_sc) \ -{ \ - return handleSingleMbaCalParityErr( i_membChip, i_sc, MBA ); \ -} \ -PRDF_PLUGIN_DEFINE( Membuf, handleSingleMbaCalParityErr##MBA ); - -PLUGIN_RCD_PARITY_UE_SIDEEFFECTS ( 0 ) -PLUGIN_RCD_PARITY_UE_SIDEEFFECTS ( 1 ) - //------------------------------------------------------------------------------ int32_t calloutInterface_dmi( ExtensibleChip * i_membChip, diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C b/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C index 1d9ff4822..8be057233 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2017 */ +/* Contributors Listed Below - COPYRIGHT 2013,2018 */ /* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ @@ -255,63 +255,6 @@ int32_t handleLaneRepairEvent( ExtensibleChip * i_chip, //----------------------------------------------------------------------------- -bool isSpareBitOnDMIBus( ExtensibleChip * i_mcsChip, ExtensibleChip * i_mbChip ) -{ - bool bitOn = false; - - do - { - // If any of these object is NULL, spare bit should not be on. - if ( ( NULL == i_mcsChip ) || ( NULL == i_mbChip )) - break; - - // check spare deployed bit on Centaur side - SCAN_COMM_REGISTER_CLASS * dmiFir = i_mbChip->getRegister( "DMIFIR" ); - int32_t rc = dmiFir->Read(); - if ( SUCCESS != rc ) - { - PRDF_ERR("isSpareBitOnDMIBus() : Failed to read DMIFIR." - "MEMBUF: 0x%08X", getHuid( i_mbChip->GetChipHandle()) ); - break; - } - if ( dmiFir->IsBitSet( 9 )) - { - bitOn = true; - break; - } - - // check spare deployed bit on Proc side - TargetHandle_t mcsTgt = i_mcsChip->GetChipHandle(); - TargetHandle_t procTgt = getConnectedParent( mcsTgt, TYPE_PROC ); - ExtensibleChip * procChip = - ( ExtensibleChip * )systemPtr->GetChip( procTgt ); - - uint32_t mcsPos = getTargetPosition( mcsTgt ); - - const char * regStr = ( 4 > mcsPos) ? "IOMCFIR_0" : "IOMCFIR_1"; - SCAN_COMM_REGISTER_CLASS * iomcFir = procChip->getRegister( regStr ); - rc = iomcFir->Read(); - if ( SUCCESS != rc ) - { - PRDF_ERR("isSpareBitOnDMIBus() : Failed to read %s." - "MCS: 0x%08X", regStr, getHuid(mcsTgt) ); - break; - } - // Bit 9, 17, 25 and 33 are for spare deployed. - // Check bit corrosponding to MCS position - uint8_t bitPos = 9 + ( mcsPos % 4 ) *8; - if ( iomcFir->IsBitSet(bitPos)) - { - bitOn = true; - } - - }while(0); - - return bitOn; -} - -//----------------------------------------------------------------------------- - int32_t cleanupSecondaryFirBits( ExtensibleChip * i_chip, TYPE i_busType, uint32_t i_busPos ) diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.H b/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.H index 8c04e6135..cdae757ce 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2015 */ +/* Contributors Listed Below - COPYRIGHT 2013,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -73,17 +73,6 @@ namespace LaneRepair TARGETING::TYPE i_busType, uint32_t i_busPos ); - /** - * @brief Checks if spare bit is set for DMI Bus. - * @param i_mcsChip MCS chip. - * @param i_mbChip Membuf chip. - * @return True if spare bit is set false otherwise. - * @note This function will check both ends of DMI bus to check - * if spare deployed attention is raised on any side. - */ - bool isSpareBitOnDMIBus( ExtensibleChip * i_mcsChip, - ExtensibleChip * i_mbChip ); - } // end namespace LaneRepair } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C index 52020a1f8..02f021e76 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2015 */ +/* Contributors Listed Below - COPYRIGHT 2012,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -139,32 +139,6 @@ int32_t PostAnalysis( ExtensibleChip * i_mcsChip, } PRDF_PLUGIN_DEFINE( Mcs, PostAnalysis ); -/** - * @brief Checks if spare deployed bit for DMI bus for this MCS is set. - * @param i_mcsChip MCS chip - * @param i_sc The step code data struct. - * @return SUCCESS if bit is on, FAIL otherwise. - */ -int32_t checkSpareBit( ExtensibleChip * i_mcsChip, - STEP_CODE_DATA_STRUCT & i_sc ) -{ - using namespace LaneRepair; - - int32_t l_rc = FAIL; // Default is to handle the attention (via rule code). - - ExtensibleChip * mbChip = getMcsDataBundle( i_mcsChip )->getMembChip(); - - if ( isSpareBitOnDMIBus(i_mcsChip, mbChip) ) - { - // Ignore attention and do not commit the error log. - i_sc.service_data->setDontCommitErrl(); - l_rc = SUCCESS; - } - - return l_rc; -} -PRDF_PLUGIN_DEFINE( Mcs, checkSpareBit ); - /** * @fn ClearMbsSecondaryBits * @brief Clears MBS secondary Fir bits which may come up because of MCIFIR -- cgit v1.2.1