diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2018-04-20 15:26:25 -0500 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2018-04-27 12:14:37 -0400 |
commit | ab3cba6aa16d2c55296d8f1debcd0f732f85c498 (patch) | |
tree | 54ce53a69cda4639d5e9069e3a062fb26cfef017 /src/usr/diag/prdf/common/plat/cen | |
parent | 5170952d14e34b287fdf78d8a28f811ae4582f3d (diff) | |
download | talos-hostboot-ab3cba6aa16d2c55296d8f1debcd0f732f85c498.tar.gz talos-hostboot-ab3cba6aa16d2c55296d8f1debcd0f732f85c498.zip |
PRD: single bit analysis support for MBA target
Change-Id: I1991f107f6b56a168656cacc216217b87d117810
RTC: 187481
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57527
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Matt Derksen <mderkse1@us.ibm.com>
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57881
CI-Ready: Zane C. Shelley <zshelle@us.ibm.com>
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/common/plat/cen')
7 files changed, 326 insertions, 42 deletions
diff --git a/src/usr/diag/prdf/common/plat/cen/cen_centaur_regs.rule b/src/usr/diag/prdf/common/plat/cen/cen_centaur_regs.rule index bef16d5a2..0fa0f5557 100644 --- a/src/usr/diag/prdf/common/plat/cen/cen_centaur_regs.rule +++ b/src/usr/diag/prdf/common/plat/cen/cen_centaur_regs.rule @@ -36,12 +36,24 @@ }; ############################################################################ - # Additional regs for CEN target MBSECCFIR + # Centaur chip MBSFIR + ############################################################################ + + register MBSFIR_MASK_OR + { + name "Centaur chip MBSFIR MASK atomic OR"; + scomaddr 0x02011405; + capture group never; + access write_only; + }; + + ############################################################################ + # Centaur chip MBSECCFIR 0 ############################################################################ register MBSECCFIR_0_AND { - name "Centaur chip MBSECCFIR_0 atomic AND"; + name "Centaur chip MBSECCFIR 0 atomic AND"; scomaddr 0x02011441; capture group never; access write_only; @@ -49,7 +61,7 @@ register MBSECCFIR_0_MASK_AND { - name "MBU.MBS.ECC01.MBECCFIR_MASK_AND"; + name "Centaur chip MBSECCFIR 0 MASK atomic AND"; scomaddr 0x02011444; capture group never; access write_only; @@ -57,15 +69,19 @@ register MBSECCFIR_0_MASK_OR { - name "MBU.MBS.ECC01.MBECCFIR_MASK_OR"; + name "Centaur chip MBSECCFIR 0 MASK atomic OR"; scomaddr 0x02011445; capture group never; access write_only; }; + ############################################################################ + # Centaur chip MBSECCFIR 0 + ############################################################################ + register MBSECCFIR_1_AND { - name "Centaur chip MBSECCFIR_1 atomic AND"; + name "Centaur chip MBSECCFIR 1 atomic AND"; scomaddr 0x02011481; capture group never; access write_only; @@ -73,7 +89,7 @@ register MBSECCFIR_1_MASK_AND { - name "MBU.MBS.ECC23.MBECCFIR_MASK_AND"; + name "Centaur chip MBSECCFIR 1 MASK atomic AND"; scomaddr 0x02011484; capture group never; access write_only; @@ -81,7 +97,7 @@ register MBSECCFIR_1_MASK_OR { - name "MBU.MBS.ECC23.MBECCFIR_MASK_OR"; + name "Centaur chip MBSECCFIR 1 MASK atomic OR"; scomaddr 0x02011485; capture group never; access write_only; diff --git a/src/usr/diag/prdf/common/plat/cen/cen_common_actions.rule b/src/usr/diag/prdf/common/plat/cen/cen_common_actions.rule index e9f2e9b3b..366e7353f 100644 --- a/src/usr/diag/prdf/common/plat/cen/cen_common_actions.rule +++ b/src/usr/diag/prdf/common/plat/cen/cen_common_actions.rule @@ -149,6 +149,7 @@ actionclass level2_th_1 # Callouts with flags # ################################################################################ +actionclass self_th_1_UERE { self_th_1; SueSource; }; actionclass level2_th_1_UERE { level2_th_1; SueSource; }; ################################################################################ diff --git a/src/usr/diag/prdf/common/plat/cen/cen_mba.rule b/src/usr/diag/prdf/common/plat/cen/cen_mba.rule index 23b6f4f3e..19dfe0c8c 100644 --- a/src/usr/diag/prdf/common/plat/cen/cen_mba.rule +++ b/src/usr/diag/prdf/common/plat/cen/cen_mba.rule @@ -244,7 +244,10 @@ rule rMBACALFIR MBACALFIR & ~MBACALFIR_MASK & ~MBACALFIR_ACT0 & MBACALFIR_ACT1; }; -group gMBACALFIR filter singlebit, cs_root_cause +# RCD parity errors (bits 4 and 7) given priority over potential side effects +# bits 2 and 17. +group gMBACALFIR filter priority( 4, 7 ), + cs_root_cause( 0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 13, 15, 17, 18 ) { /** MBACALFIR[0] * MBA_RECOVERABLE_ERROR @@ -254,12 +257,12 @@ group gMBACALFIR filter singlebit, cs_root_cause /** MBACALFIR[1] * MBA_NONRECOVERABLE_ERROR */ - (rMBACALFIR, bit(1)) ? self_th_1; + (rMBACALFIR, bit(1)) ? self_th_1_UERE; /** MBACALFIR[2] * REFRESH_OVERRUN */ - (rMBACALFIR, bit(2)) ? self_th_1; + (rMBACALFIR, bit(2)) ? self_th_32perDay; /** MBACALFIR[3] * WAT_ERROR @@ -269,7 +272,7 @@ group gMBACALFIR filter singlebit, cs_root_cause /** MBACALFIR[4] * RCD parity error on port 0 */ - (rMBACALFIR, bit(4)) ? TBDDefaultCallout; + (rMBACALFIR, bit(4)) ? rcd_parity_error_port0_UERE; /** MBACALFIR[5] * DDR0_CAL_TIMEOUT_ERR @@ -284,7 +287,7 @@ group gMBACALFIR filter singlebit, cs_root_cause /** MBACALFIR[7] * RCD parity error on port 1 */ - (rMBACALFIR, bit(7)) ? TBDDefaultCallout; + (rMBACALFIR, bit(7)) ? rcd_parity_error_port1_UERE; /** MBACALFIR[8] * MBX_TO_MBA_PAR_ERROR @@ -294,7 +297,7 @@ group gMBACALFIR filter singlebit, cs_root_cause /** MBACALFIR[9] * MBA_WRD_UE */ - (rMBACALFIR, bit(9)) ? self_th_1; + (rMBACALFIR, bit(9)) ? self_th_1_UERE; /** MBACALFIR[10] * MBA_WRD_CE @@ -304,7 +307,7 @@ group gMBACALFIR filter singlebit, cs_root_cause /** MBACALFIR[11] * MBA_MAINT_UE */ - (rMBACALFIR, bit(11)) ? self_th_1; + (rMBACALFIR, bit(11)) ? self_th_1_UERE; /** MBACALFIR[12] * MBA_MAINT_CE @@ -314,7 +317,7 @@ group gMBACALFIR filter singlebit, cs_root_cause /** MBACALFIR[13] * DDR_CAL_RESET_TIMEOUT */ - (rMBACALFIR, bit(13)) ? self_th_1; + (rMBACALFIR, bit(13)) ? self_th_1_UERE; /** MBACALFIR[14] * WRQ_DATA_CE @@ -324,7 +327,7 @@ group gMBACALFIR filter singlebit, cs_root_cause /** MBACALFIR[15] * WRQ_DATA_UE */ - (rMBACALFIR, bit(15)) ? self_th_1; + (rMBACALFIR, bit(15)) ? self_th_1_UERE; /** MBACALFIR[16] * WRQ_DATA_SUE @@ -339,7 +342,7 @@ group gMBACALFIR filter singlebit, cs_root_cause /** MBACALFIR[18] * SM_1HOT_ERR */ - (rMBACALFIR, bit(18)) ? self_th_1; + (rMBACALFIR, bit(18)) ? self_th_1_UERE; /** MBACALFIR[19] * WRD_SCOM_ERROR @@ -454,7 +457,7 @@ group gMBAFIR filter singlebit, cs_root_cause( 3, 5, 6, 7, 8 ) /** MBAFIR[3] * Internal FSM parity error */ - (rMBAFIR, bit(3)) ? self_th_1; + (rMBAFIR, bit(3)) ? self_th_1_UERE; /** MBAFIR[4] * MCBIST error @@ -464,22 +467,22 @@ group gMBAFIR filter singlebit, cs_root_cause( 3, 5, 6, 7, 8 ) /** MBAFIR[5] * SCOM command register parity error */ - (rMBAFIR, bit(5)) ? self_th_1; + (rMBAFIR, bit(5)) ? self_th_1_UERE; /** MBAFIR[6] * Unrecoverable channel error */ - (rMBAFIR, bit(6)) ? self_th_1; + (rMBAFIR, bit(6)) ? self_th_1_UERE; /** MBAFIR[7] * UE or CE Error in WRD caw2 data latches */ - (rMBAFIR, bit(7)) ? self_th_1; + (rMBAFIR, bit(7)) ? self_th_1_UERE; /** MBAFIR[8] * Illegal transition maint state machine */ - (rMBAFIR, bit(8)) ? self_th_1; + (rMBAFIR, bit(8)) ? self_th_1_UERE; /** MBAFIR[9:14] * RESERVED @@ -513,7 +516,7 @@ group gMBASPA filter singlebit, cs_root_cause /** MBASPA[0] * Maintenance command complete */ - (rMBASPA, bit(0)) ? maintenance_command_complete; # DD2+ only + (rMBASPA, bit(0)) ? maint_cmd_complete; /** MBASPA[1] * Hard NCE ETE @@ -579,17 +582,17 @@ rule rMBADDRPHYFIR MBADDRPHYFIR & ~MBADDRPHYFIR_MASK & ~MBADDRPHYFIR_ACT0 & MBADDRPHYFIR_ACT1; }; -group gMBADDRPHYFIR filter singlebit, cs_root_cause +group gMBADDRPHYFIR filter singlebit, cs_root_cause( 48, 49, 51, 52, 56, 57, 59, 60 ) { /** MBADDRPHYFIR[48] * FSM Error Checkstop */ - (rMBADDRPHYFIR, bit(48)) ? self_th_1; + (rMBADDRPHYFIR, bit(48)) ? self_th_1_UERE; /** MBADDRPHYFIR[49] * Parity Error Checkstop */ - (rMBADDRPHYFIR, bit(49)) ? self_th_1; + (rMBADDRPHYFIR, bit(49)) ? self_th_1_UERE; /** MBADDRPHYFIR[50] * Calibration Error RE @@ -619,12 +622,12 @@ group gMBADDRPHYFIR filter singlebit, cs_root_cause /** MBADDRPHYFIR[56] * FSM Error Checkstop */ - (rMBADDRPHYFIR, bit(56)) ? self_th_1; + (rMBADDRPHYFIR, bit(56)) ? self_th_1_UERE; /** MBADDRPHYFIR[57] * Parity Error Checkstop */ - (rMBADDRPHYFIR, bit(57)) ? self_th_1; + (rMBADDRPHYFIR, bit(57)) ? self_th_1_UERE; /** MBADDRPHYFIR[58] * Calibration Error RE diff --git a/src/usr/diag/prdf/common/plat/cen/cen_mba_actions.rule b/src/usr/diag/prdf/common/plat/cen/cen_mba_actions.rule index 05773a326..21b881dfd 100644 --- a/src/usr/diag/prdf/common/plat/cen/cen_mba_actions.rule +++ b/src/usr/diag/prdf/common/plat/cen/cen_mba_actions.rule @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2017 +# Contributors Listed Below - COPYRIGHT 2017,2018 # [+] International Business Machines Corp. # # @@ -24,8 +24,31 @@ # IBM_PROLOG_END_TAG /** Analyze maintenance command complete */ -actionclass maintenance_command_complete +actionclass maint_cmd_complete { funccall("MaintCmdComplete"); }; +/** Analyze RCD parity error */ +actionclass rcd_parity_error_UERE +{ + funccall("MaskRcdParitySideEffects"); + calloutSelfLow; + threshold1; + SueSource; +}; + +/** Analyze RCD parity error on port 0 */ +actionclass rcd_parity_error_port0_UERE +{ + funccall("CalloutDimmsOnPort0"); + rcd_parity_error_UERE; +}; + +/** Analyze RCD parity error on port 0 */ +actionclass rcd_parity_error_port1_UERE +{ + funccall("CalloutDimmsOnPort1"); + rcd_parity_error_UERE; +}; + diff --git a/src/usr/diag/prdf/common/plat/cen/cen_mba_regs.rule b/src/usr/diag/prdf/common/plat/cen/cen_mba_regs.rule index f1c9d2712..a4b32d98c 100644 --- a/src/usr/diag/prdf/common/plat/cen/cen_mba_regs.rule +++ b/src/usr/diag/prdf/common/plat/cen/cen_mba_regs.rule @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2017 +# Contributors Listed Below - COPYRIGHT 2017,2018 # [+] International Business Machines Corp. # # @@ -23,31 +23,70 @@ # # IBM_PROLOG_END_TAG + ############################################################################ + # Centaur chip MBA target MBACALFIR + ############################################################################ - ########################################################################### - # P9 MBASPA - ########################################################################### + register MBACALFIR_AND + { + name "Centaur chip MBA target MBACALFIR atomic AND"; + scomaddr 0x03010401; + capture group never; + access write_only; + }; - register MBASPA_OR + register MBACALFIR_MASK_OR { - name "Memory Buffer MBA SPA OR register"; - scomaddr 0x03010613; + name "Centaur chip MBA target MBACALFIR_MASK atomic OR"; + scomaddr 0x03010405; + capture group never; + access write_only; + }; + + ############################################################################ + # Centaur chip MBA target MBAFIR + ############################################################################ + + register MBAFIR_MASK_OR + { + name "Centaur chip MBA target MBAFIR_MASK atomic OR"; + scomaddr 0x03010605; capture group never; access write_only; }; ############################################################################ - # Additional regs for CEN MBA target MBASPA + # Centaur chip MBA target MBASPA ############################################################################ register MBASPA_AND { - name "CEN MBA target MBASPA atomic AND"; + name "Centaur chip MBA target MBASPA atomic AND"; scomaddr 0x03010612; capture group never; access write_only; }; + register MBASPA_OR + { + name "Centaur chip MBA target MBASPA atomic OR"; + scomaddr 0x03010613; + capture group never; + access write_only; + }; + + ############################################################################ + # Centaur chip MBA target MBADDRPHYFIR + ############################################################################ + + register MBADDRPHYFIR_AND + { + name "Centaur chip MBA target MBADDRPHYFIR atomic AND"; + scomaddr 0x800200910301143F; + capture group never; + access write_only; + }; + ############################################################################ # Maintenance Command Registers ############################################################################ @@ -60,8 +99,8 @@ capture group MaintCmdRegs; }; - # NOTE: PRD doesn't use MBMCC directly and the bits are cleared by HW so I - # see no reason to add it here. + # NOTE: PRD doesn't use MBMCC directly and the bits are cleared by HW so no + # reason to add it here. register MBMSR { diff --git a/src/usr/diag/prdf/common/plat/cen/prdfCenMba_common.C b/src/usr/diag/prdf/common/plat/cen/prdfCenMba_common.C new file mode 100644 index 000000000..4e7411ea6 --- /dev/null +++ b/src/usr/diag/prdf/common/plat/cen/prdfCenMba_common.C @@ -0,0 +1,197 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/common/plat/cen/prdfCenMba_common.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2017,2018 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ + +// Framework includes +#include <iipServiceDataCollector.h> +#include <prdfExtensibleChip.H> +#include <prdfPluginDef.H> +#include <prdfPluginMap.H> + +// Platform includes +#include <prdfCenMbaDataBundle.H> + +using namespace TARGETING; + +namespace PRDF +{ + +using namespace PlatServices; + +namespace cen_mba +{ + +//############################################################################## +// +// Special plugins +// +//############################################################################## + +/** + * @brief Plugin that initializes the data bundle. + * @param i_mbaChip An MBA chip. + * @return SUCCESS + */ +int32_t Initialize( ExtensibleChip * i_mbaChip ) +{ + i_mbaChip->getDataBundle() = new MbaDataBundle( i_mbaChip ); + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( cen_mba, Initialize ); + +//############################################################################## +// +// MBACALFIR +// +//############################################################################## + +void __calloutDimmsOnPort( ExtensibleChip * i_chip, uint32_t i_port, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + for ( auto & dimm : getConnected(i_chip->getTrgt(), TYPE_DIMM) ) + { + if ( getDimmPort<TYPE_MBA>(dimm) == i_port ) + io_sc.service_data->SetCallout( dimm, MRU_MEDA ); + } +} + +/** + * @brief Adds all DIMMs connected to MBA port 0 to the callout list. + * @param i_chip MBA chip + * @param io_sc The step code data struct. + * @return SUCCESS + */ +int32_t CalloutDimmsOnPort0( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + __calloutDimmsOnPort( i_chip, 0, io_sc ); + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( cen_mba, CalloutDimmsOnPort0 ); + +/** + * @brief Adds all DIMMs connected to MBA port 1 to the callout list. + * @param i_chip MBA chip + * @param io_sc The step code data struct. + * @return SUCCESS + */ +int32_t CalloutDimmsOnPort1( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + __calloutDimmsOnPort( i_chip, 1, io_sc ); + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( cen_mba, CalloutDimmsOnPort1 ); + +/** + * @brief Masks the all side effect attentions of an RCD parity error. + * @param i_mbaChip MBA chip + * @param io_sc The step code data struct. + * @return SUCCESS + */ +int32_t MaskRcdParitySideEffects( ExtensibleChip * i_mbaChip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + #define PRDF_FUNC "[cen_mba::MaskRcdParitySideEffects] " + + uint32_t l_rc = SUCCESS; + + do + { + // Don't do anything if this is a checkstop attention. + if ( CHECK_STOP == io_sc.service_data->getPrimaryAttnType() ) break; + + ExtensibleChip * membChip = getConnectedParent(i_mbaChip, TYPE_MEMBUF); + + SCAN_COMM_REGISTER_CLASS * mbsFir; + SCAN_COMM_REGISTER_CLASS * mbsFirMaskOr; + SCAN_COMM_REGISTER_CLASS * mbaCalFir; + SCAN_COMM_REGISTER_CLASS * mbaCalFirMaskOr; + SCAN_COMM_REGISTER_CLASS * mbaFir; + SCAN_COMM_REGISTER_CLASS * mbaFirMaskOr; + + mbsFir = membChip->getRegister( "MBSFIR" ); + mbsFirMaskOr = membChip->getRegister( "MBSFIR_MASK_OR" ); + mbaCalFir = i_mbaChip->getRegister("MBACALFIR" ); + mbaCalFirMaskOr = i_mbaChip->getRegister("MBACALFIR_MASK_OR"); + mbaFir = i_mbaChip->getRegister("MBAFIR" ); + mbaFirMaskOr = i_mbaChip->getRegister("MBAFIR_MASK_OR" ); + + l_rc |= mbsFir->Read(); + l_rc |= mbaCalFir->Read(); + l_rc |= mbaFir->Read(); + if ( SUCCESS != l_rc ) + { + PRDF_ERR( PRDF_FUNC "FIR read failed for MBA 0x%08x", + i_mbaChip->getHuid() ); + break; + } + + // Mask only if the side effect bit is set. + + if ( mbsFir->IsBitSet(4) ) // internal timeout + { + mbsFirMaskOr->SetBit(4); + l_rc |= mbsFirMaskOr->Write(); + } + + if ( mbaCalFir->IsBitSet(2) ) // refresh overrun + { + mbaCalFirMaskOr->SetBit(2); + l_rc = mbaCalFirMaskOr->Write(); + } + + if ( mbaCalFir->IsBitSet(17) ) // WRQ RRQ hang error + { + mbaCalFirMaskOr->SetBit(17); + l_rc = mbaCalFirMaskOr->Write(); + } + + if ( mbaFir->IsBitSet(2) ) // multi-address maint cmd timeout + { + mbaFirMaskOr->SetBit(2); + l_rc = mbaFirMaskOr->Write(); + } + + if ( SUCCESS != l_rc ) + { + PRDF_ERR( PRDF_FUNC "MASK_OR write failed for MBA 0x%08x", + i_mbaChip->getHuid() ); + break; + } + + } while (0); + + return SUCCESS; + + #undef PRDF_FUNC +} +PRDF_PLUGIN_DEFINE( cen_mba, MaskRcdParitySideEffects ); + +//------------------------------------------------------------------------------ + +} // end namespace cen_mba + +} // end namespace PRDF + diff --git a/src/usr/diag/prdf/common/plat/cen/prdf_plat_cen.mk b/src/usr/diag/prdf/common/plat/cen/prdf_plat_cen.mk index 956ba6cf2..f9d2d62ba 100644 --- a/src/usr/diag/prdf/common/plat/cen/prdf_plat_cen.mk +++ b/src/usr/diag/prdf/common/plat/cen/prdf_plat_cen.mk @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2016,2017 +# Contributors Listed Below - COPYRIGHT 2016,2018 # [+] International Business Machines Corp. # # @@ -37,4 +37,9 @@ prd_incpath += ${PRD_SRC_PATH}/common/plat/cen # Object files common to both FSP and Hostboot ################################################################################ +# plat/cen/ (non-rule plugin related) prd_obj += prdfCenMbaDomain.o + +# plat/cen/ (rule plugin related) +prd_rule_plugin += prdfCenMba_common.o + |