diff options
Diffstat (limited to 'src/usr/diag/prdf/plat')
43 files changed, 14322 insertions, 0 deletions
diff --git a/src/usr/diag/prdf/plat/pegasus/CommonActions.rule b/src/usr/diag/prdf/plat/pegasus/CommonActions.rule new file mode 100644 index 000000000..028bb8fa7 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/CommonActions.rule @@ -0,0 +1,111 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/CommonActions.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# This file is intended to create a common set of actionclasses for all rule +# files. Simply add the following line at the top the actionclass section of +# each rule file. +# +# .include "CommonActions.rule" +# +# Note that no indentation can be used for the .include keyword. +################################################################################ + +################################################################################ +# Thresholds and Flags # +################################################################################ +# FIXME These thresholds are just for demo purpose. +# Its new format. Once team is comfortable with new format we can remove them +# The syntax for new format is +# threshold ( field (errorFrequency[ time_units, time_base ] ), mfg|mfg_file (errorFrequency[........])) +# time_base can have sec|min|hour|day +# NOTE : Time finally will be changed the seconds.Maximum value supported is 0xffffffff (around 49710 days) +# If more then this value is specified, it will be truncated +/** Threshold of 1 */ +actionclass threshold1 +{ +# Field threshold 1 + threshold( field(1 / 0xffffffff sec) ); +}; + +/** Threshold of 2 per month */ +actionclass threshold2pmonth +{ +# Field threshold 2 per 30 days + threshold( field(2 / 30 day) ); +}; + +/** Threshold of 1 , mfg 2 per min*/ +actionclass threshold1mfg2pmin +{ +# Field threshold 1, mfg 2 per min +# if in time base ( sec|min|hour|day) nothing is specified , by defaut it is sec + threshold( field(1), mfg (2/min) ); +}; + +#FIXME: comment out so I can compile in Hostboot +##/** Threshold of 1 per second , mfg threshold P7CORE_L2_CACHE_CES (from mnfg file) */ +#actionclass threshold1per1SecwithField +#{ +# Field threshold 1 per second, mfg threshold will be taken from file +# threshold( field(1 / sec), mfg_file(P7CORE_L2_CACHE_CES) ); +#}; + +################################################################################ +# Simple Callouts # +################################################################################ + +/** Callout 2nd Level Support, priority medium */ +actionclass callout2ndLvlMed +{ + callout(procedure(NextLevelSupport_ENUM), MRU_MED); +}; + +################################################################################ +# Dump Types # +################################################################################ + +/** Dump SH */ +actionclass dumpSH +{ + dump(DUMP_CONTENT_SH); +}; + +################################################################################ +# Default callouts # +################################################################################ + +/** Default action for an unexpected unmasked bit */ +actionclass defaultMaskedError +{ + dumpSH; + callout2ndLvlMed; + threshold1; +}; + +/** Default TBD action */ +actionclass TBDDefaultCallout +{ + defaultMaskedError; +}; + diff --git a/src/usr/diag/prdf/plat/pegasus/Ex.rule b/src/usr/diag/prdf/plat/pegasus/Ex.rule new file mode 100644 index 000000000..d51ced0dd --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Ex.rule @@ -0,0 +1,1306 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Ex.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# +# Scope: +# Registers and actions for the following chiplets: +# Note that only addresses for EX0 will be used. +# +# Chiplet Register Addresses Description +# ======= ======================= ============================================ +# EX0 0x10000000 - 0x10FFFFFF EX0 pervasive logic +# EX1 0x11000000 - 0x11FFFFFF EX1 pervasive logic +# EX2 0x12000000 - 0x12FFFFFF EX2 pervasive logic +# EX3 0x13000000 - 0x13FFFFFF EX3 pervasive logic +# EX4 0x14000000 - 0x14FFFFFF EX4 pervasive logic +# EX5 0x15000000 - 0x15FFFFFF EX5 pervasive logic +# EX6 0x16000000 - 0x16FFFFFF EX6 pervasive logic +# EX7 0x17000000 - 0x17FFFFFF EX7 pervasive logic +# EX8 0x18000000 - 0x18FFFFFF EX8 pervasive logic +# EX9 0x19000000 - 0x19FFFFFF EX9 pervasive logic +# EX10 0x1A000000 - 0x1AFFFFFF EX10 pervasive logic +# EX11 0x1B000000 - 0x1BFFFFFF EX11 pervasive logic +# EX12 0x1C000000 - 0x1CFFFFFF EX12 pervasive logic +# EX13 0x1D000000 - 0x1DFFFFFF EX13 pervasive logic +# EX14 0x1E000000 - 0x1EFFFFFF EX14 pervasive logic +# EX15 0x1F000000 - 0x1FFFFFFF EX15 pervasive logic +# +################################################################################ + +chip Ex +{ + name "Power8 EX Chiplet"; + targettype TYPE_EX; + sigoff 0x8000; +# FIXME May need to update dump type + dump DUMP_CONTENT_HW; + scomlen 64; + + ############################################################################# + # # + # ###### # + # # # ###### #### ### #### ##### ###### ##### #### # + # # # # # # # # # # # # # # + # ###### ##### # # #### # ##### # # #### # + # # # # # ### # # # # ##### # # + # # # # # # # # # # # # # # # # + # # # ###### #### ### #### # ###### # # #### # + # # + ############################################################################# + + ############################################################################ + # EX Chiplet Registers + ############################################################################ + + register EX_CHIPLET_CS_FIR + { + name "EX00.TP.ECO_DOM.XFIR"; + scomaddr 0x10040000; + capture group default; + }; + + register EX_CHIPLET_RE_FIR + { + name "EX00.TP.ECO_DOM.RFIR"; + scomaddr 0x10040001; + capture group default; + }; + + register EX_CHIPLET_FIR_MASK + { + name "EX00.TP.ECO_DOM.FIR_MASK"; + scomaddr 0x10040002; + capture type secondary; + capture group default; + }; + + # EX special attention registers - Used for FFDC only + # Currently, all analysis of these registers is done by ATTN. + + register EX_CHIPLET_SPA + { + name "EX00.TP.ECO_DOM.EPS.FIR.SPATTN"; + scomaddr 0x10040004; + capture group default; + }; + + ############################################################################ + # EX Chiplet LFIR + ############################################################################ + + register EX_LFIR + { + name "EX00.TP.ECO_DOM.LOCAL_FIR"; + scomaddr 0x1004000a; + reset (&, 0x1004000b); + mask (|, 0x1004000f); + capture group default; + }; + + register EX_LFIR_MASK + { + name "EX00.TP.ECO_DOM.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x1004000d; + capture type secondary; + capture group default; + }; + + register EX_LFIR_ACT0 + { + name "EX00.TP.ECO_DOM.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x10040010; + capture type secondary; + capture group default; + }; + + register EX_LFIR_ACT1 + { + name "EX00.TP.ECO_DOM.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x10040011; + capture type secondary; + capture group default; + }; + + ############################################################################ + # EX Chiplet COREFIR + ############################################################################ + + register COREFIR + { + name "EX00.EC.PC.PC_NE.FIR.CORE_FIR"; + scomaddr 0x10013100; + reset (&, 0x10013101); + mask (|, 0x10013108); + capture group default; + }; + + register COREFIR_MASK + { + name "EX00.EC.PC.PC_NE.FIR.CORE_FIRMASK"; + scomaddr 0x10013106; + capture type secondary; + capture group default; + }; + + register COREFIR_ACT0 + { + name "EX00.EC.PC.PC_NE.FIR.CORE_ACTION0"; + scomaddr 0x10013103; + capture type secondary; + capture group default; + }; + + register COREFIR_ACT1 + { + name "EX00.EC.PC.PC_NE.FIR.CORE_ACTION1"; + scomaddr 0x10013104; + capture type secondary; + capture group default; + }; + + ############################################################################ + # EX Chiplet L2FIR + ############################################################################ + + register L2FIR + { + name "EX00.L2.L2MISC.L2CERRS.FIR_REG"; + scomaddr 0x10012800; + reset (&, 0x10012801); + mask (|, 0x10012805); + capture group default; + }; + + register L2FIR_MASK + { + name "EX00.L2.L2MISC.L2CERRS.FIR_MASK_REG"; + scomaddr 0x10012803; + capture type secondary; + capture group default; + }; + + register L2FIR_ACT0 + { + name "EX00.L2.L2MISC.L2CERRS.FIR_ACTION0_REG"; + scomaddr 0x10012806; + capture type secondary; + capture group default; + }; + + register L2FIR_ACT1 + { + name "EX00.L2.L2MISC.L2CERRS.FIR_ACTION1_REG"; + scomaddr 0x10012807; + capture type secondary; + capture group default; + }; + + ############################################################################ + # EX Chiplet L3FIR + ############################################################################ + + register L3FIR + { + name "EX00.L3.L3_MISC.L3CERRS.FIR_REG"; + scomaddr 0x10010800; + reset (&, 0x10010801); + mask (|, 0x10010805); + capture group default; + }; + + register L3FIR_MASK + { + name "EX00.L3.L3_MISC.L3CERRS.FIR_MASK_REG"; + scomaddr 0x10010803; + capture type secondary; + capture group default; + }; + + register L3FIR_ACT0 + { + name "EX00.L3.L3_MISC.L3CERRS.FIR_ACTION0_REG"; + scomaddr 0x10010806; + capture type secondary; + capture group default; + }; + + register L3FIR_ACT1 + { + name "EX00.L3.L3_MISC.L3CERRS.FIR_ACTION1_REG"; + scomaddr 0x10010807; + capture type secondary; + capture group default; + }; + + ############################################################################ + # EX Chiplet NCUFIR + ############################################################################ + + register NCUFIR + { + name "EX00.NC.NCMISC.NCSCOMS.FIR_REG"; + scomaddr 0x10010c00; + reset (&, 0x10010c01); + mask (|, 0x10010c05); + capture group default; + }; + + register NCUFIR_MASK + { + name "EX00.NC.NCMISC.NCSCOMS.FIR_MASK_REG"; + scomaddr 0x10010c03; + capture type secondary; + capture group default; + }; + + register NCUFIR_ACT0 + { + name "EX00.NC.NCMISC.NCSCOMS.FIR_ACTION0_REG"; + scomaddr 0x10010c06; + capture type secondary; + capture group default; + }; + + register NCUFIR_ACT1 + { + name "EX00.NC.NCMISC.NCSCOMS.FIR_ACTION1_REG"; + scomaddr 0x10010c07; + capture type secondary; + capture group default; + }; + + ############################################################################ + # EX Chiplet SPATTNs + ############################################################################ + + # EX special attention registers - Used for FFDC only + # Currently, all analysis of these registers is done by ATTN. + + register SPATTN_0 + { + name "EX00.EC.PC.PC_NE.TCTL0.SPATTN"; + scomaddr 0x10013007; + capture group default; + }; + + register SPATTN_1 + { + name "EX00.EC.PC.PC_NE.TCTL1.SPATTN"; + scomaddr 0x10013017; + capture group default; + }; + + register SPATTN_2 + { + name "EX00.EC.PC.PC_NE.TCTL2.SPATTN"; + scomaddr 0x10013027; + capture group default; + }; + register SPATTN_3 + { + name "EX00.EC.PC.PC_NE.TCTL3.SPATTN"; + scomaddr 0x10013037; + capture group default; + }; + + register SPATTN_4 + { + name "EX00.EC.PC.PC_NE.TCTL4.SPATTN"; + scomaddr 0x10013047; + capture group default; + }; + + register SPATTN_5 + { + name "EX00.EC.PC.PC_NE.TCTL5.SPATTN"; + scomaddr 0x10013057; + capture group default; + }; + + register SPATTN_6 + { + name "EX00.EC.PC.PC_NE.TCTL6.SPATTN"; + scomaddr 0x10013067; + capture group default; + }; + + register SPATTN_7 + { + name "EX00.EC.PC.PC_NE.TCTL7.SPATTN"; + scomaddr 0x10013077; + capture group default; + }; + +}; + + ############################################################################## + # # + # #### # # + # # # # # # ##### ### # # # ## ##### ### ### # # ### # + # # # # # # # # # # # # # # # # # ## # # # + # #### # # # #### ### # ####### # # # # # # # # ### # + # # # # # # # # # # # # # # # # # # ## # # + # # # ### #### ##### ### # # # ## # ### ### # # ### # + # # + ############################################################################## + +################################################################################ +# EX Chiplet Registers +################################################################################ + +rule ExChipetFir +{ + CHECK_STOP: + (EX_CHIPLET_CS_FIR & `1F00000000000000`) & ~EX_CHIPLET_FIR_MASK; + RECOVERABLE: + ((EX_CHIPLET_RE_FIR >> 2) & `1F00000000000000`) & ~EX_CHIPLET_FIR_MASK; +}; + +group gExChipetFir attntype CHECK_STOP, RECOVERABLE filter singlebit +{ + /** EX_CHIPLET_FIR[3] + * Attention from LFIR + */ + (ExChipetFir, bit(3))? analyze(gExLFir); + + /** EX_CHIPLET_FIR[4] + * Attention from COREFIR + */ + (ExChipetFir, bit(4)) ? analyze(gCoreFir); + + /** EX_CHIPLET_FIR[5] + * Attention from L2FIR + */ + (ExChipetFir, bit(5)) ? analyze(gL2Fir); + + /** EX_CHIPLET_FIR[6] + * Attention from L3FIR + */ + (ExChipetFir, bit(6)) ? analyze(gL3Fir); + + /** EX_CHIPLET_FIR[7] + * Attention from NCUFIR + */ + (ExChipetFir, bit(7)) ? analyze(gNcuFir); +}; + +################################################################################ +# EX Chiplet LFIR +################################################################################ + +rule ExLFir +{ + CHECK_STOP: EX_LFIR & ~EX_LFIR_MASK & ~EX_LFIR_ACT0 & ~EX_LFIR_ACT1; + RECOVERABLE: EX_LFIR & ~EX_LFIR_MASK & ~EX_LFIR_ACT0 & EX_LFIR_ACT1; +}; + +group gExLFir filter singlebit +{ + /** EX_LFIR[0] + * CFIR internal parity error + */ + (ExLFir, bit(0)) ? TBDDefaultCallout; + + /** EX_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (ExLFir, bit(1)) ? TBDDefaultCallout; + + /** EX_LFIR[2] + * Local errors from CC (PCB error) + */ + (ExLFir, bit(2)) ? TBDDefaultCallout; + + /** EX_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (ExLFir, bit(3)) ? TBDDefaultCallout; + + /** EX_LFIR[4] + * Local errors from PSC (PCB error) + */ + (ExLFir, bit(4)) ? TBDDefaultCallout; + + /** EX_LFIR[5] + * Local errors from PSC (parity error) + */ + (ExLFir, bit(5)) ? TBDDefaultCallout; + + /** EX_LFIR[6] + * Local errors from Thermal (parity error) + */ + (ExLFir, bit(6)) ? TBDDefaultCallout; + + /** EX_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (ExLFir, bit(7)) ? TBDDefaultCallout; + + /** EX_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (ExLFir, bit(8|9)) ? TBDDefaultCallout; + + /** EX_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (ExLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# EX Chiplet COREFIR +################################################################################ + +rule CoreFir +{ + CHECK_STOP: COREFIR & ~COREFIR_MASK & ~COREFIR_ACT0 & ~COREFIR_ACT1; + RECOVERABLE: COREFIR & ~COREFIR_MASK & ~COREFIR_ACT0 & COREFIR_ACT1; +}; + +group gCoreFir filter singlebit +{ + /** COREFIR[0] + * IFU_SRAM_PARITY_ERR: SRAM recoverable error (ICACHE parity error, etc.) + */ + (CoreFir, bit(0)) ? TBDDefaultCallout; + + /** COREFIR[1] + * IF_SETDELETE_ERR: set deleted + */ + (CoreFir, bit(1)) ? TBDDefaultCallout; + + /** COREFIR[2] + * IF_RFILE_REC_ERR: RegFile recoverable error + */ + (CoreFir, bit(2)) ? TBDDefaultCallout; + + /** COREFIR[3] + * IF_RFILE_CHKSTOP_ERR: RegFile core check stop + */ + (CoreFir, bit(3)) ? TBDDefaultCallout; + + /** COREFIR[4] + * IF_LOG_REC_ERR: logic recoverable error + */ + (CoreFir, bit(4)) ? TBDDefaultCallout; + + /** COREFIR[5] + * IF_LOG_CHKSTOP_ERR: logic core check stop + */ + (CoreFir, bit(5)) ? TBDDefaultCallout; + + /** COREFIR[6] + * IF_NOT_MT_REC_ERR: recoverable if not in MT window + */ + (CoreFir, bit(6)) ? TBDDefaultCallout; + + /** COREFIR[7] + * IF_CHKSTOP_ERR: system check stop + */ + (CoreFir, bit(7)) ? TBDDefaultCallout; + + /** COREFIR[8] + * RECOV_FIR_CHKSTOP_ERR: recovery core check stop + */ + (CoreFir, bit(8)) ? TBDDefaultCallout; + + /** COREFIR[9] + * SD_RFILE_REC_ERR: RegFile recoverable error + */ + (CoreFir, bit(9)) ? TBDDefaultCallout; + + /** COREFIR[10] + * SD_RFILE_CHKSTOP_ERR: RegFile core check stop (mapper error) + */ + (CoreFir, bit(10)) ? TBDDefaultCallout; + + /** COREFIR[11] + * SD_LOG_REC_ERR: logic recoverable error + */ + (CoreFir, bit(11)) ? TBDDefaultCallout; + + /** COREFIR[12] + * SD_LOG_CHKSTOP_ERR: logic core check stop + */ + (CoreFir, bit(12)) ? TBDDefaultCallout; + + /** COREFIR[13] + * SD_NOT_MT_REC_ERR: recoverable if not in MT window + */ + (CoreFir, bit(13)) ? TBDDefaultCallout; + + /** COREFIR[14] + * SD_MCHK_AND_ME_EQ_0: MCHK received while ME=0 non recoverable + */ + (CoreFir, bit(14)) ? TBDDefaultCallout; + + /** COREFIR[15] + * SD_PC_L2_UE_ERR: UE from L2 + */ + (CoreFir, bit(15)) ? TBDDefaultCallout; + + /** COREFIR[16] + * ISU_L2_UE_OVER_TH_ERR: Number of UEs from L2 above threshold + */ + (CoreFir, bit(16)) ? TBDDefaultCallout; + + /** COREFIR[17] + * SD_PC_CI_UE: UE on CI load + */ + (CoreFir, bit(17)) ? TBDDefaultCallout; + + /** COREFIR[19] + * FX_GPR_REC_ERR: GPR recoverable error + */ + (CoreFir, bit(19)) ? TBDDefaultCallout; + + /** COREFIR[21] + * FX_LOG_CHKSTOP_ERR: logic core check stop + */ + (CoreFir, bit(21)) ? TBDDefaultCallout; + + /** COREFIR[22] + * FX_NOT_MT_REC_ERR: recoverable if not in MT window + */ + (CoreFir, bit(22)) ? TBDDefaultCallout; + + /** COREFIR[23] + * VS_VRF_REC_ERR: VRF recoverable error + */ + (CoreFir, bit(23)) ? TBDDefaultCallout; + + /** COREFIR[24] + * VS_LOG_REC_ERR: logic recoverable error + */ + (CoreFir, bit(24)) ? TBDDefaultCallout; + + /** COREFIR[25] + * VS_LOG_CHKSTOP_ERR: logic core check stop + */ + (CoreFir, bit(25)) ? TBDDefaultCallout; + + /** COREFIR[26] + * RECOV_IN_MAINT_ERR: 26 = recov_in_maint + */ + (CoreFir, bit(26)) ? TBDDefaultCallout; + + /** COREFIR[27] + * DU_LOG_REC_ERR: logic recoverable error + */ + (CoreFir, bit(27)) ? TBDDefaultCallout; + + /** COREFIR[28] + * DU_LOG_CHKSTOP_ERR: logic core check stop + */ + (CoreFir, bit(28)) ? TBDDefaultCallout; + + /** COREFIR[29] + * LSU_SRAM_PARITY_ERR: SRAM recoverable error (DCACHE parity error, etc.) + */ + (CoreFir, bit(29)) ? TBDDefaultCallout; + + /** COREFIR[30] + * LS_SETDELETE_ERR: set deleted + */ + (CoreFir, bit(30)) ? TBDDefaultCallout; + + /** COREFIR[31] + * LS_RFILE_REC_ERR: RegFile recoverable error + */ + (CoreFir, bit(31)) ? TBDDefaultCallout; + + /** COREFIR[32] + * LS_RFILE_CHKSTOP_ERR: RegFile core check stop + */ + (CoreFir, bit(32)) ? TBDDefaultCallout; + + /** COREFIR[33] + * LS_TLB_MULTIHIT_ERR: special recovery error TLB multi hit error occurred + */ + (CoreFir, bit(33)) ? TBDDefaultCallout; + + /** COREFIR[34] + * LS_SLB_MULTIHIT_ERR: special recovery error SLBFEE multi hit error occurred + */ + (CoreFir, bit(34)) ? TBDDefaultCallout; + + /** COREFIR[35] + * LS_DERAT_MULTIHIT_ERR: special recovery error ERAT multi hit error occurred + */ + (CoreFir, bit(35)) ? TBDDefaultCallout; + + /** COREFIR[36] + * FORWARD_PROGRESS_ERR: forward progress error + */ + (CoreFir, bit(36)) ? TBDDefaultCallout; + + /** COREFIR[37] + * LS_LOG_REC_ERR: logic recoverable error + */ + (CoreFir, bit(37)) ? TBDDefaultCallout; + + /** COREFIR[38] + * LS_LOG_CHKSTOP_ERR: logic core check stop + */ + (CoreFir, bit(38)) ? TBDDefaultCallout; + + /** COREFIR[39] + * LS_NOT_MT_REC_ERR: recoverable if not in MT window + */ + (CoreFir, bit(39)) ? TBDDefaultCallout; + + /** COREFIR[40] + * LS_NOT_CI_REC_ERR: recoverable if not in CI window + */ + (CoreFir, bit(40)) ? TBDDefaultCallout; + + /** COREFIR[41] + * LS_CHKSTOP_ERR: system check stop + */ + (CoreFir, bit(41)) ? TBDDefaultCallout; + + /** COREFIR[42] + * LS_GPR_RCV_CHKSTOP_ERR: UE from GPR/VRF recovery process + */ + (CoreFir, bit(42)) ? TBDDefaultCallout; + + /** COREFIR[43] + * THREAD_HANG_REC_ERR: thread hang recoverable error + */ + (CoreFir, bit(43)) ? TBDDefaultCallout; + + /** COREFIR[44] + * FIR_LOG_RECOV_ERR: logic recoverable error + */ + (CoreFir, bit(44)) ? TBDDefaultCallout; + + /** COREFIR[45] + * PC_LOG_CHKSTOP_ERR: PC logic core check stop + */ + (CoreFir, bit(45)) ? TBDDefaultCallout; + + /** COREFIR[47] + * TFC_FIR_TFMR_P_ERR: TFMR Parity Error (timing facility may be corrupt) + */ + (CoreFir, bit(47)) ? TBDDefaultCallout; + + /** COREFIR[48] + * SPRD_FIR_HYP_RES_P_ERR: Hypervisor Resource error - core check stop + */ + (CoreFir, bit(48)) ? TBDDefaultCallout; + + /** COREFIR[49] + * TFC_FIR_P_ERR: TFAC parity error + */ + (CoreFir, bit(49)) ? TBDDefaultCallout; + + /** COREFIR[50] + * TFC_FIR_CONTROL_ERR: TFAC control error + */ + (CoreFir, bit(50)) ? TBDDefaultCallout; + + /** COREFIR[51] + * PC_FIRM_AND_SEL_ERR: TFAC firmware error and select error + */ + (CoreFir, bit(51)) ? TBDDefaultCallout; + + /** COREFIR[52] + * CORE_HUNG: Hang recovery failed (core check stop) + */ + (CoreFir, bit(52)) ? TBDDefaultCallout; + + /** COREFIR[53] + * CORE_HANG_DETECT: Internal hang detected (core hang) + */ + (CoreFir, bit(53)) ? TBDDefaultCallout; + + /** COREFIR[54] + * AMBI_HANG_DETECT: Hang detected unknown source + */ + (CoreFir, bit(54)) ? TBDDefaultCallout; + + /** COREFIR[55] + * NEST_HANG_DETECT: External Hang detected + */ + (CoreFir, bit(55)) ? TBDDefaultCallout; + + /** COREFIR[59] + * PC_SOM_ERR: SCOM satellite error detected + */ + (CoreFir, bit(59)) ? TBDDefaultCallout; + + /** COREFIR[60] + * DBG_FIR_CHECKSTOP_ON_TRIGGER: debug Trigger Error inject + */ + (CoreFir, bit(60)) ? TBDDefaultCallout; + + /** COREFIR[61] + * SP_INJ_REC_ERR: SCOM or Firmware recoverable Error Inject + */ + (CoreFir, bit(61)) ? TBDDefaultCallout; + + /** COREFIR[62] + * SP_INJ_XSTOP_ERR: Firmware Xstop Error Inject + */ + (CoreFir, bit(62)) ? TBDDefaultCallout; + + /** COREFIR[63] + * SPRD_PHYP_ERR_INJ: Phyp Xstop via SPRC / SPRD + */ + (CoreFir, bit(63)) ? TBDDefaultCallout; +}; + +################################################################################ +# EX Chiplet L2FIR +################################################################################ + +rule L2Fir +{ + CHECK_STOP: L2FIR & ~L2FIR_MASK & ~L2FIR_ACT0 & ~L2FIR_ACT1; + RECOVERABLE: L2FIR & ~L2FIR_MASK & ~L2FIR_ACT0 & L2FIR_ACT1; +}; + +group gL2Fir filter singlebit +{ + /** L2FIR[0] + * CACHE_RD_CE + */ + (L2Fir, bit(0)) ? TBDDefaultCallout; + + /** L2FIR[1] + * CACHE_RD_UE + */ + (L2Fir, bit(1)) ? TBDDefaultCallout; + + /** L2FIR[2] + * CACHE_RD_SUE + */ + (L2Fir, bit(2)) ? TBDDefaultCallout; + + /** L2FIR[3] + * HW_DIR_INTIATED_LINE_DELETE_OCCURRED + */ + (L2Fir, bit(3)) ? TBDDefaultCallout; + + /** L2FIR[4] + * CACHE_UE_SUE_DETECTED_ON_MODIFIED_LINE_BY_CO + */ + (L2Fir, bit(4)) ? TBDDefaultCallout; + + /** L2FIR[5] + * CACHE_UE_SUE_DETECTED_ON_NON_MODIFIED_LINE_BY_CO + */ + (L2Fir, bit(5)) ? TBDDefaultCallout; + + /** L2FIR[6] + * DIR_CE_DETECTED + */ + (L2Fir, bit(6)) ? TBDDefaultCallout; + + /** L2FIR[7] + * DIR_UE_DETECTED + */ + (L2Fir, bit(7)) ? TBDDefaultCallout; + + /** L2FIR[8] + * DIR_STUCK_BIT_CE + */ + (L2Fir, bit(8)) ? TBDDefaultCallout; + + /** L2FIR[9] + * DIR_SBCE_REPAIR_FAILED + */ + (L2Fir, bit(9)) ? TBDDefaultCallout; + + /** L2FIR[10] + * MULTIPLE_DIR_ERRORS_DETECTED + */ + (L2Fir, bit(10)) ? TBDDefaultCallout; + + /** L2FIR[11] + * LRU_READ_ERROR_DETECTED + */ + (L2Fir, bit(11)) ? TBDDefaultCallout; + + /** L2FIR[12] + * RC_POWERBUS_DATA_TIMEOUT + */ + (L2Fir, bit(12)) ? TBDDefaultCallout; + + /** L2FIR[13] + * NCU_POWERBUS_DATA_TIMEOUT + */ + (L2Fir, bit(13)) ? TBDDefaultCallout; + + /** L2FIR[14] + * HW_CONTROL_ERROR + */ + (L2Fir, bit(14)) ? TBDDefaultCallout; + + /** L2FIR[15] + * LRU_ALL_MEMBERS_IN_CGC_ARE_LINE_DELETED + */ + (L2Fir, bit(15)) ? TBDDefaultCallout; + + /** L2FIR[16] + * CACHE_INHIBITED_HIT_CACHEABLE_ERROR + */ + (L2Fir, bit(16)) ? TBDDefaultCallout; + + /** L2FIR[17] + * RC_LOAD_RECIVED_PB_CRESP_ADR_ERR + */ + (L2Fir, bit(17)) ? TBDDefaultCallout; + + /** L2FIR[18] + * RC_STORE_RECIVED_PB_CRESP_ADR_ERR + */ + (L2Fir, bit(18)) ? TBDDefaultCallout; + + /** L2FIR[19] + * RC_POWBUS_DATA_CE_ERR_FROM_F2CHK + */ + (L2Fir, bit(19)) ? TBDDefaultCallout; + + /** L2FIR[20] + * RC_POWBUS_DATA_UE_ERR_FROM_F2CHK + */ + (L2Fir, bit(20)) ? TBDDefaultCallout; + + /** L2FIR[21] + * RC_POWBUS_DATA_SUE_ERR_FROM_F2CHK + */ + (L2Fir, bit(21)) ? TBDDefaultCallout; + + /** L2FIR[22] + * CO_ICSW_UE_SUE_DATA_ERR_FROM_F2CHK + */ + (L2Fir, bit(22)) ? TBDDefaultCallout; + + /** L2FIR[23] + * RC_LOAD_RECIVED_PB_CRESP_ADR_ERR_FOR_HYP + */ + (L2Fir, bit(23)) ? TBDDefaultCallout; + + /** L2FIR[24] + * RCDAT_RD_PARITY_ERR + */ + (L2Fir, bit(24)) ? TBDDefaultCallout; + + /** L2FIR[25] + * CO_ICSW_RTY_BUSY_ABT_ERR + */ + (L2Fir, bit(25)) ? TBDDefaultCallout; + + /** L2FIR[26] + * HA_LOG_STOP_SW_ERR + */ + (L2Fir, bit(26)) ? TBDDefaultCallout; + + /** L2FIR[27] + * RC_LOAD_RECEIVED_PB_ACK_DEAD_FROM_FOREIGN0 + */ + (L2Fir, bit(27)) ? TBDDefaultCallout; + + /** L2FIR[28] + * RC_LOAD_RECEIVED_PB_ACK_DEAD_FROM_FOREIGN1 + */ + (L2Fir, bit(28)) ? TBDDefaultCallout; + + /** L2FIR[29] + * RC_STORE_RECEIVED_PB_ACK_DEAD_FROM_FOREIGN0 + */ + (L2Fir, bit(29)) ? TBDDefaultCallout; + + /** L2FIR[30] + * RC_STORE_RECEIVED_PB_ACK_DEAD_FROM_FOREIGN1 + */ + (L2Fir, bit(30)) ? TBDDefaultCallout; + + /** L2FIR[31] + * ILLEGAL_MPALOG_TPID_SW_ERR + */ + (L2Fir, bit(31)) ? TBDDefaultCallout; + + /** L2FIR[32] + * UNEXP_HA_ST_ERR + */ + (L2Fir, bit(32)) ? TBDDefaultCallout; + + /** L2FIR[33] + * HA_LINE_IN_CONS_CACHE_ERR + */ + (L2Fir, bit(33)) ? TBDDefaultCallout; + + /** L2FIR[34] + * HA_TABLE_IN_PROD_CACHE_ERR + */ + (L2Fir, bit(34)) ? TBDDefaultCallout; + + /** L2FIR[35] + * ILLEGAL_LOG_STOP_SW_ERR + */ + (L2Fir, bit(35)) ? TBDDefaultCallout; + + /** L2FIR[48] + * SCOM_ERR1: scom error + */ + (L2Fir, bit(48)) ? TBDDefaultCallout; + + /** L2FIR[49] + * SCOM_ERR2: scom error + */ + (L2Fir, bit(49)) ? TBDDefaultCallout; +}; + +################################################################################ +# EX Chiplet L3FIR +################################################################################ + +rule L3Fir +{ + CHECK_STOP: L3FIR & ~L3FIR_MASK & ~L3FIR_ACT0 & ~L3FIR_ACT1; + RECOVERABLE: L3FIR & ~L3FIR_MASK & ~L3FIR_ACT0 & L3FIR_ACT1; +}; + +group gL3Fir filter singlebit +{ + /** L3FIR[0] + * Reserved field (Access type is pb_cmd_err) + */ + (L3Fir, bit(0)) ? TBDDefaultCallout; + + /** L3FIR[1] + * Reserved field (Access type is pb_data_err) + */ + (L3Fir, bit(1)) ? TBDDefaultCallout; + + /** L3FIR[2] + * Reserved field (Access type is l3_spare_error1) + */ + (L3Fir, bit(2)) ? TBDDefaultCallout; + + /** L3FIR[3] + * Reserved field (Access type is l3_spare_error1) + */ + (L3Fir, bit(3)) ? TBDDefaultCallout; + + /** L3FIR[4] + * Reserved field (Access type is l3_cac_rd_ce_det_not_lindel_req) + */ + (L3Fir, bit(4)) ? TBDDefaultCallout; + + /** L3FIR[5] + * Reserved field (Access type is l3_cac_rd_ue_det) + */ + (L3Fir, bit(5)) ? TBDDefaultCallout; + + /** L3FIR[6] + * Reserved field (Access type is l3_cac_rd_sue_det) + */ + (L3Fir, bit(6)) ? TBDDefaultCallout; + + /** L3FIR[7] + * Reserved field (Access type is l3_cac_wr_data_ce_from_pb) + */ + (L3Fir, bit(7)) ? TBDDefaultCallout; + + /** L3FIR[8] + * Reserved field (Access type is l3_cac_wr_data_ue_from_pb) + */ + (L3Fir, bit(8)) ? TBDDefaultCallout; + + /** L3FIR[9] + * Reserved field (Access type is l3_cac_wr_data_sue_from_pb) + */ + (L3Fir, bit(9)) ? TBDDefaultCallout; + + /** L3FIR[10] + * Reserved field (Access type is l3_cac_wr_data_ce_from_l2) + */ + (L3Fir, bit(10)) ? TBDDefaultCallout; + + /** L3FIR[11] + * Reserved field (Access type is l3_cac_wr_data_ue_from_l2) + */ + (L3Fir, bit(11)) ? TBDDefaultCallout; + + /** L3FIR[12] + * Reserved field (Access type is l3_cac_wr_data_sue_from_l2) + */ + (L3Fir, bit(12)) ? TBDDefaultCallout; + + /** L3FIR[13] + * Reserved field (Access type is l3_dir_rd_ce_det) + */ + (L3Fir, bit(13)) ? TBDDefaultCallout; + + /** L3FIR[14] + * Reserved field (Access type is l3_dir_rd_ue_det) + */ + (L3Fir, bit(14)) ? TBDDefaultCallout; + + /** L3FIR[15] + * Reserved field (Access type is l3_dir_rd_phantom_error) + */ + (L3Fir, bit(15)) ? TBDDefaultCallout; + + /** L3FIR[16] + * Reserved field (Access type is l3_co_sn_cresp_addr_err) + */ + (L3Fir, bit(16)) ? TBDDefaultCallout; + + /** L3FIR[17] + * Reserved field (Access type is l3_pf_cresp_addr_err) + */ + (L3Fir, bit(17)) ? TBDDefaultCallout; + + /** L3FIR[18] + * Reserved field (Access type is l3_addr_hang_detected) + */ + (L3Fir, bit(18)) ? TBDDefaultCallout; + + /** L3FIR[19] + * Reserved field (Access type is l3_flink_0_load_ack_dead) + */ + (L3Fir, bit(19)) ? TBDDefaultCallout; + + /** L3FIR[20] + * Reserved field (Access type is l3_flink_0_store_ack_dead) + */ + (L3Fir, bit(20)) ? TBDDefaultCallout; + + /** L3FIR[21] + * Reserved field (Access type is l3_flink_1_load_ack_dead) + */ + (L3Fir, bit(21)) ? TBDDefaultCallout; + + /** L3FIR[22] + * Reserved field (Access type is l3_flink_1_store_ack_dead) + */ + (L3Fir, bit(22)) ? TBDDefaultCallout; + + /** L3FIR[23] + * Reserved field (Access type is l3_mach_hang_detected) + */ + (L3Fir, bit(23)) ? TBDDefaultCallout; + + /** L3FIR[24] + * Reserved field (Access type is l3_hw_control_err) + */ + (L3Fir, bit(24)) ? TBDDefaultCallout; + + /** L3FIR[25] + * Reserved field (Access type is l3_snoop_sw_err_detected) + */ + (L3Fir, bit(25)) ? TBDDefaultCallout; + + /** L3FIR[26] + * Reserved field (Access type is l3_line_del_ce_done) + */ + (L3Fir, bit(26)) ? TBDDefaultCallout; + + /** L3FIR[27] + * Reserved field (Access type is l3_dram_error) + */ + (L3Fir, bit(27)) ? TBDDefaultCallout; + + /** L3FIR[28] + * Reserved field (Access type is l3_lru_error) + */ + (L3Fir, bit(28)) ? TBDDefaultCallout; + + /** L3FIR[29] + * Reserved field (Access type is l3_all_members_deleted_error) + */ + (L3Fir, bit(29)) ? TBDDefaultCallout; + + /** L3FIR[30] + * Reserved field (Access type is l3_refresh_timer_error) + */ + (L3Fir, bit(30)) ? TBDDefaultCallout; + + /** L3FIR[31] + * Reserved field (Access type is l3_ha_consumer_sw_access_err) + */ + (L3Fir, bit(31)) ? TBDDefaultCallout; + + /** L3FIR[32] + * Reserved field (Access type is l3_ha_producer_sw_access_err) + */ + (L3Fir, bit(32)) ? TBDDefaultCallout; + + /** L3FIR[33] + * Reserved field (Access type is l3_ha_line_in_consumer_cac_err) + */ + (L3Fir, bit(33)) ? TBDDefaultCallout; + + /** L3FIR[34] + * Reserved field (Access type is l3_ha_table_in_producer_cac_err) + */ + (L3Fir, bit(34)) ? TBDDefaultCallout; + + /** L3FIR[35] + * Reserved field (Access type is l3_ha_log_overflow_err) + */ + (L3Fir, bit(35)) ? TBDDefaultCallout; + + /** L3FIR[36] + * Reserved field (Access type is scom_err) + */ + (L3Fir, bit(36)) ? TBDDefaultCallout; +}; + +################################################################################ +# EX Chiplet NCUFIR +################################################################################ + +rule NcuFir +{ + CHECK_STOP: NCUFIR & ~NCUFIR_MASK & ~NCUFIR_ACT0 & ~NCUFIR_ACT1; + RECOVERABLE: NCUFIR & ~NCUFIR_MASK & ~NCUFIR_ACT0 & NCUFIR_ACT1; +}; + +group gNcuFir filter singlebit +{ + /** NCUFIR[0] + * CONTROL_ERR: H/W control error. + */ + (NcuFir, bit(0)) ? TBDDefaultCallout; + + /** NCUFIR[1] + * TLBIE_SW_ERR: TLBIE received illegal AP/LP field from core. + */ + (NcuFir, bit(1)) ? TBDDefaultCallout; + + /** NCUFIR[2] + * ST_ADDR_ERR: Store address machine or TLBIE/sync machine received addr_err cresp. + */ + (NcuFir, bit(2)) ? TBDDefaultCallout; + + /** NCUFIR[3] + * LD_ADDR_ERR: Load address machine received addr_err cresp. + */ + (NcuFir, bit(3)) ? TBDDefaultCallout; + + /** NCUFIR[4] + * ST_FOREIGN0_ACK_DEAD: Store received ack_dead on foreign link0. + */ + (NcuFir, bit(4)) ? TBDDefaultCallout; + + /** NCUFIR[5] + * ST_FOREIGN1_ACK_DEAD: Store received ack_dead on foreign link1. + */ + (NcuFir, bit(5)) ? TBDDefaultCallout; + + /** NCUFIR[6] + * LD_FOREIGN0_ACK_DEAD: Load received ack_dead on foreign link0. + */ + (NcuFir, bit(6)) ? TBDDefaultCallout; + + /** NCUFIR[7] + * LD_FOREIGN1_ACK_DEAD: Load received ack_dead on foreign link1. + */ + (NcuFir, bit(7)) ? TBDDefaultCallout; + + /** NCUFIR[8] + * STQ_DATA_PARITY_ERR: Store data parity error from regfile detected. + */ + (NcuFir, bit(8)) ? TBDDefaultCallout; + + /** NCUFIR[9] + * STORE_TIMEOUT: Store timed out on PB. + */ + (NcuFir, bit(9)) ? TBDDefaultCallout; + + /** NCUFIR[10] + * TLBIE_MASTER_TIMEOUT: TLBIE master timed out on PB. + */ + (NcuFir, bit(10)) ? TBDDefaultCallout; + + /** NCUFIR[11] + * TLBIE_SNOOP_TIMEOUT: TLBIE snooper timed out waiting for core. + */ + (NcuFir, bit(11)) ? TBDDefaultCallout; + + /** NCUFIR[12] + * HTM_IMA_TIMEOUT: HTM/IMA address machine timed out on PB. + */ + (NcuFir, bit(12)) ? TBDDefaultCallout; + + /** NCUFIR[13] + * IMA_CRESP_ADDR_ERR: IMA received addr_err cresp. + */ + (NcuFir, bit(13)) ? TBDDefaultCallout; + + /** NCUFIR[14] + * IMA_FOREIGN0_ACK_DEAD: IMA received ack_dead on foreign link0. + */ + (NcuFir, bit(14)) ? TBDDefaultCallout; + + /** NCUFIR[15] + * IMA_FOREIGN1_ACK_DEAD: IMA received ack_dead on foreign link1. + */ + (NcuFir, bit(15)) ? TBDDefaultCallout; + + /** NCUFIR[16] + * HTM_GOT_ACK_DEAD: HTM received ack_dead on any foreign link. + */ + (NcuFir, bit(16)) ? TBDDefaultCallout; + + /** NCUFIR[17] + * PMISC_CRESP_ADDR_ERR: PMISC received address error cresp. + */ + (NcuFir, bit(17)) ? TBDDefaultCallout; + + /** NCUFIR[18] + * TLBIE_CONTROL_ERR: TLBIE control error. + */ + (NcuFir, bit(28)) ? TBDDefaultCallout; + + /** NCUFIR[24] + * SCOM_ERR1: scom erro + */ + (NcuFir, bit(24)) ? TBDDefaultCallout; + + /** NCUFIR[25] + * SCOM_ERR2: scom error + */ + (NcuFir, bit(25)) ? TBDDefaultCallout; +}; + + ############################################################################## + # # + # # ### # + # # # ## ##### ### ### # # # # # # ### ### ### ### # + # # # # # # # # # ## # # # # # # # # # # + # ####### # # # # # # # # # # ##### ### ### ## ### # + # # # # # # # # # # ## # # # # # # # # # # + # # # ## # ### ### # # ### ### # # ### ### ### ### # + # # + ############################################################################## + +# Include the common action set. +.include "CommonActions.rule" + diff --git a/src/usr/diag/prdf/plat/pegasus/Mba.rule b/src/usr/diag/prdf/plat/pegasus/Mba.rule new file mode 100644 index 000000000..75a0c414c --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Mba.rule @@ -0,0 +1,716 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Mba.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# +# Scope: +# Registers and actions for the following chiplets: +# +# Chiplet Register Addresses Description +# ======= ======================= ============================================ +# MEM 0x03010400 - 0x0301043F MBA 01 +# MEM 0x03010600 - 0x0301063F MBA 01 MCBIST +# MEM 0x03010C00 - 0x03010C3F MBA 23 +# MEM 0x03010E00 - 0x03010E3F MBA 23 MCBIST +# +################################################################################ + +chip Mba +{ + name "Centaur MBA Chiplet"; + targettype TYPE_MBA; + sigoff 0x8000; +# FIXME May need to update dump type + dump DUMP_CONTENT_HWSUPERNOVA; + scomlen 64; + + ############################################################################# + # # + # ###### # + # # # ###### #### ### #### ##### ###### ##### #### # + # # # # # # # # # # # # # # + # ###### ##### # # #### # ##### # # #### # + # # # # # ### # # # # ##### # # + # # # # # # # # # # # # # # # # + # # # ###### #### ### #### # ###### # # #### # + # # + ############################################################################# + + ############################################################################ + # MEM Chiplet MBAFIR + ############################################################################ + + register MBAFIR + { + name "MBU.MBA01.MBA_MCBIST.SCOMFIR.MBAFIRQ"; + scomaddr 0x03010600; + reset (&, 0x03010601); + mask (|, 0x03010605); + capture group default; + }; + + register MBAFIR_MASK + { + name "MBU.MBA01.MBA_MCBIST.SCOMFIR.MBAFIRMASK"; + scomaddr 0x03010603; + capture type secondary; + capture group default; + }; + + register MBAFIR_ACT0 + { + name "MBU.MBA01.MBA_MCBIST.SCOMFIR.MBAFIRACT0"; + scomaddr 0x03010606; + capture type secondary; + capture group default; + }; + + register MBAFIR_ACT1 + { + name "MBU.MBA01.MBA_MCBIST.SCOMFIR.MBAFIRACT1"; + scomaddr 0x03010607; + capture type secondary; + capture group default; + }; + + ############################################################################ + # MEM Chiplet MBASECUREFIR + ############################################################################ + + register MBASECUREFIR + { + name "MBU.MBA01.MBA_SRQ.MBASIRQ"; + scomaddr 0x0301041b; + reset (&, 0x0301041c); + # This is a special register in which we are not able to mask. All bits + # in this register should be set to checkstop so we will not need to + # mask anyway. + capture group default; + }; + + register MBASECUREFIR_MASK + { + name "MBU.MBA01.MBA_SRQ.MBASIRMASK"; + scomaddr 0x0301041e; + capture type secondary; + capture group default; + }; + + register MBASECUREFIR_ACT0 + { + name "MBU.MBA01.MBA_SRQ.MBASIRACT0"; + scomaddr 0x03010421; + capture type secondary; + capture group default; + }; + + register MBASECUREFIR_ACT1 + { + name "MBU.MBA01.MBA_SRQ.MBASIRACT1"; + scomaddr 0x03010422; + capture type secondary; + capture group default; + }; + + ############################################################################ + # MEM Chiplet DDRPHYFIR + ############################################################################ + + register MBADDRPHYFIR + { + name "DPHY01.PHY01_DDRPHY_FIR_REG"; + scomaddr 0x800200900301143F; + reset (&, 0x800200910301143F); + mask (|, 0x800200950301143F); + capture group default; + }; + + register MBADDRPHYFIR_MASK + { + name "DPHY01.PHY01_DDRPHY_FIR_MASK_REG"; + scomaddr 0x800200930301143F; + capture type secondary; + capture group default; + }; + + register MBADDRPHYFIR_ACT0 + { + name "DPHY01.PHY01_DDRPHY_FIR_ACTION0_REG"; + scomaddr 0x800200960301143F; + capture type secondary; + capture group default; + }; + + register MBADDRPHYFIR_ACT1 + { + name "DPHY01.PHY01_DDRPHY_FIR_ACTION1_REG"; + scomaddr 0x800200970301143F; + capture type secondary; + capture group default; + }; + + ############################################################################ + # MEM Chiplet MBACALFIR + ############################################################################ + + register MBACALFIR + { + name "MBU.MBA01.MBA_SRQ.MBACALFIRQ"; + scomaddr 0x03010400; + reset (&, 0x03010401); + mask (|, 0x03010405); + capture group default; + }; + + register MBACALFIR_MASK + { + name "MBU.MBA01.MBA_SRQ.MBACALFIR_MASK"; + scomaddr 0x03010403; + capture type secondary; + capture group default; + }; + + register MBACALFIR_ACT0 + { + name "MBU.MBA01.MBA_SRQ.MBACALFIR_ACTION0"; + scomaddr 0x03010406; + capture type secondary; + capture group default; + }; + + register MBACALFIR_ACT1 + { + name "MBU.MBA01.MBA_SRQ.MBACALFIR_ACTION1"; + scomaddr 0x03010407; + capture type secondary; + capture group default; + }; + + ############################################################################ + # MEM Chiplet MBASPA + ############################################################################ + + register MBASPA + { + name "MBU.MBA01.MBA_MCBIST.SCOMFIR.MBSPAQ"; + scomaddr 0x03010611; + reset (&, 0x03010612); + #FIXME : There is no OR register for mask. Is it right to use mask register value + mask (|, 0x03010614); + capture group default; + }; + + register MBASPA_MASK + { + name "MBU.MBA01.MBA_MCBIST.SCOMFIR.MBSPAMSKQ"; + scomaddr 0x03010614; + capture type secondary; + capture group default; + }; +}; + + ############################################################################## + # # + # #### # # + # # # # # # ##### ### # # # ## ##### ### ### # # ### # + # # # # # # # # # # # # # # # # # ## # # # + # #### # # # #### ### # ####### # # # # # # # # ### # + # # # # # # # # # # # # # # # # # # ## # # + # # # ### #### ##### ### # # # ## # ### ### # # ### # + # # + ############################################################################## + +# This group is a layer of indirection. Normally, each rule file will have a +# single global or chiplet FIR which will have group that defines which lower +# level FIRs to analyze. Unfortunately, the MBA target contains only a subset of +# the FIRs in the Centaur's MEM chiplet. So the MEM chiplet FIR's group +# definition must remain in Membuf.rule. This group will serve as a psuedo +# chiplet FIR. This group could contain the bit definitions for all of the MBA +# registers, however, we could not utilize the filter for each register. +# Instead, the bit definitions will simply analyze the respective FIR groups. +# The FIRs in this group will be analyzed in order so if a FIR should be +# analyzed before another then simply change the order of the FIRs in this +# group. + +# NOTE: The rule definition for this group must be different than that of the +# individual FIR groups. Otherwise, it causes hashing collisions in the +# signatures. In this case, we will add the SPECIAL attention line even +# though none of these registers will trigger a special attention. This +# should change the hash enough to make a unique signature. + +rule tmpMbaFir +{ + CHECK_STOP: MBAFIR & ~MBAFIR_MASK & ~MBAFIR_ACT0 & ~MBAFIR_ACT1; + RECOVERABLE: MBAFIR & ~MBAFIR_MASK & ~MBAFIR_ACT0 & MBAFIR_ACT1; + SPECIAL: MBAFIR; # See note above. +}; + +rule tmpMbaSecureFir +{ + CHECK_STOP: + MBASECUREFIR & ~MBASECUREFIR_MASK & ~MBASECUREFIR_ACT0 & ~MBASECUREFIR_ACT1; + # NOTE: This secure FIR will only report checkstop attentions. + SPECIAL: + MBASECUREFIR; # See note above. +}; + +rule tmpMbaCalFir +{ + CHECK_STOP: MBACALFIR & ~MBACALFIR_MASK & ~MBACALFIR_ACT0 & ~MBACALFIR_ACT1; + RECOVERABLE: MBACALFIR & ~MBACALFIR_MASK & ~MBACALFIR_ACT0 & MBACALFIR_ACT1; + SPECIAL: MBACALFIR; # See note above. +}; + +rule tmpMbaDdrPhyFir +{ + CHECK_STOP: + MBADDRPHYFIR & ~MBADDRPHYFIR_MASK & ~MBADDRPHYFIR_ACT0 & ~MBADDRPHYFIR_ACT1; + RECOVERABLE: + MBADDRPHYFIR & ~MBADDRPHYFIR_MASK & ~MBADDRPHYFIR_ACT0 & MBADDRPHYFIR_ACT1; + SPECIAL: + MBADDRPHYFIR; # See note above. +}; + +group gMBA attntype CHECK_STOP, RECOVERABLE filter singlebit +{ + (tmpMbaFir, bit( 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| + 10|11|12|13|14|15|16|17|18|19| + 20|21|22|23|24|25|26|27|28|29| + 30|31|32|33|34|35|36|37|38|39| + 40|41|42|43|44|45|46|47|48|49| + 50|51|52|53|54|55|56|57|58|59| + 60|61|62|63 )) ? analyze(gMbaFir); + + (tmpMbaSecureFir, bit( 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| + 10|11|12|13|14|15|16|17|18|19| + 20|21|22|23|24|25|26|27|28|29| + 30|31|32|33|34|35|36|37|38|39| + 40|41|42|43|44|45|46|47|48|49| + 50|51|52|53|54|55|56|57|58|59| + 60|61|62|63 )) ? analyze(gMbaSecureFir); + + (tmpMbaDdrPhyFir, bit( 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| + 10|11|12|13|14|15|16|17|18|19| + 20|21|22|23|24|25|26|27|28|29| + 30|31|32|33|34|35|36|37|38|39| + 40|41|42|43|44|45|46|47|48|49| + 50|51|52|53|54|55|56|57|58|59| + 60|61|62|63 )) ? analyze(gMbaDdrPhyFir); + + (tmpMbaCalFir, bit( 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| + 10|11|12|13|14|15|16|17|18|19| + 20|21|22|23|24|25|26|27|28|29| + 30|31|32|33|34|35|36|37|38|39| + 40|41|42|43|44|45|46|47|48|49| + 50|51|52|53|54|55|56|57|58|59| + 60|61|62|63 )) ? analyze(gMbaCalFir); +}; + +################################################################################ +# MEM Chiplet MBAFIR +################################################################################ + +rule MbaFir +{ + CHECK_STOP: MBAFIR & ~MBAFIR_MASK & ~MBAFIR_ACT0 & ~MBAFIR_ACT1; + RECOVERABLE: MBAFIR & ~MBAFIR_MASK & ~MBAFIR_ACT0 & MBAFIR_ACT1; +}; + +group gMbaFir filter singlebit +{ + /** MBAFIR[0] + * MBAFIRQ_INVALID_MAINT_CMD + */ + (MbaFir, bit(0)) ? TBDDefaultCallout; + + /** MBAFIR[1] + * MBAFIRQ_INVALID_MAINT_ADDRESS + */ + (MbaFir, bit(1)) ? TBDDefaultCallout; + + /** MBAFIR[2] + * MBAFIRQ_MULTI_ADDRESS_MAINT_TIMEOU + */ + (MbaFir, bit(2)) ? TBDDefaultCallout; + + /** MBAFIR[3] + * MBAFIRQ_INTERNAL_FSM_ERROR + */ + (MbaFir, bit(3)) ? TBDDefaultCallout; + + /** MBAFIR[4] + * MBAFIRQ_MCBIST_ERROR + */ + (MbaFir, bit(4)) ? TBDDefaultCallout; + + /** MBAFIR[5] + * MBAFIRQ_SCOM_CMD_REG_PE + */ + (MbaFir, bit(5)) ? TBDDefaultCallout; + + /** MBAFIR[6] + * MBAFIRQ_CHANNEL_CHKSTP_ERR + */ + (MbaFir, bit(6)) ? TBDDefaultCallout; + + /** MBAFIR[7] + * MBAFIRQ_WRD_CAW2_DATA_CE_UE_ERR + */ + (MbaFir, bit(7)) ? TBDDefaultCallout; + + /** MBAFIR[15] + * MBAFIRQ_INTERNAL_SCOM_ERROR + */ + (MbaFir, bit(15)) ? TBDDefaultCallout; + + /** MBAFIR[16] + * MBAFIRQ_INTERNAL_SCOM_ERROR_CLONE + */ + (MbaFir, bit(16)) ? TBDDefaultCallout; +}; + +################################################################################ +# MEM Chiplet MBASECUREFIR +################################################################################ + +rule MbaSecureFir +{ + CHECK_STOP: + MBASECUREFIR & ~MBASECUREFIR_MASK & ~MBASECUREFIR_ACT0 & ~MBASECUREFIR_ACT1; + # NOTE: This secure FIR will only report checkstop attentions. +}; + +group gMbaSecureFir filter singlebit +{ + /** MBASECUREFIR[0] + * MBASIRQ_INVALID_MBA_CAL0Q_ACCESS + */ + (MbaSecureFir, bit(0)) ? TBDDefaultCallout; + + /** MBASECUREFIR[1] + * MBASIRQ_INVALID_MBA_CAL1Q_ACCESS + */ + (MbaSecureFir, bit(1)) ? TBDDefaultCallout; + + /** MBASECUREFIR[2] + * MBASIRQ_INVALID_MBA_CAL2Q_ACCESS + */ + (MbaSecureFir, bit(2)) ? TBDDefaultCallout; + + /** MBASECUREFIR[3] + * MBASIRQ_INVALID_MBA_CAL3Q_ACCESS + */ + (MbaSecureFir, bit(3)) ? TBDDefaultCallout; + + /** MBASECUREFIR[4] + * MBASIRQ_INVALID_DDR_CONFIG_REG_ACCESS + */ + (MbaSecureFir, bit(4)) ? TBDDefaultCallout; + + /** MBASECUREFIR[5] + * MBASIRQ_INVALID_SIR_MASK_OR_ACTION_REGISTER_ACCESS + */ + (MbaSecureFir, bit(5)) ? TBDDefaultCallout; +}; + +################################################################################ +# MEM Chiplet DDRPHYFIR +################################################################################ + +rule MbaDdrPhyFir +{ + CHECK_STOP: + MBADDRPHYFIR & ~MBADDRPHYFIR_MASK & ~MBADDRPHYFIR_ACT0 & ~MBADDRPHYFIR_ACT1; + RECOVERABLE: + MBADDRPHYFIR & ~MBADDRPHYFIR_MASK & ~MBADDRPHYFIR_ACT0 & MBADDRPHYFIR_ACT1; +}; + +group gMbaDdrPhyFir filter singlebit +{ + /** MBADDRPHYFIR[48] + * PHY01_DDRPHY_FIR_REG_DDR0_FSM_CKSTP + */ + (MbaDdrPhyFir, bit(48)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[49] + * PHY01_DDRPHY_FIR_REG_DDR0_PARITY_CKSTP + */ + (MbaDdrPhyFir, bit(49)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[50] + * PHY01_DDRPHY_FIR_REG_DDR0_CALIBRATION_ERROR + */ + (MbaDdrPhyFir, bit(50)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[51] + * PHY01_DDRPHY_FIR_REG_DDR0_FSM_ERR + */ + (MbaDdrPhyFir, bit(51)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[52] + * PHY01_DDRPHY_FIR_REG_DDR0_PARITY_ERR + */ + (MbaDdrPhyFir, bit(52)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[53] + * PHY01_DDRPHY_FIR_REG_DDR01_FIR_PARITY_ERR + */ + (MbaDdrPhyFir, bit(53)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[56] + * PHY01_DDRPHY_FIR_REG_DDR1_FSM_CKSTP + */ + (MbaDdrPhyFir, bit(56)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[57] + * PHY01_DDRPHY_FIR_REG_DDR1_PARITY_CKSTP + */ + (MbaDdrPhyFir, bit(57)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[58] + * PHY01_DDRPHY_FIR_REG_DDR1_CALIBRATION_ERROR + */ + (MbaDdrPhyFir, bit(58)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[59] + * PHY01_DDRPHY_FIR_REG_DDR1_FSM_ERR + */ + (MbaDdrPhyFir, bit(59)) ? TBDDefaultCallout; + + /** MBADDRPHYFIR[60] + * PHY01_DDRPHY_FIR_REG_DDR1_PARITY_ERR + */ + (MbaDdrPhyFir, bit(60)) ? TBDDefaultCallout; +}; + +################################################################################ +# MEM Chiplet MBACALFIR +################################################################################ + +rule MbaCalFir +{ + CHECK_STOP: MBACALFIR & ~MBACALFIR_MASK & ~MBACALFIR_ACT0 & ~MBACALFIR_ACT1; + RECOVERABLE: MBACALFIR & ~MBACALFIR_MASK & ~MBACALFIR_ACT0 & MBACALFIR_ACT1; +}; + +group gMbaCalFir filter singlebit +{ + /** MBACALFIR[0] + * MBACALFIRQ_MBA_RECOVERABLE_ERROR + */ + (MbaCalFir, bit(0)) ? TBDDefaultCallout; + + /** MBACALFIR[1] + * MBACALFIRQ_MBA_NONRECOVERABLE_ERROR + */ + (MbaCalFir, bit(1)) ? TBDDefaultCallout; + + /** MBACALFIR[2] + * MBACALFIRQ_REFRESH_OVERRUN + */ + (MbaCalFir, bit(2)) ? TBDDefaultCallout; + + /** MBACALFIR[3] + * MBACALFIRQ_WAT_ERROR + */ + (MbaCalFir, bit(3)) ? TBDDefaultCallout; + + /** MBACALFIR[4] + * MBACALFIRQ_RCD_PARITY_ERROR_0 + */ + (MbaCalFir, bit(4)) ? TBDDefaultCallout; + + /** MBACALFIR[5] + * MBACALFIRQ_DDR0_CAL_TIMEOUT_ERR + */ + (MbaCalFir, bit(5)) ? TBDDefaultCallout; + + /** MBACALFIR[6] + * MBACALFIRQ_DDR1_CAL_TIMEOUT_ERR + */ + (MbaCalFir, bit(6)) ? TBDDefaultCallout; + + /** MBACALFIR[7] + * MBACALFIRQ_RCD_PARITY_ERROR_1 + */ + (MbaCalFir, bit(7)) ? TBDDefaultCallout; + + /** MBACALFIR[8] + * MBACALFIRQ_MBX_TO_MBA_PAR_ERROR + */ + (MbaCalFir, bit(8)) ? TBDDefaultCallout; + + /** MBACALFIR[9] + * MBACALFIRQ_MBA_WRD_UE + */ + (MbaCalFir, bit(9)) ? TBDDefaultCallout; + + /** MBACALFIR[10] + * MBACALFIRQ_MBA_WRD_CE + */ + (MbaCalFir, bit(10)) ? TBDDefaultCallout; + + /** MBACALFIR[11] + * MBACALFIRQ_MBA_MAINT_UE + */ + (MbaCalFir, bit(11)) ? TBDDefaultCallout; + + /** MBACALFIR[12] + * MBACALFIRQ_MBA_MAINT_CE + */ + (MbaCalFir, bit(12)) ? TBDDefaultCallout; + + /** MBACALFIR[13] + * MBACALFIRQ_DDR_CAL_RESET_TIMEOUT + */ + (MbaCalFir, bit(13)) ? TBDDefaultCallout; + + /** MBACALFIR[14] + * MBACALFIRQ_WRQ_DATA_CE + */ + (MbaCalFir, bit(14)) ? TBDDefaultCallout; + + /** MBACALFIR[15] + * MBACALFIRQ_WRQ_DATA_UE + */ + (MbaCalFir, bit(15)) ? TBDDefaultCallout; + + /** MBACALFIR[16] + * MBACALFIRQ_WRQ_DATA_SUE + */ + (MbaCalFir, bit(16)) ? TBDDefaultCallout; + + /** MBACALFIR[17] + * MBACALFIRQ_WRQ_RRQ_HANG_ERR + */ + (MbaCalFir, bit(17)) ? TBDDefaultCallout; + + /** MBACALFIR[18] + * MBACALFIRQ_SM_1HOT_ERR + */ + (MbaCalFir, bit(18)) ? TBDDefaultCallout; + + /** MBACALFIR[19] + * MBACALFIRQ_WRD_SCOM_ERROR + */ + (MbaCalFir, bit(19)) ? TBDDefaultCallout; + + /** MBACALFIR[20] + * MBACALFIRQ_INTERNAL_SCOM_ERROR + */ + (MbaCalFir, bit(20)) ? TBDDefaultCallout; + + /** MBACALFIR[21] + * MBACALFIRQ_INTERNAL_SCOM_ERROR_COPY + */ + (MbaCalFir, bit(21)) ? TBDDefaultCallout; +}; + +############################################################################### +# MEM Chiplet MBASPA +################################################################################ + +rule MbaSpa +{ + SPECIAL: MBASPA & ~MBASPA_MASK; +}; + +group gMbaSpa attntype SPECIAL filter singlebit +{ + /** MBASPA[0] + * MBSPAQ_COMMAND_COMPLETE_WO_ENA_ERR_ATTN + */ + (MbaSpa, bit(0)) ? analyzeMaintCmdComplete; + + /** MBASPA[1] + * MBSPAQ_HARD_CE_ETE_ATTN + */ + (MbaSpa, bit(1)) ? TBDDefaultCallout; + + /** MBASPA[2] + * MBSPAQ_SOFT_CE_ETE_ATTN + */ + (MbaSpa, bit(2)) ? TBDDefaultCallout; + + /** MBASPA[3] + * MBSPAQ_INTERMITTENT_ETE_ATTN + */ + (MbaSpa, bit(3)) ? TBDDefaultCallout; + + /** MBASPA[4] + * MBSPAQ_RCE_ETE_ATTN + */ + (MbaSpa, bit(4)) ? TBDDefaultCallout; + + /** MBASPA[5] + * MBSPAQ_EMERGENCY_THROTTLE_ATTN + */ + (MbaSpa, bit(5)) ? TBDDefaultCallout; + + /** MBASPA[6] + * MBSPAQ_FIRMWARE_ATTN0 + */ + (MbaSpa, bit(6)) ? TBDDefaultCallout; + + /** MBASPA[7] + * MBSPAQ_FIRMWARE_ATTN1 + */ + (MbaSpa, bit(7)) ? TBDDefaultCallout; + + /** MBASPA[8] + * MBSPAQ_WAT_DEBUG_ATTN + */ + (MbaSpa, bit(8)) ? TBDDefaultCallout; + + /** MBASPA[9] + * MBSPAQ_SPARE_ATTN1 + */ + (MbaSpa, bit(9)) ? TBDDefaultCallout; + + /** MBASPA[10] + * MBSPAQ_MCBIST_DONE + */ + (MbaSpa, bit(10)) ? TBDDefaultCallout; +}; + + ############################################################################## + # # + # # ### # + # # # ## ##### ### ### # # # # # # ### ### ### ### # + # # # # # # # # # ## # # # # # # # # # # + # ####### # # # # # # # # # # ##### ### ### ## ### # + # # # # # # # # # # ## # # # # # # # # # # + # # # ## # ### ### # # ### ### # # ### ### ### ### # + # # + ############################################################################## + +# Include the common action set. +.include "CommonActions.rule"; + +################################################################################ +# Higher level actions +################################################################################ + +/** Analyze maintenance command complete */ +actionclass analyzeMaintCmdComplete { funccall("MaintCmdComplete"); }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Mcs.rule b/src/usr/diag/prdf/plat/pegasus/Mcs.rule new file mode 100644 index 000000000..19c99e96b --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Mcs.rule @@ -0,0 +1,329 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Mcs.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# +# Scope: +# Registers and actions for the following chiplets: +# Note that only addresses for MC0/MCS0 will be used. +# +# Chiplet Register Addresses Description +# ======= ======================= ============================================ +# MCS 0x02011800 - 0x0201187F MC0/MCS0 +# MCS 0x02011880 - 0x020118FF MC0/MCS1 +# MCS 0x02011900 - 0x0201197F MC1/MCS0 +# MCS 0x02011980 - 0x020119FF MC1/MCS1 +# MCS 0x02011A00 - 0x02011A3E DMI0 - DMI3 +# MCS 0x02011C00 - 0x02011C7F MC2/MCS0 +# MCS 0x02011C80 - 0x02011CFF MC2/MCS1 +# MCS 0x02011D00 - 0x02011D7F MC3/MCS0 +# MCS 0x02011D80 - 0x02011DFF MC3/MCS1 +# MCS 0x02011E00 - 0x02011E3E DMI4 - DMI7 +# +################################################################################ + +chip Mcs +{ + name "Power8 MCS Chiplet"; + targettype TYPE_MCS; + sigoff 0x8000; +# FIXME May need to update dump type + dump DUMP_CONTENT_HW; + scomlen 64; + + ############################################################################# + # # + # ###### # + # # # ###### #### ### #### ##### ###### ##### #### # + # # # # # # # # # # # # # # + # ###### ##### # # #### # ##### # # #### # + # # # # # ### # # # # ##### # # + # # # # # # # # # # # # # # # # + # # # ###### #### ### #### # ###### # # #### # + # # + ############################################################################# + + ############################################################################ + # PB Chiplet MCIFIR + ############################################################################ + + register MCIFIR + { + name "MC0.MCS0.RIGHT.MCI.SCOMFIR.MCIFIRQ"; + scomaddr 0x02011840; + reset (&, 0x02011841); + mask (|, 0x02011845); + capture group default; + }; + + register MCIFIR_AND + { + name "MC0.MCS0.RIGHT.MCI.SCOMFIR.MCIFIRQ AND"; + scomaddr 0x02011841; + capture group never; + }; + + register MCIFIR_MASK + { + name "MC0.MCS0.RIGHT.MCI.SCOMFIR.MCIFIRMASK"; + scomaddr 0x02011843; + capture type secondary; + capture group default; + }; + + register MCIFIR_ACT0 + { + name "MC0.MCS0.RIGHT.MCI.SCOMFIR.MCIFIRACT0"; + scomaddr 0x02011846; + capture type secondary; + capture group default; + }; + + register MCIFIR_ACT1 + { + name "MC0.MCS0.RIGHT.MCI.SCOMFIR.MCIFIRACT1"; + scomaddr 0x02011847; + capture type secondary; + capture group default; + }; +}; + + ############################################################################## + # # + # #### # # + # # # # # # ##### ### # # # ## ##### ### ### # # ### # + # # # # # # # # # # # # # # # # # ## # # # + # #### # # # #### ### # ####### # # # # # # # # ### # + # # # # # # # # # # # # # # # # # # ## # # + # # # ### #### ##### ### # # # ## # ### ### # # ### # + # # + ############################################################################## + +################################################################################ +# PB Chiplet MCIFIR +################################################################################ + +rule MciFir +{ + CHECK_STOP: MCIFIR & ~MCIFIR_MASK & ~MCIFIR_ACT0 & ~MCIFIR_ACT1; + RECOVERABLE: MCIFIR & ~MCIFIR_MASK & ~MCIFIR_ACT0 & MCIFIR_ACT1; + SPECIAL: MCIFIR & ~MCIFIR_MASK & MCIFIR_ACT0 & ~MCIFIR_ACT1; +}; + +group gMciFir attntype CHECK_STOP, RECOVERABLE, SPECIAL filter singlebit +{ + /** MCIFIR[0] + * MCIFIRQ_REPLAY_TIMEOUT + */ + (MciFir, bit(0)) ? TBDDefaultCallout; + + /** MCIFIR[1] + * MCIFIRQ_CHANNEL_FAIL + */ + (MciFir, bit(1)) ? TBDDefaultCallout; + + /** MCIFIR[2] + * MCIFIRQ_CRC_ERROR + */ + (MciFir, bit(2)) ? TBDDefaultCallout; + + /** MCIFIR[3] + * MCIFIRQ_FRAME_NOACK + */ + (MciFir, bit(3)) ? TBDDefaultCallout; + + /** MCIFIR[4] + * MCIFIRQ_SEQID_OUT_OF_ORDER + */ + (MciFir, bit(4)) ? TBDDefaultCallout; + + /** MCIFIR[5] + * MCIFIRQ_REPLAY_BUFFER_ECC_CE + */ + (MciFir, bit(5)) ? TBDDefaultCallout; + + /** MCIFIR[6] + * MCIFIRQ_REPLAY_BUFFER_ECC_UE + */ + (MciFir, bit(6)) ? TBDDefaultCallout; + + /** MCIFIR[7] + * MCIFIRQ_MCI_CHINIT_STATE_MACHINE_TIMEOUT + */ + (MciFir, bit(7)) ? TBDDefaultCallout; + + /** MCIFIR[8] + * MCIFIRQ_MCI_INTERNAL_CONTROL_PARITY_ERROR + */ + (MciFir, bit(8)) ? TBDDefaultCallout; + + /** MCIFIR[9] + * MCIFIRQ_MCI_DATA_FLOW_PARITY_ERROR + */ + (MciFir, bit(9)) ? TBDDefaultCallout; + + /** MCIFIR[10] + * MCIFIRQ_CRC_PERFORMANCE_DEGRADATION + */ + (MciFir, bit(10)) ? TBDDefaultCallout; + + /** MCIFIR[11] + * MCIFIRQ_CHANNEL_INTERLOCK_FAIL + */ + (MciFir, bit(11)) ? TBDDefaultCallout; + + /** MCIFIR[12] + * MCIFIRQ_CENTAUR_CHECKSTOP + */ + (MciFir, bit(12)) ? TBDDefaultCallout; + + /** MCIFIR[13] + * MCIFIRQ_CENTAUR_TRACESTOP + */ + (MciFir, bit(13)) ? TBDDefaultCallout; + + /** MCIFIR[14] + * MCIFIRQ_FPGA_INTERRUPT + */ + (MciFir, bit(14)) ? TBDDefaultCallout; + + /** MCIFIR[15] + * MCIFIRQ_CENTAUR_RECOVERABLE_ERROR + */ + (MciFir, bit(15)) ? TBDDefaultCallout; + + /** MCIFIR[16] + * MCIFIRQ_CENTAUR_SPECIAL_ATTENTION + */ + (MciFir, bit(16)) ? TBDDefaultCallout; + + /** MCIFIR[17] + * MCIFIRQ_CENTAUR_MAINTENANCE_COMPLETE + */ + (MciFir, bit(17)) ? TBDDefaultCallout; + + /** MCIFIR[18] + * MCIFIRQ_CENTAUR_INBAND_PIB_ERROR + */ + (MciFir, bit(18)) ? TBDDefaultCallout; + + /** MCIFIR[24] + * MCIFIRQ_MCS_RECOVERABLE_ERROR + */ + (MciFir, bit(24)) ? TBDDefaultCallout; + + /** MCIFIR[25] + * MCIFIRQ_MCS_INTERNAL_NONRECOVERABLE_ERROR + */ + (MciFir, bit(25)) ? TBDDefaultCallout; + + /** MCIFIR[26] + * MCIFIRQ_POWERBUS_PROTOCOL_ERROR + */ + (MciFir, bit(26)) ? TBDDefaultCallout; + + /** MCIFIR[27] + * MCIFIRQ_MCS_COMMAND_LIST_TIMEOUT_DUE_TO_POWERBUS + */ + (MciFir, bit(27)) ? TBDDefaultCallout; + + /** MCIFIR[28] + * MCIFIRQ_MCS_COMMAND_LIST_TIMEOUT_DUE_TO_EDI_CHANNEL + */ + (MciFir, bit(28)) ? TBDDefaultCallout; + + /** MCIFIR[29] + * MCIFIRQ_INBAND_BAR_HIT_WITH_INCORRECT_TTYPE + */ + (MciFir, bit(29)) ? TBDDefaultCallout; + + /** MCIFIR[30] + * MCIFIRQ_MULTIPLE_BAR_HIT + */ + (MciFir, bit(30)) ? TBDDefaultCallout; + + /** MCIFIR[31] + * MCIFIRQ_CHANNEL_FAIL_SIGNAL_ACTIVE + */ + (MciFir, bit(31)) ? TBDDefaultCallout; + + /** MCIFIR[32] + * MCIFIRQ_MIRROR_ACTION_OCCURRED + */ + (MciFir, bit(32)) ? TBDDefaultCallout; + + /** MCIFIR[33] + * MCIFIRQ_NONFOREIGN_ACCESS_TO_FOREIGN_BAR + */ + (MciFir, bit(33)) ? TBDDefaultCallout; + + /** MCIFIR[34] + * MCIFIRQ_CENTAUR_SYNC_COMMAND_DETECTED + */ + (MciFir, bit(34)) ? TBDDefaultCallout; + + /** MCIFIR[35] + * MCIFIRQ_POWERBUS_WRITE_DATA_BUFFER_CE + */ + (MciFir, bit(35)) ? TBDDefaultCallout; + + /** MCIFIR[36] + * MCIFIRQ_POWERBUS_WRITE_DATA_BUFFER_UE + */ + (MciFir, bit(36)) ? TBDDefaultCallout; + + /** MCIFIR[37] + * MCIFIRQ_POWERBUS_WRITE_DATA_BUFFER_SUE + */ + (MciFir, bit(37)) ? TBDDefaultCallout; + + /** MCIFIR[38] + * MCIFIRQ_HA_ILLEGAL_CONSUMER_ACCESS_ERROR + */ + (MciFir, bit(38)) ? TBDDefaultCallout; + + /** MCIFIR[48] + * MCIFIRQ_INTERNAL_SCOM_ERROR + */ + (MciFir, bit(48)) ? TBDDefaultCallout; + + /** MCIFIR[49] + * MCIFIRQ_INTERNAL_SCOM_ERROR_CLONE + */ + (MciFir, bit(49)) ? TBDDefaultCallout; +}; + + ############################################################################## + # # + # # ### # + # # # ## ##### ### ### # # # # # # ### ### ### ### # + # # # # # # # # # ## # # # # # # # # # # + # ####### # # # # # # # # # # ##### ### ### ## ### # + # # # # # # # # # # ## # # # # # # # # # # + # # # ## # ### ### # # ### ### # # ### ### ### ### # + # # + ############################################################################## + +# Include the common action set. +.include "CommonActions.rule" + diff --git a/src/usr/diag/prdf/plat/pegasus/Membuf.rule b/src/usr/diag/prdf/plat/pegasus/Membuf.rule new file mode 100644 index 000000000..549f2eac6 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Membuf.rule @@ -0,0 +1,163 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Membuf.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# +# Scope: +# Registers and actions for the following chiplets: +# +# Chiplet Register Adddresses Description +# ======= ======================= ============================================ +# TP 0x01000000 - 0x01FFFFFF TP pervasive logic +# NEST 0x02000000 - 0x02FFFFFF NEST pervasive logic +# MEM 0x03000000 - 0x03FFFFFF MEM pervasive logic, note that this does +# include the SCOM addresses characterized by +# the MBA target. See Mba.rule for those +# address ranges. +# +################################################################################ + +chip Membuf +{ + name "Centaur Chip"; + targettype TYPE_MEMBUF; + sigoff 0x8000; +# FIXME May need to update dump type + dump DUMP_CONTENT_HWSUPERNOVA; + scomlen 64; + + ############################################################################# + # # + # ###### # + # # # ###### #### ### #### ##### ###### ##### #### # + # # # # # # # # # # # # # # + # ###### ##### # # #### # ##### # # #### # + # # # # # ### # # # # ##### # # + # # # # # # # # # # # # # # # # + # # # ###### #### ### #### # ###### # # #### # + # # + ############################################################################# + + ############################################################################ + # Global Broadcast Registers + ############################################################################ + + register GLOBAL_CS_FIR + { + name "Global Checkstop Attention FIR"; + scomaddr 0x570F001C; + capture group default; + }; + + register GLOBAL_RE_FIR + { + name "Global Recoverable Attention FIR"; + scomaddr 0x570F001B; + capture group default; + }; + + register GLOBAL_SPA + { + name "Global Special Attention FIR"; + scomaddr 0x570F001A; + capture group default; + }; + +# Import all of the chiplet registers +.include "Membuf_regs_TP.rule" +.include "Membuf_regs_NEST.rule" +.include "Membuf_regs_MEM.rule" + +}; + + ############################################################################## + # # + # #### # # + # # # # # # ##### ### # # # ## ##### ### ### # # ### # + # # # # # # # # # # # # # # # # # ## # # # + # #### # # # #### ### # ####### # # # # # # # # ### # + # # # # # # # # # # # # # # # # # # ## # # + # # # ### #### ##### ### # # # ## # ### ### # # ### # + # # + ############################################################################## + +################################################################################ +# Global Broadcast Registers +################################################################################ + +rule GlobalFir +{ + CHECK_STOP: GLOBAL_CS_FIR; + RECOVERABLE: GLOBAL_RE_FIR; +}; + +group gGlobalFir attntype CHECK_STOP, RECOVERABLE filter singlebit +{ + /** GLOBAL_FIR[1] + * Attention from TP chiplet + */ + (GlobalFir, bit(1)) ? analyze(gTpChipletFir); + + /** GLOBAL_FIR[2] + * Attention from NEST chiplet + */ + (GlobalFir, bit(2)) ? analyze(gNestChipletFir); + + /** GLOBAL_FIR[3] + * Attention from MEM chiplet + */ + (GlobalFir, bit(3)) ? analyze(gMemChipletFir); +}; + +rule GlobalSpa +{ + SPECIAL: GLOBAL_SPA; +}; + +group gGlobalSpa attntype SPECIAL filter singlebit +{ + /** GLOBAL_SPA[3] + * Attention from MEM chiplet + */ + (GlobalSpa, bit(3)) ? analyze(gMemChipletSpa); +}; + +# Import all of the chiplet rules and actions +.include "Membuf_acts_TP.rule" +.include "Membuf_acts_NEST.rule" +.include "Membuf_acts_MEM.rule" + + ############################################################################## + # # + # # ### # + # # # ## ##### ### ### # # # # # # ### ### ### ### # + # # # # # # # # # ## # # # # # # # # # # + # ####### # # # # # # # # # # ##### ### ### ## ### # + # # # # # # # # # # ## # # # # # # # # # # + # # # ## # ### ### # # ### ### # # ### ### ### ### # + # # + ############################################################################## + +# Include the common action set. +.include "CommonActions.rule" + diff --git a/src/usr/diag/prdf/plat/pegasus/Membuf_acts_MEM.rule b/src/usr/diag/prdf/plat/pegasus/Membuf_acts_MEM.rule new file mode 100644 index 000000000..69b85f7b8 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Membuf_acts_MEM.rule @@ -0,0 +1,229 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Membuf_acts_MEM.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# MEM Chiplet Registers +################################################################################ + +rule MemChipletFir +{ + CHECK_STOP: + (MEM_CHIPLET_CS_FIR & `17f6000000000000`) & ~MEM_CHIPLET_FIR_MASK; + RECOVERABLE: + ((MEM_CHIPLET_RE_FIR >> 2) & `17f6000000000000`) & ~MEM_CHIPLET_FIR_MASK; +}; + +group gMemChipletFir filter singlebit +{ + /** MEM_CHIPLET_FIR[3] + * Attention from LFIR + */ + (MemChipletFir, bit(3)) ? analyze(gMemLFir); + + /** MEM_CHIPLET_FIR[5] + * Attention from MBAFIR (MBA 01) + */ + (MemChipletFir, bit(5)) ? analyzeMba0; + + /** MEM_CHIPLET_FIR[6] + * Attention from MBAFIR (MBA 23) + */ + (MemChipletFir, bit(6)) ? analyzeMba1; + + /** MEM_CHIPLET_FIR[7] + * Attention from MBACALFIR (MBA 01) + */ + (MemChipletFir, bit(7)) ? analyzeMba0; + + /** MEM_CHIPLET_FIR[8] + * Attention from MBACALFIR (MBA 23) + */ + (MemChipletFir, bit(8)) ? analyzeMba1; + + /** MEM_CHIPLET_FIR[9] + * Attention from DDRPHYFIR (MBA 01) + */ + (MemChipletFir, bit(9)) ? analyzeMba0; + + /** MEM_CHIPLET_FIR[10] + * Attention from DDRPHYFIR (MBA 23) + */ + (MemChipletFir, bit(10)) ? analyzeMba1; + + /** MEM_CHIPLET_FIR[11] + * Attention from MEMFBISTFIR + */ + (MemChipletFir, bit(11)) ? analyze(gMemFbistFir); + + /** MEM_CHIPLET_FIR[12] + * Attention from MBASECUREFIR (MBA 01) + */ + (MemChipletFir, bit(12)) ? analyzeMba0; + + /** MEM_CHIPLET_FIR[13] + * Attention from MBASECUREFIR (MBA 23) + */ + (MemChipletFir, bit(13)) ? analyzeMba1; +}; + +rule MemChipletSpa +{ + SPECIAL: MEM_CHIPLET_SPA & ~MEM_CHIPLET_SPA_MASK; +}; + +group gMemChipletSpa filter singlebit +{ + /** MEM_CHIPLET_SPA[0] + * Attention from Mba 01 + */ + (MemChipletSpa, bit(0)) ? analyzeMba0; + + /** MEM_CHIPLET_SPA[1] + * Attention from Mba 1 + */ + (MemChipletSpa, bit(1)) ? analyzeMba1; +}; + +################################################################################ +# MEM Chiplet LFIR +################################################################################ + +rule MemLFir +{ + CHECK_STOP: MEM_LFIR & ~MEM_LFIR_MASK & ~MEM_LFIR_ACT0 & ~MEM_LFIR_ACT1; + RECOVERABLE: MEM_LFIR & ~MEM_LFIR_MASK & ~MEM_LFIR_ACT0 & MEM_LFIR_ACT1; +}; + +group gMemLFir filter singlebit +{ + /** MEM_LFIR[0] + * CFIR internal parity error + */ + (MemLFir, bit(0)) ? TBDDefaultCallout; + + /** MEM_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (MemLFir, bit(1)) ? TBDDefaultCallout; + + /** MEM_LFIR[2] + * Local errors from CC (PCB error) + */ + (MemLFir, bit(2)) ? TBDDefaultCallout; + + /** MEM_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (MemLFir, bit(3)) ? TBDDefaultCallout; + + /** MEM_LFIR[4] + * Local errors from PSC (PCB error) + */ + (MemLFir, bit(4)) ? TBDDefaultCallout; + + /** MEM_LFIR[5] + * Local errors from PSC (parity error) + */ + (MemLFir, bit(5)) ? TBDDefaultCallout; + + /** MEM_LFIR[6] + * Local errors from Thermal (parity error) + */ + (MemLFir, bit(6)) ? TBDDefaultCallout; + + /** MEM_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (MemLFir, bit(7)) ? TBDDefaultCallout; + + /** MEM_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (MemLFir, bit(8|9)) ? TBDDefaultCallout; + + /** MEM_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (MemLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# MEM Chiplet MEMFBISTFIR +################################################################################ + +rule MemFbistFir +{ + CHECK_STOP: + MEMFBISTFIR & ~MEMFBISTFIR_MASK & ~MEMFBISTFIR_ACT0 & ~MEMFBISTFIR_ACT1; + RECOVERABLE: + MEMFBISTFIR & ~MEMFBISTFIR_MASK & ~MEMFBISTFIR_ACT0 & MEMFBISTFIR_ACT1; +}; + +group gMemFbistFir filter singlebit +{ + /** MBAFBISTFIR[0] + * FBM_FIR_REG_FBM_SCOM_UE + */ + (MemFbistFir, bit(0)) ? TBDDefaultCallout; + + /** MBAFBISTFIR[1] + * FBM_FIR_REG_FBM_CMD_CHK_1HOT + */ + (MemFbistFir, bit(1)) ? TBDDefaultCallout; + + /** MBAFBISTFIR[2] + * FBM_FIR_REG_FBM_DS_DATA_DROP + */ + (MemFbistFir, bit(2)) ? TBDDefaultCallout; + + /** MBAFBISTFIR[3] + * FBM_FIR_REG_FBM_DGEN_1HOT + */ + (MemFbistFir, bit(3)) ? TBDDefaultCallout; + + /** MBAFBISTFIR[4] + * FBM_FIR_REG_FBM_DGEN_RD_DATA_DROP + */ + (MemFbistFir, bit(4)) ? TBDDefaultCallout; + + /** MBAFBISTFIR[15] + * FBM_FIR_REG_INTERNAL_SCOM_ERROR + */ + (MemFbistFir, bit(15)) ? TBDDefaultCallout; + + /** MBAFBISTFIR[16] + * FBM_FIR_REG_INTERNAL_SCOM_ERROR_CLONE + */ + (MemFbistFir, bit(16)) ? TBDDefaultCallout; +}; + +################################################################################ +# Actions specific to MEM chiplet +################################################################################ + +/** Analyze connected MBA0 */ +actionclass analyzeMba0 { analyze(connected(TYPE_MBA, 0)); }; + +/** Analyze connected MBA1 */ +actionclass analyzeMba1 { analyze(connected(TYPE_MBA, 1)); }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Membuf_acts_NEST.rule b/src/usr/diag/prdf/plat/pegasus/Membuf_acts_NEST.rule new file mode 100644 index 000000000..f94002527 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Membuf_acts_NEST.rule @@ -0,0 +1,1172 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Membuf_acts_NEST.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# NEST Chiplet Registers +################################################################################ + +rule NestChipletFir +{ + CHECK_STOP: + (NEST_CHIPLET_CS_FIR & `17fe000000000000`) & ~NEST_CHIPLET_FIR_MASK; + RECOVERABLE: + ((NEST_CHIPLET_RE_FIR >> 2) & `17fe000000000000`) & ~NEST_CHIPLET_FIR_MASK; +}; + +group gNestChipletFir filter singlebit +{ + /** NEST_CHIPLET_FIR[3] + * Attention from LFIR + */ + (NestChipletFir, bit(3)) ? analyze(gNestLFir); + + /** NEST_CHIPLET_FIR[5] + * Attention from DMIFIR + */ + (NestChipletFir, bit(5)) ? analyze(gDmiFir); + + /** NEST_CHIPLET_FIR[6] + * Attention from MBIFIR + */ + (NestChipletFir, bit(6)) ? analyze(gMbiFir); + + /** NEST_CHIPLET_FIR[7] + * Attention from MBSFIR + */ + (NestChipletFir, bit(7)) ? analyze(gMbsFir); + + /** NEST_CHIPLET_FIR[8|9] + * Attention from MBSECCFIRs + */ + (NestChipletFir, bit(8|9)) ? analyze(gMbsEccFir); + + /** NEST_CHIPLET_FIR[10|11] + * Attention from MCBISTFIRs + */ + (NestChipletFir, bit(10|11)) ? analyze(gMcbistFir); + + /** NEST_CHIPLET_FIR[12] + * Attention from NESTFBISTFIR + */ + (NestChipletFir, bit(12))? analyze(gNestFbistFir); + + /** NEST_CHIPLET_FIR[13] + * Attention from SENSORCACHEFIR + */ + (NestChipletFir, bit(13)) ? analyze(gSensorCacheFir); + + /** NEST_CHIPLET_FIR[14] + * Attention from MBS secure FIR + */ + (NestChipletFir, bit(14))? analyze(gMbsSecureFir); +}; + +################################################################################ +# NEST Chiplet LFIR +################################################################################ + +rule NestLFir +{ + CHECK_STOP: NEST_LFIR & ~NEST_LFIR_MASK & ~NEST_LFIR_ACT0 & ~NEST_LFIR_ACT1; + RECOVERABLE: NEST_LFIR & ~NEST_LFIR_MASK & ~NEST_LFIR_ACT0 & NEST_LFIR_ACT1; +}; + +group gNestLFir filter singlebit +{ + /** NEST_LFIR[0] + * CFIR internal parity error + */ + (NestLFir, bit(0)) ? TBDDefaultCallout; + + /** NEST_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (NestLFir, bit(1)) ? TBDDefaultCallout; + + /** NEST_LFIR[2] + * Local errors from CC (PCB error) + */ + (NestLFir, bit(2)) ? TBDDefaultCallout; + + /** NEST_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (NestLFir, bit(3)) ? TBDDefaultCallout; + + /** NEST_LFIR[4] + * Local errors from PSC (PCB error) + */ + (NestLFir, bit(4)) ? TBDDefaultCallout; + + /** NEST_LFIR[5] + * Local errors from PSC (parity error) + */ + (NestLFir, bit(5)) ? TBDDefaultCallout; + + /** NEST_LFIR[6] + * Local errors from Thermal (parity error) + */ + (NestLFir, bit(6)) ? TBDDefaultCallout; + + /** NEST_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (NestLFir, bit(7)) ? TBDDefaultCallout; + + /** NEST_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (NestLFir, bit(8|9)) ? TBDDefaultCallout; + + /** NEST_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (NestLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# NEST Chiplet DMIFIR +################################################################################ + +rule DmiFir +{ + CHECK_STOP: DMIFIR & ~DMIFIR_MASK & ~DMIFIR_ACT0 & ~DMIFIR_ACT1; + RECOVERABLE: DMIFIR & ~DMIFIR_MASK & ~DMIFIR_ACT0 & DMIFIR_ACT1; +}; + +group gDmiFir filter singlebit +{ + /** DMIFIR[0] + * FIR_RX_INVALID_STATE_OR_PARITY_ERROR + */ + (DmiFir, bit(0)) ? TBDDefaultCallout; + + /** DMIFIR[1] + * FIR_TX_INVALID_STATE_OR_PARITY_ERROR + */ + (DmiFir, bit(1)) ? TBDDefaultCallout; + + /** DMIFIR[2] + * FIR_GCR_HANG_ERROR + */ + (DmiFir, bit(2)) ? TBDDefaultCallout; + + /** DMIFIR[8] + * FIR_RX_BUS0_TRAINING_ERROR + */ + (DmiFir, bit(8)) ? TBDDefaultCallout; + + /** DMIFIR[9] + * FIR_RX_BUS0_SPARE_DEPLOYED + */ + (DmiFir, bit(9)) ? TBDDefaultCallout; + + /** DMIFIR[10] + * FIR_RX_BUS0_MAX_SPARES_EXCEEDED + */ + (DmiFir, bit(10)) ? TBDDefaultCallout; + + /** DMIFIR[11] + * FIR_RX_BUS0_RECAL_OR_DYN_REPAIR_ERROR + */ + (DmiFir, bit(11)) ? TBDDefaultCallout; + + /** DMIFIR[12] + * FIR_RX_BUS0_TOO_MANY_BUS_ERRORS + */ + (DmiFir, bit(12)) ? TBDDefaultCallout; + + /** DMIFIR[16] + * FIR_RX_BUS1_TRAINING_ERROR + */ + (DmiFir, bit(16)) ? TBDDefaultCallout; + + /** DMIFIR[17] + * FIR_RX_BUS1_SPARE_DEPLOYED + */ + (DmiFir, bit(17)) ? TBDDefaultCallout; + + /** DMIFIR[18] + * FIR_RX_BUS1_MAX_SPARES_EXCEEDED + */ + (DmiFir, bit(18)) ? TBDDefaultCallout; + + /** DMIFIR[19] + * FIR_RX_BUS1_RECAL_OR_DYN_REPAIR_ERROR + */ + (DmiFir, bit(19)) ? TBDDefaultCallout; + + /** DMIFIR[20] + * FIR_RX_BUS1_TOO_MANY_BUS_ERRORS + */ + (DmiFir, bit(20)) ? TBDDefaultCallout; + + /** DMIFIR[24] + * FIR_RX_BUS2_TRAINING_ERROR + */ + (DmiFir, bit(24)) ? TBDDefaultCallout; + + /** DMIFIR[25] + * FIR_RX_BUS2_SPARE_DEPLOYED + */ + (DmiFir, bit(25)) ? TBDDefaultCallout; + + /** DMIFIR[26] + * FIR_RX_BUS2_MAX_SPARES_EXCEEDED + */ + (DmiFir, bit(26)) ? TBDDefaultCallout; + + /** DMIFIR[27] + * FIR_RX_BUS2_RECAL_OR_DYN_REPAIR_ERROR + */ + (DmiFir, bit(27)) ? TBDDefaultCallout; + + /** DMIFIR[28] + * FIR_RX_BUS2_TOO_MANY_BUS_ERRORS + */ + (DmiFir, bit(28)) ? TBDDefaultCallout; + + /** DMIFIR[32] + * FIR_RX_BUS3_TRAINING_ERROR + */ + (DmiFir, bit(32)) ? TBDDefaultCallout; + + /** DMIFIR[33] + * FIR_RX_BUS3_SPARE_DEPLOYED + */ + (DmiFir, bit(33)) ? TBDDefaultCallout; + + /** DMIFIR[34] + * FIR_RX_BUS3_MAX_SPARES_EXCEEDED + */ + (DmiFir, bit(34)) ? TBDDefaultCallout; + + /** DMIFIR[35] + * FIR_RX_BUS3_RECAL_OR_DYN_REPAIR_ERROR + */ + (DmiFir, bit(35)) ? TBDDefaultCallout; + + /** DMIFIR[36] + * FIR_RX_BUS3_TOO_MANY_BUS_ERRORS + */ + (DmiFir, bit(36)) ? TBDDefaultCallout; + + /** DMIFIR[40] + * FIR_RX_BUS4_TRAINING_ERROR + */ + (DmiFir, bit(40)) ? TBDDefaultCallout; + + /** DMIFIR[41] + * FIR_RX_BUS4_SPARE_DEPLOYED + */ + (DmiFir, bit(41)) ? TBDDefaultCallout; + + /** DMIFIR[42] + * FIR_RX_BUS4_MAX_SPARES_EXCEEDED + */ + (DmiFir, bit(42)) ? TBDDefaultCallout; + + /** DMIFIR[43] + * FIR_RX_BUS4_RECAL_OR_DYN_REPAIR_ERROR + */ + (DmiFir, bit(43)) ? TBDDefaultCallout; + + /** DMIFIR[44] + * FIR_RX_BUS4_TOO_MANY_BUS_ERRORS + */ + (DmiFir, bit(44)) ? TBDDefaultCallout; + + /** DMIFIR[48] + * FIR_SCOMFIR_ERROR + */ + (DmiFir, bit(48)) ? TBDDefaultCallout; + + /** DMIFIR[49] + * FIR_SCOMFIR_ERROR_CLONE + */ + (DmiFir, bit(49)) ? TBDDefaultCallout; +}; + +################################################################################ +# NEST Chiplet DMIFIR +################################################################################ + +rule SensorCacheFir +{ + CHECK_STOP: SENSORCACHEFIR & ~SENSORCACHEFIR_MASK & ~SENSORCACHEFIR_ACT0 & ~SENSORCACHEFIR_ACT1; + RECOVERABLE: SENSORCACHEFIR & ~SENSORCACHEFIR_MASK & ~SENSORCACHEFIR_ACT0 & SENSORCACHEFIR_ACT1; +}; + +group gSensorCacheFir filter singlebit +{ + /** SENSORCACHEFIR[0] + * SCAC_LFIR_I2CMINVADDR + */ + (SensorCacheFir, bit(0)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[1] + * SCAC_LFIR_I2CMINVWRITE + */ + (SensorCacheFir, bit(1)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[2] + * SCAC_LFIR_I2CMINVREAD + */ + (SensorCacheFir, bit(2)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[3] + * SCAC_LFIR_I2CMAPAR + */ + (SensorCacheFir, bit(3)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[4] + * SCAC_LFIR_I2CMPAR + */ + (SensorCacheFir, bit(4)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[5] + * SCAC_LFIR_I2CMLBPAR + */ + (SensorCacheFir, bit(5)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[10] + * SCAC_LFIR_I2CMINVCMD + */ + (SensorCacheFir, bit(10)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[11] + * SCAC_LFIR_I2CMPERR + */ + (SensorCacheFir, bit(11)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[12] + * SCAC_LFIR_I2CMOVERRUN + */ + (SensorCacheFir, bit(12)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[13] + * SCAC_LFIR_I2CMACCESS + */ + (SensorCacheFir, bit(13)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[14] + * SCAC_LFIR_I2CMARB + */ + (SensorCacheFir, bit(14)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[15] + * SCAC_LFIR_I2CMNACK + */ + (SensorCacheFir, bit(15)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[16] + * SCAC_LFIR_I2CMSTOP + */ + (SensorCacheFir, bit(16)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[17] + * SCAC_LFIR_LOCALPIB1 + */ + (SensorCacheFir, bit(17)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[18] + * SCAC_LFIR_LOCALPIB2 + */ + (SensorCacheFir, bit(18)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[19] + * SCAC_LFIR_LOCALPIB3 + */ + (SensorCacheFir, bit(19)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[20] + * SCAC_LFIR_LOCALPIB4 + */ + (SensorCacheFir, bit(20)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[21] + * SCAC_LFIR_LOCALPIB5 + */ + (SensorCacheFir, bit(21)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[22] + * SCAC_LFIR_LOCALPIB6 + */ + (SensorCacheFir, bit(22)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[23] + * SCAC_LFIR_LOCALPIB7 + */ + (SensorCacheFir, bit(23)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[24] + * SCAC_LFIR_STALLERROR + */ + (SensorCacheFir, bit(24)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[25] + * SCAC_LFIR_REGPARERR + */ + (SensorCacheFir, bit(25)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[26] + * SCAC_LFIR_REGPARERRX + */ + (SensorCacheFir, bit(26)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[32] + * SCAC_LFIR_SMERR + */ + (SensorCacheFir, bit(32)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[33] + * SCAC_LFIR_REGACCERR + */ + (SensorCacheFir, bit(33)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[34] + * SCAC_LFIR_RESETERR + */ + (SensorCacheFir, bit(34)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[35] + * SCAC_LFIR_INTERNAL_SCOM_ERROR + */ + (SensorCacheFir, bit(35)) ? TBDDefaultCallout; + + /** SENSORCACHEFIR[36] + * SCAC_LFIR_INTERNAL_SCOM_ERROR_CLONE + */ + (SensorCacheFir, bit(36)) ? TBDDefaultCallout; +}; + +################################################################################ +# NEST Chiplet MBIFIR +################################################################################ + +rule MbiFir +{ + CHECK_STOP: MBIFIR & ~MBIFIR_MASK & ~MBIFIR_ACT0 & ~MBIFIR_ACT1; + RECOVERABLE: MBIFIR & ~MBIFIR_MASK & ~MBIFIR_ACT0 & MBIFIR_ACT1; +}; + +group gMbiFir filter singlebit +{ + /** MbiFir[0] + * MBIFIRQ_REPLAY_TIMEOUT + */ + (MbiFir, bit(0)) ? TBDDefaultCallout; + + /** MbiFir[1] + * MBIFIRQ_CHANNEL_FAIL + */ + (MbiFir, bit(1)) ? TBDDefaultCallout; + + /** MbiFir[2] + * MBIFIRQ_CRC_ERROR + */ + (MbiFir, bit(2)) ? TBDDefaultCallout; + + /** MbiFir[3] + * MBIFIRQ_FRAME_NOACK + */ + (MbiFir, bit(3)) ? TBDDefaultCallout; + + /** MbiFir[4] + * MBIFIRQ_SEQID_OUT_OF_ORDER + */ + (MbiFir, bit(4)) ? TBDDefaultCallout; + + /** MbiFir[5] + * MBIFIRQ_REPLAY_BUFFER_ECC_CE + */ + (MbiFir, bit(5)) ? TBDDefaultCallout; + + /** MbiFir[6] + * MBIFIRQ_REPLAY_BUFFER_ECC_UE + */ + (MbiFir, bit(6)) ? TBDDefaultCallout; + + /** MbiFir[7] + * MBIFIRQ_MBI_STATE_MACHINE_TIMEOUT + */ + (MbiFir, bit(7)) ? TBDDefaultCallout; + + /** MbiFir[8] + * MBIFIRQ_MBI_INTERNAL_CONTROL_PARITY_ERROR + */ + (MbiFir, bit(8)) ? TBDDefaultCallout; + + /** MbiFir[9] + * MBIFIRQ_MBI_DATA_FLOW_PARITY_ERROR + */ + (MbiFir, bit(9)) ? TBDDefaultCallout; + + /** MbiFir[10] + * MBIFIRQ_CRC_PERFORMANCE_DEGRADATION + */ + (MbiFir, bit(10)) ? TBDDefaultCallout; + + /** MbiFir[11] + * MBIFIRQ_HOST_MC_GLOBAL_CHECKSTOP + */ + (MbiFir, bit(11)) ? TBDDefaultCallout; + + /** MbiFir[12] + * MBIFIRQ_HOST_MC_TRACESTOP + */ + (MbiFir, bit(12)) ? TBDDefaultCallout; + + /** MbiFir[13] + * MBIFIRQ_CHANNEL_INTERLOCK_FAIL + */ + (MbiFir, bit(13)) ? TBDDefaultCallout; + + /** MbiFir[14] + * MBIFIRQ_HOST_MC_LOCAL_CHECKSTOP + */ + (MbiFir, bit(14)) ? TBDDefaultCallout; + + /** MbiFir[15] + * MBIFIRQ_FRTL_CONTER_OVERFLOW + */ + (MbiFir, bit(15)) ? TBDDefaultCallout; + + /** MbiFir[16] + * MBIFIRQ_SCOM_REGISTER_PARITY_ERROR + */ + (MbiFir, bit(16)) ? TBDDefaultCallout; + + /** MbiFir[17] + * MBIFIRQ_IO_FAULT: IO to MBI + */ + (MbiFir, bit(17)) ? TBDDefaultCallout; + + /** MbiFir[18] + * MBIFIRQ_MULTIPLE_REPLAY + */ + (MbiFir, bit(18)) ? TBDDefaultCallout; + + /** MbiFir[19] + * MBIFIRQ_MBICFG_PARITY_SCOM_ERROR + */ + (MbiFir, bit(19)) ? TBDDefaultCallout; + + /** MbiFir[20] + * MBIFIRQ_BUFFER_OVERRUN_ERROR + */ + (MbiFir, bit(20)) ? TBDDefaultCallout; + + /** MbiFir[25] + * MBIFIRQ_INTERNAL_SCOM_ERROR_CLONE + */ + (MbiFir, bit(25)) ? TBDDefaultCallout; + + /** MbiFir[26] + * MBIFIRQ_INTERNAL_SCOM_ERROR_CLONE_COPY + */ + (MbiFir, bit(26)) ? TBDDefaultCallout; +}; + +################################################################################ +# NEST Chiplet MBSFIR +################################################################################ + +rule MbsFir +{ + CHECK_STOP: MBSFIR & ~MBSFIR_MASK & ~MBSFIR_ACT0 & ~MBSFIR_ACT1; + RECOVERABLE: MBSFIR & ~MBSFIR_MASK & ~MBSFIR_ACT0 & MBSFIR_ACT1; +}; + +group gMbsFir filter singlebit +{ + /** MBSFIR[0] + * MBS_FIR_REG_HOST_PROTOCOL_ERROR + */ + (MbsFir, bit(0)) ? TBDDefaultCallout; + + /** MBSFIR[1] + * MBS_FIR_REG_INT_PROTOCOL_ERROR + */ + (MbsFir, bit(1)) ? TBDDefaultCallout; + + /** MBSFIR[2] + * MBS_FIR_REG_INVALID_ADDRESS_ERROR + */ + (MbsFir, bit(2)) ? TBDDefaultCallout; + + /** MBSFIR[3] + * MBS_FIR_REG_EXTERNAL_TIMEOUT + */ + (MbsFir, bit(3)) ? TBDDefaultCallout; + + /** MBSFIR[4] + * MBS_FIR_REG_INTERNAL_TIMEOUT + */ + (MbsFir, bit(4)) ? TBDDefaultCallout; + + /** MBSFIR[5] + * MBS_FIR_REG_INT_BUFFER_CE + */ + (MbsFir, bit(5)) ? TBDDefaultCallout; + + /** MBSFIR[6] + * MBS_FIR_REG_INT_BUFFER_UE + */ + (MbsFir, bit(6)) ? TBDDefaultCallout; + + /** MBSFIR[7] + * MBS_FIR_REG_INT_BUFFER_SUE + */ + (MbsFir, bit(7)) ? TBDDefaultCallout; + + /** MBSFIR[8] + * MBS_FIR_REG_INT_PARITY_ERROR + */ + (MbsFir, bit(8)) ? TBDDefaultCallout; + + /** MBSFIR[9] + * MBS_FIR_REG_CACHE_SRW_CE + */ + (MbsFir, bit(9)) ? TBDDefaultCallout; + + /** MBSFIR[10] + * MBS_FIR_REG_CACHE_SRW_UE + */ + (MbsFir, bit(10)) ? TBDDefaultCallout; + + /** MBSFIR[11] + * MBS_FIR_REG_CACHE_SRW_SUE + */ + (MbsFir, bit(11)) ? TBDDefaultCallout; + + /** MBSFIR[12] + * MBS_FIR_REG_CACHE_CO_CE + */ + (MbsFir, bit(12)) ? TBDDefaultCallout; + + /** MBSFIR[13] + * MBS_FIR_REG_CACHE_CO_UE + */ + (MbsFir, bit(13)) ? TBDDefaultCallout; + + /** MBSFIR[14] + * MBS_FIR_REG_CACHE_CO_SUE + */ + (MbsFir, bit(14)) ? TBDDefaultCallout; + + /** MBSFIR[15] + * MBS_FIR_REG_DIR_CE + */ + (MbsFir, bit(15)) ? TBDDefaultCallout; + + /** MBSFIR[16] + * MBS_FIR_REG_DIR_UE + */ + (MbsFir, bit(16)) ? TBDDefaultCallout; + + /** MBSFIR[17] + * MBS_FIR_REG_DIR_MEMBER_DELETED + */ + (MbsFir, bit(17)) ? TBDDefaultCallout; + + /** MBSFIR[18] + * MBS_FIR_REG_DIR_ALL_MEMBERS_DELETED + */ + (MbsFir, bit(18)) ? TBDDefaultCallout; + + /** MBSFIR[19] + * MBS_FIR_REG_LRU_ERROR + */ + (MbsFir, bit(19)) ? TBDDefaultCallout; + + /** MBSFIR[20] + * MBS_FIR_REG_EDRAM_ERROR + */ + (MbsFir, bit(20)) ? TBDDefaultCallout; + + /** MBSFIR[21] + * MBS_FIR_REG_EMERGENCY_THROTTLE_SET + */ + (MbsFir, bit(21)) ? TBDDefaultCallout; + + /** MBSFIR[22] + * MBS_FIR_REG_HOST_INBAND_READ_ERROR + */ + (MbsFir, bit(22)) ? TBDDefaultCallout; + + /** MBSFIR[23] + * MBS_FIR_REG_HOST_INBAND_WRITE_ERROR + */ + (MbsFir, bit(23)) ? TBDDefaultCallout; + + /** MBSFIR[24] + * MBS_FIR_REG_OCC_INBAND_READ_ERROR + */ + (MbsFir, bit(24)) ? TBDDefaultCallout; + + /** MBSFIR[25] + * MBS_FIR_REG_OCC_INBAND_WRITE_ERROR + */ + (MbsFir, bit(25)) ? TBDDefaultCallout; + + /** MBSFIR[26] + * MBS_FIR_REG_SRB_BUFFER_CE + */ + (MbsFir, bit(26)) ? TBDDefaultCallout; + + /** MBSFIR[27] + * MBS_FIR_REG_SRB_BUFFER_UE + */ + (MbsFir, bit(27)) ? TBDDefaultCallout; + + /** MBSFIR[28] + * MBS_FIR_REG_SRB_BUFFER_SUE + */ + (MbsFir, bit(28)) ? TBDDefaultCallout; + + /** MBSFIR[29] + * MBS_FIR_REG_INTERNAL_SCOM_ERROR + */ + (MbsFir, bit(29)) ? TBDDefaultCallout; + + /** MBSFIR[30] + * MBS_FIR_REG_INTERNAL_SCOM_ERROR_COPY + */ + (MbsFir, bit(30)) ? TBDDefaultCallout; +}; + +################################################################################ +# NEST Chiplet MBSECC01FIR and MBSECC23FIR +################################################################################ + +rule MbsEcc01Fir +{ + CHECK_STOP: + MBSECC01FIR & ~MBSECC01FIR_MASK & ~MBSECC01FIR_ACT0 & ~MBSECC01FIR_ACT1; + RECOVERABLE: + MBSECC01FIR & ~MBSECC01FIR_MASK & ~MBSECC01FIR_ACT0 & MBSECC01FIR_ACT1; +}; + +rule MbsEcc23Fir +{ + CHECK_STOP: + MBSECC23FIR & ~MBSECC23FIR_MASK & ~MBSECC23FIR_ACT0 & ~MBSECC23FIR_ACT1; + RECOVERABLE: + MBSECC23FIR & ~MBSECC23FIR_MASK & ~MBSECC23FIR_ACT0 & MBSECC23FIR_ACT1; +}; + +group gMbsEccFir filter singlebit +{ + /** MBSECCFIR01[0:7] + * MBECCFIR_MEMORY_MPE_RANK_0_7 + */ + (MbsEcc01Fir, bit(0|1|2|3|4|5|6|7)) ? TBDDefaultCallout; + + /** MBSECCFIR23[0:7] + * MBECCFIR_MEMORY_MPE_RANK_0_7 + */ + (MbsEcc23Fir, bit(0|1|2|3|4|5|6|7)) ? TBDDefaultCallout; + + /** MBSECCFIR01[16] + * MBECCFIR_MEMORY_NCE + */ + (MbsEcc01Fir, bit(16)) ? TBDDefaultCallout; + + /** MBSECCFIR23[16] + * MBECCFIR_MEMORY_NCE + */ + (MbsEcc23Fir, bit(16)) ? TBDDefaultCallout; + + /** MBSECCFIR01[17] + * MBECCFIR_MEMORY_RCE + */ + (MbsEcc01Fir, bit(17)) ? TBDDefaultCallout; + + /** MBSECCFIR23[17] + * MBECCFIR_MEMORY_RCE + */ + (MbsEcc23Fir, bit(17)) ? TBDDefaultCallout; + + /** MBSECCFIR01[18] + * MBECCFIR_MEMORY_SUE + */ + (MbsEcc01Fir, bit(18)) ? TBDDefaultCallout; + + /** MBSECCFIR23[18] + * MBECCFIR_MEMORY_SUE + */ + (MbsEcc23Fir, bit(18)) ? TBDDefaultCallout; + + /** MBSECCFIR01[19] + * MBECCFIR_MEMORY_UE + */ + (MbsEcc01Fir, bit(19)) ? TBDDefaultCallout; + + /** MBSECCFIR23[19] + * MBECCFIR_MEMORY_UE + */ + (MbsEcc23Fir, bit(19)) ? TBDDefaultCallout; + + /** MBSECCFIR01[20:27] + * MBECCFIR_MAINT_MPE_RANK_0_7 + */ + (MbsEcc01Fir, bit(20|21|22|23|24|25|26|27)) ? TBDDefaultCallout; + + /** MBSECCFIR23[20:27] + * MBECCFIR_MAINT_MPE_RANK_0_7 + */ + (MbsEcc23Fir, bit(20|21|22|23|24|25|26|27)) ? TBDDefaultCallout; + + /** MBSECCFIR01[36] + * MBECCFIR_MAINTENANCE_NCE + */ + (MbsEcc01Fir, bit(36)) ? TBDDefaultCallout; + + /** MBSECCFIR23[36] + * MBECCFIR_MAINTENANCE_NCE + */ + (MbsEcc23Fir, bit(36)) ? TBDDefaultCallout; + + /** MBSECCFIR01[37] + * MBECCFIR_MAINTENANCE_SCE + */ + (MbsEcc01Fir, bit(37)) ? TBDDefaultCallout; + + /** MBSECCFIR23[37] + * MBECCFIR_MAINTENANCE_SCE + */ + (MbsEcc23Fir, bit(37)) ? TBDDefaultCallout; + + /** MBSECCFIR01[38] + * MBECCFIR_MAINTENANCE_MCE + */ + (MbsEcc01Fir, bit(38)) ? TBDDefaultCallout; + + /** MBSECCFIR23[38] + * MBECCFIR_MAINTENANCE_MCE + */ + (MbsEcc23Fir, bit(38)) ? TBDDefaultCallout; + + /** MBSECCFIR01[39] + * MBECCFIR_MAINTENANCE_RCE + */ + (MbsEcc01Fir, bit(39)) ? TBDDefaultCallout; + + /** MBSECCFIR23[39] + * MBECCFIR_MAINTENANCE_RCE + */ + (MbsEcc23Fir, bit(39)) ? TBDDefaultCallout; + + /** MBSECCFIR01[40] + * MBECCFIR_MAINTENANCE_SUE + */ + (MbsEcc01Fir, bit(40)) ? TBDDefaultCallout; + + /** MBSECCFIR23[40] + * MBECCFIR_MAINTENANCE_SUE + */ + (MbsEcc23Fir, bit(40)) ? TBDDefaultCallout; + + /** MBSECCFIR01[41] + * MBECCFIR_MAINTENANCE_UE + */ + (MbsEcc01Fir, bit(41)) ? TBDDefaultCallout; + + /** MBSECCFIR23[41] + * MBECCFIR_MAINTENANCE_UE + */ + (MbsEcc23Fir, bit(41)) ? TBDDefaultCallout; + + /** MBSECCFIR01[42] + * MBECCFIR_MPE_DURING_USE_MAINTENANCE_MARK_MODE + */ + (MbsEcc01Fir, bit(42)) ? TBDDefaultCallout; + + /** MBSECCFIR23[42] + * MBECCFIR_MPE_DURING_USE_MAINTENANCE_MARK_MODE + */ + (MbsEcc23Fir, bit(42)) ? TBDDefaultCallout; + + /** MBSECCFIR01[43] + * MBECCFIR_PREFETCH_MEMORY_UE + */ + (MbsEcc01Fir, bit(43)) ? TBDDefaultCallout; + + /** MBSECCFIR23[43] + * MBECCFIR_PREFETCH_MEMORY_UE + */ + (MbsEcc23Fir, bit(43)) ? TBDDefaultCallout; + + /** MBSECCFIR01[44] + * MBECCFIR_MEMORY_RCD_PARITY_ERROR + */ + (MbsEcc01Fir, bit(44)) ? TBDDefaultCallout; + + /** MBSECCFIR23[44] + * MBECCFIR_MEMORY_RCD_PARITY_ERROR + */ + (MbsEcc23Fir, bit(44)) ? TBDDefaultCallout; + + /** MBSECCFIR01[45] + * MBECCFIR_MAINTENANCE_RCD_PARITY_ERROR + */ + (MbsEcc01Fir, bit(45)) ? TBDDefaultCallout; + + /** MBSECCFIR23[45] + * MBECCFIR_MAINTENANCE_RCD_PARITY_ERROR + */ + (MbsEcc23Fir, bit(45)) ? TBDDefaultCallout; + + /** MBSECCFIR01[46] + * MBECCFIR_RECOVERABLE_CONFIGURATION_REGISTER_PARITY_ERROR + */ + (MbsEcc01Fir, bit(46)) ? TBDDefaultCallout; + + /** MBSECCFIR23[46] + * MBECCFIR_RECOVERABLE_CONFIGURATION_REGISTER_PARITY_ERROR + */ + (MbsEcc23Fir, bit(46)) ? TBDDefaultCallout; + + /** MBSECCFIR01[47] + * MBECCFIR_UNRECOVERABLE_CONFIGURATION_REGISTER_PARITY_ERROR + */ + (MbsEcc01Fir, bit(47)) ? TBDDefaultCallout; + + /** MBSECCFIR23[47] + * MBECCFIR_UNRECOVERABLE_CONFIGURATION_REGISTER_PARITY_ERROR + */ + (MbsEcc23Fir, bit(47)) ? TBDDefaultCallout; + + /** MBSECCFIR01[48] + * MBECCFIR_MASKABLE_CONFIGURATION_REGISTER_PARITY_ERROR + */ + (MbsEcc01Fir, bit(48)) ? TBDDefaultCallout; + + /** MBSECCFIR23[48] + * MBECCFIR_MASKABLE_CONFIGURATION_REGISTER_PARITY_ERROR + */ + (MbsEcc23Fir, bit(48)) ? TBDDefaultCallout; + + /** MBSECCFIR01[49] + * MBECCFIR_ECC_DATAPATH_PARITY_ERROR + */ + (MbsEcc01Fir, bit(49)) ? TBDDefaultCallout; + + /** MBSECCFIR23[49] + * MBECCFIR_ECC_DATAPATH_PARITY_ERROR + */ + (MbsEcc23Fir, bit(49)) ? TBDDefaultCallout; + + /** MBSECCFIR01[50] + * MBECCFIR_INTERNAL_SCOM_ERROR + */ + (MbsEcc01Fir, bit(50)) ? TBDDefaultCallout; + + /** MBSECCFIR23[50] + * MBECCFIR_INTERNAL_SCOM_ERROR + */ + (MbsEcc23Fir, bit(50)) ? TBDDefaultCallout; + + /** MBSECCFIR01[51] + * MBECCFIR_INTERNAL_SCOM_ERROR_COPY + */ + (MbsEcc01Fir, bit(51)) ? TBDDefaultCallout; + + /** MBSECCFIR23[51] + * MBECCFIR_INTERNAL_SCOM_ERROR_COPY + */ + (MbsEcc23Fir, bit(51)) ? TBDDefaultCallout; +}; + +################################################################################ +# NEST Chiplet MCBIST01FIR and MCBIST23FIR +################################################################################ + +rule Mcbist01Fir +{ + CHECK_STOP: + MCBIST01FIR & ~MCBIST01FIR_MASK & ~MCBIST01FIR_ACT0 & ~MCBIST01FIR_ACT1; + RECOVERABLE: + MCBIST01FIR & ~MCBIST01FIR_MASK & ~MCBIST01FIR_ACT0 & MCBIST01FIR_ACT1; +}; + +rule Mcbist23Fir +{ + CHECK_STOP: + MCBIST23FIR & ~MCBIST23FIR_MASK & ~MCBIST23FIR_ACT0 & ~MCBIST23FIR_ACT1; + RECOVERABLE: + MCBIST23FIR & ~MCBIST23FIR_MASK & ~MCBIST23FIR_ACT0 & MCBIST23FIR_ACT1; +}; + +group gMcbistFir filter singlebit +{ + /** MCBISTFIR01[0] + * MBSFIRQ_SCOM_PAR_ERRORS + */ + (Mcbist01Fir, bit(0)) ? TBDDefaultCallout; + + /** MCBISTFIR23[0] + * MBSFIRQ_SCOM_PAR_ERRORS + */ + (Mcbist23Fir, bit(0)) ? TBDDefaultCallout; + + /** MCBISTFIR01[1] + * MBSFIRQ_MBX_PAR_ERRORS + */ + (Mcbist01Fir, bit(1)) ? TBDDefaultCallout; + + /** MCBISTFIR23[1] + * MBSFIRQ_MBX_PAR_ERRORS + */ + (Mcbist23Fir, bit(1)) ? TBDDefaultCallout; + + /** MCBISTFIR01[15] + * MBSFIRQ_INTERNAL_SCOM_ERROR + */ + (Mcbist01Fir, bit(15)) ? TBDDefaultCallout; + + /** MCBISTFIR23[15] + * MBSFIRQ_INTERNAL_SCOM_ERROR + */ + (Mcbist23Fir, bit(15)) ? TBDDefaultCallout; + + /** MCBISTFIR01[16] + * MBSFIRQ_INTERNAL_SCOM_ERROR_CLONE + */ + (Mcbist01Fir, bit(16)) ? TBDDefaultCallout; + + /** MCBISTFIR23[16] + * MBSFIRQ_INTERNAL_SCOM_ERROR_CLONE + */ + (Mcbist23Fir, bit(16)) ? TBDDefaultCallout; +}; + +################################################################################ +# NEST Chiplet NESTFBISTFIR +################################################################################ + +rule NestFbistFir +{ + CHECK_STOP: + NESTFBISTFIR & ~NESTFBISTFIR_MASK & ~NESTFBISTFIR_ACT0 & ~NESTFBISTFIR_ACT1; + RECOVERABLE: + NESTFBISTFIR & ~NESTFBISTFIR_MASK & ~NESTFBISTFIR_ACT0 & NESTFBISTFIR_ACT1; +}; + +group gNestFbistFir filter singlebit +{ + /** NESTFBISTFIR[0] + * FBN_FIR_REG_FBN_SCOM_UE + */ + (NestFbistFir, bit(0)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[1] + * FBN_FIR_REG_FBN_USCHK_1HOT + */ + (NestFbistFir, bit(1)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[2] + * FBN_FIR_REG_FBN_USCHK_DATA_DROP + */ + (NestFbistFir, bit(2)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[3] + * FBN_FIR_REG_FBN_DGEN_1HOT + */ + (NestFbistFir, bit(3)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[4] + * FBN_FIR_REG_FBN_CMD_1HOT + */ + (NestFbistFir, bit(4)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[5] + * FBN_FIR_REG_FBN_CMD_EARLY_RESPONSE + */ + (NestFbistFir, bit(5)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[6] + * FBN_FIR_REG_FBN_FBIST_FAIL + */ + (NestFbistFir, bit(6)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[7] + * FBN_FIR_REG_FBN_US_CRC_ERR + */ + (NestFbistFir, bit(7)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[15] + * FBN_FIR_REG_INTERNAL_SCOM_ERROR + */ + (NestFbistFir, bit(15)) ? TBDDefaultCallout; + + /** NESTFBISTFIR[16] + * FBN_FIR_REG_INTERNAL_SCOM_ERROR_CLONE + */ + (NestFbistFir, bit(16)) ? TBDDefaultCallout; +}; + +################################################################################ +# NEST Chiplet MBSSECUREFIR +################################################################################ + +rule MbsSecureFir +{ + CHECK_STOP: + MBSSECUREFIR & ~MBSSECUREFIR_MASK & ~MBSSECUREFIR_ACT0 & ~MBSSECUREFIR_ACT1; + # NOTE: This secure FIR will only report checkstop attentions. +}; + +group gMbsSecureFir filter singlebit +{ + /** MBSSECUREFIR[0] + * MBSSIRQ_INVALID_MBSXCR_ACCESS + */ + (MbsSecureFir, bit(0)) ? TBDDefaultCallout; + + /** MBSSECUREFIR[1] + * MBSSIRQ_INVALID_MBAXCR01_ACCESS + */ + (MbsSecureFir, bit(1)) ? TBDDefaultCallout; + + /** MBSSECUREFIR[2] + * MBSSIRQ_INVALID_MBAXCR23_ACCESS + */ + (MbsSecureFir, bit(2)) ? TBDDefaultCallout; + + /** MBSSECUREFIR[3] + * MBSSIRQ_INVALID_MBAXCRMS_ACCRESS + */ + (MbsSecureFir, bit(3)) ? TBDDefaultCallout; + + /** MBSSECUREFIR[5] + * MBSSIRQ_INVALID_SIR_MASK_OR_ACTION_REGISTER_ACCESS + */ + (MbsSecureFir, bit(5)) ? TBDDefaultCallout; +}; + +################################################################################ +# Actions specific to NEST chiplet +################################################################################ + diff --git a/src/usr/diag/prdf/plat/pegasus/Membuf_acts_TP.rule b/src/usr/diag/prdf/plat/pegasus/Membuf_acts_TP.rule new file mode 100644 index 000000000..84d097c0c --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Membuf_acts_TP.rule @@ -0,0 +1,110 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Membuf_acts_TP.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# TP Chiplet Registers +################################################################################ + +rule TpChipletFir +{ + CHECK_STOP: + (TP_CHIPLET_CS_FIR & `1000000000000000`) & ~TP_CHIPLET_FIR_MASK; + RECOVERABLE: + ((TP_CHIPLET_RE_FIR >> 2) & `1000000000000000`) & ~TP_CHIPLET_FIR_MASK; +}; + +group gTpChipletFir filter singlebit +{ + /** TP_CHIPLET_FIR[3] + * Attention from LFIR + */ + (TpChipletFir, bit(3)) ? analyze(gTpLFir); +}; + +################################################################################ +# TP Chiplet LFIR +################################################################################ + +rule TpLFir +{ + CHECK_STOP: TP_LFIR & ~TP_LFIR_MASK & ~TP_LFIR_ACT0 & ~TP_LFIR_ACT1; + RECOVERABLE: TP_LFIR & ~TP_LFIR_MASK & ~TP_LFIR_ACT0 & TP_LFIR_ACT1; +}; + +group gTpLFir filter singlebit +{ + /** TP_LFIR[0] + * CFIR internal parity error + */ + (TpLFir, bit(0)) ? TBDDefaultCallout; + + /** TP_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (TpLFir, bit(1)) ? TBDDefaultCallout; + + /** TP_LFIR[2] + * Local errors from CC (PCB error) + */ + (TpLFir, bit(2)) ? TBDDefaultCallout; + + /** TP_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (TpLFir, bit(3)) ? TBDDefaultCallout; + + /** TP_LFIR[4] + * Local errors from PSC (PCB error) + */ + (TpLFir, bit(4)) ? TBDDefaultCallout; + + /** TP_LFIR[5] + * Local errors from PSC (parity error) + */ + (TpLFir, bit(5)) ? TBDDefaultCallout; + + /** TP_LFIR[6] + * Local errors from Thermal (parity error) + */ + (TpLFir, bit(6)) ? TBDDefaultCallout; + + /** TP_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (TpLFir, bit(7)) ? TBDDefaultCallout; + + /** TP_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (TpLFir, bit(8|9)) ? TBDDefaultCallout; + + /** TP_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (TpLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# Actions specific to TP chiplet +################################################################################ + diff --git a/src/usr/diag/prdf/plat/pegasus/Membuf_regs_MEM.rule b/src/usr/diag/prdf/plat/pegasus/Membuf_regs_MEM.rule new file mode 100644 index 000000000..5de564fe3 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Membuf_regs_MEM.rule @@ -0,0 +1,138 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Membuf_regs_MEM.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + + ############################################################################ + # MEM Chiplet Registers + ############################################################################ + + register MEM_CHIPLET_CS_FIR + { + name "TCM.XFIR"; + scomaddr 0x03040000; + capture group default; + }; + + register MEM_CHIPLET_RE_FIR + { + name "TCM.RFIR"; + scomaddr 0x03040001; + capture group default; + }; + + register MEM_CHIPLET_FIR_MASK + { + name "TCM.FIR_MASK"; + scomaddr 0x03040002; + capture type secondary; + capture group default; + }; + + register MEM_CHIPLET_SPA + { + name "TCM.EPS.FIR.SPATTN"; + scomaddr 0x03040004; + capture group default; + }; + + register MEM_CHIPLET_SPA_MASK + { + name "TCM.EPS.FIR.SPA_MASK"; + scomaddr 0x03040007; + capture type secondary; + capture group default; + }; + + ############################################################################ + # MEM Chiplet LFIR + ############################################################################ + + register MEM_LFIR + { + name "TCM.LOCAL_FIR"; + scomaddr 0x0304000a; + reset (&, 0x0304000b); + mask (|, 0x0304000f); + capture group default; + }; + + register MEM_LFIR_MASK + { + name "TCM.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x0304000d; + capture type secondary; + capture group default; + }; + + register MEM_LFIR_ACT0 + { + name "TCM.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x03040010; + capture type secondary; + capture group default; + }; + + register MEM_LFIR_ACT1 + { + name "TCM.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x03040011; + capture type secondary; + capture group default; + }; + + ############################################################################ + # MEM Chiplet MEMFBISTFIR + ############################################################################ + + register MEMFBISTFIR + { + name "FBIST.FBM.FBM_FIR_REG"; + scomaddr 0x03010480; + reset (&, 0x03010481); + mask (|, 0x03010485); + capture group default; + }; + + register MEMFBISTFIR_MASK + { + name "FBIST.FBM.FBM_FIR_MASK_REG"; + scomaddr 0x03010483; + capture type secondary; + capture group default; + }; + + register MEMFBISTFIR_ACT0 + { + name "FBIST.FBM.FBM_FIR_ACTION0_REG"; + scomaddr 0x03010486; + capture type secondary; + capture group default; + }; + + register MEMFBISTFIR_ACT1 + { + name "FBIST.FBM.FBM_FIR_ACTION1_REG"; + scomaddr 0x03010487; + capture type secondary; + capture group default; + }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Membuf_regs_NEST.rule b/src/usr/diag/prdf/plat/pegasus/Membuf_regs_NEST.rule new file mode 100644 index 000000000..baf284fd8 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Membuf_regs_NEST.rule @@ -0,0 +1,458 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Membuf_regs_NEST.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + + ############################################################################ + # NEST Chiplet Registers + ############################################################################ + + register NEST_CHIPLET_CS_FIR + { + name "TCN.XFIR"; + scomaddr 0x02040000; + capture group default; + }; + + register NEST_CHIPLET_RE_FIR + { + name "TCN.RFIR"; + scomaddr 0x02040001; + capture group default; + }; + + register NEST_CHIPLET_FIR_MASK + { + name "TCN.FIR_MASK"; + scomaddr 0x02040002; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet LFIR + ############################################################################ + + register NEST_LFIR + { + name "TCN.LOCAL_FIR"; + scomaddr 0x0204000a; + reset (&, 0x0204000b); + mask (|, 0x0204000f); + capture group default; + }; + + register NEST_LFIR_MASK + { + name "TCN.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x0204000d; + capture type secondary; + capture group default; + }; + + register NEST_LFIR_ACT0 + { + name "TCN.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x02040010; + capture type secondary; + capture group default; + }; + + register NEST_LFIR_ACT1 + { + name "TCN.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x02040011; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet DMIFIR + ############################################################################ + + register DMIFIR + { + name "DMI.BUSCTL.SCOM.FIR_REG"; + scomaddr 0x02010400; + reset (&, 0x02010401); + mask (|, 0x02010405); + capture group default; + }; + + register DMIFIR_MASK + { + name "DMI.BUSCTL.SCOM.FIR_MASK_REG"; + scomaddr 0x02010403; + capture type secondary; + capture group default; + }; + + register DMIFIR_ACT0 + { + name "DMI.BUSCTL.SCOM.FIR_ACTION0_REG"; + scomaddr 0x02010406; + capture type secondary; + capture group default; + }; + + register DMIFIR_ACT1 + { + name "DMI.BUSCTL.SCOM.FIR_ACTION1_REG"; + scomaddr 0x02010407; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet MBIFIR + ############################################################################ + + register MBIFIR + { + name "MBU.MBI.MBI.SCOMFIR.MBIFIRQ"; + scomaddr 0x02010800; + reset (&, 0x02010801); + mask (|, 0x02010805); + capture group default; + }; + + register MBIFIR_MASK + { + name "MBU.MBI.MBI.SCOMFIR.MBIFIRMASK"; + scomaddr 0x02010803; + capture type secondary; + capture group default; + }; + + register MBIFIR_ACT0 + { + name "MBU.MBI.MBI.SCOMFIR.MBIFIRACT0"; + scomaddr 0x02010806; + capture type secondary; + capture group default; + }; + + register MBIFIR_ACT1 + { + name "MBU.MBI.MBI.SCOMFIR.MBIFIRACT1"; + scomaddr 0x02010807; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet MBSFIR + ############################################################################ + + register MBSFIR + { + name "MBU.MBS.MBS_FIR_REG"; + scomaddr 0x02011400; + reset (&, 02011401); + mask (|, 02011405); + capture group default; + }; + + register MBSFIR_MASK + { + name "MBU.MBS.MBS_FIR_MASK_REG"; + scomaddr 0x02011403; + capture type secondary; + capture group default; + }; + + register MBSFIR_ACT0 + { + name "MBU.MBS.MBS_FIR_ACTION0_REG"; + scomaddr 0x02011406; + capture type secondary; + capture group default; + }; + + register MBSFIR_ACT1 + { + name "MBU.MBS.MBS_FIR_ACTION1_REG"; + scomaddr 0x02011407; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet MBSECC01FIR + ############################################################################ + + register MBSECC01FIR + { + name "MBU.MBS.ECC01.MBECCFIR"; + scomaddr 0x02011440; + reset (&, 02011441); + mask (|, 02011445); + capture group default; + }; + + register MBSECC01FIR_MASK + { + name "MBU.MBS.ECC01.MBECCFIR_MASK"; + scomaddr 0x02011443; + capture type secondary; + capture group default; + }; + + register MBSECC01FIR_ACT0 + { + name "MBU.MBS.ECC01.MBECCFIR_ACTION0"; + scomaddr 0x02011446; + capture type secondary; + capture group default; + }; + + register MBSECC01FIR_ACT1 + { + name "MBU.MBS.ECC01.MBECCFIR_ACTION1"; + scomaddr 0x02011447; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet MBSECC23FIR + ############################################################################ + + register MBSECC23FIR + { + name "MBU.MBS.ECC23.MBECCFIR"; + scomaddr 0x02011480; + reset (&, 02011481); + mask (|, 02011485); + capture group default; + }; + + register MBSECC23FIR_MASK + { + name "MBU.MBS.ECC23.MBECCFIR_MASK"; + scomaddr 0x02011483; + capture type secondary; + capture group default; + }; + + register MBSECC23FIR_ACT0 + { + name "MBU.MBS.ECC23.MBECCFIR_ACTION0"; + scomaddr 0x02011486; + capture type secondary; + capture group default; + }; + + register MBSECC23FIR_ACT1 + { + name "MBU.MBS.ECC23.MBECCFIR_ACTION0"; + scomaddr 0x02011487; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet MCBIST01FIR + ############################################################################ + + register MCBIST01FIR + { + name "MBU.MBS.MCBISTS01.SCOMFIR.MBSFIRQ"; + scomaddr 0x02011600; + reset (&, 0x02011601); + mask (|, 0x02011605); + capture group default; + }; + + register MCBIST01FIR_MASK + { + name "MBU.MBS.MCBISTS01.SCOMFIR.MBSFIRMASK"; + scomaddr 0x02011603; + capture type secondary; + capture group default; + }; + + register MCBIST01FIR_ACT0 + { + name "MBU.MBS.MCBISTS01.SCOMFIR.MBSFIRACTION0"; + scomaddr 0x02011606; + capture type secondary; + capture group default; + }; + + register MCBIST01FIR_ACT1 + { + name "MBU.MBS.MCBISTS01.SCOMFIR.MBSFIRACTION1"; + scomaddr 0x02011607; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet MCBIST23FIR + ############################################################################ + + register MCBIST23FIR + { + name "MBU.MBS.MCBISTS23.SCOMFIR.MBSFIRQ"; + scomaddr 0x02011700; + reset (&, 0x02011701); + mask (|, 0x02011705); + capture group default; + }; + + register MCBIST23FIR_MASK + { + name "MBU.MBS.MCBISTS23.SCOMFIR.MBSFIRMASK"; + scomaddr 0x02011703; + capture type secondary; + capture group default; + }; + + register MCBIST23FIR_ACT0 + { + name "MBU.MBS.MCBISTS23.SCOMFIR.MBSFIRACTION0"; + scomaddr 0x02011706; + capture type secondary; + capture group default; + }; + + register MCBIST23FIR_ACT1 + { + name "MBU.MBS.MCBISTS23.SCOMFIR.MBSFIRACTION1"; + scomaddr 0x02011707; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet NESTFBISTFIR + ############################################################################ + + register NESTFBISTFIR + { + name "FBIST.FBN.FBN_FIR_REG"; + scomaddr 0x02010880; + reset (&, 0x02010881); + mask (|, 0x02010885); + capture group default; + }; + + register NESTFBISTFIR_MASK + { + name "FBIST.FBN.FBN_FIR_MASK_REG"; + scomaddr 0x02010883; + capture type secondary; + capture group default; + }; + + register NESTFBISTFIR_ACT0 + { + name "FBIST.FBN.FBN_FIR_ACTION0_REG"; + scomaddr 0x02010886; + capture type secondary; + capture group default; + }; + + register NESTFBISTFIR_ACT1 + { + name "FBIST.FBN.FBN_FIR_ACTION1_REG"; + scomaddr 0x02010887; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet SENSORCACHEFIR + ############################################################################ + + register SENSORCACHEFIR + { + name "SCAC.SCAC_LFIR"; + scomaddr 0x020115c0; + reset (&, 0x020115c1); + mask (|, 0x020115c5); + capture group default; + }; + + register SENSORCACHEFIR_MASK + { + name "SCAC.SCAC_FIRMASK"; + scomaddr 0x020115c3; + capture type secondary; + capture group default; + }; + + register SENSORCACHEFIR_ACT0 + { + name "SCAC.SCAC_FIRACTION0"; + scomaddr 0x020115c6; + capture type secondary; + capture group default; + }; + + register SENSORCACHEFIR_ACT1 + { + name "SCAC.SCAC_FIRACTION1"; + scomaddr 0x020115c7; + capture type secondary; + capture group default; + }; + + ############################################################################ + # NEST Chiplet MBSSECUREFIR + ############################################################################ + + register MBSSECUREFIR + { + name "MBU.MBS.ARB.RXLT.MBSSIRQ"; + scomaddr 0x0201141e; + reset (&, 0x0201141f); + # This is a special register in which we are not able to mask. All bits + # in this register should be set to checkstop so we will not need to + # mask anyway. + capture group default; + }; + + register MBSSECUREFIR_MASK + { + name "MBU.MBS.ARB.RXLT.MBSSIRMASK"; + scomaddr 0x02011421; + capture type secondary; + capture group default; + }; + + register MBSSECUREFIR_ACT0 + { + name "MBU.MBS.ARB.RXLT.MBSSIRACT0"; + scomaddr 0x02011424; + capture type secondary; + capture group default; + }; + + register MBSSECUREFIR_ACT1 + { + name "MBU.MBS.ARB.RXLT.MBSSIRACT1"; + scomaddr 0x02011425; + capture type secondary; + capture group default; + }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Membuf_regs_TP.rule b/src/usr/diag/prdf/plat/pegasus/Membuf_regs_TP.rule new file mode 100644 index 000000000..7ea4535d6 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Membuf_regs_TP.rule @@ -0,0 +1,86 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Membuf_regs_TP.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + + ############################################################################ + # TP Chiplet Registers + ############################################################################ + + register TP_CHIPLET_CS_FIR + { + name "TPTOP.TPC.XFIR"; + scomaddr 0x01040000; + capture group default; + }; + + register TP_CHIPLET_RE_FIR + { + name "TPTOP.TPC.RFIR"; + scomaddr 0x01040001; + capture group default; + }; + + register TP_CHIPLET_FIR_MASK + { + name "TPTOP.TPC.FIR_MASK"; + scomaddr 0x01040002; + capture type secondary; + capture group default; + }; + + ############################################################################ + # TP Chiplet LFIR + ############################################################################ + + register TP_LFIR + { + name "TPTOP.TPC.LOCAL_FIR"; + scomaddr 0x0104000a; + reset (&, 0x0104000b); + mask (|, 0x0104000f); + capture group default; + }; + + register TP_LFIR_MASK + { + name "TPTOP.TPC.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x0104000d; + capture type secondary; + capture group default; + }; + + register TP_LFIR_ACT0 + { + name "TPTOP.TPC.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x01040010; + capture type secondary; + capture group default; + }; + + register TP_LFIR_ACT1 + { + name "TPTOP.TPC.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x01040011; + capture type secondary; + capture group default; + }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc.rule b/src/usr/diag/prdf/plat/pegasus/Proc.rule new file mode 100644 index 000000000..39e9a469b --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc.rule @@ -0,0 +1,332 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# +# Scope: +# Registers and actions for the following chiplets: +# +# Chiplet Register Adddresses Description +# ======= ======================= ============================================ +# TP 0x01000000 - 0x01FFFFFF TP pervasive logic +# PB 0x02000000 - 0x02FFFFFF PB pervasive logic, note that this does +# include the SCOM addresses characterized by +# the MCS target. See Mcs.rule for those +# address ranges. +# XBUS 0x04000000 - 0x0400FFFF XBUS pervasive logic +# ABUS 0x08000000 - 0x0800FFFF ABUS pervasive logic +# PCIE 0x09000000 - 0x09FFFFFF PCIE pervasive logic +# +################################################################################ + +chip Proc +{ + name "Power8 Chip"; + targettype TYPE_PROC; + sigoff 0x8000; +# FIXME May need to update dump type + dump DUMP_CONTENT_HW; + scomlen 64; + + ############################################################################# + # # + # ###### # + # # # ###### #### ### #### ##### ###### ##### #### # + # # # # # # # # # # # # # # + # ###### ##### # # #### # ##### # # #### # + # # # # # ### # # # # ##### # # + # # # # # # # # # # # # # # # # + # # # ###### #### ### #### # ###### # # #### # + # # + ############################################################################# + + ############################################################################ + # Global Broadcast Registers + ############################################################################ + + register GLOBAL_CS_FIR + { + name "Global Checkstop Attention FIR"; + scomaddr 0x570F001C; + capture group default; + }; + + register GLOBAL_RE_FIR + { + name "Global Recoverable Attention FIR"; + scomaddr 0x570F001B; + capture group default; + }; + + register GLOBAL_SPA + { + name "Global Special Attention FIR"; + scomaddr 0x570F001A; + capture group default; + }; + +# Import all of the chiplet registers +.include "Proc_regs_TP.rule" +.include "Proc_regs_PB.rule" +.include "Proc_regs_XBUS.rule" +.include "Proc_regs_ABUS.rule" +.include "Proc_regs_PCIE.rule" + +}; + + ############################################################################## + # # + # #### # # + # # # # # # ##### ### # # # ## ##### ### ### # # ### # + # # # # # # # # # # # # # # # # # ## # # # + # #### # # # #### ### # ####### # # # # # # # # ### # + # # # # # # # # # # # # # # # # # # ## # # + # # # ### #### ##### ### # # # ## # ### ### # # ### # + # # + ############################################################################## + +################################################################################ +# Global Broadcast Registers +################################################################################ + +rule GlobalFir +{ + CHECK_STOP: GLOBAL_CS_FIR; + RECOVERABLE: GLOBAL_RE_FIR; +}; + +group gGlobalFir attntype CHECK_STOP, RECOVERABLE filter singlebit +{ + /** GLOBAL_FIR[1] + * Attention from TP chiplet + */ + (GlobalFir, bit(1)) ? analyze(gTpChipletFir); + + /** GLOBAL_FIR[2] + * Attention from PB chiplet + */ + (GlobalFir, bit(2)) ? analyze(gPbChipletFir); + + /** GLOBAL_FIR[4] + * Attention from XBUS chiplet + */ + (GlobalFir, bit(4)) ? analyze(gXbusChipletFir); + + /** GLOBAL_FIR[8] + * Attention from ABUS chiplet + */ + (GlobalFir, bit(8)) ? analyze(gAbusChipletFir); + + /** GLOBAL_FIR[9] + * Attention from PCIE + */ + (GlobalFir, bit(9)) ? analyze(gPcieChipletFir); + + /** GLOBAL_FIR[11] + * Attention from EX1 (Venice only) + */ + (GlobalFir, bit(11)) ? defaultMaskedError; + + /** GLOBAL_FIR[12] + * Attention from EX2 (Venice only) + */ + (GlobalFir, bit(12)) ? defaultMaskedError; + + /** GLOBAL_FIR[13] + * Attention from EX3 (Venice only) + */ + (GlobalFir, bit(13)) ? defaultMaskedError; + + /** GLOBAL_FIR[14] + * Attention from EX4 + */ + (GlobalFir, bit(14)) ? analyzeEx4; + + /** GLOBAL_FIR[15] + * Attention from EX5 + */ + (GlobalFir, bit(15)) ? analyzeEx5; + + /** GLOBAL_FIR[16] + * Attention from EX6 + */ + (GlobalFir, bit(16)) ? analyzeEx6; + + /** GLOBAL_FIR[19] + * Attention from EX9 (Venice only) + */ + (GlobalFir, bit(19)) ? defaultMaskedError; + + /** GLOBAL_FIR[20] + * Attention from EX10 (Venice only) + */ + (GlobalFir, bit(20)) ? defaultMaskedError; + + /** GLOBAL_FIR[21] + * Attention from EX11 (Venice only) + */ + (GlobalFir, bit(21)) ? defaultMaskedError; + + /** GLOBAL_FIR[22] + * Attention from EX12 + */ + (GlobalFir, bit(22)) ? analyzeEx12; + + /** GLOBAL_FIR[23] + * Attention from EX13 + */ + (GlobalFir, bit(23)) ? analyzeEx13; + + /** GLOBAL_FIR[24] + * Attention from EX14 + */ + (GlobalFir, bit(24)) ? analyzeEx14; +}; + +rule GlobalSpa +{ + SPECIAL: GLOBAL_SPA; +}; + +group gGlobalSpa attntype SPECIAL filter singlebit +{ + /** GLOBAL_SPA[1] + * Attention from TP chiplet + */ + (GlobalSpa, bit(1)) ? analyze(gTpChipletSpa); + + /** GLOBAL_SPA[2] + * Attention from PB chiplet + */ + (GlobalSpa, bit(2)) ? analyze(gPbChipletSpa); + + /** GLOBAL_SPA[9] + * Attention from PCIE + */ + (GlobalSpa, bit(9)) ? analyze(gPcieChipletSpa); + + /** GLOBAL_SPA[11] + * Attention from EX1 (Venice only) + */ + (GlobalSpa, bit(11)) ? defaultMaskedError; + + /** GLOBAL_SPA[12] + * Attention from EX2 (Venice only) + */ + (GlobalSpa, bit(12)) ? defaultMaskedError; + + /** GLOBAL_SPA[13] + * Attention from EX3 (Venice only) + */ + (GlobalSpa, bit(13)) ? defaultMaskedError; + + /** GLOBAL_SPA[14] + * Attention from EX4 + */ + (GlobalSpa, bit(14)) ? analyzeEx4; + + /** GLOBAL_SPA[15] + * Attention from EX5 + */ + (GlobalSpa, bit(15)) ? analyzeEx5; + + /** GLOBAL_SPA[16] + * Attention from EX6 + */ + (GlobalSpa, bit(16)) ? analyzeEx6; + + /** GLOBAL_SPA[19] + * Attention from EX9 (Venice only) + */ + (GlobalSpa, bit(19)) ? defaultMaskedError; + + /** GLOBAL_SPA[20] + * Attention from EX10 (Venice only) + */ + (GlobalSpa, bit(20)) ? defaultMaskedError; + + /** GLOBAL_SPA[21] + * Attention from EX11 (Venice only) + */ + (GlobalSpa, bit(21)) ? defaultMaskedError; + + /** GLOBAL_SPA[22] + * Attention from EX12 + */ + (GlobalSpa, bit(22)) ? analyzeEx12; + + /** GLOBAL_SPA[23] + * Attention from EX13 + */ + (GlobalSpa, bit(23)) ? analyzeEx13; + + /** GLOBAL_SPA[24] + * Attention from EX14 + */ + (GlobalSpa, bit(24)) ? analyzeEx14; +}; + +# Import all of the chiplet rules and actions +# NOTE: Some of PB local FIRs are handled through the TP chiplet FIRs +.include "Proc_acts_TP.rule" +.include "Proc_acts_PB.rule" +.include "Proc_acts_XBUS.rule" +.include "Proc_acts_ABUS.rule" +.include "Proc_acts_PCIE.rule" + + ############################################################################## + # # + # # ### # + # # # ## ##### ### ### # # # # # # ### ### ### ### # + # # # # # # # # # ## # # # # # # # # # # + # ####### # # # # # # # # # # ##### ### ### ## ### # + # # # # # # # # # # ## # # # # # # # # # # + # # # ## # ### ### # # ### ### # # ### ### ### ### # + # # + ############################################################################## + +# Include the common action set. +.include "CommonActions.rule" + +################################################################################ +# Analyze Connected Parts # +################################################################################ + +/** Analyze connected EX4 */ +actionclass analyzeEx4 { analyze(connected(TYPE_EX, 4)); }; + +/** Analyze connected EX5 */ +actionclass analyzeEx5 { analyze(connected(TYPE_EX, 5)); }; + +/** Analyze connected EX6 */ +actionclass analyzeEx6 { analyze(connected(TYPE_EX, 6)); }; + +/** Analyze connected EX12 */ +actionclass analyzeEx12 { analyze(connected(TYPE_EX, 12)); }; + +/** Analyze connected EX13 */ +actionclass analyzeEx13 { analyze(connected(TYPE_EX, 13)); }; + +/** Analyze connected EX14 */ +actionclass analyzeEx14 { analyze(connected(TYPE_EX, 14)); }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_acts_ABUS.rule b/src/usr/diag/prdf/plat/pegasus/Proc_acts_ABUS.rule new file mode 100644 index 000000000..5f3b423d9 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_acts_ABUS.rule @@ -0,0 +1,344 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_acts_ABUS.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# ABUS Chiplet Registers +################################################################################ + +rule AbusChipletFir +{ + CHECK_STOP: + (ABUS_CHIPLET_CS_FIR & `1C00000000000000`) & ~ABUS_CHIPLET_FIR_MASK; + RECOVERABLE: + ((ABUS_CHIPLET_RE_FIR >> 2) & `1C00000000000000`) & ~ABUS_CHIPLET_FIR_MASK; +}; + +group gAbusChipletFir filter singlebit +{ + /** ABUS_CHIPLET_FIR[3] + * Attention from LFIR + */ + (AbusChipletFir, bit(3)) ? analyze(gAbusLFir); + + /** ABUS_CHIPLET_FIR[4] + * Attention from PBESFIR + */ + (AbusChipletFir, bit(4)) ? analyze(gPbesFir); + + /** ABUS_CHIPLET_FIR[5] + * Attention from IOAFIR + */ + (AbusChipletFir, bit(5)) ? analyze(gIoaFir); +}; + +################################################################################ +# ABUS Chiplet LFIR +################################################################################ + +rule AbusLFir +{ + CHECK_STOP: ABUS_LFIR & ~ABUS_LFIR_MASK & ~ABUS_LFIR_ACT0 & ~ABUS_LFIR_ACT1; + RECOVERABLE: ABUS_LFIR & ~ABUS_LFIR_MASK & ~ABUS_LFIR_ACT0 & ABUS_LFIR_ACT1; +}; + +group gAbusLFir filter singlebit +{ + /** ABUS_LFIR[0] + * CFIR internal parity error + */ + (AbusLFir, bit(0)) ? TBDDefaultCallout; + + /** ABUS_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (AbusLFir, bit(1)) ? TBDDefaultCallout; + + /** ABUS_LFIR[2] + * Local errors from CC (PCB error) + */ + (AbusLFir, bit(2)) ? TBDDefaultCallout; + + /** ABUS_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (AbusLFir, bit(3)) ? TBDDefaultCallout; + + /** ABUS_LFIR[4] + * Local errors from PSC (PCB error) + */ + (AbusLFir, bit(4)) ? TBDDefaultCallout; + + /** ABUS_LFIR[5] + * Local errors from PSC (parity error) + */ + (AbusLFir, bit(5)) ? TBDDefaultCallout; + + /** ABUS_LFIR[6] + * Local errors from Thermal (parity error) + */ + (AbusLFir, bit(6)) ? TBDDefaultCallout; + + /** ABUS_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (AbusLFir, bit(7)) ? TBDDefaultCallout; + + /** ABUS_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (AbusLFir, bit(8|9)) ? TBDDefaultCallout; + + /** ABUS_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (AbusLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# ABUS Chiplet PBESFIR +################################################################################ + +rule PbesFir +{ + CHECK_STOP: + PBESFIR & ~PBESFIR_MASK & ~PBESFIR_ACT0 & ~PBESFIR_ACT1; + RECOVERABLE: + PBESFIR & ~PBESFIR_MASK & ~PBESFIR_ACT0 & PBESFIR_ACT1; +}; + +group gPbesFir filter singlebit +{ + /** PBESFIR[0] + * A0LINK_FMR_ERROR: a0link_fmr_error + */ + (PbesFir, bit(0)) ? TBDDefaultCallout; + + /** PBESFIR[1] + * A1LINK_FMR_ERROR: a1link_fmr_error + */ + (PbesFir, bit(1)) ? TBDDefaultCallout; + + /** PBESFIR[2] + * A2LINK_FMR_ERROR: a2link_fmr_error + */ + (PbesFir, bit(2)) ? TBDDefaultCallout; + + /** PBESFIR[3] + * A0LINK_PSR_ERR: a0link_psr_err + */ + (PbesFir, bit(3)) ? TBDDefaultCallout; + + /** PBESFIR[4] + * A1LINK_PSR_ERR: a1link_psr_err + */ + (PbesFir, bit(4)) ? TBDDefaultCallout; + + /** PBESFIR[5] + * A2LINK_PSR_ERR: a2link_psr_err + */ + (PbesFir, bit(5)) ? TBDDefaultCallout; + + /** PBESFIR[6] + * A0LINK_PSR_COR_ERR + */ + (PbesFir, bit(6)) ? TBDDefaultCallout; + + /** PBESFIR[7] + * A0LINK_PSR_DERR_ERR + */ + (PbesFir, bit(7)) ? TBDDefaultCallout; + + /** PBESFIR[8] + * A0LINK_PSR_UNC_ERR + */ + (PbesFir, bit(8)) ? TBDDefaultCallout; + + /** PBESFIR[9] + * A1LINK_PSR_COR_ERR + */ + (PbesFir, bit(9)) ? TBDDefaultCallout; + + /** PBESFIR[10] + * A1LINK_PSR_DERR_ERR + */ + (PbesFir, bit(10)) ? TBDDefaultCallout; + + /** PBESFIR[11] + * A1LINK_PSR_UNC_ERR + */ + (PbesFir, bit(11)) ? TBDDefaultCallout; + + /** PBESFIR[12] + * A2LINK_PSR_COR_ERR + */ + (PbesFir, bit(12)) ? TBDDefaultCallout; + + /** PBESFIR[13] + * A2LINK_PSR_DERR_ERR + */ + (PbesFir, bit(13)) ? TBDDefaultCallout; + + /** PBESFIR[14] + * NK_PSR_UNC_ERR + */ + (PbesFir, bit(14)) ? TBDDefaultCallout; + + /** PBESFIR[15] + * A0LINK_FMR_COR_ERR_HI + */ + (PbesFir, bit(15)) ? TBDDefaultCallout; + + /** PBESFIR[16] + * A0LINK_FMR_COR_ERR_LO + */ + (PbesFir, bit(16)) ? TBDDefaultCallout; + + /** PBESFIR[17] + * A0LINK_FMR_SUE_ERR_HI + */ + (PbesFir, bit(17)) ? TBDDefaultCallout; + + /** PBESFIR[18] + * A0LINK_FMR_SUE_ERR_LO + */ + (PbesFir, bit(18)) ? TBDDefaultCallout; + + /** PBESFIR[19] + * A0LINK_FMR_UNC_ERR_HI + */ + (PbesFir, bit(19)) ? TBDDefaultCallout; + + /** PBESFIR[20] + * A0LINK_FMR_UNC_ERR_LO + */ + (PbesFir, bit(20)) ? TBDDefaultCallout; + + /** PBESFIR[21] + * A1LINK_FMR_COR_ERR_HI + */ + (PbesFir, bit(21)) ? TBDDefaultCallout; + + /** PBESFIR[22] + * A1LINK_FMR_COR_ERR_LO + */ + (PbesFir, bit(22)) ? TBDDefaultCallout; + + /** PBESFIR[23] + * A1LINK_FMR_SUE_ERR_HI + */ + (PbesFir, bit(23)) ? TBDDefaultCallout; + + /** PBESFIR[24] + * A1LINK_FMR_SUE_ERR_LO + */ + (PbesFir, bit(24)) ? TBDDefaultCallout; + + /** PBESFIR[25] + * A1LINK_FMR_UNC_ERR_HI + */ + (PbesFir, bit(25)) ? TBDDefaultCallout; + + /** PBESFIR[26] + * A1LINK_FMR_UNC_ERR_LO + */ + (PbesFir, bit(26)) ? TBDDefaultCallout; + + /** PBESFIR[27] + * A2LINK_FMR_COR_ERR_HI + */ + (PbesFir, bit(27)) ? TBDDefaultCallout; + + /** PBESFIR[28] + * A2LINK_FMR_COR_ERR_LO + */ + (PbesFir, bit(28)) ? TBDDefaultCallout; + + /** PBESFIR[29] + * A2LINK_FMR_SUE_ERR_HI + */ + (PbesFir, bit(29)) ? TBDDefaultCallout; + + /** PBESFIR[30] + * A2LINK_FMR_SUE_ERR_LO + */ + (PbesFir, bit(30)) ? TBDDefaultCallout; + + /** PBESFIR[31] + * A2LINK_FMR_UNC_ERR_HI + */ + (PbesFir, bit(31)) ? TBDDefaultCallout; + + /** PBESFIR[32] + * A2LINK_FMR_UNC_ERR_LO + */ + (PbesFir, bit(32)) ? TBDDefaultCallout; + + /** PBESFIR[33] + * A0_OBS_CR_OVERFLOW_FIR_ERR + */ + (PbesFir, bit(33)) ? TBDDefaultCallout; + + /** PBESFIR[34] + * A1_OBS_CR_OVERFLOW_FIR_ERR + */ + (PbesFir, bit(34)) ? TBDDefaultCallout; + + /** PBESFIR[35] + * A2_OBS_CR_OVERFLOW_FIR_ERR + */ + (PbesFir, bit(35)) ? TBDDefaultCallout; + + /** PBESFIR[36] + * FIR_SCOM_ERR_DUP + */ + (PbesFir, bit(36)) ? TBDDefaultCallout; + + /** PBESFIR[37] + * FIR_SCOM_ERR + */ + (PbesFir, bit(37)) ? TBDDefaultCallout; +}; + +################################################################################ +# ABUS Chiplet IOAFIR +################################################################################ + +rule IoaFir +{ + CHECK_STOP: IOAFIR & ~IOAFIR_MASK & ~IOAFIR_ACT0 & ~IOAFIR_ACT1; + RECOVERABLE: IOAFIR & ~IOAFIR_MASK & ~IOAFIR_ACT0 & IOAFIR_ACT1; +}; + +group gIoaFir filter singlebit +{ +#FIXME:A temp fix to generate error signature by setting bit 0 + /** IOAFIR[0] + * ERROR + */ + (IoaFir, bit(0)) ? TBDDefaultCallout; +}; + +################################################################################ +# Actions specific to ABUS chiplet +################################################################################ + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_acts_PB.rule b/src/usr/diag/prdf/plat/pegasus/Proc_acts_PB.rule new file mode 100644 index 000000000..580bc7c5b --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_acts_PB.rule @@ -0,0 +1,2454 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_acts_PB.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# PB Chiplet Registers +################################################################################ + +rule PbChipletFir +{ + CHECK_STOP: + (PB_CHIPLET_CS_FIR & `1FDFF80000000000`) & ~PB_CHIPLET_FIR_MASK; + RECOVERABLE: + ((PB_CHIPLET_RE_FIR >> 2 ) & `1FDFF80000000000`) & ~PB_CHIPLET_FIR_MASK; +}; + +group gPbChipletFir filter singlebit +{ + /** PB_CHIPLET_FIR[3] + * Attention from LFIR + */ + (PbChipletFir, bit(3)) ? analyze(gPbLFir); + + /** PB_CHIPLET_FIR[4] + * Attention from NXDMAENGFIR + */ + (PbChipletFir, bit(4)) ? analyze(gNxDmaEngFir); + + /** PB_CHIPLET_FIR[5] + * Attention from NXCQFIR + */ + (PbChipletFir, bit(5)) ? analyze(gNxCqFir); + + /** PB_CHIPLET_FIR[6] + * Attention from MCDFIR + */ + (PbChipletFir, bit(6)) ? analyze(gMcdFir); + + /** PB_CHIPLET_FIR[7|9] + * Attention from PBWESTFIR or PBEASTFIR + */ + (PbChipletFir, bit(7|9)) ? analyze(gPbWestEastFir); + + /** PB_CHIPLET_FIR[8] + * Attention from PBCENTFIR + */ + (PbChipletFir, bit(8)) ? analyze(gPbCentFir); + + /** PB_CHIPLET_FIR[11] + * Attention from PSIFIR + */ + (PbChipletFir, bit(11)) ? analyze(gPsiFir); + + /** PB_CHIPLET_FIR[12] + * Attention from ICPFIR + */ + (PbChipletFir, bit(12)) ? analyze(gIcpFir); + + /** PB_CHIPLET_FIR[13] + * Attention from PBAFIR + */ + (PbChipletFir, bit(13)) ? analyze(gPbaFir); + + /** PB_CHIPLET_FIR[14] + * Attention from EHHCAFIR + */ + (PbChipletFir, bit(14)) ? analyze(gEhHcaFir); + + /** PB_CHIPLET_FIR[15] + * Attention from NXASFIR + */ + (PbChipletFir, bit(15)) ? analyze(gNxAsFir); + + /** PB_CHIPLET_FIR[16] + * Attention from ENHCAFIR + */ + (PbChipletFir, bit(16)) ? analyze(gEnHcaFir); + + /** PB_CHIPLET_FIR[17|18|19] + * Attention from PCINESTFIRs + */ + (PbChipletFir, bit(17|18|19)) ? analyze(gPciNestFir); + + /** PB_CHIPLET_FIR[20] + * Attention from NXCXAFIR + */ + (PbChipletFir, bit(20)) ? analyze(gNxCxaFir); +}; + +rule PbChipletSpa +{ + SPECIAL: PB_CHIPLET_SPA & ~PB_CHIPLET_SPA_MASK; +}; + +group gPbChipletSpa filter singlebit +{ + /** PB_CHIPLET_SPA[0] + * Attention from PBCENTFIR + */ + (PbChipletSpa, bit(0)) ? analyze(gPbCentFir); +}; + +################################################################################ +# PB Chiplet LFIR +################################################################################ + +rule PbLFir +{ + CHECK_STOP: PB_LFIR & ~PB_LFIR_MASK & ~PB_LFIR_ACT0 & ~PB_LFIR_ACT1; + RECOVERABLE: PB_LFIR & ~PB_LFIR_MASK & ~PB_LFIR_ACT0 & PB_LFIR_ACT1; +}; + +group gPbLFir filter singlebit +{ + /** PB_LFIR[0] + * CFIR internal parity error + */ + (PbLFir, bit(0)) ? TBDDefaultCallout; + + /** PB_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (PbLFir, bit(1)) ? TBDDefaultCallout; + + /** PB_LFIR[2] + * Local errors from CC (PCB error) + */ + (PbLFir, bit(2)) ? TBDDefaultCallout; + + /** PB_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (PbLFir, bit(3)) ? TBDDefaultCallout; + + /** PB_LFIR[4] + * Local errors from PSC (PCB error) + */ + (PbLFir, bit(4)) ? TBDDefaultCallout; + + /** PB_LFIR[5] + * Local errors from PSC (parity error) + */ + (PbLFir, bit(5)) ? TBDDefaultCallout; + + /** PB_LFIR[6] + * Local errors from Thermal (parity error) + */ + (PbLFir, bit(6)) ? TBDDefaultCallout; + + /** PB_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (PbLFir, bit(7)) ? TBDDefaultCallout; + + /** PB_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (PbLFir, bit(8|9)) ? TBDDefaultCallout; + + /** PB_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (PbLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet NXDMAENGFIR +################################################################################ + +rule NxDmaEngFir +{ + CHECK_STOP: + NXDMAENGFIR & ~NXDMAENGFIR_MASK & ~NXDMAENGFIR_ACT0 & ~NXDMAENGFIR_ACT1; + RECOVERABLE: + NXDMAENGFIR & ~NXDMAENGFIR_MASK & ~NXDMAENGFIR_ACT0 & NXDMAENGFIR_ACT1; +}; + +group gNxDmaEngFir filter singlebit +{ +# FIXME - Get confirmation from HW team to see how this FIR is wired. +# Also, a temp fix to generate error signature by setting bit 0 + /** NXDMAENGFIR[0] + * ERROR + */ + (NxDmaEngFir, bit(0)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet NXCQFIR +################################################################################ + +rule NxCqFir +{ + CHECK_STOP: NXCQFIR & ~NXCQFIR_MASK & ~NXCQFIR_ACT0 & ~NXCQFIR_ACT1; + RECOVERABLE: NXCQFIR & ~NXCQFIR_MASK & ~NXCQFIR_ACT0 & NXCQFIR_ACT1; +}; + +group gNxCqFir filter singlebit +{ +# FIXME - Get confirmation from HW team to see how this FIR is wired. +# Also, a temp fix to generate error signature by setting bit 0 + /** NXCQFIR[0] + * ERROR + */ + (NxCqFir, bit(0)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet NXASFIR +################################################################################ + +rule NxAsFir +{ + CHECK_STOP: NXASFIR & ~NXASFIR_MASK & ~NXASFIR_ACT0 & ~NXASFIR_ACT1; + RECOVERABLE: NXASFIR & ~NXASFIR_MASK & ~NXASFIR_ACT0 & NXASFIR_ACT1; +}; + +group gNxAsFir filter singlebit +{ + /** NXASFIR[0] + * SND_ARY_UE + */ + (NxAsFir, bit(0)) ? TBDDefaultCallout; + + /** NXASFIR[1] + * MMIO_DAT_UE + */ + (NxAsFir, bit(1)) ? TBDDefaultCallout; + + /** NXASFIR[2] + * COPREQ_DAT_UE + */ + (NxAsFir, bit(2)) ? TBDDefaultCallout; + + /** NXASFIR[3] + * PBCQ_Q_INFO_PE + */ + (NxAsFir, bit(3)) ? TBDDefaultCallout; + + /** NXASFIR[4] + * RCMD0_ADDR_PE + */ + (NxAsFir, bit(4)) ? TBDDefaultCallout; + + /** NXASFIR[5] + * RCMD0_TTAG_PE + */ + (NxAsFir, bit(5)) ? TBDDefaultCallout; + + /** NXASFIR[6] + * RCMD1_ADDR_PE + */ + (NxAsFir, bit(6)) ? TBDDefaultCallout; + + /** NXASFIR[7] + * RCMD1_TTAG_PE + */ + (NxAsFir, bit(7)) ? TBDDefaultCallout; + + /** NXASFIR[8] + * MAL_FMD_MMIO_ST + */ + (NxAsFir, bit(8)) ? TBDDefaultCallout; + + /** NXASFIR[9] + * DATA_HANG + */ + (NxAsFir, bit(9)) ? TBDDefaultCallout; + + /** NXASFIR[10] + * CANNOT_RTY_ERR + */ + (NxAsFir, bit(10)) ? TBDDefaultCallout; + + /** NXASFIR[11] + * CMPL_CNT_ERR + */ + (NxAsFir, bit(11)) ? TBDDefaultCallout; + + /** NXASFIR[12] + * MULT_CAM_HIT_ERR + */ + (NxAsFir, bit(12)) ? TBDDefaultCallout; + + /** NXASFIR[13] + * FUTURE_ERR_1 + */ + (NxAsFir, bit(13)) ? TBDDefaultCallout; + + /** NXASFIR[14] + * FL_FIFO_OVFLW + */ + (NxAsFir, bit(14)) ? TBDDefaultCallout; + + /** NXASFIR[15] + * CMD_TO_INVALID_RW + */ + (NxAsFir, bit(15)) ? TBDDefaultCallout; + + /** NXASFIR[16] + * DMA_WL_UE + */ + (NxAsFir, bit(16)) ? TBDDefaultCallout; + + /** NXASFIR[17] + * CREDWT_RTY_ERR + */ + (NxAsFir, bit(17)) ? TBDDefaultCallout; + + /** NXASFIR[18] + * NOTIFY_RTY_ERR + */ + (NxAsFir, bit(18)) ? TBDDefaultCallout; + + /** NXASFIR[19] + * RCV_TAB_UE + */ + (NxAsFir, bit(19)) ? TBDDefaultCallout; + + /** NXASFIR[20] + * FIFO_ADR_TAB_UE + */ + (NxAsFir, bit(20)) ? TBDDefaultCallout; + + /** NXASFIR[21] + * MMIO_CR_DARY_UE + */ + (NxAsFir, bit(21)) ? TBDDefaultCallout; + + /** NXASFIR[22] + * NOTIF_ARY_UE + */ + (NxAsFir, bit(22)) ? TBDDefaultCallout; + + /** NXASFIR[23] + * INTR_ARY_UE + */ + (NxAsFir, bit(23)) ? TBDDefaultCallout; + + /** NXASFIR[24] + * CR0_ATAG_PE + */ + (NxAsFir, bit(24)) ? TBDDefaultCallout; + + /** NXASFIR[25] + * CR0_TTAG_PE + */ + (NxAsFir, bit(25)) ? TBDDefaultCallout; + + /** NXASFIR[26] + * CR1_ATAG_PE + */ + (NxAsFir, bit(26)) ? TBDDefaultCallout; + + /** NXASFIR[27] + * CR1_TTAG_PE + */ + (NxAsFir, bit(27)) ? TBDDefaultCallout; + + /** NXASFIR[28] + * CW_ADR_ERR + */ + (NxAsFir, bit(28)) ? TBDDefaultCallout; + + /** NXASFIR[29] + * INTR_RTY_CNT_EXP + */ + (NxAsFir, bit(29)) ? TBDDefaultCallout; + + /** NXASFIR[30] + * EG_OVFLW + */ + (NxAsFir, bit(30)) ? TBDDefaultCallout; + + /** NXASFIR[31] + * MULT_PM_HIT + */ + (NxAsFir, bit(31)) ? TBDDefaultCallout; + + /** NXASFIR[32] + * EG_SCOM_ERR + */ + (NxAsFir, bit(32)) ? TBDDefaultCallout; + + /** NXASFIR[33] + * UNUSUAL_EG_SCENARIO + */ + (NxAsFir, bit(33)) ? TBDDefaultCallout; + + /** NXASFIR[34] + * DSLC_INTF_PE + */ + (NxAsFir, bit(34)) ? TBDDefaultCallout; + + /** NXASFIR[35] + * AS_IN_CE + */ + (NxAsFir, bit(35)) ? TBDDefaultCallout; + + /** NXASFIR[36] + * AS_IN_UNSUP_CFG + */ + (NxAsFir, bit(36)) ? TBDDefaultCallout; + + /** NXASFIR[37] + * COPREQ_CRESP_ERR + */ + (NxAsFir, bit(37)) ? TBDDefaultCallout; + + /** NXASFIR[38] + * CREDWT_CRESP_ERR + */ + (NxAsFir, bit(38)) ? TBDDefaultCallout; + + /** NXASFIR[39] + * AS_IN_SP_FIR + */ + (NxAsFir, bit(39)) ? TBDDefaultCallout; + + /** NXASFIR[40] + * AS_EG_CE + */ + (NxAsFir, bit(40)) ? TBDDefaultCallout; + + /** NXASFIR[41] + * SCOM_ERR + */ + (NxAsFir, bit(41)) ? TBDDefaultCallout; + + /** NXASFIR[42] + * SCOM_ERR_DUP + */ + (NxAsFir, bit(42)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet NXCXAFIR +################################################################################ + +rule NxCxaFir +{ + CHECK_STOP: NXCXAFIR & ~NXCXAFIR_MASK & ~NXCXAFIR_ACT0 & ~NXCXAFIR_ACT1; + RECOVERABLE: NXCXAFIR & ~NXCXAFIR_MASK & ~NXCXAFIR_ACT0 & NXCXAFIR_ACT1; +}; + +group gNxCxaFir filter singlebit +{ + /** NXCXAFIR[0] + * BAR_PE + */ + (NxCxaFir, bit(0)) ? TBDDefaultCallout; + + /** NXCXAFIR[1] + * REGISTER_PE + */ + (NxCxaFir, bit(1)) ? TBDDefaultCallout; + + /** NXCXAFIR[2] + * MASTER_ARRAY_CE + */ + (NxCxaFir, bit(2)) ? TBDDefaultCallout; + + /** NXCXAFIR[3] + * MASTER_ARRAY_UE + */ + (NxCxaFir, bit(3)) ? TBDDefaultCallout; + + /** NXCXAFIR[4] + * TIMER_EXPIRED_RECOV_ERROR + */ + (NxCxaFir, bit(4)) ? TBDDefaultCallout; + + /** NXCXAFIR[5] + * TIMER_EXPIRED_XSTOP_ERROR + */ + (NxCxaFir, bit(5)) ? TBDDefaultCallout; + + /** NXCXAFIR[6] + * PSL_CMD_UE + */ + (NxCxaFir, bit(6)) ? TBDDefaultCallout; + + /** NXCXAFIR[7] + * PSL_CMD_SUE + */ + (NxCxaFir, bit(7)) ? TBDDefaultCallout; + + /** NXCXAFIR[8] + * SNOOP_ARRAY_CE + */ + (NxCxaFir, bit(8)) ? TBDDefaultCallout; + + /** NXCXAFIR[9] + * SNOOP_ARRAY_UE + */ + (NxCxaFir, bit(9)) ? TBDDefaultCallout; + + /** NXCXAFIR[10] + * RECOVERY_FAILED + */ + (NxCxaFir, bit(10)) ? TBDDefaultCallout; + + /** NXCXAFIR[13] + * MASTER_RECOVERABLE_ERROR + */ + (NxCxaFir, bit(13)) ? TBDDefaultCallout; + + /** NXCXAFIR[14] + * SNOOPER_RECOVERABLE_ERROR + */ + (NxCxaFir, bit(14)) ? TBDDefaultCallout; + + /** NXCXAFIR[15] + * XPT_RECOVERABLE_ERROR + */ + (NxCxaFir, bit(15)) ? TBDDefaultCallout; + + /** NXCXAFIR[16] + * MASTER_SYS_XSTOP_ERROR + */ + (NxCxaFir, bit(16)) ? TBDDefaultCallout; + + /** NXCXAFIR[17] + * SNOOPER_SYS_XSTOP_ERROR + */ + (NxCxaFir, bit(17)) ? TBDDefaultCallout; + + /** NXCXAFIR[18] + * XPT_SYS_XSTOP_ERROR + */ + (NxCxaFir, bit(18)) ? TBDDefaultCallout; + + /** NXCXAFIR[19] + * MUOP_ERROR_1 + */ + (NxCxaFir, bit(19)) ? TBDDefaultCallout; + + /** NXCXAFIR[20] + * MUOP_ERROR_2 + */ + (NxCxaFir, bit(20)) ? TBDDefaultCallout; + + /** NXCXAFIR[21] + * MUOP_ERROR_3 + */ + (NxCxaFir, bit(21)) ? TBDDefaultCallout; + + /** NXCXAFIR[22] + * SUOP_ERROR_1 + */ + (NxCxaFir, bit(22)) ? TBDDefaultCallout; + + /** NXCXAFIR[23] + * SUOP_ERROR_2 + */ + (NxCxaFir, bit(23)) ? TBDDefaultCallout; + + /** NXCXAFIR[24] + * SUOP_ERROR_3 + */ + (NxCxaFir, bit(24)) ? TBDDefaultCallout; + + /** NXCXAFIR[25] + * POWERBUS_MISC_ERROR + */ + (NxCxaFir, bit(25)) ? TBDDefaultCallout; + + /** NXCXAFIR[26] + * POWERBUS_INTERFACE_PE + */ + (NxCxaFir, bit(26)) ? TBDDefaultCallout; + + /** NXCXAFIR[27] + *POWERBUS_DATA_HANG_ERROR + */ + (NxCxaFir, bit(27)) ? TBDDefaultCallout; + + /** NXCXAFIR[28] + * POWERBUS_HANG_ERROR + */ + (NxCxaFir, bit(28)) ? TBDDefaultCallout; + + /** NXCXAFIR[29] + * LD_CLASS_CMD_ADDR_ERR + */ + (NxCxaFir, bit(29)) ? TBDDefaultCallout; + + /** NXCXAFIR[30] + * ST_CLASS_CMD_ADDR_ERR + */ + (NxCxaFir, bit(30)) ? TBDDefaultCallout; + + /** NXCXAFIR[31] + * PHB_LINK_DOWN + */ + (NxCxaFir, bit(31)) ? TBDDefaultCallout; + + /** NXCXAFIR[32] + * LD_CLASS_CMD_FOREIGN_LINK_FAIL + */ + (NxCxaFir, bit(32)) ? TBDDefaultCallout; + + /** NXCXAFIR[33] + * FOREIGN_LINK_HANG_ERROR + */ + (NxCxaFir, bit(33)) ? TBDDefaultCallout; + + /** NXCXAFIR[34] + * XPT_POWERBUS_CE + */ + (NxCxaFir, bit(34)) ? TBDDefaultCallout; + + /** NXCXAFIR[35] + * XPT_POWERBUS_UE + */ + (NxCxaFir, bit(35)) ? TBDDefaultCallout; + + /** NXCXAFIR[36] + * XPT_POWERBUS_SUE + */ + (NxCxaFir, bit(36)) ? TBDDefaultCallout; + + /** NXCXAFIR[37] + * TLBI_TIMEOUT + */ + (NxCxaFir, bit(37)) ? TBDDefaultCallout; + + /** NXCXAFIR[38] + * TLBI_SEQ_ERR + */ + (NxCxaFir, bit(38)) ? TBDDefaultCallout; + + /** NXCXAFIR[39] + * TLBI_BAD_OP_ERR + */ + (NxCxaFir, bit(39)) ? TBDDefaultCallout; + + /** NXCXAFIR[40] + * TLBI_SEQ_NUM_PARITY_ERR + */ + (NxCxaFir, bit(40)) ? TBDDefaultCallout; + + /** NXCXAFIR[41] + * ST_CLASS_CMD_FOREIGN_LINK_FAIL + */ + (NxCxaFir, bit(41)) ? TBDDefaultCallout; + + /** NXCXAFIR[47] + * SCOM_ERR2 + */ + (NxCxaFir, bit(47)) ? TBDDefaultCallout; + + /** NXCXAFIR[48] + * SCOM_ERR + */ + (NxCxaFir, bit(48)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet MCDFIR +################################################################################ + +rule McdFir +{ + CHECK_STOP: MCDFIR & ~MCDFIR_MASK & ~MCDFIR_ACT0 & ~MCDFIR_ACT1; + RECOVERABLE: MCDFIR & ~MCDFIR_MASK & ~MCDFIR_ACT0 & MCDFIR_ACT1; +}; + +group gMcdFir filter singlebit +{ + /** MCDFIR[0] + * MCD_ARRAY_ECC_UE_ERR + */ + (McdFir, bit(0)) ? TBDDefaultCallout; + + /** MCDFIR[1] + * MCD_ARRAY_ECC_CE_ERR + */ + (McdFir, bit(1)) ? TBDDefaultCallout; + + /** MCDFIR[2] + * MCD_REG_PARITY_ERR + */ + (McdFir, bit(2)) ? TBDDefaultCallout; + + /** MCDFIR[3] + * MCD_SM_ERR + */ + (McdFir, bit(3)) ? TBDDefaultCallout; + + /** MCDFIR[4] + * MCD_REC_HANG_ERR + */ + (McdFir, bit(4)) ? TBDDefaultCallout; + + /** MCDFIR[5] + * MCD_PB_PARITY_ERR + */ + (McdFir, bit(5)) ? TBDDefaultCallout; + + /** MCDFIR[6] + * MCD_UNSOLICITED_CRESP_ERR + */ + (McdFir, bit(6)) ? TBDDefaultCallout; + + /** MCDFIR[7] + * MCD_ACK_DEAD_ERR + */ + (McdFir, bit(7)) ? TBDDefaultCallout; + + /** MCDFIR[8] + * FIR_PARITY_ERR2 + */ + (McdFir, bit(8)) ? TBDDefaultCallout; + + /** MCDFIR[9] + * FIR_PARITY_ERR + */ + (McdFir, bit(9)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet PBEASTFIR and PBWESTFIR +################################################################################ + +# TODO - All these FIRs should have the same bit definition. Idealy, we will +# only want to have one copy of the bit definition. Unfortuately, the +# rule code parser does not have the support for something like this. +# Maybe we can add this as a later feature. + +rule PbEastFir +{ + CHECK_STOP: PBEASTFIR & ~PBEASTFIR_MASK & ~PBEASTFIR_ACT0 & ~PBEASTFIR_ACT1; + RECOVERABLE: PBEASTFIR & ~PBEASTFIR_MASK & ~PBEASTFIR_ACT0 & PBEASTFIR_ACT1; +}; + +rule PbWestFir +{ + CHECK_STOP: PBWESTFIR & ~PBWESTFIR_MASK & ~PBWESTFIR_ACT0 & ~PBWESTFIR_ACT1; + RECOVERABLE: PBWESTFIR & ~PBWESTFIR_MASK & ~PBWESTFIR_ACT0 & PBWESTFIR_ACT1; +}; + +group gPbWestEastFir filter singlebit +{ + /** PBWESTFIR[0] + * PB_WEST_PBIEX01_PBH_HW_ERROR + */ + (PbWestFir, bit(0)) ? TBDDefaultCallout; + + /** PBEASTFIR[0] + * PB_EAST_PBIEX04_PBH_HW_ERROR + */ + (PbEastFir, bit(0)) ? TBDDefaultCallout; + + /** PBWESTFIR[1] + * PB_WEST_PBIEX01_PBH_RECOV_ERROR + */ + (PbWestFir, bit(1)) ? TBDDefaultCallout; + + /** PBEASTFIR[1] + * PB_EAST_PBIEX04_PBH_RECOV_ERROR + */ + (PbEastFir, bit(1)) ? TBDDefaultCallout; + + /** PBWESTFIR[2] + * PB_WEST_PBIEX01_PBH_PROTOCOL_ERROR + */ + (PbWestFir, bit(2)) ? TBDDefaultCallout; + + /** PBEASTFIR[2] + * PB_EAST_PBIEX04_PBH_PROTOCOL_ERROR + */ + (PbEastFir, bit(2)) ? TBDDefaultCallout; + + /** PBWESTFIR[3] + * PB_WEST_PBIEX01_PBH_OVERFLOW_ERROR + */ + (PbWestFir, bit(3)) ? TBDDefaultCallout; + + /** PBEASTFIR[3] + * PB_EAST_PBIEX04_PBH_OVERFLOW_ERROR + */ + (PbEastFir, bit(3)) ? TBDDefaultCallout; + + /** PBWESTFIR[4] + * PB_WEST_PBIEX02_PBH_HW_ERROR + */ + (PbWestFir, bit(4)) ? TBDDefaultCallout; + + /** PBEASTFIR[4] + * PB_EAST_PBIEX05_PBH_HW_ERROR + */ + (PbEastFir, bit(4)) ? TBDDefaultCallout; + + /** PBWESTFIR[5] + * PB_WEST_PBIEX02_PBH_RECOV_ERROR + */ + (PbWestFir, bit(5)) ? TBDDefaultCallout; + + /** PBEASTFIR[5] + * PB_EAST_PBIEX05_PBH_RECOV_ERROR + */ + (PbEastFir, bit(5)) ? TBDDefaultCallout; + + /** PBWESTFIR[6] + * PB_WEST_PBIEX02_PBH_PROTOCOL_ERROR + */ + (PbWestFir, bit(6)) ? TBDDefaultCallout; + + /** PBEASTFIR[6] + * PB_EAST_PBIEX05_PBH_PROTOCOL_ERROR + */ + (PbEastFir, bit(6)) ? TBDDefaultCallout; + + /** PBWESTFIR[7] + * PB_WEST_PBIEX02_PBH_OVERFLOW_ERROR + */ + (PbWestFir, bit(7)) ? TBDDefaultCallout; + + /** PBEASTFIR[7] + * PB_EAST_PBIEX05_PBH_OVERFLOW_ERROR + */ + (PbEastFir, bit(7)) ? TBDDefaultCallout; + + /** PBWESTFIR[8] + * PB_WEST_PBIEX03_PBH_HW_ERROR + */ + (PbWestFir, bit(8)) ? TBDDefaultCallout; + + /** PBEASTFIR[8] + * PB_EAST_PBIEX06_PBH_HW_ERROR + */ + (PbEastFir, bit(8)) ? TBDDefaultCallout; + + /** PBWESTFIR[9] + * PB_WEST_PBIEX03_PBH_RECOV_ERROR + */ + (PbWestFir, bit(9)) ? TBDDefaultCallout; + + /** PBEASTFIR[9] + * PB_EAST_PBIEX06_PBH_RECOV_ERROR + */ + (PbEastFir, bit(9)) ? TBDDefaultCallout; + + /** PBWESTFIR[10] + * PB_WEST_PBIEX03_PBH_PROTOCOL_ERROR + */ + (PbWestFir, bit(10)) ? TBDDefaultCallout; + + /** PBEASTFIR[10] + * PB_EAST_PBIEX06_PBH_PROTOCOL_ERROR + */ + (PbEastFir, bit(10)) ? TBDDefaultCallout; + + /** PBWESTFIR[11] + * PB_WEST_PBIEX03_PBH_OVERFLOW_ERROR + */ + (PbWestFir, bit(11)) ? TBDDefaultCallout; + + /** PBEASTFIR[11] + * PB_EAST_PBIEX06_PBH_OVERFLOW_ERROR + */ + (PbEastFir, bit(11)) ? TBDDefaultCallout; + + /** PBWESTFIR[12] + * PB_WEST_PBIEX09_PBH_HW_ERROR + */ + (PbWestFir, bit(12)) ? TBDDefaultCallout; + + /** PBEASTFIR[12] + * PB_EAST_PBIEX12_PBH_HW_ERROR + */ + (PbEastFir, bit(12)) ? TBDDefaultCallout; + + /** PBWESTFIR[13] + * PB_WEST_PBIEX09_PBH_RECOV_ERROR + */ + (PbWestFir, bit(13)) ? TBDDefaultCallout; + + /** PBEASTFIR[13] + * PB_EAST_PBIEX12_PBH_RECOV_ERROR + */ + (PbEastFir, bit(13)) ? TBDDefaultCallout; + + /** PBWESTFIR[14] + * PB_WEST_PBIEX09_PBH_PROTOCOL_ERROR + */ + (PbWestFir, bit(14)) ? TBDDefaultCallout; + + /** PBEASTFIR[14] + * PB_EAST_PBIEX12_PBH_PROTOCOL_ERROR + */ + (PbEastFir, bit(14)) ? TBDDefaultCallout; + + /** PBWESTFIR[15] + * PB_WEST_PBIEX09_PBH_OVERFLOW_ERROR + */ + (PbWestFir, bit(15)) ? TBDDefaultCallout; + + /** PBEASTFIR[15] + * PB_EAST_PBIEX12_PBH_OVERFLOW_ERROR + */ + (PbEastFir, bit(15)) ? TBDDefaultCallout; + + /** PBWESTFIR[16] + * PB_WEST_PBIEX10_PBH_HW_ERROR + */ + (PbWestFir, bit(16)) ? TBDDefaultCallout; + + /** PBEASTFIR[16] + * PB_EAST_PBIEX13_PBH_HW_ERROR + */ + (PbEastFir, bit(16)) ? TBDDefaultCallout; + + /** PBWESTFIR[17] + * PB_WEST_PBIEX10_PBH_RECOV_ERROR + */ + (PbWestFir, bit(17)) ? TBDDefaultCallout; + + /** PBEASTFIR[17] + * PB_EAST_PBIEX13_PBH_RECOV_ERROR + */ + (PbEastFir, bit(17)) ? TBDDefaultCallout; + + /** PBWESTFIR[18] + * PB_WEST_PBIEX10_PBH_PROTOCOL_ERROR + */ + (PbWestFir, bit(18)) ? TBDDefaultCallout; + + /** PBEASTFIR[18] + * PB_EAST_PBIEX13_PBH_PROTOCOL_ERROR + */ + (PbEastFir, bit(18)) ? TBDDefaultCallout; + + /** PBWESTFIR[19] + * PB_WEST_PBIEX10_PBH_OVERFLOW_ERROR + */ + (PbWestFir, bit(19)) ? TBDDefaultCallout; + + /** PBEASTFIR[19] + * PB_EAST_PBIEX13_PBH_OVERFLOW_ERROR + */ + (PbEastFir, bit(19)) ? TBDDefaultCallout; + + /** PBWESTFIR[20] + * PB_WEST_PBIEX11_PBH_HW_ERROR + */ + (PbWestFir, bit(20)) ? TBDDefaultCallout; + + /** PBEASTFIR[20] + * PB_EAST_PBIEX14_PBH_HW_ERROR + */ + (PbEastFir, bit(20)) ? TBDDefaultCallout; + + /** PBWESTFIR[21] + * PB_WEST_PBIEX11_PBH_RECOV_ERROR + */ + (PbWestFir, bit(21)) ? TBDDefaultCallout; + + /** PBEASTFIR[21] + * PB_EAST_PBIEX14_PBH_RECOV_ERROR + */ + (PbEastFir, bit(21)) ? TBDDefaultCallout; + + /** PBWESTFIR[22] + * PB_WEST_PBIEX11_PBH_PROTOCOL_ERROR + */ + (PbWestFir, bit(22)) ? TBDDefaultCallout; + + /** PBEASTFIR[22] + * PB_EAST_PBIEX14_PBH_PROTOCOL_ERROR + */ + (PbEastFir, bit(22)) ? TBDDefaultCallout; + + /** PBWESTFIR[23] + * PB_WEST_PBIEX11_PBH_OVERFLOW_ERROR + */ + (PbWestFir, bit(23)) ? TBDDefaultCallout; + + /** PBEASTFIR[23] + * PB_EAST_PBIEX14_PBH_OVERFLOW_ERROR + */ + (PbEastFir, bit(23)) ? TBDDefaultCallout; + + /** PBWESTFIR[24] + * PB_WEST_DATA_OVERFLOW_ERROR + */ + (PbWestFir, bit(24)) ? TBDDefaultCallout; + + /** PBEASTFIR[24] + * PB_EAST_DATA_OVERFLOW_ERROR + */ + (PbEastFir, bit(24)) ? TBDDefaultCallout; + + /** PBWESTFIR[25] + * PB_WEST_DATA_PROTOCOL_ERROR + */ + (PbWestFir, bit(25)) ? TBDDefaultCallout; + + /** PBEASTFIR[25] + * PB_EAST_DATA_PROTOCOL_ERROR + */ + (PbEastFir, bit(25)) ? TBDDefaultCallout; + + /** PBWESTFIR[26] + * PB_WEST_DATA_ROUTE_ERROR + */ + (PbWestFir, bit(26)) ? TBDDefaultCallout; + + /** PBEASTFIR[26] + * PB_EAST_DATA_ROUTE_ERROR + */ + (PbEastFir, bit(26)) ? TBDDefaultCallout; + + /** PBWESTFIR[27] + * PB_WEST_CMD_OVERFLOW_ERROR + */ + (PbWestFir, bit(27)) ? TBDDefaultCallout; + + /** PBEASTFIR[27] + * PB_EAST_CMD_OVERFLOW_ERROR + */ + (PbEastFir, bit(27)) ? TBDDefaultCallout; + + /** PBWESTFIR[32] + * FIR_SCOM_WEST_ERR + */ + (PbWestFir, bit(32)) ? TBDDefaultCallout; + + /** PBEASTFIR[32] + * FIR_SCOM_EAST_ERR + */ + (PbEastFir, bit(32)) ? TBDDefaultCallout; + + /** PBWESTFIR[33] + * FIR_SCOM_WEST_ERR_DUP + */ + (PbWestFir, bit(33)) ? TBDDefaultCallout; + + /** PBEASTFIR[33] + * FIR_SCOM_EAST_ERR_DUP + */ + (PbEastFir, bit(33)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet PBCENTFIR +################################################################################ + +rule PbCentFir +{ + CHECK_STOP: PBCENTFIR & ~PBCENTFIR_MASK & ~PBCENTFIR_ACT0 & ~PBCENTFIR_ACT1; + RECOVERABLE: PBCENTFIR & ~PBCENTFIR_MASK & ~PBCENTFIR_ACT0 & PBCENTFIR_ACT1; + SPECIAL: PBCENTFIR & ~PBCENTFIR_MASK & PBCENTFIR_ACT0 & ~PBCENTFIR_ACT1; +}; + +group gPbCentFir filter singlebit +{ + /** PBCENTFIR[0] + * PB_CENT_PROTOCOL_ERROR + */ + (PbCentFir, bit(0)) ? TBDDefaultCallout; + + /** PBCENTFIR[1] + * PB_CENT_OVERFLOW_ERROR + */ + (PbCentFir, bit(1)) ? TBDDefaultCallout; + + /** PBCENTFIR[2] + * PB_CENT_HW_PARITY_ERROR + */ + (PbCentFir, bit(2)) ? TBDDefaultCallout; + + /** PBCENTFIR[3] + * PB_CENT_TLBIE_TM_TIMEOUT_ERROR + */ + (PbCentFir, bit(3)) ? TBDDefaultCallout; + + /** PBCENTFIR[4] + * PB_CENT_COHERENCY_ERROR + */ + (PbCentFir, bit(4)) ? TBDDefaultCallout; + + /** PBCENTFIR[5] + * PB_CENT_CRESP_ADDR_ERROR + */ + (PbCentFir, bit(5)) ? TBDDefaultCallout; + + /** PBCENTFIR[6] + * PB_CENT_CRESP_ERROR + */ + (PbCentFir, bit(6)) ? TBDDefaultCallout; + + /** PBCENTFIR[7] + * PB_CENT_HANG_RECOVERY_LIMIT_ERROR + */ + (PbCentFir, bit(7)) ? TBDDefaultCallout; + + /** PBCENTFIR[8] + * PB_CENT_DATA_ROUTE_ERROR + */ + (PbCentFir, bit(8)) ? TBDDefaultCallout; + + /** PBCENTFIR[9] + * PB_CENT_HANG_RECOVERY_GTE_LEVEL1 + */ + (PbCentFir, bit(9)) ? TBDDefaultCallout; + + /** PBCENTFIR[10] + * PB_CENT_FORCE_MP_IPL + */ + (PbCentFir, bit(10)) ? TBDDefaultCallout; + + /** PBCENTFIR[11] + * PB_CENT_FIR_SPARE_0 + */ + (PbCentFir, bit(11)) ? TBDDefaultCallout; + + /** PBCENTFIR[12] + * PB_CENT_F0LINK_ERROR + */ + (PbCentFir, bit(12)) ? TBDDefaultCallout; + + /** PBCENTFIR[13] + * PB_CENT_F1LINK_ERROR + */ + (PbCentFir, bit(13)) ? TBDDefaultCallout; + + /** PBCENTFIR[14] + * PB_CENT_F0_OVERFLOW + */ + (PbCentFir, bit(14)) ? TBDDefaultCallout; + + /** PBCENTFIR[15] + * PB_CENT_F1_OVERFLOW + */ + (PbCentFir, bit(15)) ? TBDDefaultCallout; + + /** PBCENTFIR[16] + * FIR_SCOM_CENT_ERR + */ + (PbCentFir, bit(16)) ? TBDDefaultCallout; + + /** PBCENTFIR[17] + * FIR_SCOM_CENT_ERR_DUP + */ + (PbCentFir, bit(17)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet PSIFIR +################################################################################ + +rule PsiFir +{ + CHECK_STOP: PSIFIR & ~PSIFIR_MASK & ~PSIFIR_ACT0 & ~PSIFIR_ACT1; + RECOVERABLE: PSIFIR & ~PSIFIR_MASK & ~PSIFIR_ACT0 & PSIFIR_ACT1; +}; + +group gPsiFir filter singlebit +{ + /** PSIFIR[0] + * PB_ECC_ERR_CE + */ + (PsiFir, bit(0)) ? TBDDefaultCallout; + + /** PSIFIR[1] + * PB_ECC_ERR_UE + */ + (PsiFir, bit(1)) ? TBDDefaultCallout; + + /** PSIFIR[2] + * PB_ECC_ERR_SUE + */ + (PsiFir, bit(3)) ? TBDDefaultCallout; + + /** PSIFIR[4] + * INTERRUPT_FROM_FSP + */ + (PsiFir, bit(4)) ? TBDDefaultCallout; + + /** PSIFIR[5] + * FSP_ECC_ERR_CE + */ + (PsiFir, bit(5)) ? TBDDefaultCallout; + + /** PSIFIR[6] + * FSP_ECC_ERR_UE + */ + (PsiFir, bit(6)) ? TBDDefaultCallout; + + /** PSIFIR[7] + * ERROR_STATE + */ + (PsiFir, bit(7)) ? TBDDefaultCallout; + + /** PSIFIR[8] + * INVALID_TTYPE + */ + (PsiFir, bit(8)) ? TBDDefaultCallout; + + /** PSIFIR[9] + * INVALID_CRESP + */ + (PsiFir, bit(9)) ? TBDDefaultCallout; + + /** PSIFIR[10] + * PB_DATA_TIME_OUT + */ + (PsiFir, bit(10)) ? TBDDefaultCallout; + + /** PSIFIR[11] + * PB_PARITY_ERROR + */ + (PsiFir, bit(11)) ? TBDDefaultCallout; + + /** PSIFIR[12] + * FSP_ACCESS_TRUSTED_SPACE + */ + (PsiFir, bit(12)) ? TBDDefaultCallout; + + /** PSIFIR[13] + * UNEXPECTED_PB + */ + (PsiFir, bit(13)) ? TBDDefaultCallout; + + /** PSIFIR[14] + * INTERRUPT_REG_CHANGE_WHILE_ACTIVE + */ + (PsiFir, bit(14)) ? TBDDefaultCallout; + + /** PSIFIR[15] + * INTERRUPT0_ADDRESS_ERROR + */ + (PsiFir, bit(15)) ? TBDDefaultCallout; + + /** PSIFIR[16] + * INTERRUPT1_ADDRESS_ERROR + */ + (PsiFir, bit(16)) ? TBDDefaultCallout; + + /** PSIFIR[17] + * INTERRUPT2_ADDRESS_ERROR + */ + (PsiFir, bit(17)) ? TBDDefaultCallout; + + /** PSIFIR[18] + * INTERRUPT3_ADDRESS_ERROR + */ + (PsiFir, bit(18)) ? TBDDefaultCallout; + + /** PSIFIR[19] + * INTERRUPT4_ADDRESS_ERROR + */ + (PsiFir, bit(19)) ? TBDDefaultCallout; + + /** PSIFIR[20] + * INTERRUPT5_ADDRESS_ERROR + */ + (PsiFir, bit(20)) ? TBDDefaultCallout; + + /** PSIFIR[21] + * TCBR_TP_PSI_GLB_ERR_0 + */ + (PsiFir, bit(21)) ? TBDDefaultCallout; + + /** PSIFIR[22] + * TCBR_TP_PSI_GLB_ERR_1 + */ + (PsiFir, bit(22)) ? TBDDefaultCallout; + + /** PSIFIR[23] + * SCOM_ERROR + */ + (PsiFir, bit(23)) ? TBDDefaultCallout; + + /** PSIFIR[24] + * FIR_PARITY_ERROR + */ + (PsiFir, bit(24)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet ICPFIR +################################################################################ + +rule IcpFir +{ + CHECK_STOP: ICPFIR & ~ICPFIR_MASK & ~ICPFIR_ACT0 & ~ICPFIR_ACT1; + RECOVERABLE: ICPFIR & ~ICPFIR_MASK & ~ICPFIR_ACT0 & ICPFIR_ACT1; +}; + +group gIcpFir filter singlebit +{ + /** ICPFIR[0] + * INT_HW_ERROR_EOI_Q + */ + (IcpFir, bit(0)) ? TBDDefaultCallout; + + /** ICPFIR[1] + * INT_HW_ERROR_FWD_Q + */ + (IcpFir, bit(1)) ? TBDDefaultCallout; + + /** ICPFIR[2] + * INT_HW_ERROR_IR_QU + */ + (IcpFir, bit(2)) ? TBDDefaultCallout; + + /** ICPFIR[3] + * INT_HW_ERROR_RET_Q + */ + (IcpFir, bit(3)) ? TBDDefaultCallout; + + /** ICPFIR[4] + * INT_HW_ERROR_ADDRI + */ + (IcpFir, bit(4)) ? TBDDefaultCallout; + + /** ICPFIR[5] + * INT_HW_ERROR_DATAI + */ + (IcpFir, bit(5)) ? TBDDefaultCallout; + + /** ICPFIR[6] + * INT_HW_ERROR_ADDRO + */ + (IcpFir, bit(7)) ? TBDDefaultCallout; + + /** ICPFIR[8] + * INT_HW_ERROR_LDSTQ + */ + (IcpFir, bit(8)) ? TBDDefaultCallout; + + /** ICPFIR[9] + * INT_HW_ERROR_REQQ + */ + (IcpFir, bit(9)) ? TBDDefaultCallout; + + /** ICPFIR[10] + * SCOM_REG_CHECK + */ + (IcpFir, bit(10)) ? TBDDefaultCallout; + + /** ICPFIR[11] + * INVALID_FORWARD_SETUP + */ + (IcpFir, bit(11)) ? TBDDefaultCallout; + + /** ICPFIR[12] + * ADDRESS_CORE_FIELD + */ + (IcpFir, bit(12)) ? TBDDefaultCallout; + + /** ICPFIR[13] + * ADDRESS_CORE_FIELD_MMIO + */ + (IcpFir, bit(13)) ? TBDDefaultCallout; + + /** ICPFIR[14] + * UNSOLICITED_CRESP + */ + (IcpFir, bit(14)) ? TBDDefaultCallout; + + /** ICPFIR[15] + * UNSOLICITED_DATA + */ + (IcpFir, bit(15)) ? TBDDefaultCallout; + + /** ICPFIR[16] + * INVALID_CMD + */ + (IcpFir, bit(16)) ? TBDDefaultCallout; + + /** ICPFIR[17] + * INVALID_CRESPZ + */ + (IcpFir, bit(17)) ? TBDDefaultCallout; + + /** ICPFIR[18] + * INVALID_CRESP + */ + (IcpFir, bit(18)) ? TBDDefaultCallout; + + /** ICPFIR[19] + * Reserved field (Access type is reserved) + */ + (IcpFir, bit(19)) ? TBDDefaultCallout; + + /** ICPFIR[20] + * ECC_CE_ON_DATA + */ + (IcpFir, bit(20)) ? TBDDefaultCallout; + + /** ICPFIR[21] + * ECC_UE_ON_DATA + */ + (IcpFir, bit(21)) ? TBDDefaultCallout; + + /** ICPFIR[22] + * ECC_SUE_ON_DATA + */ + (IcpFir, bit(22)) ? TBDDefaultCallout; + + /** ICPFIR[23] + * PARITY_CHK_ADDRESS + */ + (IcpFir, bit(23)) ? TBDDefaultCallout; + + /** ICPFIR[24] + * PARITY_CHK_TAG + */ + (IcpFir, bit(24)) ? TBDDefaultCallout; + + /** ICPFIR[25] + * TIMEOUT_LD_STQ + */ + (IcpFir, bit(25)) ? TBDDefaultCallout; + + /** ICPFIR[26] + * TIMEOUT_RETURNQ + */ + (IcpFir, bit(26)) ? TBDDefaultCallout; + + /** ICPFIR[27] + * TIMEOUT_FWDQ + */ + (IcpFir, bit(27)) ? TBDDefaultCallout; + + /** ICPFIR[28] + * TIMEOUT_EOIQ + */ + (IcpFir, bit(28)) ? TBDDefaultCallout; + + /** ICPFIR[32] + * EXT_TRACE_0 + */ + (IcpFir, bit(32)) ? TBDDefaultCallout; + + /** ICPFIR[33] + * EXT_TRACE_1 + */ + (IcpFir, bit(33)) ? TBDDefaultCallout; + + /** ICPFIR[34] + * ADU_RECOV + */ + (IcpFir, bit(34)) ? TBDDefaultCallout; + + /** ICPFIR[35] + * EXT_XSTOP + */ + (IcpFir, bit(35)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet PBAFIR +################################################################################ + +rule PbaFir +{ + CHECK_STOP: PBAFIR & ~PBAFIR_MASK & ~PBAFIR_ACT0 & ~PBAFIR_ACT1; + RECOVERABLE: PBAFIR & ~PBAFIR_MASK & ~PBAFIR_ACT0 & PBAFIR_ACT1; +}; + +group gPbaFir filter singlebit +{ + /** PBAFIR[0] + * PBAFIR_OCI_APAR_ERR + */ + (PbaFir, bit(0)) ? TBDDefaultCallout; + + /** PBAFIR[1] + * PBAFIR_PB_RDADRERR_FW + */ + (PbaFir, bit(1)) ? TBDDefaultCallout; + + /** PBAFIR[2] + * PBAFIR_PB_RDDATATO_FW + */ + (PbaFir, bit(2)) ? TBDDefaultCallout; + + /** PBAFIR[3] + * PBAFIR_PB_SUE_FW + */ + (PbaFir, bit(3)) ? TBDDefaultCallout; + + /** PBAFIR[4] + * PBAFIR_PB_UE_FW + */ + (PbaFir, bit(4)) ? TBDDefaultCallout; + + /** PBAFIR[5] + * PBAFIR_PB_CE_FW + */ + (PbaFir, bit(5)) ? TBDDefaultCallout; + + /** PBAFIR[6] + * PBAFIR_OCI_SLAVE_INIT + */ + (PbaFir, bit(6)) ? TBDDefaultCallout; + + /** PBAFIR[7] + * PBAFIR_OCI_WRPAR_ERR + */ + (PbaFir, bit(7)) ? TBDDefaultCallout; + + /** PBAFIR[8] + * PBAFIR_OCI_REREQTO + */ + (PbaFir, bit(8)) ? TBDDefaultCallout; + + /** PBAFIR[9] + * PBAFIR_PB_UNEXPCRESP + */ + (PbaFir, bit(9)) ? TBDDefaultCallout; + + /** PBAFIR[10] + * PBAFIR_PB_UNEXPDATA + */ + (PbaFir, bit(10)) ? TBDDefaultCallout; + + /** PBAFIR[11] + * PBAFIR_PB_PARITY_ERR + */ + (PbaFir, bit(11)) ? TBDDefaultCallout; + + /** PBAFIR[12] + * PBAFIR_PB_WRADRERR_FW + */ + (PbaFir, bit(12)) ? TBDDefaultCallout; + + /** PBAFIR[13] + * PBAFIR_PB_BADCRESP + */ + (PbaFir, bit(13)) ? TBDDefaultCallout; + + /** PBAFIR[14] + * PBAFIR_PB_ACKDEAD_FW + */ + (PbaFir, bit(14)) ? TBDDefaultCallout; + + /** PBAFIR[15] + * PBAFIR_PB_CRESPTO + */ + (PbaFir, bit(15)) ? TBDDefaultCallout; + + /** PBAFIR[16] + * PBAFIR_BCUE_SETUP_ERR + */ + (PbaFir, bit(16)) ? TBDDefaultCallout; + + /** PBAFIR[17] + * PBAFIR_BCUE_PB_ACK_DEAD + */ + (PbaFir, bit(17)) ? TBDDefaultCallout; + + /** PBAFIR[18] + * PBAFIR_BCUE_PB_ADRERR + */ + (PbaFir, bit(18)) ? TBDDefaultCallout; + + /** PBAFIR[19] + * PBAFIR_BCUE_OCI_DATERR + */ + (PbaFir, bit(19)) ? TBDDefaultCallout; + + /** PBAFIR[20] + * PBAFIR_BCDE_SETUP_ERR + */ + (PbaFir, bit(20)) ? TBDDefaultCallout; + + /** PBAFIR[21] + * PBAFIR_BCDE_PB_ACK_DEAD + */ + (PbaFir, bit(21)) ? TBDDefaultCallout; + + /** PBAFIR[22] + * PBAFIR_BCDE_PB_ADRERR + */ + (PbaFir, bit(22)) ? TBDDefaultCallout; + + /** PBAFIR[23] + * PBAFIR_BCDE_RDDATATO_ERR + */ + (PbaFir, bit(23)) ? TBDDefaultCallout; + + /** PBAFIR[24] + * PBAFIR_BCDE_SUE_ERR + */ + (PbaFir, bit(24)) ? TBDDefaultCallout; + + /** PBAFIR[25] + * PBAFIR_BCDE_UE_ERR + */ + (PbaFir, bit(25)) ? TBDDefaultCallout; + + /** PBAFIR[26] + * PBAFIR_BCDE_CE + */ + (PbaFir, bit(26)) ? TBDDefaultCallout; + + /** PBAFIR[27] + * PBAFIR_BCDE_OCI_DATERR + */ + (PbaFir, bit(27)) ? TBDDefaultCallout; + + /** PBAFIR[28] + * PBAFIR_INTERNAL_ERR + */ + (PbaFir, bit(28)) ? TBDDefaultCallout; + + /** PBAFIR[29] + * PBAFIR_ILLEGAL_CACHE_OP + */ + (PbaFir, bit(29)) ? TBDDefaultCallout; + + /** PBAFIR[30] + * PBAFIR_OCI_BAD_REG_ADDR + */ + (PbaFir, bit(30)) ? TBDDefaultCallout; + + /** PBAFIR[31] + * PBAFIR_AXPUSH_WRERR + */ + (PbaFir, bit(31)) ? TBDDefaultCallout; + + /** PBAFIR[32] + * PBAFIR_AXRCV_DLO_ERR + */ + (PbaFir, bit(32)) ? TBDDefaultCallout; + + /** PBAFIR[33] + * PBAFIR_AXRCV_DLO_TO + */ + (PbaFir, bit(33)) ? TBDDefaultCallout; + + /** PBAFIR[34] + * PBAFIR_AXRCV_RSVDATA_TO + */ + (PbaFir, bit(34)) ? TBDDefaultCallout; + + /** PBAFIR[35] + * PBAFIR_AXFLOW_ERR + */ + (PbaFir, bit(35)) ? TBDDefaultCallout; + + /** PBAFIR[36] + * PBAFIR_AXSND_DHI_RTYTO + */ + (PbaFir, bit(36)) ? TBDDefaultCallout; + + /** PBAFIR[37] + * PBAFIR_AXSND_DLO_RTYTO + */ + (PbaFir, bit(37)) ? TBDDefaultCallout; + + /** PBAFIR[38] + * PBAFIR_AXSND_RSVTO + */ + (PbaFir, bit(38)) ? TBDDefaultCallout; + + /** PBAFIR[39] + * PBAFIR_AXSND_RSVERR + */ + (PbaFir, bit(39)) ? TBDDefaultCallout; + + /** PBAFIR[40] + * PBAFIR_PB_ACKDEAD_FW_WR + */ + (PbaFir, bit(40)) ? TBDDefaultCallout; + + /** PBAFIR[44|45] + * PBAFIR_FIR_PARITY_ERR + */ + (PbaFir, bit(44|45)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet EHHCAFIR +################################################################################ + +rule EhHcaFir +{ + CHECK_STOP: EHHCAFIR & ~EHHCAFIR_MASK & ~EHHCAFIR_ACT0 & ~EHHCAFIR_ACT1; + RECOVERABLE: EHHCAFIR & ~EHHCAFIR_MASK & ~EHHCAFIR_ACT0 & EHHCAFIR_ACT1; +}; + +group gEhHcaFir filter singlebit +{ + /** EHHCAFIR[0] + * CE1_0_OUT: array0_a CE + */ + (EhHcaFir, bit(0)) ? TBDDefaultCallout; + + /** EHHCAFIR[1] + * CE2_0_OUT: array0_b CE + */ + (EhHcaFir, bit(1)) ? TBDDefaultCallout; + + /** EHHCAFIR[2 + * UE1_0_OUT: array0_a ue + */ + (EhHcaFir, bit(2)) ? TBDDefaultCallout; + + /** EHHCAFIR[3] + * UE2_0_OUT: array0_b ue + */ + (EhHcaFir, bit(3)) ? TBDDefaultCallout; + + /** EHHCAFIR[4] + * CE1_1_OUT: array1_a CE + */ + (EhHcaFir, bit(4)) ? TBDDefaultCallout; + + /** EHHCAFIR[5] + * CE2_1_OUT: array1_b CE + */ + (EhHcaFir, bit(5)) ? TBDDefaultCallout; + + /** EHHCAFIR[6] + * UE1_1_OUT: array1_a ue + */ + (EhHcaFir, bit(6)) ? TBDDefaultCallout; + + /** EHHCAFIR[7] + * UE2_1_OUT: array1_b ue + */ + (EhHcaFir, bit(7)) ? TBDDefaultCallout; + + /** EHHCAFIR[8] + * CE1_2_OUT: array2_a CE + */ + (EhHcaFir, bit(8)) ? TBDDefaultCallout; + + /** EHHCAFIR[9] + * CE2_2_OUT: array2_b CE + */ + (EhHcaFir, bit(9)) ? TBDDefaultCallout; + + /** EHHCAFIR[10] + * UE1_2_OUT: array2_a ue + */ + (EhHcaFir, bit(10)) ? TBDDefaultCallout; + + /** EHHCAFIR[11] + * UE2_2_OUT: array2_b ue + */ + (EhHcaFir, bit(11)) ? TBDDefaultCallout; + + /** EHHCAFIR[12] + * CE1_3_OUT: array3_a CE + */ + (EhHcaFir, bit(12)) ? TBDDefaultCallout; + + /** EHHCAFIR[13] + * CE2_3_OUT: array3_b CE + */ + (EhHcaFir, bit(13)) ? TBDDefaultCallout; + + /** EHHCAFIR[14] + * UE1_3_OUT: array3_a ue + */ + (EhHcaFir, bit(14)) ? TBDDefaultCallout; + + /** EHHCAFIR[15] + * UE2_3_OUT: array3_b ue + */ + (EhHcaFir, bit(15)) ? TBDDefaultCallout; + + /** EHHCAFIR[16] + * CE1_4_OUT: array4_a CE + */ + (EhHcaFir, bit(16)) ? TBDDefaultCallout; + + /** EHHCAFIR[17] + * CE2_4_OUT: array4_b CE + */ + (EhHcaFir, bit(17)) ? TBDDefaultCallout; + + /** EHHCAFIR[18] + * UE1_4_OUT: array4_a ue + */ + (EhHcaFir, bit(18)) ? TBDDefaultCallout; + + /** EHHCAFIR[19] + * UE2_4_OUT: array4_b ue + */ + (EhHcaFir, bit(19)) ? TBDDefaultCallout; + + /** EHHCAFIR[20] + * CE1_5_OUT: array5_a CE + */ + (EhHcaFir, bit(20)) ? TBDDefaultCallout; + + /** EHHCAFIR[21] + * CE2_5_OUT: array5_b CE + */ + (EhHcaFir, bit(21)) ? TBDDefaultCallout; + + /** EHHCAFIR[22] + * UE1_5_OUT: array5_a ue + */ + (EhHcaFir, bit(22)) ? TBDDefaultCallout; + + /** EHHCAFIR[23] + * UE2_5_OUT: array5_b ue + */ + (EhHcaFir, bit(23)) ? TBDDefaultCallout; + + /** EHHCAFIR[24] + * CE1_6_OUT: array6_a CE + */ + (EhHcaFir, bit(24)) ? TBDDefaultCallout; + + /** EHHCAFIR[25] + * CE2_6_OUT: array6_b CE + */ + (EhHcaFir, bit(25)) ? TBDDefaultCallout; + + /** EHHCAFIR[26] + * UE1_6_OUT: array6_a ue + */ + (EhHcaFir, bit(26)) ? TBDDefaultCallout; + + /** EHHCAFIR[27] + * UE2_6_OUT: array6_b ue + */ + (EhHcaFir, bit(27)) ? TBDDefaultCallout; + + /** EHHCAFIR[28] + * CE1_7_OUT: array7_a CE + */ + (EhHcaFir, bit(28)) ? TBDDefaultCallout; + + /** EHHCAFIR[29] + * CE2_7_OUT: array7_b CE + */ + (EhHcaFir, bit(29)) ? TBDDefaultCallout; + + /** EHHCAFIR[30] + * UE1_7_OUT: array7_a ue + */ + (EhHcaFir, bit(30)) ? TBDDefaultCallout; + + /** EHHCAFIR[31] + * UE2_7_OUT: array7_b ue + */ + (EhHcaFir, bit(31)) ? TBDDefaultCallout; + + /** EHHCAFIR[32] + * DROP_COUNTER_FULL: Drop Counter Full + */ + (EhHcaFir, bit(32)) ? TBDDefaultCallout; + + /** EHHCAFIR[33] + * INTERNAL_ERROR: Internal Error + */ + (EhHcaFir, bit(33)) ? TBDDefaultCallout; + + /** EHHCAFIR[34] + * SCOM_ERROR + */ + (EhHcaFir, bit(34)) ? TBDDefaultCallout; + + /** EHHCAFIR[35] + * FIR_PARITY_ERROR + */ + (EhHcaFir, bit(35)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet ENHCAFIR +################################################################################ + +rule EnHcaFir +{ + CHECK_STOP: ENHCAFIR & ~ENHCAFIR_MASK & ~ENHCAFIR_ACT0 & ~ENHCAFIR_ACT1; + RECOVERABLE: ENHCAFIR & ~ENHCAFIR_MASK & ~ENHCAFIR_ACT0 & ENHCAFIR_ACT1; +}; + +group gEnHcaFir filter singlebit +{ + /** ENHCAFIR[0] + * DPX0_DAT_UE: PB0 data UE + */ + (EnHcaFir, bit(0)) ? TBDDefaultCallout; + + /** ENHCAFIR[1] + * DPX0_DAT_SUE: PB0 data UE + */ + (EnHcaFir, bit(1)) ? TBDDefaultCallout; + + /** ENHCAFIR[2] + * DPX0_DAT_CE: PB0 data ue + */ + (EnHcaFir, bit(2)) ? TBDDefaultCallout; + + /** ENHCAFIR[3] + * + */ + (EnHcaFir, bit(3)) ? TBDDefaultCallout; + + /** ENHCAFIR[4] + * CO_DROP_COUNTER_FULL: Castout Drop Counter Full + */ + (EnHcaFir, bit(4)) ? TBDDefaultCallout; + + /** ENHCAFIR[5] + * DATA_HANG_DETECT: Castout Drop Counter Full + */ + (EnHcaFir, bit(5)) ? TBDDefaultCallout; + + /** ENHCAFIR[6] + * UNEXPECTED_DATA_OR_CRESP: Castout Drop Counter Full + */ + (EnHcaFir, bit(6)) ? TBDDefaultCallout; + + /** ENHCAFIR[7] + * INTERNAL_ERROR: Castout Drop Counter Full + */ + (EnHcaFir, bit(7)) ? TBDDefaultCallout; + + /** ENHCAFIR[8] + * SCOM_ERROR + */ + (EnHcaFir, bit(8)) ? TBDDefaultCallout; + + /** ENHCAFIR[9] + * FIR_PARITY_ERROR + */ + (EnHcaFir, bit(9)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet PCINESTFIRs +################################################################################ + +# TODO - All these FIRs should have the same bit definition. Idealy, we will +# only want to have one copy of the bit definition. Unfortuately, the +# rule code parser does not have the support for something like this. +# Maybe we can add this as a later feature. + +rule PciNestFir_0 +{ + CHECK_STOP: + PCINESTFIR_0 & ~PCINESTFIR_0_MASK & ~PCINESTFIR_0_ACT0 & ~PCINESTFIR_0_ACT1; + RECOVERABLE: + PCINESTFIR_0 & ~PCINESTFIR_0_MASK & ~PCINESTFIR_0_ACT0 & PCINESTFIR_0_ACT1; +}; + +rule PciNestFir_1 +{ + CHECK_STOP: + PCINESTFIR_1 & ~PCINESTFIR_1_MASK & ~PCINESTFIR_1_ACT0 & ~PCINESTFIR_1_ACT1; + RECOVERABLE: + PCINESTFIR_1 & ~PCINESTFIR_1_MASK & ~PCINESTFIR_1_ACT0 & PCINESTFIR_1_ACT1; +}; + +rule PciNestFir_2 +{ + CHECK_STOP: + PCINESTFIR_2 & ~PCINESTFIR_2_MASK & ~PCINESTFIR_2_ACT0 & ~PCINESTFIR_2_ACT1; + RECOVERABLE: + PCINESTFIR_2 & ~PCINESTFIR_2_MASK & ~PCINESTFIR_2_ACT0 & PCINESTFIR_2_ACT1; +}; + +group gPciNestFir filter singlebit +{ + /** PCINESTFIR_0[0] + * BAR_PE + */ + (PciNestFir_0, bit(0)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[0] + * BAR_PE + */ + (PciNestFir_1, bit(0)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[0] + * BAR_PE + */ + (PciNestFir_2, bit(0)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[1] + * NONBAR_PE + */ + (PciNestFir_0, bit(1)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[1] + * NONBAR_PE + */ + (PciNestFir_1, bit(1)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[1] + * NONBAR_PE + */ + (PciNestFir_2, bit(1)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[2] + * PB_TO_PEC_CE + */ + (PciNestFir_0, bit(2)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[2] + * PB_TO_PEC_CE + */ + (PciNestFir_1, bit(2)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[2] + * PB_TO_PEC_CE + */ + (PciNestFir_2, bit(2)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[3] + * PB_TO_PEC_UE + */ + (PciNestFir_0, bit(3)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[3] + * PB_TO_PEC_UE + */ + (PciNestFir_1, bit(3)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[3] + * PB_TO_PEC_UE + */ + (PciNestFir_2, bit(3)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[4] + * PB_TO_PEC_SUE + */ + (PciNestFir_0, bit(4)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[4] + * PB_TO_PEC_SUE + */ + (PciNestFir_1, bit(4)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[4] + * PB_TO_PEC_SUE + */ + (PciNestFir_2, bit(4)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[5] + * ARY_ECC_CE + */ + (PciNestFir_0, bit(5)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[5] + * ARY_ECC_CE + */ + (PciNestFir_1, bit(5)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[5] + * ARY_ECC_CE + */ + (PciNestFir_2, bit(5)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[6] + * ARY_ECC_UE + */ + (PciNestFir_0, bit(6)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[6] + * ARY_ECC_UE + */ + (PciNestFir_1, bit(6)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[6] + * ARY_ECC_UE + */ + (PciNestFir_2, bit(6)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[7] + * ARY_ECC_SUE + */ + (PciNestFir_0, bit(7)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[7] + * ARY_ECC_SUE + */ + (PciNestFir_1, bit(7)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[7] + * ARY_ECC_SUE + */ + (PciNestFir_2, bit(7)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[8] + * REGISTER_ARRAY_PE + */ + (PciNestFir_0, bit(8)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[8] + * REGISTER_ARRAY_PE + */ + (PciNestFir_1, bit(8)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[8] + * REGISTER_ARRAY_PE + */ + (PciNestFir_2, bit(8)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[9] + * PB_INTERFACE_PE + */ + (PciNestFir_0, bit(9)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[9] + * PB_INTERFACE_PE + */ + (PciNestFir_1, bit(9)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[9] + * PB_INTERFACE_PE + */ + (PciNestFir_2, bit(9)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[10] + * PB_DATA_HANG_ERRORS + */ + (PciNestFir_0, bit(10)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[10] + * PB_DATA_HANG_ERRORS + */ + (PciNestFir_1, bit(10)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[10] + * PB_DATA_HANG_ERRORS + */ + (PciNestFir_2, bit(10)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[11] + * PB_HANG_ERRORS + */ + (PciNestFir_0, bit(11)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[11] + * PB_HANG_ERRORS + */ + (PciNestFir_1, bit(11)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[11] + * PB_HANG_ERRORS + */ + (PciNestFir_2, bit(11)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[12] + * RD_ARE_ERRORS + */ + (PciNestFir_0, bit(12)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[12] + * RD_ARE_ERRORS + */ + (PciNestFir_1, bit(12)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[12] + * RD_ARE_ERRORS + */ + (PciNestFir_2, bit(12)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[13] + * NONRD_ARE_ERRORS + */ + (PciNestFir_0, bit(13)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[13] + * NONRD_ARE_ERRORS + */ + (PciNestFir_1, bit(13)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[13] + * NONRD_ARE_ERRORS + */ + (PciNestFir_2, bit(13)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[14] + * PCI_HANG_ERROR + */ + (PciNestFir_0, bit(14)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[14] + * PCI_HANG_ERROR + */ + (PciNestFir_1, bit(14)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[14] + * PCI_HANG_ERROR + */ + (PciNestFir_2, bit(14)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[15] + * PCI_CLOCK_ERROR + */ + (PciNestFir_0, bit(15)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[15] + * PCI_CLOCK_ERROR + */ + (PciNestFir_1, bit(15)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[15] + * PCI_CLOCK_ERROR + */ + (PciNestFir_2, bit(15)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[16] + * AIB_FENCE + */ + (PciNestFir_0, bit(16)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[16] + * AIB_FENCE + */ + (PciNestFir_1, bit(16)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[16] + * AIB_FENCE + */ + (PciNestFir_2, bit(16)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[17] + * HW_ERRORS + */ + (PciNestFir_0, bit(17)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[17] + * HW_ERRORS + */ + (PciNestFir_1, bit(17)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[17] + * HW_ERRORS + */ + (PciNestFir_2, bit(17)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[18] + * UNSOLICITIEDPBDATA + */ + (PciNestFir_0, bit(18)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[18] + * UNSOLICITIEDPBDATA + */ + (PciNestFir_1, bit(18)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[18] + * UNSOLICITIEDPBDATA + */ + (PciNestFir_2, bit(18)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[19] + * UNEXPECTEDCRESP + */ + (PciNestFir_0, bit(19)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[19] + * UNEXPECTEDCRESP + */ + (PciNestFir_1, bit(19)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[19] + * UNEXPECTEDCRESP + */ + (PciNestFir_2, bit(19)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[20] + * INVALIDCRESP + */ + (PciNestFir_0, bit(20)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[20] + * INVALIDCRESP + */ + (PciNestFir_1, bit(20)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[20] + * INVALIDCRESP + */ + (PciNestFir_2, bit(20)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[21] + * PBUNSUPPORTEDSIZE + */ + (PciNestFir_0, bit(21)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[21] + * PBUNSUPPORTEDSIZE + */ + (PciNestFir_1, bit(21)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[21] + * PBUNSUPPORTEDSIZE + */ + (PciNestFir_2, bit(21)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[22] + * PBUNSUPPORTEDCMD + */ + (PciNestFir_0, bit(22)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[22] + * PBUNSUPPORTEDCMD + */ + (PciNestFir_1, bit(22)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[22] + * PBUNSUPPORTEDCMD + */ + (PciNestFir_2, bit(22)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[23] + * AIB_PE + */ + (PciNestFir_0, bit(23)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[23] + * AIB_PE + */ + (PciNestFir_1, bit(23)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[23] + * AIB_PE + */ + (PciNestFir_2, bit(23)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[24] + * ASB_ERROR + */ + (PciNestFir_0, bit(24)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[24] + * ASB_ERROR + */ + (PciNestFir_1, bit(24)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[24] + * ASB_ERROR + */ + (PciNestFir_2, bit(24)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[25] + * FOREIGN_LINK_FAIL + */ + (PciNestFir_0, bit(25)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[25] + * FOREIGN_LINK_FAIL + */ + (PciNestFir_1, bit(25)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[25] + * FOREIGN_LINK_FAIL + */ + (PciNestFir_2, bit(25)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[26] + * FOREIGN_PB_HANG + */ + (PciNestFir_0, bit(26)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[26] + * FOREIGN_PB_HANG + */ + (PciNestFir_1, bit(26)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[26] + * FOREIGN_PB_HANG + */ + (PciNestFir_2, bit(26)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[27] + * CAPP_ERROR + */ + (PciNestFir_0, bit(27)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[27] + * CAPP_ERROR + */ + (PciNestFir_1, bit(27)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[27] + * CAPP_ERROR + */ + (PciNestFir_2, bit(27)) ? TBDDefaultCallout; + + /** PCINESTFIR_0[28] + * SYNC_SCOM_ERR + */ + (PciNestFir_0, bit(28)) ? TBDDefaultCallout; + + /** PCINESTFIR_1[28] + * SYNC_SCOM_ERR + */ + (PciNestFir_1, bit(28)) ? TBDDefaultCallout; + + /** PCINESTFIR_2[28] + * SYNC_SCOM_ERR + */ + (PciNestFir_2, bit(28)) ? TBDDefaultCallout; +}; + +################################################################################ +# PB Chiplet IOMCFIR_0 +################################################################################ + +# Venice only + +################################################################################ +# PB Chiplet IOMCFIR_1 +################################################################################ + +rule IomcFir_1 +{ + CHECK_STOP: IOMCFIR_1 & ~IOMCFIR_1_MASK & ~IOMCFIR_1_ACT0 & ~IOMCFIR_1_ACT1; + RECOVERABLE: IOMCFIR_1 & ~IOMCFIR_1_MASK & ~IOMCFIR_1_ACT0 & IOMCFIR_1_ACT1; +}; + +group gIomcFir_1 filter singlebit +{ +# FIXME:A temp fix to generate error signature by setting bit 0 + /** IOMCFIR_1[0] + * ERROR + */ + (IomcFir_1, bit(0)) ? TBDDefaultCallout; +}; + +################################################################################ +# Actions specific to PB chiplet +################################################################################ + + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_acts_PCIE.rule b/src/usr/diag/prdf/plat/pegasus/Proc_acts_PCIE.rule new file mode 100644 index 000000000..b527c24c0 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_acts_PCIE.rule @@ -0,0 +1,1476 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_acts_PCIE.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# PCIE Chiplet Registers +################################################################################ + +rule PcieChipletFir +{ + CHECK_STOP: + (PCIE_CHIPLET_CS_FIR & `1EE0000000000000`) & ~PCIE_CHIPLET_FIR_MASK; + RECOVERABLE: + ((PCIE_CHIPLET_RE_FIR >> 2) & `1EE0000000000000`) & ~PCIE_CHIPLET_FIR_MASK; +}; + +group gPcieChipletFir filter singlebit +{ + /** PCIE_CHIPLET_FIR[3] + * Attention from LFIR + */ + (PcieChipletFir, bit(3)) ? analyze(gPcieLFir); + + /** PCIE_CHIPLET_FIR[4|5|6] + * Attention from PCICLOCKFIR (0-2) + */ + (PcieChipletFir, bit(4|5|6)) ? analyze(gPciClockFir); + + /** PCIE_CHIPLET_FIR[8] + * Attention from PBFFIR + */ + (PcieChipletFir, bit(8)) ? analyze(gPbfFir); + + /** PCIE_CHIPLET_FIR[9|10] + * Attention from IOPPCIFIR (0-1) + */ + (PcieChipletFir, bit(9|10)) ? analyze(gIopPciFir); +}; + +rule PcieChipletSpa +{ + SPECIAL: PCIE_CHIPLET_SPA & ~PCIE_CHIPLET_SPA_MASK; +}; + +group gPcieChipletSpa filter singlebit +{ + /** PCIE_CHIPLET_SPA[0] + * Attention from PBFFIR + */ + (PcieChipletSpa, bit(0)) ? analyze(gPbfFir); +}; + +################################################################################ +# PCIE Chiplet LFIR +################################################################################ + +rule PcieLFir +{ + CHECK_STOP: PCIE_LFIR & ~PCIE_LFIR_MASK & ~PCIE_LFIR_ACT0 & ~PCIE_LFIR_ACT1; + RECOVERABLE: PCIE_LFIR & ~PCIE_LFIR_MASK & ~PCIE_LFIR_ACT0 & PCIE_LFIR_ACT1; +}; + +group gPcieLFir filter singlebit +{ + /** PCIE_LFIR[0] + * CFIR internal parity error + */ + (PcieLFir, bit(0)) ? TBDDefaultCallout; + + /** PCIE_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (PcieLFir, bit(1)) ? TBDDefaultCallout; + + /** PCIE_LFIR[2] + * Local errors from CC (PCB error) + */ + (PcieLFir, bit(2)) ? TBDDefaultCallout; + + /** PCIE_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (PcieLFir, bit(3)) ? TBDDefaultCallout; + + /** PCIE_LFIR[4] + * Local errors from PSC (PCB error) + */ + (PcieLFir, bit(4)) ? TBDDefaultCallout; + + /** PCIE_LFIR[5] + * Local errors from PSC (parity error) + */ + (PcieLFir, bit(5)) ? TBDDefaultCallout; + + /** PCIE_LFIR[6] + * Local errors from Thermal (parity error) + */ + (PcieLFir, bit(6)) ? TBDDefaultCallout; + + /** PCIE_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (PcieLFir, bit(7)) ? TBDDefaultCallout; + + /** PCIE_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (PcieLFir, bit(8|9)) ? TBDDefaultCallout; + + /** PCIE_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (PcieLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# PCIE Chiplet PCICLOCKFIRs +################################################################################ + +# TODO - All these FIRs should have the same bit definition. Idealy, we will +# only want to have one copy of the bit definition. Unfortuately, the +# rule code parser does not have the support for something like this. +# Maybe we can add this as a later feature. + +rule PciClockFir_0 +{ + CHECK_STOP: + PCICLOCKFIR_0 & ~PCICLOCKFIR_0_MASK & ~PCICLOCKFIR_0_ACT0 & ~PCICLOCKFIR_0_ACT1; + RECOVERABLE: + PCICLOCKFIR_0 & ~PCICLOCKFIR_0_MASK & ~PCICLOCKFIR_0_ACT0 & PCICLOCKFIR_0_ACT1; +}; + +rule PciClockFir_1 +{ + CHECK_STOP: + PCICLOCKFIR_1 & ~PCICLOCKFIR_1_MASK & ~PCICLOCKFIR_1_ACT0 & ~PCICLOCKFIR_1_ACT1; + RECOVERABLE: + PCICLOCKFIR_1 & ~PCICLOCKFIR_1_MASK & ~PCICLOCKFIR_1_ACT0 & PCICLOCKFIR_1_ACT1; +}; + +rule PciClockFir_2 +{ + CHECK_STOP: + PCICLOCKFIR_2 & ~PCICLOCKFIR_2_MASK & ~PCICLOCKFIR_2_ACT0 & ~PCICLOCKFIR_2_ACT1; + RECOVERABLE: + PCICLOCKFIR_2 & ~PCICLOCKFIR_2_MASK & ~PCICLOCKFIR_2_ACT0 & PCICLOCKFIR_2_ACT1; +}; + +group gPciClockFir filter singlebit +{ + /** PCICLOCKFIR_0[0] + * AIB_COMMAND_INVALID + */ + (PciClockFir_0, bit(0)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[0] + * AIB_COMMAND_INVALID + */ + (PciClockFir_1, bit(0)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[0] + * AIB_COMMAND_INVALID + */ + (PciClockFir_2, bit(0)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[1] + * AIB_ADDRESSING_ERROR + */ + (PciClockFir_0, bit(1)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[1] + * AIB_ADDRESSING_ERROR + */ + (PciClockFir_1, bit(1)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[1] + * AIB_ADDRESSING_ERROR + */ + (PciClockFir_2, bit(1)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[2] + * AIB_SIZE_ALIGNMENT_ERROR + */ + (PciClockFir_0, bit(2)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[2] + * AIB_SIZE_ALIGNMENT_ERROR + */ + (PciClockFir_1, bit(2)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[2] + * AIB_SIZE_ALIGNMENT_ERROR + */ + (PciClockFir_2, bit(2)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[3] + * Reserved field (Access type is Reserved00) + */ + (PciClockFir_0, bit(3)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[3] + * Reserved field (Access type is Reserved00) + */ + (PciClockFir_1, bit(3)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[3] + * Reserved field (Access type is Reserved00) + */ + (PciClockFir_2, bit(3)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[4] + * AIB_CMD_CTRLS_PARITY_ERROR + */ + (PciClockFir_0, bit(4)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[4] + * AIB_CMD_CTRLS_PARITY_ERROR + */ + (PciClockFir_1, bit(4)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[4] + * AIB_CMD_CTRLS_PARITY_ERROR + */ + (PciClockFir_2, bit(4)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[5] + * AIB_DATA_CTRLS_PARITY_ERROR + */ + (PciClockFir_0, bit(5)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[5] + * AIB_DATA_CTRLS_PARITY_ERROR + */ + (PciClockFir_1, bit(5)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[5] + * AIB_DATA_CTRLS_PARITY_ERROR + */ + (PciClockFir_2, bit(5)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[6] + * MMIO_BAR_DOMAIN_TABLE_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_0, bit(6)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[6] + * MMIO_BAR_DOMAIN_TABLE_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_1, bit(6)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[6] + * MMIO_BAR_DOMAIN_TABLE_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_2, bit(6)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[7] + * MMIO_BAR_DOMAIN_TABLE_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_0, bit(7)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[7] + * MMIO_BAR_DOMAIN_TABLE_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_1, bit(7)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[7] + * MMIO_BAR_DOMAIN_TABLE_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_2, bit(7)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[8] + * AIB_BUS_PARITY_ERROR + */ + (PciClockFir_0, bit(8)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[8] + * AIB_BUS_PARITY_ERROR + */ + (PciClockFir_1, bit(8)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[8] + * AIB_BUS_PARITY_ERROR + */ + (PciClockFir_2, bit(8)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[9] + * Reserved field (Access type is Reserved01) + */ + (PciClockFir_0, bit(9)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[9] + * Reserved field (Access type is Reserved01) + */ + (PciClockFir_1, bit(9)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[9] + * Reserved field (Access type is Reserved01) + */ + (PciClockFir_2, bit(9)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[10] + * AIB_DATA_CTRLS_SEQUENCE_ERROR + */ + (PciClockFir_0, bit(10)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[10] + * AIB_DATA_CTRLS_SEQUENCE_ERROR + */ + (PciClockFir_1, bit(10)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[10] + * AIB_DATA_CTRLS_SEQUENCE_ERROR + */ + (PciClockFir_2, bit(10)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[11] + * MMIO_CMD_DATA_PARITY_ERROR + */ + (PciClockFir_0, bit(11)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[11] + * MMIO_CMD_DATA_PARITY_ERROR + */ + (PciClockFir_1, bit(11)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[11] + * MMIO_CMD_DATA_PARITY_ERROR + */ + (PciClockFir_2, bit(11)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[12] + * PCI_E_CFG_IO_WRITE_CA_OR_UR_RESPONSE + */ + (PciClockFir_0, bit(12)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[12] + * PCI_E_CFG_IO_WRITE_CA_OR_UR_RESPONSE + */ + (PciClockFir_1, bit(12)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[12] + * PCI_E_CFG_IO_WRITE_CA_OR_UR_RESPONSE + */ + (PciClockFir_2, bit(12)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[13] + * GBIF_TIMEOUT + */ + (PciClockFir_0, bit(13)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[13] + * GBIF_TIMEOUT + */ + (PciClockFir_1, bit(13)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[13] + * GBIF_TIMEOUT + */ + (PciClockFir_2, bit(13)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[14] + * MMIO_PENDING_ERROR + */ + (PciClockFir_0, bit(14)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[14] + * MMIO_PENDING_ERROR + */ + (PciClockFir_1, bit(14)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[14] + * MMIO_PENDING_ERROR + */ + (PciClockFir_2, bit(14)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[15] + * AIB_RX_DATA_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_0, bit(15)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[15] + * AIB_RX_DATA_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_1, bit(15)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[15] + * AIB_RX_DATA_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_2, bit(15)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[16] + * AIB_RX_DATA_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_0, bit(16)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[16] + * AIB_RX_DATA_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_1, bit(16)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[16] + * AIB_RX_DATA_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_2, bit(16)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[17] + * DCT_TABLE_ERROR + */ + (PciClockFir_0, bit(17)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[17] + * DCT_TABLE_ERROR + */ + (PciClockFir_1, bit(17)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[17] + * DCT_TABLE_ERROR + */ + (PciClockFir_2, bit(17)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[18] + * DMA_RESPONSE_DATA_ERROR + */ + (PciClockFir_0, bit(18)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[18] + * DMA_RESPONSE_DATA_ERROR + */ + (PciClockFir_1, bit(18)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[18] + * DMA_RESPONSE_DATA_ERROR + */ + (PciClockFir_2, bit(18)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[19] + * DMA_RESPONSE_TIMEOUT + */ + (PciClockFir_0, bit(19)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[19] + * DMA_RESPONSE_TIMEOUT + */ + (PciClockFir_1, bit(19)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[19] + * DMA_RESPONSE_TIMEOUT + */ + (PciClockFir_2, bit(19)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[20] + * TCE_RD_RESPONSE_ERROR_INDICATION + */ + (PciClockFir_0, bit(20)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[20] + * TCE_RD_RESPONSE_ERROR_INDICATION + */ + (PciClockFir_1, bit(20)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[20] + * TCE_RD_RESPONSE_ERROR_INDICATION + */ + (PciClockFir_2, bit(20)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[21] + * CFG_RETRY_TIMEOUT_ERROR + */ + (PciClockFir_0, bit(21)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[21] + * CFG_RETRY_TIMEOUT_ERROR + */ + (PciClockFir_1, bit(21)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[21] + * CFG_RETRY_TIMEOUT_ERROR + */ + (PciClockFir_2, bit(21)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[22] + * CFG_ACCESS_ERROR + */ + (PciClockFir_0, bit(22)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[22] + * CFG_ACCESS_ERROR + */ + (PciClockFir_1, bit(22)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[22] + * CFG_ACCESS_ERROR + */ + (PciClockFir_2, bit(22)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[24] + * RGA_MACRO_INTERNAL_ERROR + */ + (PciClockFir_0, bit(24)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[24] + * RGA_MACRO_INTERNAL_ERROR + */ + (PciClockFir_1, bit(24)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[24] + * RGA_MACRO_INTERNAL_ERROR + */ + (PciClockFir_2, bit(24)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[25] + * PHB3_REGISTER_PARITY_ERROR_RSM_ONE_HOT_ERROR + */ + (PciClockFir_0, bit(25)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[25] + * PHB3_REGISTER_PARITY_ERROR_RSM_ONE_HOT_ERROR + */ + (PciClockFir_1, bit(25)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[25] + * PHB3_REGISTER_PARITY_ERROR_RSM_ONE_HOT_ERROR + */ + (PciClockFir_2, bit(25)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[26] + * PHB3_REGISTER_ACCESS_ERROR + */ + (PciClockFir_0, bit(26)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[26] + * PHB3_REGISTER_ACCESS_ERROR + */ + (PciClockFir_1, bit(26)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[26] + * PHB3_REGISTER_ACCESS_ERROR + */ + (PciClockFir_2, bit(26)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[27] + * PAPR_OUTBOUND_INJECTION_ERROR_TRIGGERED + */ + (PciClockFir_0, bit(27)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[27] + * PAPR_OUTBOUND_INJECTION_ERROR_TRIGGERED + */ + (PciClockFir_1, bit(27)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[27] + * PAPR_OUTBOUND_INJECTION_ERROR_TRIGGERED + */ + (PciClockFir_2, bit(27)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[28] + * PCI_E_CORE_FATAL_ERROR + */ + (PciClockFir_0, bit(28)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[28] + * PCI_E_CORE_FATAL_ERROR + */ + (PciClockFir_1, bit(28)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[28] + * PCI_E_CORE_FATAL_ERROR + */ + (PciClockFir_2, bit(28)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[29] + * PCI_E_INBOUND_TLP_ECRC_ERROR + */ + (PciClockFir_0, bit(29)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[29] + * PCI_E_INBOUND_TLP_ECRC_ERROR + */ + (PciClockFir_1, bit(29)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[29] + * PCI_E_INBOUND_TLP_ECRC_ERROR + */ + (PciClockFir_2, bit(29)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[30] + * PCI_E_UTL_PRIMARY_INTERRUPT + */ + (PciClockFir_0, bit(30)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[30] + * PCI_E_UTL_PRIMARY_INTERRUPT + */ + (PciClockFir_1, bit(30)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[30] + * PCI_E_UTL_PRIMARY_INTERRUPT + */ + (PciClockFir_2, bit(30)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[31] + * PCI_E_UTL_SECONDARY_INTERRUPT + */ + (PciClockFir_0, bit(31)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[31] + * PCI_E_UTL_SECONDARY_INTERRUPT + */ + (PciClockFir_1, bit(31)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[31] + * PCI_E_UTL_SECONDARY_INTERRUPT + */ + (PciClockFir_2, bit(31)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[32] + * IODA_FATAL_ERROR + */ + (PciClockFir_0, bit(32)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[32] + * IODA_FATAL_ERROR + */ + (PciClockFir_1, bit(32)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[32] + * IODA_FATAL_ERROR + */ + (PciClockFir_2, bit(32)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[33] + * IODA_MSI_PE_MISMATCH_ERROR + */ + (PciClockFir_0, bit(33)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[33] + * IODA_MSI_PE_MISMATCH_ERROR + */ + (PciClockFir_1, bit(33)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[33] + * IODA_MSI_PE_MISMATCH_ERROR + */ + (PciClockFir_2, bit(33)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[34] + * IODA_IVT_ERROR + */ + (PciClockFir_0, bit(34)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[34] + * IODA_IVT_ERROR + */ + (PciClockFir_1, bit(34)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[34] + * IODA_IVT_ERROR + */ + (PciClockFir_2, bit(34)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[35] + * IODA_TVT_ERROR + */ + (PciClockFir_0, bit(35)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[35] + * IODA_TVT_ERROR + */ + (PciClockFir_1, bit(35)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[35] + * IODA_TVT_ERROR + */ + (PciClockFir_2, bit(35)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[36] + * IODA_TVT_ADDRESS_RANGE_ERROR + */ + (PciClockFir_0, bit(36)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[36] + * IODA_TVT_ADDRESS_RANGE_ERROR + */ + (PciClockFir_1, bit(36)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[36] + * IODA_TVT_ADDRESS_RANGE_ERROR + */ + (PciClockFir_2, bit(36)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[37] + * IODA_PAGE_ACCESS_ERROR + */ + (PciClockFir_0, bit(37)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[37] + * IODA_PAGE_ACCESS_ERROR + */ + (PciClockFir_1, bit(37)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[37] + * IODA_PAGE_ACCESS_ERROR + */ + (PciClockFir_2, bit(37)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[38] + * CFG_PAPR_INJECTION_TRIGGERED + */ + (PciClockFir_0, bit(38)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[38] + * CFG_PAPR_INJECTION_TRIGGERED + */ + (PciClockFir_1, bit(38)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[38] + * CFG_PAPR_INJECTION_TRIGGERED + */ + (PciClockFir_2, bit(38)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[39] + * PAPR_INBOUND_INJECTION_ERROR_TRIGGERED + */ + (PciClockFir_0, bit(39)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[39] + * PAPR_INBOUND_INJECTION_ERROR_TRIGGERED + */ + (PciClockFir_1, bit(39)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[39] + * PAPR_INBOUND_INJECTION_ERROR_TRIGGERED + */ + (PciClockFir_2, bit(39)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[40] + * INBOUND_FATAL_ERROR + */ + (PciClockFir_0, bit(40)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[40] + * INBOUND_FATAL_ERROR + */ + (PciClockFir_1, bit(40)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[40] + * INBOUND_FATAL_ERROR + */ + (PciClockFir_2, bit(40)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[41] + * MSI_ADDRESS_ALIGNMENT_ERROR + */ + (PciClockFir_0, bit(41)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[41] + * MSI_ADDRESS_ALIGNMENT_ERROR + */ + (PciClockFir_1, bit(41)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[41] + * MSI_ADDRESS_ALIGNMENT_ERROR + */ + (PciClockFir_2, bit(41)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[42] + * INTERNAL_BAR_DISABLED_ERROR + */ + (PciClockFir_0, bit(42)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[42] + * INTERNAL_BAR_DISABLED_ERROR + */ + (PciClockFir_1, bit(42)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[42] + * INTERNAL_BAR_DISABLED_ERROR + */ + (PciClockFir_2, bit(42)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[43] + * GBIF_INBOUND_COMPLETION_DONE_ERROR + */ + (PciClockFir_0, bit(43)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[43] + * GBIF_INBOUND_COMPLETION_DONE_ERROR + */ + (PciClockFir_1, bit(43)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[43] + * GBIF_INBOUND_COMPLETION_DONE_ERROR + */ + (PciClockFir_2, bit(43)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[44] + * PCT_TIMEOUT_ERROR + */ + (PciClockFir_0, bit(44)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[44] + * PCT_TIMEOUT_ERROR + */ + (PciClockFir_1, bit(44)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[44] + * PCT_TIMEOUT_ERROR + */ + (PciClockFir_2, bit(44)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[45] + * TCE_REQUEST_TIMEOUT_ERROR + */ + (PciClockFir_0, bit(45)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[45] + * TCE_REQUEST_TIMEOUT_ERROR + */ + (PciClockFir_1, bit(45)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[45] + * TCE_REQUEST_TIMEOUT_ERROR + */ + (PciClockFir_2, bit(45)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[47] + * AIB_TX_TIMEOUT_ERROR + */ + (PciClockFir_0, bit(47)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[47] + * AIB_TX_TIMEOUT_ERROR + */ + (PciClockFir_1, bit(47)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[47] + * AIB_TX_TIMEOUT_ERROR + */ + (PciClockFir_2, bit(47)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[48] + * AIB_TX_TIMEOUT_ERROR + */ + (PciClockFir_0, bit(48)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[48] + * AIB_TX_TIMEOUT_ERROR + */ + (PciClockFir_1, bit(48)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[48] + * AIB_TX_TIMEOUT_ERROR + */ + (PciClockFir_2, bit(48)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[49] + * TCE_REQUEST_UNEXPECTED_RESPONSE_ERROR + */ + (PciClockFir_0, bit(49)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[49] + * TCE_REQUEST_UNEXPECTED_RESPONSE_ERROR + */ + (PciClockFir_1, bit(49)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[49] + * TCE_REQUEST_UNEXPECTED_RESPONSE_ERROR + */ + (PciClockFir_2, bit(49)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[50] + * INBOUND_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_0, bit(50)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[50] + * INBOUND_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_1, bit(50)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[50] + * INBOUND_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_2, bit(50)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[51] + * INBOUND_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_0, bit(51)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[51] + * INBOUND_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_1, bit(51)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[51] + * INBOUND_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_2, bit(51)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[52] + * DMA_WRITE_MSI_INTERRUPT_DATA_POISONED_ERROR + */ + (PciClockFir_0, bit(52)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[52] + * DMA_WRITE_MSI_INTERRUPT_DATA_POISONED_ERROR + */ + (PciClockFir_1, bit(52)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[52] + * DMA_WRITE_MSI_INTERRUPT_DATA_POISONED_ERROR + */ + (PciClockFir_2, bit(52)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[55] + * DL_RX_MALFORMED + */ + (PciClockFir_0, bit(55)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[55] + * DL_RX_MALFORMED + */ + (PciClockFir_1, bit(55)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[55] + * DL_RX_MALFORMED + */ + (PciClockFir_2, bit(55)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[56] + * REPLAY_BUFFER_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_0, bit(56)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[56] + * REPLAY_BUFFER_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_1, bit(56)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[56] + * REPLAY_BUFFER_ECC_CORRECTABLE_ERROR + */ + (PciClockFir_2, bit(56)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[57] + * REPLAY_BUFFER_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_0, bit(57)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[57] + * REPLAY_BUFFER_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_1, bit(57)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[57] + * REPLAY_BUFFER_ECC_UNCORRECTABLE_ERROR + */ + (PciClockFir_2, bit(57)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[58] + * AIB_DAT_ERR_INDICATION + */ + (PciClockFir_0, bit(58)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[58] + * AIB_DAT_ERR_INDICATION + */ + (PciClockFir_1, bit(58)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[58] + * AIB_DAT_ERR_INDICATION + */ + (PciClockFir_2, bit(58)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[59] + * AIB_CREDITS_ERROR + */ + (PciClockFir_0, bit(59)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[59] + * AIB_CREDITS_ERROR + */ + (PciClockFir_1, bit(59)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[59] + * AIB_CREDITS_ERROR + */ + (PciClockFir_2, bit(59)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[60] + * CFG_EC08_FATAL_ERROR + */ + (PciClockFir_0, bit(60)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[60] + * CFG_EC08_FATAL_ERROR + */ + (PciClockFir_1, bit(60)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[60] + * CFG_EC08_FATAL_ERROR + */ + (PciClockFir_2, bit(60)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[61] + * CFG_EC08_NONFATAL_ERROR + */ + (PciClockFir_0, bit(61)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[61] + * CFG_EC08_NONFATAL_ERROR + */ + (PciClockFir_1, bit(61)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[61] + * CFG_EC08_NONFATAL_ERROR + */ + (PciClockFir_2, bit(61)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[62] + * CFG_EC08_CORR_ERROR + */ + (PciClockFir_0, bit(62)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[62] + * CFG_EC08_CORR_ERROR + */ + (PciClockFir_1, bit(62)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[62] + * CFG_EC08_CORR_ERROR + */ + (PciClockFir_2, bit(62)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_0[63] + * LEM_FIR_INTERNAL_PARITY_ERROR + */ + (PciClockFir_0, bit(63)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_1[63] + * LEM_FIR_INTERNAL_PARITY_ERROR + */ + (PciClockFir_1, bit(63)) ? TBDDefaultCallout; + + /** PCICLOCKFIR_2[63] + * LEM_FIR_INTERNAL_PARITY_ERROR + */ + (PciClockFir_2, bit(63)) ? TBDDefaultCallout; +}; + +################################################################################ +# PCIE Chiplet PBFFIR +################################################################################ + +rule PbfFir +{ + CHECK_STOP: PBFFIR & ~PBFFIR_MASK & ~PBFFIR_ACT0 & ~PBFFIR_ACT1; + RECOVERABLE: PBFFIR & ~PBFFIR_MASK & ~PBFFIR_ACT0 & PBFFIR_ACT1; + SPECIAL: PBFFIR & ~PBFFIR_MASK & PBFFIR_ACT0 & ~PBFFIR_ACT1; +}; + +group gPbfFir filter singlebit +{ + /** PBFFIR[0|1|2|3] + * F0_MAILBOX_WRITTEN + */ + (PbfFir, bit(0|1|2|3)) ? TBDDefaultCallout; + + /** PBFFIR[4] + * F0_RX_DETECT + */ + (PbfFir, bit(4)) ? TBDDefaultCallout; + + /** PBFFIR[5] + * F0_LINK_TRAINING_DONE + */ + (PbfFir, bit(5)) ? TBDDefaultCallout; + + /** PBFFIR[6] + * F0LINK_TRAINED + */ + (PbfFir, bit(6)) ? TBDDefaultCallout; + + /** PBFFIR[7] + * F0LINK_FIR_ERR + */ + (PbfFir, bit(7)) ? TBDDefaultCallout; + + /** PBFFIR[8] + * F0LINK_FMR_PSR_OBS_ERR + */ + (PbfFir, bit(8)) ? TBDDefaultCallout; + + /** PBFFIR[9] + * F0LINK_FMR_COR_ERR + */ + (PbfFir, bit(9)) ? TBDDefaultCallout; + + /** PBFFIR[10] + * F0LINK_FMR_SUE_ERR + */ + (PbfFir, bit(10)) ? TBDDefaultCallout; + + /** PBFFIR[11] + * F0LINK_FMR_UNC_ERR + */ + (PbfFir, bit(11)) ? TBDDefaultCallout; + + /** PBFFIR[12] + * F0_EQ_FAILED + */ + (PbfFir, bit(12)) ? TBDDefaultCallout; + + /** PBFFIR[13] + * F0_REPLAY_THRESHOLD + */ + (PbfFir, bit(13)) ? TBDDefaultCallout; + + /** PBFFIR[14] + * F0_CRC_ERROR + */ + (PbfFir, bit(14)) ? TBDDefaultCallout; + + /** PBFFIR[15] + * F0_LOST_PACKET + */ + (PbfFir, bit(15)) ? TBDDefaultCallout; + + /** PBFFIR[16] + * F0_NAK_RECEIVED + */ + (PbfFir, bit(16)) ? TBDDefaultCallout; + + /** PBFFIR[17] + * F0_REPLAY_TIMER_ERROR + */ + (PbfFir, bit(17)) ? TBDDefaultCallout; + + /** PBFFIR[18] + * F0_RETRAIN_THRESHOLD + */ + (PbfFir, bit(18)) ? TBDDefaultCallout; + + /** PBFFIR[19] + * F0_REPLAY_NUM_RETRAIN + */ + (PbfFir, bit(19)) ? TBDDefaultCallout; + + /** PBFFIR[20] + * F0_RX_ERROR + */ + (PbfFir, bit(20)) ? TBDDefaultCallout; + + /** PBFFIR[21] + * F0_DESKEW_ERROR + */ + (PbfFir, bit(21)) ? TBDDefaultCallout; + + /** PBFFIR[22] + * F0_FRAMING_ERROR + */ + (PbfFir, bit(22)) ? TBDDefaultCallout; + + /** PBFFIR[23] + * F0_OS_RECEIVED + */ + (PbfFir, bit(23)) ? TBDDefaultCallout; + + /** PBFFIR[24] + * F0_ECC_CE_ERR + */ + (PbfFir, bit(24)) ? TBDDefaultCallout; + + /** PBFFIR[25] + * F0_ECC_UE_ERR + */ + (PbfFir, bit(25)) ? TBDDefaultCallout; + + /** PBFFIR[26] + * F0_RETRAIN_ERR + */ + (PbfFir, bit(26)) ? TBDDefaultCallout; + + /** PBFFIR[27] + * F0_TRAINING_ERR + */ + (PbfFir, bit(27)) ? TBDDefaultCallout; + + /** PBFFIR[28] + * F0_UNRECOV_ERR + */ + (PbfFir, bit(28)) ? TBDDefaultCallout; + + /** PBFFIR[29] + * F0_INTERNAL_ERR + */ + (PbfFir, bit(29)) ? TBDDefaultCallout; + + /** PBFFIR[32|33|34|35] + * F1_MAILBOX_WRITTEN + */ + (PbfFir, bit(32|33|34|35)) ? TBDDefaultCallout; + + /** PBFFIR[36] + * F1_RX_DETECT + */ + (PbfFir, bit(36)) ? TBDDefaultCallout; + + /** PBFFIR[37] + * F1_LINK_TRAINING_DONE + */ + (PbfFir, bit(37)) ? TBDDefaultCallout; + + /** PBFFIR[38] + * F1LINK_TRAINED + */ + (PbfFir, bit(38)) ? TBDDefaultCallout; + + /** PBFFIR[39] + * F1LINK_FIR_ERR + */ + (PbfFir, bit(39)) ? TBDDefaultCallout; + + /** PBFFIR[40] + * F1LINK_FMR_PSR_OBS_ERR + */ + (PbfFir, bit(40)) ? TBDDefaultCallout; + + /** PBFFIR[41] + * F1LINK_FMR_COR_ERR + */ + (PbfFir, bit(41)) ? TBDDefaultCallout; + + /** PBFFIR[42] + * F1LINK_FMR_SUE_ERR + */ + (PbfFir, bit(42)) ? TBDDefaultCallout; + + /** PBFFIR[43] + * F1LINK_FMR_UNC_ERR + */ + (PbfFir, bit(43)) ? TBDDefaultCallout; + + /** PBFFIR[44] + * F1_EQ_FAILED + */ + (PbfFir, bit(44)) ? TBDDefaultCallout; + + /** PBFFIR[45] + * F1_REPLAY_THRESHOLD + */ + (PbfFir, bit(45)) ? TBDDefaultCallout; + + /** PBFFIR[46] + * F1_CRC_ERROR + */ + (PbfFir, bit(46)) ? TBDDefaultCallout; + + /** PBFFIR[47] + * F1_LOST_PACKET + */ + (PbfFir, bit(47)) ? TBDDefaultCallout; + + /** PBFFIR[48] + * F1_NAK_RECEIVED + */ + (PbfFir, bit(48)) ? TBDDefaultCallout; + + /** PBFFIR[49] + * F1_REPLAY_TIMER_ERROR + */ + (PbfFir, bit(49)) ? TBDDefaultCallout; + + /** PBFFIR[50] + * F1_RETRAIN_THRESHOLD + */ + (PbfFir, bit(50)) ? TBDDefaultCallout; + + /** PBFFIR[51] + * F1_REPLAY_NUM_RETRAIN + */ + (PbfFir, bit(51)) ? TBDDefaultCallout; + + /** PBFFIR[52] + * F1_RX_ERROR + */ + (PbfFir, bit(52)) ? TBDDefaultCallout; + + /** PBFFIR[53] + * F1_DESKEW_ERROR + */ + (PbfFir, bit(53)) ? TBDDefaultCallout; + + /** PBFFIR[54] + * F1_FRAMING_ERROR + */ + (PbfFir, bit(54)) ? TBDDefaultCallout; + + /** PBFFIR[55] + * F1_OS_RECEIVED + */ + (PbfFir, bit(55)) ? TBDDefaultCallout; + + /** PBFFIR[56] + * F1_ECC_CE_ERR + */ + (PbfFir, bit(56)) ? TBDDefaultCallout; + + /** PBFFIR[57] + * F1_ECC_UE_ERR + */ + (PbfFir, bit(57)) ? TBDDefaultCallout; + + /** PBFFIR[58] + * F1_RETRAIN_ERR + */ + (PbfFir, bit(58)) ? TBDDefaultCallout; + + /** PBFFIR[59] + * F1_TRAINING_ERR + */ + (PbfFir, bit(59)) ? TBDDefaultCallout; + + /** PBFFIR[60] + * F1_UNRECOV_ERR + */ + (PbfFir, bit(60)) ? TBDDefaultCallout; + + /** PBFFIR[61] + * F1_INTERNAL_ERR + */ + (PbfFir, bit(61)) ? TBDDefaultCallout; +}; + +################################################################################ +# PCIE Chiplet IOPPCIFIRs +################################################################################ + +# TODO - All these FIRs should have the same bit definition. Idealy, we will +# only want to have one copy of the bit definition. Unfortuately, the +# rule code parser does not have the support for something like this. +# Maybe we can add this as a later feature. + +rule IopPciFir_0 +{ + CHECK_STOP: + IOPPCIFIR_0 & ~IOPPCIFIR_0_MASK & ~IOPPCIFIR_0_ACT0 & ~IOPPCIFIR_0_ACT1; + RECOVERABLE: + IOPPCIFIR_0 & ~IOPPCIFIR_0_MASK & ~IOPPCIFIR_0_ACT0 & IOPPCIFIR_0_ACT1; +}; + +rule IopPciFir_1 +{ + CHECK_STOP: + IOPPCIFIR_1 & ~IOPPCIFIR_1_MASK & ~IOPPCIFIR_1_ACT0 & ~IOPPCIFIR_1_ACT1; + RECOVERABLE: + IOPPCIFIR_1 & ~IOPPCIFIR_1_MASK & ~IOPPCIFIR_1_ACT0 & IOPPCIFIR_1_ACT1; +}; + +group gIopPciFir filter singlebit +{ + /** IOPPCIFIR_0[0] + * FIR_STATUS_REG_G2_PLL_CCERR_STATUS + */ + (IopPciFir_0, bit(0)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[0] + * FIR_STATUS_REG_G2_PLL_CCERR_STATUS + */ + (IopPciFir_1, bit(0)) ? TBDDefaultCallout; + + /** IOPPCIFIR_0[1] + * FIR_STATUS_REG_G3_PLL_CCERR_STATUS + */ + (IopPciFir_0, bit(1)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[1] + * FIR_STATUS_REG_G3_PLL_CCERR_STATUS + */ + (IopPciFir_1, bit(1)) ? TBDDefaultCallout; + + /** IOPPCIFIR_0[2] + * FIR_STATUS_REG_TX_A_ERR_STATUS + */ + (IopPciFir_0, bit(2)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[2] + * FIR_STATUS_REG_TX_A_ERR_STATUS + */ + (IopPciFir_1, bit(2)) ? TBDDefaultCallout; + + /** IOPPCIFIR_0[3] + * FIR_STATUS_REG_TX_B_ERR_STATUS + */ + (IopPciFir_0, bit(3)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[3] + * FIR_STATUS_REG_TX_B_ERR_STATUS + */ + (IopPciFir_1, bit(3)) ? TBDDefaultCallout; + + /** IOPPCIFIR_0[4] + * FIR_STATUS_REG_RX_A_ERR_STATUS + */ + (IopPciFir_0, bit(4)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[4] + * FIR_STATUS_REG_RX_A_ERR_STATUS + */ + (IopPciFir_1, bit(4)) ? TBDDefaultCallout; + + /** IOPPCIFIR_0[5] + * FIR_STATUS_REG_RX_B_ERR_STATUS + */ + (IopPciFir_0, bit(5)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[5] + * FIR_STATUS_REG_RX_B_ERR_STATUS + */ + (IopPciFir_1, bit(5)) ? TBDDefaultCallout; + + /** IOPPCIFIR_0[6] + * FIR_STATUS_REG_ZCAL_B_ERR_STATUS + */ + (IopPciFir_0, bit(6)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[6] + * FIR_STATUS_REG_ZCAL_B_ERR_STATUS + */ + (IopPciFir_1, bit(6)) ? TBDDefaultCallout; + + /** IOPPCIFIR_0[7] + * FIR_STATUS_REG_SCOM_FIR_PERR0_STATUS + */ + (IopPciFir_0, bit(7)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[7] + * FIR_STATUS_REG_SCOM_FIR_PERR0_STATUS + */ + (IopPciFir_1, bit(7)) ? TBDDefaultCallout; + + /** IOPPCIFIR_0[8] + * FIR_STATUS_REG_SCOM_FIR_PERR1_STATUS + */ + (IopPciFir_0, bit(8)) ? TBDDefaultCallout; + + /** IOPPCIFIR_1[8] + * FIR_STATUS_REG_SCOM_FIR_PERR1_STATUS + */ + (IopPciFir_1, bit(8)) ? TBDDefaultCallout; +}; + +################################################################################ +# Actions specific to PCIE chiplet +################################################################################ + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_acts_TP.rule b/src/usr/diag/prdf/plat/pegasus/Proc_acts_TP.rule new file mode 100644 index 000000000..5c11eea98 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_acts_TP.rule @@ -0,0 +1,780 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_acts_TP.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# TP Chiplet Registers +################################################################################ + +rule TpChipletFir +{ + CHECK_STOP: + (TP_CHIPLET_CS_FIR & `1FFFF80000000000`) & ~TP_CHIPLET_FIR_MASK; + RECOVERABLE: + ((TP_CHIPLET_RE_FIR >> 2) & `1FFFF80000000000`) & ~TP_CHIPLET_FIR_MASK; +}; + +group gTpChipletFir filter singlebit +{ + /** TP_CHIPLET_FIR[3] + * Attention from TP_LFIR + */ + (TpChipletFir, bit(3)) ? analyze(gTpLFir); + + /** TP_CHIPLET_FIR[4] + * Attention from OCCFIR + */ + (TpChipletFir, bit(4)) ? analyze(gOccFir); + + /** TP_CHIPLET_FIR[5] + * Attention from MCIFIR (MCS 00 Venice only) + */ + (TpChipletFir, bit(5)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[6] + * Attention from MCIFIR (MCS 01 Venice only) + */ + (TpChipletFir, bit(6)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[7] + * Attention from MCIFIR (MCS 10 Venice only) + */ + (TpChipletFir, bit(7)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[8] + * Attention from MCIFIR (MCS 11 Venice only) + */ + (TpChipletFir, bit(8)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[9] + * Attention from MCIFIR (MCS 20) + */ + (TpChipletFir, bit(9)) ? analyzeMcs20; + + /** TP_CHIPLET_FIR[10] + * Attention from MCIFIR (MCS 21) + */ + (TpChipletFir, bit(10)) ? analyzeMcs21; + + /** TP_CHIPLET_FIR[11] + * Attention from MCIFIR (MCS 30) + */ + (TpChipletFir, bit(11)) ? analyzeMcs30; + + /** TP_CHIPLET_FIR[12] + * Attention from MCIFIR (MCS 31) + */ + (TpChipletFir, bit(12)) ? analyzeMcs31; + + /** TP_CHIPLET_FIR[13] + * Attention from IOMCFIR_1 (Venice only) + */ + (TpChipletFir, bit(13)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[14] + * Attention from IOMCFIR_1 + */ + (TpChipletFir, bit(14)) ? analyze(gIomcFir_1); + + /** TP_CHIPLET_FIR[15] + * Attention from PBAMFIR + */ + (TpChipletFir, bit(15)) ? analyze(gPbamFir); + + /** TP_CHIPLET_FIR[16|17|18|19] + * Attention from CS from MC 0-3 + */ + (TpChipletFir, bit(16|17|18|19)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[20] + * Attention from PMCFIR + */ + (TpChipletFir, bit(20)) ? analyze(gPmcFir); +}; + +rule TpChipletSpa +{ + SPECIAL: TP_CHIPLET_SPA & ~TP_CHIPLET_SPA_MASK; +}; + +group gTpChipletSpa filter singlebit +{ + /** TP_CHIPLET_FIR[0] + * Attention from OCCFIR + */ + (TpChipletSpa, bit(0)) ? analyze(gOccFir); + + /** TP_CHIPLET_FIR[1] + * Attention from MCIFIR_00 (Venice only) + */ + (TpChipletSpa, bit(1)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[2] + * Attention from MCIFIR_01 (Venice only) + */ + (TpChipletSpa, bit(2)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[3] + * Attention from MCIFIR_10 (Venice only) + */ + (TpChipletSpa, bit(3)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[4] + * Attention from MCIFIR_10 (Venice only) + */ + (TpChipletSpa, bit(4)) ? defaultMaskedError; + + /** TP_CHIPLET_FIR[5] + * Attention from MCIFIR_20 + */ + (TpChipletSpa, bit(5)) ? analyzeMcs20; + + /** TP_CHIPLET_FIR[6] + * Attention from MCIFIR_21 + */ + (TpChipletSpa, bit(6)) ? analyzeMcs21; + + /** TP_CHIPLET_FIR[7] + * Attention from MCIFIR_30 + */ + (TpChipletSpa, bit(7)) ? analyzeMcs30; + + /** TP_CHIPLET_FIR[8] + * Attention from MCIFIR_31 + */ + (TpChipletSpa, bit(8)) ? analyzeMcs31; +}; + +################################################################################ +# TP Chiplet LFIR +################################################################################ + +rule TpLFir +{ + CHECK_STOP: TP_LFIR & ~TP_LFIR_MASK & ~TP_LFIR_ACT0 & ~TP_LFIR_ACT1; + RECOVERABLE: TP_LFIR & ~TP_LFIR_MASK & ~TP_LFIR_ACT0 & TP_LFIR_ACT1; +}; + +group gTpLFir filter singlebit +{ + /** TP_LFIR[0] + * CFIR internal parity error + */ + (TpLFir, bit(0)) ? TBDDefaultCallout; + + /** TP_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (TpLFir, bit(1)) ? TBDDefaultCallout; + + /** TP_LFIR[2] + * Local errors from CC (PCB error) + */ + (TpLFir, bit(2)) ? TBDDefaultCallout; + + /** TP_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (TpLFir, bit(3)) ? TBDDefaultCallout; + + /** TP_LFIR[4] + * Local errors from PSC (PCB error) + */ + (TpLFir, bit(4)) ? TBDDefaultCallout; + + /** TP_LFIR[5] + * Local errors from PSC (parity error) + */ + (TpLFir, bit(5)) ? TBDDefaultCallout; + + /** TP_LFIR[6] + * Local errors from Thermal (parity error) + */ + (TpLFir, bit(6)) ? TBDDefaultCallout; + + /** TP_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (TpLFir, bit(7)) ? TBDDefaultCallout; + + /** TP_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (TpLFir, bit(8|9)) ? TBDDefaultCallout; + + /** TP_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (TpLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# TP Chiplet OCCFIR +################################################################################ + +rule OccFir +{ + CHECK_STOP: OCCFIR & ~OCCFIR_MASK & ~OCCFIR_ACT0 & ~OCCFIR_ACT1; + RECOVERABLE: OCCFIR & ~OCCFIR_MASK & ~OCCFIR_ACT0 & OCCFIR_ACT1; + SPECIAL: OCCFIR & ~OCCFIR_MASK & OCCFIR_ACT0 & ~OCCFIR_ACT1; +}; + +group gOccFir filter singlebit +{ + /** OCCFIR[0] + * OCC_SCOM_OCCFIR_OCC_FW0 + */ + (OccFir, bit(0)) ? TBDDefaultCallout; + + /** OCCFIR[1] + * OCC_SCOM_OCCFIR_OCC_FW1 + */ + (OccFir, bit(1)) ? TBDDefaultCallout; + + /** OCCFIR[2] + * OCC_SCOM_OCCFIR_OCC_FW2 + */ + (OccFir, bit(2)) ? TBDDefaultCallout; + + /** OCCFIR[3] + * OCC_SCOM_OCCFIR_OCC_FW3 + */ + (OccFir, bit(3)) ? TBDDefaultCallout; + + /** OCCFIR[4] + * OCC_SCOM_OCCFIR_PMC_PORE_SW_MALF + */ + (OccFir, bit(4)) ? TBDDefaultCallout; + + /** OCCFIR[5] + * OCC_SCOM_OCCFIR_PMC_OCC_HB_MALF + */ + (OccFir, bit(5)) ? TBDDefaultCallout; + + /** OCCFIR[6] + * OCC_SCOM_OCCFIR_PORE_GPE0_FATAL_ERR + */ + (OccFir, bit(6)) ? TBDDefaultCallout; + + /** OCCFIR[7] + * OCC_SCOM_OCCFIR_PORE_GPE1_FATAL_ERR + */ + (OccFir, bit(7)) ? TBDDefaultCallout; + + /** OCCFIR[8] + * OCC_SCOM_OCCFIR_OCB_ERROR + */ + (OccFir, bit(8)) ? TBDDefaultCallout; + + /** OCCFIR[9] + * OCC_SCOM_OCCFIR_SRT_UE + */ + (OccFir, bit(9)) ? TBDDefaultCallout; + + /** OCCFIR[10] + * OCC_SCOM_OCCFIR_SRT_CE + */ + (OccFir, bit(10)) ? TBDDefaultCallout; + + /** OCCFIR[11] + * OCC_SCOM_OCCFIR_SRT_READ_ERROR + */ + (OccFir, bit(11)) ? TBDDefaultCallout; + + /** OCCFIR[12] + * OCC_SCOM_OCCFIR_SRT_WRITE_ERROR + */ + (OccFir, bit(12)) ? TBDDefaultCallout; + + /** OCCFIR[13] + * OCC_SCOM_OCCFIR_SRT_DATAOUT_PERR + */ + (OccFir, bit(13)) ? TBDDefaultCallout; + + /** OCCFIR[14] + * OCC_SCOM_OCCFIR_SRT_OCI_WRITE_DATA_PARITY + */ + (OccFir, bit(14)) ? TBDDefaultCallout; + + /** OCCFIR[15] + * OCC_SCOM_OCCFIR_SRT_OCI_BE_PARITY_ER + */ + (OccFir, bit(15)) ? TBDDefaultCallout; + + /** OCCFIR[16] + * OCC_SCOM_OCCFIR_SRT_OCI_ADDR_PARITY_ERR + */ + (OccFir, bit(16)) ? TBDDefaultCallout; + + /** OCCFIR[17] + * OCC_SCOM_OCCFIR_PORE_SW_ERROR_ERR + */ + (OccFir, bit(17)) ? TBDDefaultCallout; + + /** OCCFIR[18] + *OCC_SCOM_OCCFIR_PORE_GPE0_ERROR_ERR + */ + (OccFir, bit(18)) ? TBDDefaultCallout; + + /** OCCFIR[19] + * OCC_SCOM_OCCFIR_PORE_GPE1_ERROR_ERR + */ + (OccFir, bit(19)) ? TBDDefaultCallout; + + /** OCCFIR[20] + * OCC_SCOM_OCCFIR_EXTERNAL_TRAP + */ + (OccFir, bit(20)) ? TBDDefaultCallout; + + /** OCCFIR[21] + * OCC_SCOM_OCCFIR_PPC405_CORE_RESET + */ + (OccFir, bit(21)) ? TBDDefaultCallout; + + /** OCCFIR[22] + * OCC_SCOM_OCCFIR_PPC405_CHIP_RESET + */ + (OccFir, bit(22)) ? TBDDefaultCallout; + + /** OCCFIR[23] + * OCC_SCOM_OCCFIR_PPC405_SYSTEM_RESET + */ + (OccFir, bit(23)) ? TBDDefaultCallout; + + /** OCCFIR[24] + *OCC_SCOM_OCCFIR_PPC405_DBGMSRWE + */ + (OccFir, bit(24)) ? TBDDefaultCallout; + + /** OCCFIR[25] + * OCC_SCOM_OCCFIR_PPC405_DBGSTOPACK + */ + (OccFir, bit(25)) ? TBDDefaultCallout; + + /** OCCFIR[26] + * OCC_SCOM_OCCFIR_OCB_DB_OCI_TIMEOUT + */ + (OccFir, bit(26)) ? TBDDefaultCallout; + + /** OCCFIR[27] + * OCC_SCOM_OCCFIR_OCB_DB_OCI_READ_DATA_PARITY + */ + (OccFir, bit(27)) ? TBDDefaultCallout; + + /** OCCFIR[28] + * OCC_SCOM_OCCFIR_OCB_DB_OCI_SLAVE_ERROR + */ + (OccFir, bit(28)) ? TBDDefaultCallout; + + /** OCCFIR[29] + * OCC_SCOM_OCCFIR_OCB_PIB_ADDR_PARITY_ERR + */ + (OccFir, bit(29)) ? TBDDefaultCallout; + + /** OCCFIR[30] + * OCC_SCOM_OCCFIR_OCB_DB_PIB_DATA_PARITY_ERR + */ + (OccFir, bit(30)) ? TBDDefaultCallout; + + /** OCCFIR[31] + * OCC_SCOM_OCCFIR_OCB_IDC0_ERROR + */ + (OccFir, bit(31)) ? TBDDefaultCallout; + + /** OCCFIR[32] + * OCC_SCOM_OCCFIR_OCB_IDC1_ERROR + */ + (OccFir, bit(32)) ? TBDDefaultCallout; + + /** OCCFIR[33] + * OCC_SCOM_OCCFIR_OCB_IDC2_ERROR + */ + (OccFir, bit(33)) ? TBDDefaultCallout; + + /** OCCFIR[34] + * OCC_SCOM_OCCFIR_OCB_IDC3_ERROR + */ + (OccFir, bit(34)) ? TBDDefaultCallout; + + /** OCCFIR[35] + * OCC_SCOM_OCCFIR_SRT_FSM_ERR + */ + (OccFir, bit(35)) ? TBDDefaultCallout; + + /** OCCFIR[36] + * OCC_SCOM_OCCFIR_JTAGACC_ERR + */ + (OccFir, bit(36)) ? TBDDefaultCallout; + + /** OCCFIR[37] + * OCC_SCOM_OCCFIR_OCB_DW_ERR + */ + (OccFir, bit(37)) ? TBDDefaultCallout; + + /** OCCFIR[38] + * OCC_SCOM_OCCFIR_C405_ECC_UE + */ + (OccFir, bit(38)) ? TBDDefaultCallout; + + /** OCCFIR[39] + * OCC_SCOM_OCCFIR_C405_ECC_CE + */ + (OccFir, bit(39)) ? TBDDefaultCallout; + + /** OCCFIR[40] + * OCC_SCOM_OCCFIR_C405_OCI_MACHINECHECK + */ + (OccFir, bit(40)) ? TBDDefaultCallout; + + /** OCCFIR[41] + * OCC_SCOM_OCCFIR_SRAM_SPARE_DIRECT_ERROR0 + */ + (OccFir, bit(41)) ? TBDDefaultCallout; + + /** OCCFIR[42] + * OCC_SCOM_OCCFIR_SRAM_SPARE_DIRECT_ERROR1 + */ + (OccFir, bit(42)) ? TBDDefaultCallout; + + /** OCCFIR[43] + * OCC_SCOM_OCCFIR_SRAM_SPARE_DIRECT_ERROR2 + */ + (OccFir, bit(43)) ? TBDDefaultCallout; + + /** OCCFIR[44] + * OCC_SCOM_OCCFIR_SRAM_SPARE_DIRECT_ERROR3 + */ + (OccFir, bit(44)) ? TBDDefaultCallout; + + /** OCCFIR[45] + * OCC_SCOM_OCCFIR_SLW_OCISLV_ERR + */ + (OccFir, bit(45)) ? TBDDefaultCallout; + + /** OCCFIR[46] + * OCC_SCOM_OCCFIR_GPE_OCISLV_ERR + */ + (OccFir, bit(46)) ? TBDDefaultCallout; + + /** OCCFIR[47] + * OCC_SCOM_OCCFIR_OCB_OCISLV_ERR + */ + (OccFir, bit(47)) ? TBDDefaultCallout; + + /** OCCFIR[48] + * OCC_SCOM_OCCFIR_C405ICU_M_TIMEOUT + */ + (OccFir, bit(48)) ? TBDDefaultCallout; + + /** OCCFIR[49] + * OCC_SCOM_OCCFIR_C405DCU_M_TIMEOUT + */ + (OccFir, bit(49)) ? TBDDefaultCallout; + + /** OCCFIR[62|63] + * OCC_SCOM_OCCFIR_FIR_PARITY_ERR_DUP + */ + (OccFir, bit(62|63)) ? TBDDefaultCallout; +}; + +################################################################################ +# TP Chiplet PBAMFIR +################################################################################ + +rule PbamFir +{ + CHECK_STOP: PBAMFIR & ~PBAMFIR_MASK & ~PBAMFIR_ACT0 & ~PBAMFIR_ACT1; + RECOVERABLE: PBAMFIR & ~PBAMFIR_MASK & ~PBAMFIR_ACT0 & PBAMFIR_ACT1; +}; + +group gPbamFir filter singlebit +{ + /** PBAMFIR[0] + * INVALID_TRANSFER_SIZE + */ + (PbamFir, bit(0)) ? TBDDefaultCallout; + + /** PBAMFIR[1] + * INVALID_COMMAND + */ + (PbamFir, bit(1)) ? TBDDefaultCallout; + + /** PBAMFIR[2] + * INVALID_ADDRESS_ALIGNMENT + */ + (PbamFir, bit(2)) ? TBDDefaultCallout; + + /** PBAMFIR[3] + * OPB_ERROR + */ + (PbamFir, bit(3)) ? TBDDefaultCallout; + + /** PBAMFIR[4] + * OPB_TIMEOUT + */ + (PbamFir, bit(4)) ? TBDDefaultCallout; + + /** PBAMFIR[5] + * OPB_MASTER_HANG_TIMEOUT + */ + (PbamFir, bit(5)) ? TBDDefaultCallout; + + /** PBAMFIR[6] + * CMD_BUFFER_PAR_ERR + */ + (PbamFir, bit(6)) ? TBDDefaultCallout; + + /** PBAMFIR[7] + * DAT_BUFFER_PAR_ERR + */ + (PbamFir, bit(7)) ? TBDDefaultCallout; + + /** PBAMFIR[10] + * FIR_PARITY_ERR2 + */ + (PbamFir, bit(10)) ? TBDDefaultCallout; + + /** PBAMFIR[11] + * FIR_PARITY_ERR + */ + (PbamFir, bit(11)) ? TBDDefaultCallout; +}; + +################################################################################ +# TP Chiplet PMCFIR +################################################################################ + +rule PmcFir +{ + CHECK_STOP: PMCFIR & ~PMCFIR_MASK & ~PMCFIR_ACT0 & ~PMCFIR_ACT1; + RECOVERABLE: PMCFIR & ~PMCFIR_MASK & ~PMCFIR_ACT0 & PMCFIR_ACT1; +}; + +group gPmcFir filter singlebit +{ + /** PMCFIR[0] + * LFIR_PSTATE_OCI_MASTER_RDERR + */ + (PmcFir, bit(0)) ? TBDDefaultCallout; + + /** PMCFIR[1] + * LFIR_PSTATE_OCI_MASTER_RDDATA_PARITY_ERR + */ + (PmcFir, bit(1)) ? TBDDefaultCallout; + + /** PMCFIR[2] + * LFIR_PSTATE_GPST_CHECKBYTE_ERR + */ + (PmcFir, bit(2)) ? TBDDefaultCallout; + + /** PMCFIR[3] + * LFIR_PSTATE_GACK_TO_ERR + */ + (PmcFir, bit(3)) ? TBDDefaultCallout; + + /** PMCFIR[4] + * LFIR_PSTATE_PIB_MASTER_NONOFFLINE_ERR + */ + (PmcFir, bit(4)) ? TBDDefaultCallout; + + /** PMCFIR[5] + * LFIR_PSTATE_PIB_MASTER_OFFLINE_ERR + */ + (PmcFir, bit(5)) ? TBDDefaultCallout; + + /** PMCFIR[6] + * LFIR_PSTATE_OCI_MASTER_TO_ERR + */ + (PmcFir, bit(6)) ? TBDDefaultCallout; + + /** PMCFIR[7] + * LFIR_PSTATE_INTERCHIP_UE_ERR + */ + (PmcFir, bit(7)) ? TBDDefaultCallout; + + /** PMCFIR[8] + * LFIR_PSTATE_INTERCHIP_ERRORFRAME_ERR + */ + (PmcFir, bit(8)) ? TBDDefaultCallout; + + /** PMCFIR[9] + * LFIR_PSTATE_MS_FSM_ERR + */ + (PmcFir, bit(9)) ? TBDDefaultCallout; + + /** PMCFIR[10] + * LFIR_MS_COMP_PARITY_ERR + */ + (PmcFir, bit(10)) ? TBDDefaultCallout; + + /** PMCFIR[11] + * LFIR_IDLE_PORESW_FATAL_ERR + */ + (PmcFir, bit(11)) ? TBDDefaultCallout; + + /** PMCFIR[12] + * LFIR_IDLE_PORESW_STATUS_RC_ERR + */ + (PmcFir, bit(12)) ? TBDDefaultCallout; + + /** PMCFIR[13] + * LFIR_IDLE_PORESW_STATUS_VALUE_ERR + */ + (PmcFir, bit(13)) ? TBDDefaultCallout; + + /** PMCFIR[14] + * LFIR_IDLE_PORESW_WRITE_WHILE_INACTIVE_ERR + */ + (PmcFir, bit(14)) ? TBDDefaultCallout; + + /** PMCFIR[15] + * LFIR_IDLE_PORESW_TIMEOUT_ERR + */ + (PmcFir, bit(15)) ? TBDDefaultCallout; + + /** PMCFIR[16] + * LFIR_IDLE_OCI_MASTER_WRITE_TIMEOUT_ERR + */ + (PmcFir, bit(16)) ? TBDDefaultCallout; + + /** PMCFIR[17] + * LFIR_IDLE_INTERNAL_ERR + */ + (PmcFir, bit(17)) ? TBDDefaultCallout; + + /** PMCFIR[18] + * LFIR_INT_COMP_PARITY_ERR + */ + (PmcFir, bit(18)) ? TBDDefaultCallout; + + /** PMCFIR[19] + * LFIR_PMC_OCC_HEARTBEAT_TIMEOUT + */ + (PmcFir, bit(19)) ? TBDDefaultCallout; + + /** PMCFIR[20] + * LFIR_SPIVID_CRC_ERROR0 + */ + (PmcFir, bit(20)) ? TBDDefaultCallout; + + /** PMCFIR[21] + * LFIR_SPIVID_CRC_ERROR1 + */ + (PmcFir, bit(21)) ? TBDDefaultCallout; + + /** PMCFIR[22] + * LFIR_SPIVID_CRC_ERROR2 + */ + (PmcFir, bit(22)) ? TBDDefaultCallout; + + /** PMCFIR[23] + * LFIR_SPIVID_RETRY_TIMEOUT + */ + (PmcFir, bit(23)) ? TBDDefaultCallout; + + /** PMCFIR[24] + * LFIR_SPIVID_FSM_ERR + */ + (PmcFir, bit(24)) ? TBDDefaultCallout; + + /** PMCFIR[25] + * LFIR_SPIVID_MAJORITY_DETECTED_A_MINORITY + */ + (PmcFir, bit(25)) ? TBDDefaultCallout; + + /** PMCFIR[26] + * LFIR_O2S_CRC_ERROR0 + */ + (PmcFir, bit(26)) ? TBDDefaultCallout; + + /** PMCFIR[27] + * LFIR_O2S_CRC_ERROR1 + */ + (PmcFir, bit(27)) ? TBDDefaultCallout; + + /** PMCFIR[28] + *LFIR_O2S_CRC_ERROR1 + */ + (PmcFir, bit(28)) ? TBDDefaultCallout; + + /** PMCFIR[29] + * LFIR_O2S_RETRY_TIMEOUT + */ + (PmcFir, bit(29)) ? TBDDefaultCallout; + + /** PMCFIR[30] + * LFIR_O2S_WRITE_WHILE_BRIDGE_BUSY_ERR + */ + (PmcFir, bit(30)) ? TBDDefaultCallout; + + /** PMCFIR[31] + * LFIR_O2S_FSM_ERR + */ + (PmcFir, bit(31)) ? TBDDefaultCallout; + + /** PMCFIR[32] + * LFIR_O2S_MAJORITY_DETECTED_A_MINORITY + */ + (PmcFir, bit(32)) ? TBDDefaultCallout; + + /** PMCFIR[33] + * LFIR_O2P_WRITE_WHILE_BRIDGE_BUSY_ERR + */ + (PmcFir, bit(33)) ? TBDDefaultCallout; + + /** PMCFIR[34] + * LFIR_O2P_FSM_ERR + */ + (PmcFir, bit(34)) ? TBDDefaultCallout; + + /** PMCFIR[35] + * LFIR_OCI_SLAVE_ERR + */ + (PmcFir, bit(35)) ? TBDDefaultCallout; + + /** PMCFIR[36] + * LFIR_IF_COMP_PARITY_ERROR + */ + (PmcFir, bit(36)) ? TBDDefaultCallout; + + /** PMCFIR[47|48] + * FIR_PARITY_ERR + */ + (PmcFir, bit(47|48)) ? TBDDefaultCallout; +}; + +################################################################################ +# Actions specific to TP chiplet +################################################################################ + +/** Analyze connected MCS 20 */ +actionclass analyzeMcs20 { analyze(connected(TYPE_MCS, 4)); }; + +/** Analyze connected MCS 21 */ +actionclass analyzeMcs21 { analyze(connected(TYPE_MCS, 5)); }; + +/** Analyze connected MCS 30 */ +actionclass analyzeMcs30 { analyze(connected(TYPE_MCS, 6)); }; + +/** Analyze connected MCS 31 */ +actionclass analyzeMcs31 { analyze(connected(TYPE_MCS, 7)); }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_acts_XBUS.rule b/src/usr/diag/prdf/plat/pegasus/Proc_acts_XBUS.rule new file mode 100644 index 000000000..d5bb006a0 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_acts_XBUS.rule @@ -0,0 +1,276 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_acts_XBUS.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + +################################################################################ +# XBUS Chiplet Registers +################################################################################ + +rule XbusChipletFir +{ + CHECK_STOP: + (XBUS_CHIPLET_CS_FIR & `1F90000000000000`) & ~XBUS_CHIPLET_FIR_MASK; + RECOVERABLE: + ((XBUS_CHIPLET_RE_FIR >> 2) & `1F90000000000000`) & ~XBUS_CHIPLET_FIR_MASK; +}; + +group gXbusChipletFir filter singlebit +{ + /** XbusChipletFir[3] + * Attention from LFIR + */ + (XbusChipletFir, bit(3)) ? analyze(gXbusLFir); + + /** XbusChipletFir[4] + * Attention from PBENFIR + */ + (XbusChipletFir, bit(4)) ? analyze(gPbenFir); + + /** XbusChipletFir[5] + * Attention from IOXFIR_0 (Venice only) + */ + (XbusChipletFir, bit(5)) ? defaultMaskedError; + + /** XbusChipletFir[6] + * Attention from IOXFIR_1 + */ + (XbusChipletFir, bit(6)) ? analyze(gIoxFir_1); + + /** XbusChipletFir[7] + * Attention from IOXFIR_2 (Venice only) + */ + (XbusChipletFir, bit(7)) ? defaultMaskedError; + + /** XbusChipletFir[8] + * Attention from IOXFIR_3 (Venice only) + */ + (XbusChipletFir, bit(8)) ? defaultMaskedError; +}; + +################################################################################ +# XBUS Chiplet LFIR +################################################################################ + +rule XbusLFir +{ + CHECK_STOP: XBUS_LFIR & ~XBUS_LFIR_MASK & ~XBUS_LFIR_ACT0 & ~XBUS_LFIR_ACT1; + RECOVERABLE: XBUS_LFIR & ~XBUS_LFIR_MASK & ~XBUS_LFIR_ACT0 & XBUS_LFIR_ACT1; +}; + +group gXbusLFir filter singlebit +{ + /** XBUS_LFIR[0] + * CFIR internal parity error + */ + (XbusLFir, bit(0)) ? TBDDefaultCallout; + + /** XBUS_LFIR[1] + * Local errors from GPIO (PCB error) + */ + (XbusLFir, bit(1)) ? TBDDefaultCallout; + + /** XBUS_LFIR[2] + * Local errors from CC (PCB error) + */ + (XbusLFir, bit(2)) ? TBDDefaultCallout; + + /** XBUS_LFIR[3] + * Local errors from CC (OPCG, parity, scan collision, ...) + */ + (XbusLFir, bit(3)) ? TBDDefaultCallout; + + /** XBUS_LFIR[4] + * Local errors from PSC (PCB error) + */ + (XbusLFir, bit(4)) ? TBDDefaultCallout; + + /** XBUS_LFIR[5] + * Local errors from PSC (parity error) + */ + (XbusLFir, bit(5)) ? TBDDefaultCallout; + + /** XBUS_LFIR[6] + * Local errors from Thermal (parity error) + */ + (XbusLFir, bit(6)) ? TBDDefaultCallout; + + /** XBUS_LFIR[7] + * Local errors from Thermal (PCB error) + */ + (XbusLFir, bit(7)) ? TBDDefaultCallout; + + /** XBUS_LFIR[8|9] + * Local errors from Thermal (Trip error) + */ + (XbusLFir, bit(8|9)) ? TBDDefaultCallout; + + /** XBUS_LFIR[10|11] + * Local errors from Trace Array ( error) + */ + (XbusLFir, bit(10|11)) ? TBDDefaultCallout; +}; + +################################################################################ +# XBUS Chiplet PBENFIR +################################################################################ + +rule PbenFir +{ + CHECK_STOP: PBENFIR & ~PBENFIR_MASK & ~PBENFIR_ACT0 & ~PBENFIR_ACT1; + RECOVERABLE: PBENFIR & ~PBENFIR_MASK & ~PBENFIR_ACT0 & PBENFIR_ACT1; +}; + +group gPbenFir filter singlebit +{ + /** PBENFIR[0] + * X0_LINK_RCV_CE: x0 link rcv ce + */ + (PbenFir, bit(0)) ? TBDDefaultCallout; + + /** PBENFIR[1] + * X0_LINK_RCV_DERR: x0 link rcv derr + */ + (PbenFir, bit(1)) ? TBDDefaultCallout; + + /** PBENFIR[2] + * X0_LINK_RCV_UE: x0 link rcv ue + */ + (PbenFir, bit(2)) ? TBDDefaultCallout; + + /** PBENFIR[3] + * X1_LINK_RCV_CE: x1 link rcv ce + */ + (PbenFir, bit(3)) ? TBDDefaultCallout; + + /** PBENFIR[4] + * X1_LINK_RCV_DERR: x1 link rcv derr + */ + (PbenFir, bit(4)) ? TBDDefaultCallout; + + /** PBENFIR[5] + * X1_LINK_RCV_UE: x1 link rcv ue + */ + (PbenFir, bit(5)) ? TBDDefaultCallout; + + /** PBENFIR[6] + * X2_LINK_RCV_CE: x2 link rcv ce + */ + (PbenFir, bit(6)) ? TBDDefaultCallout; + + /** PBENFIR[7] + * X2_LINK_RCV_DERR: x2 link rcv derr + */ + (PbenFir, bit(7)) ? TBDDefaultCallout; + + /** PBENFIR[8] + * X2_LINK_RCV_UE: x2 link rcv ue + */ + (PbenFir, bit(8)) ? TBDDefaultCallout; + + /** PBENFIR[9] + * X3_LINK_RCV_CE: x3 link rcv ce + */ + (PbenFir, bit(9)) ? TBDDefaultCallout; + + /** PBENFIR[10] + * X3_LINK_RCV_DERR: x3 link rcv derr + */ + (PbenFir, bit(10)) ? TBDDefaultCallout; + + /** PBENFIR[11] + * X3_LINK_RCV_UE: x3 link rcv ue + */ + (PbenFir, bit(11)) ? TBDDefaultCallout; + + /** PBENFIR[12] + * X_LINK_SND_CE: x link rcv ce + */ + (PbenFir, bit(12)) ? TBDDefaultCallout; + + /** PBENFIR[13] + * X_LINK_SND_SUE: x link rcv sue + */ + (PbenFir, bit(13)) ? TBDDefaultCallout; + + /** PBENFIR[14] + * X_LINK_SND_UE: x link rcv ue + */ + (PbenFir, bit(14)) ? TBDDefaultCallout; + + /** PBENFIR[15] + * X_LINK_CR_OVERFLOW: x link command/response/data buffer overflow + */ + (PbenFir, bit(15)) ? TBDDefaultCallout; + + /** PBENFIR[16] + * X0_LINK_FMR_ERR: x0 link framer error + */ + (PbenFir, bit(16)) ? TBDDefaultCallout; + + /** PBENFIR[17] + * X1_LINK_FMR_ERR: x1 link framer error + */ + (PbenFir, bit(17)) ? TBDDefaultCallout; + + /** PBENFIR[18] + * X2_LINK_FMR_ERR: x2 link framer error + */ + (PbenFir, bit(18)) ? TBDDefaultCallout; + + /** PBENFIR[19] + * X3_LINK_FMR_ERR: x3 link framer error + */ + (PbenFir, bit(19)) ? TBDDefaultCallout; + + /** PBENFIR[20] + * X_LINK_PSR_ERR: x link parser error + */ + (PbenFir, bit(20)) ? TBDDefaultCallout; + + /** PBENFIR[36] + * FIR_SCOM_ERR: pben iox fir_scom_err + */ + (PbenFir, bit(36)) ? TBDDefaultCallout; +}; + +################################################################################ +# XBUS Chiplet IOXFIR_1 +################################################################################ + +rule IoxFir_1 +{ + CHECK_STOP: IOXFIR_1 & ~IOXFIR_1_MASK & ~IOXFIR_1_ACT0 & ~IOXFIR_1_ACT1; + RECOVERABLE: IOXFIR_1 & ~IOXFIR_1_MASK & ~IOXFIR_1_ACT0 & IOXFIR_1_ACT1; +}; + +group gIoxFir_1 filter singlebit +{ + /** IOXFIR_1[0] + * TBD + */ + (IoxFir_1, bit(0)) ? TBDDefaultCallout; +}; + +################################################################################ +# Actions specific to XBUS chiplet +################################################################################ + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_regs_ABUS.rule b/src/usr/diag/prdf/plat/pegasus/Proc_regs_ABUS.rule new file mode 100644 index 000000000..8a0521daa --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_regs_ABUS.rule @@ -0,0 +1,160 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_regs_ABUS.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + + ############################################################################ + # ABUS Chiplet Registers + ############################################################################ + + register ABUS_CHIPLET_CS_FIR + { + name "ES.PBES_WRAP_TOP.TPC.XFIR"; + scomaddr 0x08040000; + capture group default; + }; + + register ABUS_CHIPLET_RE_FIR + { + name "ES.PBES_WRAP_TOP.TPC.RFIR"; + scomaddr 0x08040001; + capture group default; + }; + + register ABUS_CHIPLET_FIR_MASK + { + name "ES.PBES_WRAP_TOP.TPC.FIR_MASK"; + scomaddr 0x08040002; + capture type secondary; + capture group default; + }; + + ############################################################################ + # ABUS Chiplet LFIR + ############################################################################ + + register ABUS_LFIR + { + name "ES.PBES_WRAP_TOP.TPC.LOCAL_FIR"; + scomaddr 0x0804000a; + reset (&, 0x0804000b); + mask (|, 0x0804000f); + capture group default; + }; + + register ABUS_LFIR_MASK + { + name "ES.PBES_WRAP_TOP.TPC.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x0804000d; + capture type secondary; + capture group default; + }; + + register ABUS_LFIR_ACT0 + { + name "ES.PBES_WRAP_TOP.TPC.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x08040010; + capture type secondary; + capture group default; + }; + + register ABUS_LFIR_ACT1 + { + name "ES.PBES_WRAP_TOP.TPC.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x08040011; + capture type secondary; + capture group default; + }; + + ############################################################################ + # ABUS Chiplet PBESFIR + ############################################################################ + + register PBESFIR + { + name "ES.PBES_WRAP_TOP.PBES_TOP.MISC_IO.SCOM.PB_IOA_FIR_REG"; + scomaddr 0x08010800; + reset (&, 0x08010801); + mask (|, 0x08010805); + capture group default; + }; + + register PBESFIR_MASK + { + name "ES.PBES_WRAP_TOP.PBES_TOP.MISC_IO.SCOM.PB_IOA_FIR_MASK_REG"; + scomaddr 0x08010803; + capture type secondary; + capture group default; + }; + + register PBESFIR_ACT0 + { + name "ES.PBES_WRAP_TOP.PBES_TOP.MISC_IO.SCOM.PB_IOA_FIR_ACTION0_REG"; + scomaddr 0x08010806; + capture type secondary; + capture group default; + }; + + register PBESFIR_ACT1 + { + name "ES.PBES_WRAP_TOP.PBES_TOP.MISC_IO.SCOM.PB_IOA_FIR_ACTION1_REG"; + scomaddr 0x08010807; + capture type secondary; + capture group default; + }; + + ############################################################################ + # ABUS Chiplet IOAFIR + ############################################################################ + + register IOAFIR + { + name "ABUS.BUSCTL.SCOM.FIR_REG"; + scomaddr 0x08010c00; + reset (&, 0x08010c01); + mask (|, 0x08010c05); + capture group default; + }; + + register IOAFIR_MASK + { + name "ABUS.BUSCTL.SCOM.FIR_MASK_REG"; + scomaddr 0x08010c03; + capture type secondary; + capture group default; + }; + + register IOAFIR_ACT0 + { + name "ABUS.BUSCTL.SCOM.FIR_ACTION0_REG"; + scomaddr 0x08010c06; + capture type secondary; + capture group default; + }; + + register IOAFIR_ACT1 + { + name "ABUS.BUSCTL.SCOM.FIR_ACTION1_REG"; + scomaddr 0x08010c07; + capture type secondary; + capture group default; + }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_regs_PB.rule b/src/usr/diag/prdf/plat/pegasus/Proc_regs_PB.rule new file mode 100644 index 000000000..0e24ce898 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_regs_PB.rule @@ -0,0 +1,754 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_regs_PB.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + + ############################################################################ + # PB Chiplet Registers + ############################################################################ + + register PB_CHIPLET_CS_FIR + { + name "EH.TPC.XFIR"; + scomaddr 0x02040000; + capture group default; + }; + + register PB_CHIPLET_RE_FIR + { + name "EH.TPC.RFIR"; + scomaddr 0x02040001; + capture group default; + }; + + register PB_CHIPLET_FIR_MASK + { + name "EH.TPC.FIR_MASK"; + scomaddr 0x02040002; + capture type secondary; + capture group default; + }; + + register PB_CHIPLET_SPA + { + name "EH.TPC.EPS.FIR.SPATTN"; + scomaddr 0x02040004; + capture group default; + }; + + register PB_CHIPLET_SPA_MASK + { + name "EH.TPC.EPS.FIR.SPA_MASK"; + scomaddr 0x02040007; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet LFIR + ############################################################################ + + register PB_LFIR + { + name "EH.TPC.LOCAL_FIR"; + scomaddr 0x0204000a; + reset (&, 0x0204000b); + mask (|, 0x0204000f); + capture group default; + }; + + register PB_LFIR_MASK + { + name "EH.TPC.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x0204000d; + capture type secondary; + capture group default; + }; + + register PB_LFIR_ACT0 + { + name "EH.TPC.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x02040010; + capture type secondary; + capture group default; + }; + + register PB_LFIR_ACT1 + { + name "EH.TPC.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x02040011; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet NXDMAENGFIR + ############################################################################ + + register NXDMAENGFIR + { + name "EN.NX.DBG.NX_DMA_ENG_FIR"; + scomaddr 0x02013100; + reset (&, 0x02013101); + mask (|, 0x02013105); + capture group default; + }; + + register NXDMAENGFIR_MASK + { + name "EN.NX.DBG.NX_DMA_ENG_FIR_MASK"; + scomaddr 0x02013103; + capture type secondary; + capture group default; + }; + + register NXDMAENGFIR_ACT0 + { + name "EN.NX.DBG.NX_DMA_ENG_FIR_ACTION0"; + scomaddr 0x02013106; + capture type secondary; + capture group default; + }; + + register NXDMAENGFIR_ACT1 + { + name "EN.NX.DBG.NX_DMA_ENG_FIR_ACTION1"; + scomaddr 0x02013107; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet NXCQFIR + ############################################################################ + + register NXCQFIR + { + name "EN.NX.PBI.CQ_WRAP.NXCQ_SCOM.NX_CQ_FIR_REG"; + scomaddr 0x02013080; + reset (&, 0x02013081); + mask (|, 0x02013085); + capture group default; + }; + + register NXCQFIR_MASK + { + name "EN.NX.PBI.CQ_WRAP.NXCQ_SCOM.NX_CQ_FIR_MASK_REG"; + scomaddr 0x02013083; + capture type secondary; + capture group default; + }; + + register NXCQFIR_ACT0 + { + name "EN.NX.PBI.CQ_WRAP.NXCQ_SCOM.NX_CQ_FIR_ACTION0_REG"; + scomaddr 0x02013086; + capture type secondary; + capture group default; + }; + + register NXCQFIR_ACT1 + { + name "EN.NX.PBI.CQ_WRAP.NXCQ_SCOM.NX_CQ_FIR_ACTION1_REG"; + scomaddr 0x02013087; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet NXASFIR + ############################################################################ + + register NXASFIR + { + name "EN.NX.AS.FIR_REG"; + scomaddr 0x020130c0; + reset (&, 0x020130c1); + mask (|, 0x020130c5); + capture group default; + }; + + register NXASFIR_MASK + { + name "EN.NX.AS.FIR_MASK_REG"; + scomaddr 0x020130c3; + capture type secondary; + capture group default; + }; + + register NXASFIR_ACT0 + { + name "EN.NX.AS.FIR_ACTION0_REG"; + scomaddr 0x020130c6; + capture type secondary; + capture group default; + }; + + register NXASFIR_ACT1 + { + name "EN.NX.AS.FIR_ACTION1_REG"; + scomaddr 0x020130c7; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet NXCXAFIR + ############################################################################ + + register NXCXAFIR + { + name "EN.NX.CXA.CXA_XPT.XPT_SCOMFIR.FIR_REG"; + scomaddr 0x02013000; + reset (&, 0x02013001); + mask (|, 0x02013005); + capture group default; + }; + + register NXCXAFIR_MASK + { + name "EN.NX.CXA.CXA_XPT.XPT_SCOMFIR.FIR_MASK_REG"; + scomaddr 0x02013003; + capture type secondary; + capture group default; + }; + + register NXCXAFIR_ACT0 + { + name "EN.NX.CXA.CXA_XPT.XPT_SCOMFIR.FIR_ACTION0_REG"; + scomaddr 0x02013006; + capture type secondary; + capture group default; + }; + + register NXCXAFIR_ACT1 + { + name "EN.NX.CXA.CXA_XPT.XPT_SCOMFIR.FIR_ACTION1_REG"; + scomaddr 0x02013007; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet MCDFIR + ############################################################################ + + register MCDFIR + { + name "EH.PB.MCD.MCDCTL.FIR_REG"; + scomaddr 0x02013400; + reset (&, 0x02013401); + mask (|, 0x02013405); + capture group default; + }; + + register MCDFIR_MASK + { + name "EH.PB.MCD.MCDCTL.FIR_MASK_REG"; + scomaddr 0x02013403; + capture type secondary; + capture group default; + }; + + register MCDFIR_ACT0 + { + name "EH.PB.MCD.MCDCTL.FIR_ACTION0_REG"; + scomaddr 0x02013406; + capture type secondary; + capture group default; + }; + + register MCDFIR_ACT1 + { + name "EH.PB.MCD.MCDCTL.FIR_ACTION1_REG"; + scomaddr 0x02013407; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet PBWESTFIR + ############################################################################ + + register PBWESTFIR + { + name "EH.PB.MISC.PB_WEST_FIR_REG"; + scomaddr 0x02010c00; + reset (&, 0x02010c01); + mask (|, 0x02010c05); + capture group default; + }; + + register PBWESTFIR_MASK + { + name "EH.PB.MISC.PB_WEST_FIR_MASK_REG"; + scomaddr 0x02010c03; + capture type secondary; + capture group default; + }; + + register PBWESTFIR_ACT0 + { + name "EH.PB.MISC.PB_WEST_FIR_ACTION0_REG"; + scomaddr 0x02010c06; + capture type secondary; + capture group default; + }; + + register PBWESTFIR_ACT1 + { + name "EH.PB.MISC.PB_WEST_FIR_ACTION1_REG"; + scomaddr 0x02010c07; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet PBCENTFIR + ############################################################################ + + register PBCENTFIR + { + name "EH.PB.MISC.PB_CENT_FIR_REG"; + scomaddr 0x02010c40; + reset (&, 0x02010c41); + mask (|, 0x02010c45); + capture group default; + }; + + register PBCENTFIR_MASK + { + name "EH.PB.MISC.PB_CENT_FIR_MASK_REG"; + scomaddr 0x02010c43; + capture type secondary; + capture group default; + }; + + register PBCENTFIR_ACT1 + { + name "EH.PB.MISC.PB_CENT_FIR_ACTION1_REG"; + scomaddr 0x02010c47; + capture type secondary; + capture group default; + }; + + register PBCENTFIR_ACT0 + { + name "EH.PB.MISC.PB_CENT_FIR_ACTION0_REG"; + scomaddr 0x02010c46; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet PBEASTFIR + ############################################################################ + + register PBEASTFIR + { + name "EH.PB.MISC.PB_EAST_FIR_REG"; + scomaddr 0x02010c80; + reset (&, 0x02010c81); + mask (|, 0x02010c85); + capture group default; + }; + + register PBEASTFIR_MASK + { + name "EH.PB.MISC.PB_EAST_FIR_MASK_REG"; + scomaddr 0x02010c83; + capture type secondary; + capture group default; + }; + + register PBEASTFIR_ACT0 + { + name "EH.PB.MISC.PB_EAST_FIR_ACTION0_REG"; + scomaddr 0x02010c86; + capture type secondary; + capture group default; + }; + + register PBEASTFIR_ACT1 + { + name "EH.PB.MISC.PB_EAST_FIR_ACTION1_REG"; + scomaddr 0x02010c87; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet PBEXTFIR + ############################################################################ + + # External checkstop register - Used for FFDC only + # Any attention generated from this FIR register indicates that there was a + # checkstop attention raised on another chip. Currently, we do not do any + # additional analysis in this FIR because we assume we will get an interrupt + # from the offending chip. This FIR will set PB_CHIPLET_FIR[2] which is + # currently ignored. + + register PBEXTFIR + { + name "EH.PB.MISC.EXTFIR_REG"; + scomaddr 0x02010c6e; + capture group default; + }; + + ############################################################################ + # PB Chiplet PSIFIR + ############################################################################ + + register PSIFIR + { + name "EN.TPC.PSIHB.PSIHB_FIR_REG"; + scomaddr 0x02010900; + reset (&, 0x02010901); + mask (|, 0x02010905); + capture group default; + }; + + register PSIFIR_MASK + { + name "EN.TPC.PSIHB.PSIHB_FIR_MASK_REG"; + scomaddr 0x02010903; + capture type secondary; + capture group default; + }; + + register PSIFIR_ACT0 + { + name "EN.TPC.PSIHB.PSIHB_FIR_ACTION0_REG"; + scomaddr 0x02010906; + capture type secondary; + capture group default; + }; + + register PSIFIR_ACT1 + { + name "EN.TPC.PSIHB.PSIHB_FIR_ACTION1_REG"; + scomaddr 0x02010907; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet ICPFIR + ############################################################################ + + register ICPFIR + { + name "EN.TPC.INTP.SYNC_FIR_REG"; + scomaddr 0x020109c0; + reset (&, 0x020109c1); + mask (|, 0x020109c5); + capture group default; + }; + + register ICPFIR_MASK + { + name "EN.TPC.INTP.SYNC_FIR_MASK_REG"; + scomaddr 0x020109c3; + capture type secondary; + capture group default; + }; + + register ICPFIR_ACT0 + { + name "EN.TPC.INTP.SYNC_FIR_ACTION0_REG"; + scomaddr 0x020109c6; + capture type secondary; + capture group default; + }; + + register ICPFIR_ACT1 + { + name "EN.TPC.INTP.SYNC_FIR_ACTION1_REG"; + scomaddr 0x020109c7; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet PBAFIR + ############################################################################ + + register PBAFIR + { + name "EN.TPC.PBA.PBAFIR"; + scomaddr 0x02010840; + reset (&, 0x02010841); + mask (|, 0x02010845); + capture group default; + }; + + register PBAFIR_MASK + { + name "EN.TPC.PBA.PBAFIRMASK"; + scomaddr 0x02010843; + capture type secondary; + capture group default; + }; + + register PBAFIR_ACT0 + { + name "EN.TPC.PBA.PBAFIRACT0"; + scomaddr 0x02010846; + capture type secondary; + capture group default; + }; + + register PBAFIR_ACT1 + { + name "EN.TPC.PBA.PBAFIRACT1"; + scomaddr 0x02010847; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet EHHCAFIR + ############################################################################ + + register EHHCAFIR + { + name "EH.TPC.HCA.EHHCA_FIR_REG"; + scomaddr 0x02010980; + reset (&, 0x02010981); + mask (|, 0x02010985); + capture group default; + }; + + register EHHCAFIR_MASK + { + name "EH.TPC.HCA.EHHCA_FIR_MASK_REG"; + scomaddr 0x02010983; + capture type secondary; + capture group default; + }; + + register EHHCAFIR_ACT0 + { + name "EH.TPC.HCA.EHHCA_FIR_ACTION0_REG"; + scomaddr 0x02010986; + capture type secondary; + capture group default; + }; + + register EHHCAFIR_ACT1 + { + name "EH.TPC.HCA.EHHCA_FIR_ACTION1_REG"; + scomaddr 0x02010987; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet ENHCAFIR + ############################################################################ + + register ENHCAFIR + { + name "EN.TPC.BRIDGE.HCA.ENHCA_FIR_REG"; + scomaddr 0x02010940; + reset (&, 0x02010941); + mask (|, 0x02010945); + capture group default; + }; + + register ENHCAFIR_MASK + { + name "EN.TPC.BRIDGE.HCA.ENHCA_FIR_MASK_REG"; + scomaddr 0x02010943; + capture type secondary; + capture group default; + }; + + register ENHCAFIR_ACT0 + { + name "EN.TPC.BRIDGE.HCA.ENHCA_FIR_ACTION0_REG"; + scomaddr 0x02010946; + capture type secondary; + capture group default; + }; + + register ENHCAFIR_ACT1 + { + name "EN.TPC.BRIDGE.HCA.ENHCA_FIR_ACTION1_REG"; + scomaddr 0x02010947; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet PCINESTFIR_0 + ############################################################################ + + register PCINESTFIR_0 + { + name "ES.PE_WRAP_TOP.PE0.PEPBCQ.PBCQ.FIR_REG"; + scomaddr 0x02012000; + reset (&, 0x02012001); + mask (|, 0x02012005); + capture group default; + }; + + register PCINESTFIR_0_MASK + { + name "ES.PE_WRAP_TOP.PE0.PEPBCQ.PBCQ.FIR_MASK_REG"; + scomaddr 0x02012003; + capture type secondary; + capture group default; + }; + + register PCINESTFIR_0_ACT0 + { + name "ES.PE_WRAP_TOP.PE0.PEPBCQ.PBCQ.FIR_ACTION0_REG"; + scomaddr 0x02012006; + capture type secondary; + capture group default; + }; + + register PCINESTFIR_0_ACT1 + { + name "ES.PE_WRAP_TOP.PE0.PEPBCQ.PBCQ.FIR_ACTION1_REG"; + scomaddr 0x02012007; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet PCINESTFIR_1 + ############################################################################ + + register PCINESTFIR_1 + { + name "ES.PE_WRAP_TOP.PE1.PEPBCQ.PBCQ.FIR_REG"; + scomaddr 0x02012400; + reset (&, 0x02012401); + mask (|, 0x02012405); + capture group default; + }; + + register PCINESTFIR_1_MASK + { + name "ES.PE_WRAP_TOP.PE1.PEPBCQ.PBCQ.FIR_MASK_REG"; + scomaddr 0x02012403; + capture type secondary; + capture group default; + }; + + register PCINESTFIR_1_ACT0 + { + name "ES.PE_WRAP_TOP.PE1.PEPBCQ.PBCQ.FIR_ACTION0_REG"; + scomaddr 0x02012406; + capture type secondary; + capture group default; + }; + + register PCINESTFIR_1_ACT1 + { + name "ES.PE_WRAP_TOP.PE1.PEPBCQ.PBCQ.FIR_ACTION1_REG"; + scomaddr 0x02012407; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet PCINESTFIR_2 + ############################################################################ + + register PCINESTFIR_2 + { + name "ES.PE_WRAP_TOP.PE2.PEPBCQ.PBCQ.FIR_REG"; + scomaddr 0x02012800; + reset (&, 0x02012801); + mask (|, 0x02012805); + capture group default; + }; + + register PCINESTFIR_2_MASK + { + name "ES.PE_WRAP_TOP.PE2.PEPBCQ.PBCQ.FIR_MASK_REG"; + scomaddr 0x02012803; + capture type secondary; + capture group default; + }; + + register PCINESTFIR_2_ACT0 + { + name "ES.PE_WRAP_TOP.PE2.PEPBCQ.PBCQ.FIR_ACTION0_REG"; + scomaddr 0x02012806; + capture type secondary; + capture group default; + }; + + register PCINESTFIR_2_ACT1 + { + name "ES.PE_WRAP_TOP.PE2.PEPBCQ.PBCQ.FIR_ACTION1_REG"; + scomaddr 0x02012807; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PB Chiplet IOMCFIR_0 + ############################################################################ + + # Venice only scomaddr = 0x02011A00 + + ############################################################################ + # PB Chiplet IOMCFIR_1 + ############################################################################ + + register IOMCFIR_1 + { + name "IOMC1.BUSCTL.SCOM.FIR_REG"; + scomaddr 0x02011E00; + reset (&, 0x02011E01); + mask (|, 0x02011E05); + capture group default; + }; + + register IOMCFIR_1_MASK + { + name "IOMC1.BUSCTL.SCOM.FIR_MASK_REG"; + scomaddr 0x02011E03; + capture type secondary; + capture group default; + }; + + register IOMCFIR_1_ACT0 + { + name "IOMC1.BUSCTL.SCOM.FIR_ACTION0_REG"; + scomaddr 0x02011E06; + capture type secondary; + capture group default; + }; + + register IOMCFIR_1_ACT1 + { + name "IOMC1.BUSCTL.SCOM.FIR_ACTION1_REG"; + scomaddr 0x02011E07; + capture type secondary; + capture group default; + }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_regs_PCIE.rule b/src/usr/diag/prdf/plat/pegasus/Proc_regs_PCIE.rule new file mode 100644 index 000000000..18c4d33ce --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_regs_PCIE.rule @@ -0,0 +1,323 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_regs_PCIE.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + + ############################################################################ + # PCIE Chiplet Registers + ############################################################################ + + register PCIE_CHIPLET_CS_FIR + { + name "ES.PE_WRAP_TOP.TPC.XFIR"; + scomaddr 0x09040000; + capture group default; + }; + + register PCIE_CHIPLET_RE_FIR + { + name "ES.PE_WRAP_TOP.TPC.RFIR"; + scomaddr 0x09040001; + capture group default; + }; + + register PCIE_CHIPLET_FIR_MASK + { + name "ES.PE_WRAP_TOP.TPC.FIR_MASK"; + scomaddr 0x09040002; + capture type secondary; + capture group default; + }; + + register PCIE_CHIPLET_SPA + { + name "ES.PE_WRAP_TOP.TPC.EPS.FIR.SPATTN"; + scomaddr 0x09040004; + capture group default; + }; + + register PCIE_CHIPLET_SPA_MASK + { + name "ES.PE_WRAP_TOP.TPC.EPS.FIR.SPA_MASK"; + scomaddr 0x09040007; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PCIE Chiplet LFIR + ############################################################################ + + register PCIE_LFIR + { + name "ES.PE_WRAP_TOP.TPC.LOCAL_FIR"; + scomaddr 0x0904000a; + reset (&, 0x0904000b); + mask (|, 0x0904000f); + capture group default; + }; + + register PCIE_LFIR_MASK + { + name "ES.PE_WRAP_TOP.TPC.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x0904000d; + capture type secondary; + capture group default; + }; + + register PCIE_LFIR_ACT0 + { + name "ES.PE_WRAP_TOP.TPC.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x09040010; + capture type secondary; + capture group default; + }; + + register PCIE_LFIR_ACT1 + { + name "ES.PE_WRAP_TOP.TPC.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x09040011; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PCIE Chiplet PCICLOCKFIR_0 + ############################################################################ + + register PCICLOCKFIR_0 + { + name "ES.PE_WRAP_TOP.PE0.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_REG"; + scomaddr 0x09012000; + reset (&, 0x09012001); + mask (|, 0x09012005); + capture group default; + }; + + register PCICLOCKFIR_0_MASK + { + name "ES.PE_WRAP_TOP.PE0.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_MASK_REG"; + scomaddr 0x09012003; + capture type secondary; + capture group default; + }; + + register PCICLOCKFIR_0_ACT0 + { + name "ES.PE_WRAP_TOP.PE0.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_ACTION0_REG"; + scomaddr 0x09012006; + capture type secondary; + capture group default; + }; + + register PCICLOCKFIR_0_ACT1 + { + name "ES.PE_WRAP_TOP.PE0.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_ACTION1_REG"; + scomaddr 0x09012007; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PCIE Chiplet PCICLOCKFIR_1 + ############################################################################ + + register PCICLOCKFIR_1 + { + name "ES.PE_WRAP_TOP.PE1.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_REG"; + scomaddr 0x09012400; + reset (&, 0x09012401); + mask (|, 0x09012405); + capture group default; + }; + + register PCICLOCKFIR_1_MASK + { + name "ES.PE_WRAP_TOP.PE1.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_MASK_REG"; + scomaddr 0x09012403; + capture type secondary; + capture group default; + }; + + register PCICLOCKFIR_1_ACT0 + { + name "ES.PE_WRAP_TOP.PE1.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_ACTION0_REG"; + scomaddr 0x09012406; + capture type secondary; + capture group default; + }; + + register PCICLOCKFIR_1_ACT1 + { + name "ES.PE_WRAP_TOP.PE1.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_ACTION1_REG"; + scomaddr 0x09012407; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PCIE Chiplet PCICLOCKFIR_2 + ############################################################################ + + register PCICLOCKFIR_2 + { + name "ES.PE_WRAP_TOP.PE2.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_REG"; + scomaddr 0x09012800; + reset (&, 0x09012801); + mask (|, 0x09012805); + capture group default; + }; + + register PCICLOCKFIR_2_MASK + { + name "ES.PE_WRAP_TOP.PE2.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_MASK_REG"; + scomaddr 0x09012803; + capture type secondary; + capture group default; + }; + + register PCICLOCKFIR_2_ACT0 + { + name "ES.PE_WRAP_TOP.PE2.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_ACTION0_REG"; + scomaddr 0x09012806; + capture type secondary; + capture group default; + }; + + register PCICLOCKFIR_2_ACT1 + { + name "ES.PE_WRAP_TOP.PE2.PH3_TOP.ETU.RSB.PR_REGS.LEM.FIR_ACTION1_REG"; + scomaddr 0x09012807; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PCIE Chiplet PBFFIR + ############################################################################ + + register PBFFIR + { + name "ES.PBES_WRAP_TOP.PBES_TOP.MISC_IOF.SCOM.PB_IOF_FIR_REG"; + scomaddr 0x09010800; + reset (&, 0x09010801); + mask (|, 0x09010805); + capture group default; + }; + + register PBFFIR_MASK + { + name "ES.PBES_WRAP_TOP.PBES_TOP.MISC_IOF.SCOM.PB_IOF_FIR_MASK_REG"; + scomaddr 0x09010803; + capture type secondary; + capture group default; + }; + + register PBFFIR_ACT0 + { + name "ES.PBES_WRAP_TOP.PBES_TOP.MISC_IOF.SCOM.PB_IOF_FIR_ACTION0_REG"; + scomaddr 0x09010806; + capture type secondary; + capture group default; + }; + + register PBFFIR_ACT1 + { + name "ES.PBES_WRAP_TOP.PBES_TOP.MISC_IOF.SCOM.PB_IOF_FIR_ACTION1_REG"; + scomaddr 0x09010807; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PCIE Chiplet IOPPCIFIR_0 + ############################################################################ + + register IOPPCIFIR_0 + { + name "IOP.IOP_X880.IOP_PMA0.IOP_PMA_PLL0.IOP_PMA_PLL_RLM.IOP_PMA_PLL_REG_CONTROL.FIR_STATUS_REG"; + scomaddr 0x09011400; + reset (&, 0x09011401); + mask (|, 0x09011405); + capture group default; + }; + + register IOPPCIFIR_0_MASK + { + name "IOP.IOP_X880.IOP_PMA0.IOP_PMA_PLL0.IOP_PMA_PLL_RLM.IOP_PMA_PLL_REG_CONTROL.FIR_MASK_REG"; + scomaddr 0x09011403; + capture type secondary; + capture group default; + }; + + register IOPPCIFIR_0_ACT0 + { + name "IOP.IOP_X880.IOP_PMA0.IOP_PMA_PLL0.IOP_PMA_PLL_RLM.IOP_PMA_PLL_REG_CONTROL.FIR_ACTION0_REG"; + scomaddr 0x09011406; + capture type secondary; + capture group default; + }; + + register IOPPCIFIR_0_ACT1 + { + name "IOP.IOP_X880.IOP_PMA0.IOP_PMA_PLL0.IOP_PMA_PLL_RLM.IOP_PMA_PLL_REG_CONTROL.FIR_ACTION1_REG"; + scomaddr 0x09011407; + capture type secondary; + capture group default; + }; + + ############################################################################ + # PCIE Chiplet IOPPCIFIR_1 + ############################################################################ + + register IOPPCIFIR_1 + { + name "IOP.IOP_X881.IOP_PMA0.IOP_PMA_PLL0.IOP_PMA_PLL_RLM.IOP_PMA_PLL_REG_CONTROL.FIR_STATUS_REG"; + scomaddr 0x09011840; + reset (&, 0x09011841); + mask (|, 0x09011845); + capture group default; + }; + + register IOPPCIFIR_1_MASK + { + name "IOP.IOP_X881.IOP_PMA0.IOP_PMA_PLL0.IOP_PMA_PLL_RLM.IOP_PMA_PLL_REG_CONTROL.FIR_MASK_REG"; + scomaddr 0x09011843; + capture type secondary; + capture group default; + }; + + register IOPPCIFIR_1_ACT0 + { + name "IOP.IOP_X881.IOP_PMA0.IOP_PMA_PLL0.IOP_PMA_PLL_RLM.IOP_PMA_PLL_REG_CONTROL.FIR_ACTION0_REG"; + scomaddr 0x09011846; + capture type secondary; + capture group default; + }; + + register IOPPCIFIR_1_ACT1 + { + name "IOP.IOP_X881.IOP_PMA0.IOP_PMA_PLL0.IOP_PMA_PLL_RLM.IOP_PMA_PLL_REG_CONTROL.FIR_ACTION1_REG"; + scomaddr 0x09011847; + capture type secondary; + capture group default; + }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_regs_TP.rule b/src/usr/diag/prdf/plat/pegasus/Proc_regs_TP.rule new file mode 100644 index 000000000..8a1280c70 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_regs_TP.rule @@ -0,0 +1,212 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_regs_TP.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + + ############################################################################ + # TP Chiplet Registers + ############################################################################ + + register TP_CHIPLET_CS_FIR + { + name "EH.TPCHIP.TPC.XFIR"; + scomaddr 0x01040000; + capture group default; + }; + + register TP_CHIPLET_RE_FIR + { + name "EH.TPCHIP.TPC.RFIR"; + scomaddr 0x01040001; + capture group default; + }; + + register TP_CHIPLET_FIR_MASK + { + name "EH.TPCHIP.TPC.FIR_MASK"; + scomaddr 0x01040002; + capture type secondary; + capture group default; + }; + + register TP_CHIPLET_SPA + { + name "EH.TPCHIP.TPC.EPS.FIR.SPATTN"; + scomaddr 0x01040004; + capture group default; + }; + + register TP_CHIPLET_SPA_MASK + { + name "EH.TPCHIP.TPC.EPS.FIR.SPA_MASK"; + scomaddr 0x01040007; + capture type secondary; + capture group default; + }; + + ############################################################################ + # TP Chiplet LFIR + ############################################################################ + + register TP_LFIR + { + name "EH.TPCHIP.TPC.LOCAL_FIR"; + scomaddr 0x0104000a; + reset (&, 0x0104000b); + mask (|, 0x0104000f); + capture group default; + }; + + register TP_LFIR_MASK + { + name "EH.TPCHIP.TPC.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x0104000d; + capture type secondary; + capture group default; + }; + + register TP_LFIR_ACT0 + { + name "EH.TPCHIP.TPC.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x01040010; + capture type secondary; + capture group never; + }; + + register TP_LFIR_ACT1 + { + name "EH.TPCHIP.TPC.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x01040011; + capture type secondary; + capture group never; + }; + + ############################################################################ + # TP Chiplet OCCFIR + ############################################################################ + + register OCCFIR + { + name "EH.TPCHIP.OCC.OCI.SCOM.OCC_SCOM_OCCLFIR"; + scomaddr 0x01010800; + reset (&, 0x01010801); + mask (|, 0x01010805); + capture group default; + }; + + register OCCFIR_MASK + { + name "EH.TPCHIP.OCC.OCI.SCOM.OCC_SCOM_OCCLFIRMASK"; + scomaddr 0x01010803; + capture type secondary; + capture group default; + }; + + register OCCFIR_ACT0 + { + name "EH.TPCHIP.OCC.OCI.SCOM.OCC_SCOM_OCCLFIRACT0"; + scomaddr 0x01010806; + capture type secondary; + capture group default; + }; + + register OCCFIR_ACT1 + { + name "EH.TPCHIP.OCC.OCI.SCOM.OCC_SCOM_OCCLFIRACT1"; + scomaddr 0x01010807; + capture type secondary; + capture group default; + }; + + ############################################################################ + # TP Chiplet PBAMFIR + ############################################################################ + + register PBAMFIR + { + name "EH.TPCHIP.PIB.LPCM.LPC.SYNC_FIR_REG"; + scomaddr 0x01010c00; + reset (&, 0x01010c01); + mask (|, 0x01010c05); + capture group default; + }; + + register PBAMFIR_MASK + { + name "EH.TPCHIP.PIB.LPCM.LPC.SYNC_FIR_MASK_REG"; + scomaddr 0x01010c03; + capture type secondary; + capture group default; + }; + + register PBAMFIR_ACT0 + { + name "EH.TPCHIP.PIB.LPCM.LPC.SYNC_FIR_ACTION0_REG"; + scomaddr 0x01010c06; + capture type secondary; + capture group default; + }; + + register PBAMFIR_ACT1 + { + name "EH.TPCHIP.PIB.LPCM.LPC.SYNC_FIR_ACTION1_REG"; + scomaddr 0x01010c07; + capture type secondary; + capture group default; + }; + + ############################################################################ + # TP Chiplet PMCFIR + ############################################################################ + + register PMCFIR + { + name "EH.TPCHIP.OCC.PMC.PMC_LFIR_ERR_REG"; + scomaddr 0x01010840; + reset (&, 0x01010841); + mask (|, 0x01010845); + capture group default; + }; + + register PMCFIR_MASK + { + name "EH.TPCHIP.OCC.PMC.PMC_LFIR_ERR_MASK_REG"; + scomaddr 0x01010843; + capture type secondary; + capture group default; + }; + + register PMCFIR_ACT0 + { + name "EH.TPCHIP.OCC.PMC.PMC_LFIR_ACTION0_REG"; + scomaddr 0x01010846; + capture type secondary; + capture group default; + }; + + register PMCFIR_ACT1 + { + name "EH.TPCHIP.OCC.PMC.PMC_LFIR_ACTION1_REG"; + scomaddr 0x01010847; + capture type secondary; + capture group default; + }; + diff --git a/src/usr/diag/prdf/plat/pegasus/Proc_regs_XBUS.rule b/src/usr/diag/prdf/plat/pegasus/Proc_regs_XBUS.rule new file mode 100644 index 000000000..afdb299ea --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/Proc_regs_XBUS.rule @@ -0,0 +1,178 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/diag/prdf/plat/pegasus/Proc_regs_XBUS.rule $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2012 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG + + ############################################################################ + # XBUS Chiplet Registers + ############################################################################ + + register XBUS_CHIPLET_CS_FIR + { + name "EN.PB.TPC.XFIR"; + scomaddr 0x04040000; + capture group default; + }; + + register XBUS_CHIPLET_RE_FIR + { + name "EN.PB.TPC.RFIR"; + scomaddr 0x04040001; + capture group default; + }; + + register XBUS_CHIPLET_FIR_MASK + { + name "EN.PB.TPC.FIR_MASK"; + scomaddr 0x04040002; + capture type secondary; + capture group default; + }; + + ############################################################################ + # XBUS Chiplet LFIR + ############################################################################ + + register XBUS_LFIR + { + name "EN.PB.TPC.LOCAL_FIR"; + scomaddr 0x0404000a; + reset (&, 0x0404000b); + mask (|, 0x0404000f); + capture group default; + }; + + register XBUS_LFIR_MASK + { + name "EN.PB.TPC.EPS.FIR.LOCAL_FIR_MASK"; + scomaddr 0x0404000d; + capture type secondary; + capture group default; + }; + + register XBUS_LFIR_ACT0 + { + name "EN.PB.TPC.EPS.FIR.LOCAL_FIR_ACTION0"; + scomaddr 0x04040010; + capture type secondary; + capture group default; + }; + + register XBUS_LFIR_ACT1 + { + name "EN.PB.TPC.EPS.FIR.LOCAL_FIR_ACTION1"; + scomaddr 0x04040011; + capture type secondary; + capture group default; + }; + + ############################################################################ + # XBUS Chiplet PBENFIR + ############################################################################ + + register PBENFIR + { + name "EN.PB.PBEN.MISC_IO.SCOM.FIR_REG"; + scomaddr 0x04010c00; + reset (&, 0x04010c01); + reset (|, 0x04010c05); + capture group default; + }; + + register PBENFIR_MASK + { + name "EN.PB.PBEN.MISC_IO.SCOM.FIR_MASK_REG"; + scomaddr 0x04010c03; + capture type secondary; + capture group default; + }; + + register PBENFIR_ACT0 + { + name "EN.PB.PBEN.MISC_IO.SCOM.FIR_REG_ACTION0"; + scomaddr 0x04010c06; + capture type secondary; + capture group default; + }; + + register PBENFIR_ACT1 + { + name "EN.PB.PBEN.MISC_IO.SCOM.FIR_REG_ACTION1"; + scomaddr 0x04010c07; + capture type secondary; + capture group default; + }; + + ############################################################################ + # XBUS Chiplet IOXFIR_0 + ############################################################################ + + # Venice only scomaddr = TBD + + ############################################################################ + # XBUS Chiplet IOXFIR_1 + ############################################################################ + + register IOXFIR_1 + { + name "XBUS1.BUSCTL.SCOM.FIR_REG"; + scomaddr 0x04011400; + reset (&, 0x04010c01); + reset (|, 0x04010c05); + capture group default; + }; + + register IOXFIR_1_MASK + { + name "XBUS1.BUSCTL.SCOM.FIR_MASK_REG"; + scomaddr 0x04011403; + capture type secondary; + capture group default; + }; + + register IOXFIR_1_ACT0 + { + name "XBUS1.BUSCTL.SCOM.FIR_ACTION0_REG"; + scomaddr 0x04011406; + capture type secondary; + capture group default; + }; + + register IOXFIR_1_ACT1 + { + name "XBUS1.BUSCTL.SCOM.FIR_ACTION0_REG"; + scomaddr 0x04011407; + capture type secondary; + capture group default; + }; + + ############################################################################ + # XBUS Chiplet IOXFIR_2 + ############################################################################ + + # Venice only scomaddr = TBD + + ############################################################################ + # XBUS Chiplet IOXFIR_3 + ############################################################################ + + # Venice only scomaddr = TBD + diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCalloutUtil.C b/src/usr/diag/prdf/plat/pegasus/prdfCalloutUtil.C new file mode 100644 index 000000000..a96039006 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfCalloutUtil.C @@ -0,0 +1,44 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfCalloutUtil.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfCalloutUtil.C */ + +#include <prdfCalloutUtil.H> + +#include <iipServiceDataCollector.h> + +namespace PRDF +{ +namespace CalloutUtil +{ + +void defaultError( STEP_CODE_DATA_STRUCT & i_sc ) +{ + i_sc.service_data->SetCallout( NextLevelSupport_ENUM ); + i_sc.service_data->SetCallout( SP_CODE ); + i_sc.service_data->SetServiceCall(); +} + +} // end namespace CalloutUtil +} // end namespace PRDF + diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCalloutUtil.H b/src/usr/diag/prdf/plat/pegasus/prdfCalloutUtil.H new file mode 100644 index 000000000..9794239ee --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfCalloutUtil.H @@ -0,0 +1,49 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfCalloutUtil.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef prdfCalloutUtil_H +#define prdfCalloutUtil_H + +/** @file prdfCalloutUtil.H + * @brief Utility functions for common, non-trivial callouts. + */ + +struct STEP_CODE_DATA_STRUCT; + +namespace PRDF +{ +namespace CalloutUtil +{ + +/** + * @brief In many cases, an internal logic error may occur in which 2nd level + * support and FSP code need to be called out. This function is intented + * to help eliminate the need to constantly repeat the list of callouts. + * @param i_sc The step code data struct. + */ +void defaultError( STEP_CODE_DATA_STRUCT & i_sc ); + +} // end namespace CalloutUtil +} // end namespace PRDF + +#endif // prdfCalloutUtil_H diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCenMba.C b/src/usr/diag/prdf/plat/pegasus/prdfCenMba.C new file mode 100755 index 000000000..9739a0b75 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfCenMba.C @@ -0,0 +1,145 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfCenMba.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfCenMba.C + * @brief Contains all the plugin code for the PRD Centaur MBA + */ + +#include <iipServiceDataCollector.h> +#include <prdfCalloutUtil.H> +#include <prdfExtensibleChip.H> +#include <prdfMemUtil.H> +#include <prdfPlatServices.H> +#include <prdfPluginMap.H> + +#include <prdfCenMbaDataBundle.H> + +namespace PRDF +{ +namespace Mba +{ + +//############################################################################## +// +// Special plugins +// +//############################################################################## + +/** + * @brief Plugin that initializes the P8 Centaur MBA data bundle. + * @param i_mbaChip A Centaur MBA chip. + * @return SUCCESS + */ +int32_t Initialize( PrdfExtensibleChip * i_mbaChip ) +{ + i_mbaChip->getDataBundle() = new CenMbaDataBundle( i_mbaChip ); + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Mba, Initialize ); + +//------------------------------------------------------------------------------ + +/** + * @brief Plugin function called after analysis is complete but before PRD + * exits. + * @param i_mbaChip A Centaur MBA chip. + * @param i_sc The step code data struct. + * @note This is especially useful for any analysis that still needs to be + * done after the framework clears the FIR bits that were at attention. + * @return SUCCESS. + */ +int32_t PostAnalysis( PrdfExtensibleChip * i_mbaChip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + #ifdef __HOSTBOOT_MODULE + + using namespace TARGETING; + + // In hostboot, we need to clear MCI Fir bits. Do we will get the mcs + // chiplet connected with Mba and call its plugin to clear those FIR bits + int32_t l_rc = MemUtil::clearHostAttns( i_mbaChip, i_sc ); + if ( SUCCESS != l_rc ) + PRDF_ERR( "[Mba::PostAnalysis] MemUtil::clearHostAttns failed" ); + + // Send command complete to MDIA. + // This must be done in post analysis after attentions have been cleared. + if ( PlatServices::isInMdiaMode() ) + { + TargetHandle_t mbaTarget = i_mbaChip->GetChipHandle(); + CenMbaDataBundle * mbadb = getMbaDataBundle( i_mbaChip ); + + mbadb->iv_sendCmdCompleteMsg = false; + PlatServices::mdiaSendCmdComplete( mbaTarget ); + } + + #endif // __HOSTBOOT_MODULE + + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Mba, PostAnalysis ); + +//############################################################################## +// +// MBASPA +// +//############################################################################## + +/** + * @brief MBASPA[0] - Maintenance command complete. + * @param i_mbaChip A Centaur MBA chip. + * @param i_sc The step code data struct. + * @return SUCCESS + */ +int32_t MaintCmdComplete( PrdfExtensibleChip * i_mbaChip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + using namespace TARGETING; + + int32_t l_rc = SUCCESS; + TargetHandle_t mbaTarget = i_mbaChip->GetChipHandle(); + + do + { + #ifdef __HOSTBOOT_MODULE + + // TODO: Will need to change design once this for error path. + CenMbaDataBundle * mbadb = getMbaDataBundle( i_mbaChip ); + mbadb->iv_sendCmdCompleteMsg = true; + + #endif // __HOSTBOOT_MODULE + + } while (0); + + if ( SUCCESS != l_rc ) + { + PRDF_ERR( "[Mba::MaintCmdComplete] failed on MBA 0x%08x", + PlatServices::getHuid(mbaTarget) ); + CalloutUtil::defaultError( i_sc ); + } + + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Mba, MaintCmdComplete ); + +} // end namespace Mba +} // end namespace PRDF diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaDataBundle.H b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaDataBundle.H new file mode 100644 index 000000000..375bd61a4 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaDataBundle.H @@ -0,0 +1,86 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfCenMbaDataBundle.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef prdfCenMbaDataBundle_H +#define prdfCenMbaDataBundle_H + +/** @file prdfCenMbaDataBundle.H + * @brief Contains the data bundle for a PRD Centaur MBA object. + */ + +#include <prdfExtensibleChip.H> + +//------------------------------------------------------------------------------ + +namespace PRDF +{ + +/** + * @brief The P7 Centaur MBA data bundle. + */ +class CenMbaDataBundle : public PrdfDataBundle +{ + public: // functions + + /** + * @brief Constructor. + * @param i_mbaChip The MBA chip. + */ + explicit CenMbaDataBundle( PrdfExtensibleChip * i_mbaChip ) : + iv_sendCmdCompleteMsg(false) + {} + + /** + * @brief Destructor. + */ + ~CenMbaDataBundle() {} + + private: // functions + + CenMbaDataBundle( const CenMbaDataBundle & ); + const CenMbaDataBundle & operator=( const CenMbaDataBundle & ); + + public: // instance variables + + /** TRUE if a maintenance command complete message needs to be sent in the + * post analysis plugin, FALSE otherwise. */ + bool iv_sendCmdCompleteMsg; + +}; + +//------------------------------------------------------------------------------ + +/** + * @brief Wrapper function for the CenMbaDataBundle. + * @param i_mbaChip The MBA chip. + * @return This MBA's data bundle. + */ +inline CenMbaDataBundle * getMbaDataBundle( PrdfExtensibleChip * i_mbaChip ) +{ + return static_cast<CenMbaDataBundle *>(i_mbaChip->getDataBundle()); +} + +} // end namespace PRDF + +#endif // prdfCenMbaDataBundle_H + diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCenMembuf.C b/src/usr/diag/prdf/plat/pegasus/prdfCenMembuf.C new file mode 100755 index 000000000..55d2fb741 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfCenMembuf.C @@ -0,0 +1,101 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfCenMembuf.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfCenMembuf.C + * @brief Contains all the plugin code for the PRD Centaur Membuf + */ + +#include <iipServiceDataCollector.h> +#include <prdfCalloutUtil.H> +#include <prdfExtensibleChip.H> +#include <prdfMemUtil.H> +#include <prdfPlatServices.H> +#include <prdfPluginMap.H> + + +namespace PRDF +{ +namespace Membuf +{ + +//############################################################################## +// +// Special plugins +// +//############################################################################## + +/** + * @brief Plugin that initializes the P8 Centaur Membuf data bundle. + * @param i_mbaChip A Centaur Membuf chip. + * @return SUCCESS + */ +int32_t Initialize( PrdfExtensibleChip * i_mbaChip ) +{ + // FIXME: need to implement + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Membuf, Initialize ); + +//------------------------------------------------------------------------------ + +/** + * @fn CheckForRecovered + * @brief Used when the chip has a CHECK_STOP attention to check for the + * presence of recovered errors. + */ +int32_t CheckForRecovered(PrdfExtensibleChip * i_chip, + bool & o_hasRecovered) +{ + //FIXME: need to fully implement for Membuf + o_hasRecovered = false; + + return SUCCESS; +} PRDF_PLUGIN_DEFINE( Membuf, CheckForRecovered ); + +//------------------------------------------------------------------------------ + + + +//------------------------------------------------------------------------------ + +/** + * @brief Plugin function called after analysis is complete but before PRD + * exits. + * @param i_membufChip A Centaur Membuf chip. + * @param i_sc The step code data struct. + * @note This is especially useful for any analysis that still needs to be + * done after the framework clears the FIR bits that were at attention. + * @return SUCCESS. + */ +int32_t PostAnalysis( PrdfExtensibleChip * i_membufChip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + //FIXME: need to implement + + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Membuf, PostAnalysis ); + + +} // end namespace Membuf +} // end namespace PRDF diff --git a/src/usr/diag/prdf/plat/pegasus/prdfMemUtil.C b/src/usr/diag/prdf/plat/pegasus/prdfMemUtil.C new file mode 100644 index 000000000..db09b8d72 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfMemUtil.C @@ -0,0 +1,114 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfMemUtil.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfMemUtil.C */ + +#include <prdfMemUtil.H> + +#include <iipconst.h> +#include <iipglobl.h> +#include <iipSystem.h> +#include <iipServiceDataCollector.h> +#include <prdfExtensibleChip.H> +#include <prdfPlatServices.H> + +namespace PRDF +{ +namespace MemUtil +{ + +#ifdef __HOSTBOOT_MODULE + +int32_t clearHostAttns( PrdfExtensibleChip * i_memChip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + using namespace TARGETING; + + int32_t o_rc = SUCCESS; + + TargetHandle_t memHandle = i_memChip->GetChipHandle(); + + do + { + // Get the attached MCS chip. + PrdfExtensibleChip * mcsChip = i_memChip; + if ( TYPE_MCS != PlatServices::getTargetType(memHandle) ) + { + TargetHandleList list = PlatServices::getConnected( memHandle, + TYPE_MCS ); + if ( 1 == list.size() ) + mcsChip = (PrdfExtensibleChip *)systemPtr->GetChip( list[0] ); + else + { + PRDF_ERR( "[MemUtil::clearHostAttns] getConnected() failed" ); + o_rc = FAIL; + break; + } + } + + // Clear FIR bits based on the cause attention type. + // Note: The cause attention type is different than the global attention + // type, in that it is the attention type that we actually + // isolated to. For example, the global attention type could be + // CHECK_STOP but the cause atttention type could be RECOVERABLE. + SCAN_COMM_REGISTER_CLASS * firand = mcsChip->getRegister("MCIFIR_AND"); + firand->setAllBits(); + + ATTENTION_TYPE l_attnType = i_sc.service_data->GetCauseAttentionType(); + switch ( l_attnType ) + { + case CHECK_STOP: firand->ClearBit(12); break; + case RECOVERABLE: firand->ClearBit(15); break; + case SPECIAL: firand->ClearBit(16); + firand->ClearBit(17); break; + default: + PRDF_ERR( "[MemUtil::clearHostAttns] Invalid attention type %d", + l_attnType ); + o_rc = FAIL; + break; + } + if ( SUCCESS != o_rc ) break; + + o_rc = firand->Write(); + if ( SUCCESS != o_rc) + { + PRDF_ERR( "[MemUtil::clearHostAttns] MCIFIR_AND write failed" ); + break; + } + + } while(0); + + if ( SUCCESS != o_rc ) + { + PRDF_ERR( "[MemUtil::clearHostAttns] Failed: i_memChip=0x%08x", + PlatServices::getHuid(memHandle) ); + } + + return o_rc; +} + +#endif // __HOSTBOOT_MODULE + +} // end namespace MemUtil +} // end namespace PRDF + diff --git a/src/usr/diag/prdf/plat/pegasus/prdfMemUtil.H b/src/usr/diag/prdf/plat/pegasus/prdfMemUtil.H new file mode 100644 index 000000000..edf638eab --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfMemUtil.H @@ -0,0 +1,58 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfMemUtil.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef prdfMemUtil_H +#define prdfMemUtil_H + +/** @file prdfMemUtil.H + * @brief General utility functions for the memory subsystem. + */ + +#include <iipconst.h> + +class PrdfExtensibleChip; +struct STEP_CODE_DATA_STRUCT; + +namespace PRDF +{ +namespace MemUtil +{ + +//#ifdef __HOSTBOOT_MODULE + +/** + * @brief Clears bits in the MCIFIR that are triggered by centaur attentions + * that are reported to the host. + * @param i_memChip Any memory chip (MCS, MEMBUF, MBS, MBA, DIMM, etc.). + * @param i_sc The step code data struct. + * @return Non-SUCCESS for internal errors, SUCCESS otherwise. + */ +int32_t clearHostAttns( PrdfExtensibleChip * i_memChip, + STEP_CODE_DATA_STRUCT & i_sc ); + +//#endif // __HOSTBOOT_MODULE + +} // end namespace MemUtil +} // end namespace PRDF + +#endif // prdfMemUtil_H diff --git a/src/usr/diag/prdf/plat/pegasus/prdfP8Mcs.C b/src/usr/diag/prdf/plat/pegasus/prdfP8Mcs.C new file mode 100755 index 000000000..d62412466 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfP8Mcs.C @@ -0,0 +1,57 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfP8Mcs.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfP8Mcs.C + * @brief Contains all the plugin code for the PRD P8 MCS + */ + +#include <iipServiceDataCollector.h> +#include <prdfExtensibleChip.H> +#include <prdfPluginMap.H> + +//############################################################################## +// +// Special plugins +// +//############################################################################## + +namespace PRDF +{ +namespace Mcs +{ + +/** + * @brief Plugin that initializes the MCS data bundle. + * @param i_mcsChip An MCS chip. + * @return SUCCESS + */ +int32_t Initialize( PrdfExtensibleChip * i_mcsChip ) +{ + // FIXME: Add proper initialization as per requirement + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Mcs, Initialize ); + +} // end namespace Mcs +} // end namespace PRDF + diff --git a/src/usr/diag/prdf/plat/pegasus/prdfP8Proc.C b/src/usr/diag/prdf/plat/pegasus/prdfP8Proc.C new file mode 100755 index 000000000..b921f7dc1 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfP8Proc.C @@ -0,0 +1,126 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfP8Proc.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfP8Proc.C + * @brief Contains all the plugin code for the PRD P8 Proc + */ +#include <prdfPluginDef.H> +#include <iipServiceDataCollector.h> +#include <prdfExtensibleChip.H> +#include <prdfPlatServices.H> +#include <prdfPluginMap.H> + +namespace PRDF +{ +namespace Proc +{ + +//############################################################################## +// +// Special plugins +// +//############################################################################## + +/** + * @brief Plugin that initializes the P8 Mba data bundle. + * @param i_chip P8 chip. + * @return SUCCESS + */ +int32_t Initialize( PrdfExtensibleChip * i_chip ) +{ + // FIXME: Add proper initialization as per requirement + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Proc, Initialize ); + +/** + * @fn CheckForRecovered + * @brief Used when the chip has a CHECK_STOP attention to check for the + * presence of recovered errors. + */ +int32_t CheckForRecovered(PrdfExtensibleChip * i_chip, + bool & o_hasRecovered) +{ + //FIXME: need to fully implement for P8 + o_hasRecovered = false; + + return SUCCESS; +} PRDF_PLUGIN_DEFINE( Proc, CheckForRecovered ); + + + +//------------------------------------------------------------------------------ +/** + * @fn prdCheckForRecoveredSev + * @brief Used when the chip is queried, by the fabric domain, for RECOVERED + * attentions to assign a severity to the attention for sorting. + * @param[in] i_chip - P8 chip + * @param[out] o_sev - Priority order (lowest to highest): + * 1 - Core chiplet checkstop + * 2 - Core chiplet error + * 3 - PCB chiplet error (TOD logic) + * 4 - Other error + * 5 - Memory controller chiplet + * + * @return SUCCESS + * + */ +int32_t CheckForRecoveredSev(PrdfExtensibleChip * i_chip, + uint32_t & o_sev) +{ + //FIXME: need to fully implement for P8 + o_sev = 1; + + return SUCCESS; + +} PRDF_PLUGIN_DEFINE( Proc, CheckForRecoveredSev ); + +/** @func GetCheckstopInfo + * To be called from the fabric domain to gather Checkstop information. This + * information is used in a sorting algorithm. + * + * This is a plugin function: GetCheckstopInfo + * + * @param i_chip - The chip. + * @param o_wasInternal - True if this chip has an internal checkstop. + * @param o_externalChips - List of external fabrics driving checkstop. + * @param o_wofValue - Current WOF value (unused for now). + */ +int32_t GetCheckstopInfo(PrdfExtensibleChip * i_chip, + bool & o_wasInternal, + TARGETING::TargetHandleList & o_externalChips, + uint64_t & o_wofValue) +{ + // Clear parameters. + o_wasInternal = true; //FIXME: default to true until fabric sorting is done + o_externalChips.erase(o_externalChips.begin(), o_externalChips.end()); + o_wofValue = 0; + + // FIXME: this will need to implement under fabric sorting algo + + return SUCCESS; + +} PRDF_PLUGIN_DEFINE( Proc, GetCheckstopInfo ); + +} // end namespace Proc +} // end namespace PRDF diff --git a/src/usr/diag/prdf/plat/pegasus/prdfP8SystemSpecific.C b/src/usr/diag/prdf/plat/pegasus/prdfP8SystemSpecific.C new file mode 100644 index 000000000..074ddd3e6 --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfP8SystemSpecific.C @@ -0,0 +1,43 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfP8SystemSpecific.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#include <prdfSystemSpecific.H> + +#include <iipglobl.h> +#include <iipScanCommRegisterAccess.h> +#include <prdfPegasusConfigurator.H> +#include <prdfPlatServices.H> + + +namespace PrdfSystemSpecific +{ + Configurator * getConfiguratorPtr() + { + return new PrdfPegasusConfigurator; + } + + void postAnalysisWorkarounds(STEP_CODE_DATA_STRUCT & i_sdc) + { + return; + } +}; diff --git a/src/usr/diag/prdf/plat/pegasus/prdfPegasusConfigurator.C b/src/usr/diag/prdf/plat/pegasus/prdfPegasusConfigurator.C new file mode 100644 index 000000000..db5986adf --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfPegasusConfigurator.C @@ -0,0 +1,181 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfPegasusConfigurator.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ + +#include <iipglobl.h> +#include <prdfPegasusConfigurator.H> +#include <prdfRuleFiles.H> + +#include <prdfRuleChip.H> +#include <iipDomainContainer.h> +#include <prdfScanFacility.H> +#include <iipResolutionFactory.h> + +#include <prdfFabricDomain.H> +#include <prdfExDomain.H> +#include <prdfMcsDomain.H> +#include <prdfMembufDomain.H> +#include <prdfMbaDomain.H> +#include <prdfPlatServices.H> +#include <iipSystem.h> +#include <prdrLoadChipCache.H> // To flush chip-file cache. + +//------------------------------------------------------------------------------ + +// Resolution for no chips at attention. +CallAttnResolution PrdfPegasusConfigurator::noAttnResolution; + +//------------------------------------------------------------------------------ + +System * PrdfPegasusConfigurator::build() +{ + using namespace TARGETING; + + PRDF_ENTER( "PrdfPegasusConfigurator::build()" ); + + // Create System object to populate with domains. + System * l_system = new System(noAttnResolution); + + // Create domains. + FabricDomain * l_procDomain = new FabricDomain( FABRIC_DOMAIN ); + PrdfExDomain * l_exDomain = new PrdfExDomain( EX_DOMAIN ); + PrdfMcsDomain * l_mcsDomain = new PrdfMcsDomain( MCS_DOMAIN ); + PrdfMembufDomain * l_membufDomain = new PrdfMembufDomain( MEMBUF_DOMAIN ); + PrdfMbaDomain * l_mbaDomain = new PrdfMbaDomain( MBA_DOMAIN ); + + // Add chips to domains. + addDomainChips( TYPE_PROC, l_procDomain ); + addDomainChips( TYPE_EX, l_exDomain ); + addDomainChips( TYPE_MCS, l_mcsDomain ); + addDomainChips( TYPE_MEMBUF, l_membufDomain ); + addDomainChips( TYPE_MBA, l_mbaDomain ); + + // Add domains to domain list. NOTE: Order is important because this is the + // order the domains will be analyzed. + sysDmnLst.push_back( l_procDomain ); + sysDmnLst.push_back( l_exDomain ); + sysDmnLst.push_back( l_mcsDomain ); + sysDmnLst.push_back( l_membufDomain ); + sysDmnLst.push_back( l_mbaDomain ); + + // Add chips to the system. + Configurator::chipList & chips = getChipList(); + l_system->AddChips( chips.begin(), chips.end() ); + + // Add domains to the system. + Configurator::domainList & domains = getDomainList(); + l_system->AddDomains( domains.begin(), domains.end() ); + + PRDF_EXIT( "PrdfPegasusConfigurator::build()" ); + + return l_system; +} + +//------------------------------------------------------------------------------ + +void PrdfPegasusConfigurator::addDomainChips( TARGETING::TYPE i_type, + PrdfRuleChipDomain * io_domain ) +{ + using namespace TARGETING; + using namespace PRDF; + + int32_t l_rc = SUCCESS; + + // Get references to factory objects. + ScanFacility & scanFac = ScanFacility::Access(); + ResolutionFactory & resFac = ResolutionFactory::Access(); + + // Get rule filename based on type. + const char * fileName = ""; + switch ( i_type ) + { + case TYPE_PROC: fileName = PRDF::Proc; break; + case TYPE_EX: fileName = PRDF::Ex; break; + case TYPE_MCS: fileName = PRDF::Mcs; break; + case TYPE_MEMBUF: fileName = PRDF::Membuf; break; + case TYPE_MBA: fileName = PRDF::Mba; break; + + default: + // Print a trace statement, but do not fail the build. + PRDF_ERR( "[addDomainChips] Unsupported target type: %d", i_type ); + l_rc = FAIL; + } + + if ( SUCCESS == l_rc ) + { + /* + // Test code to vary the size of the target config + // so we can still run one simic system type but + // get different configs for memory measurements + + uint32_t PROC_LIMIT = 16; // set to no limit for now + uint32_t MEMBUF_PER_PROC_LIMIT = 4; + uint32_t CONFIG_LIMIT = 0; + uint32_t count = 0; + switch ( i_type ) + { + case TYPE_PROC: CONFIG_LIMIT = PROC_LIMIT; break; + case TYPE_EX: CONFIG_LIMIT = 6 * PROC_LIMIT; break; + case TYPE_ABUS: CONFIG_LIMIT = 3 * PROC_LIMIT; break; + case TYPE_XBUS: CONFIG_LIMIT = 4 * PROC_LIMIT; break; + case TYPE_MCS: CONFIG_LIMIT = MEMBUF_PER_PROC_LIMIT * PROC_LIMIT; break; + case TYPE_MEMBUF: CONFIG_LIMIT = MEMBUF_PER_PROC_LIMIT * PROC_LIMIT; break; + case TYPE_MBA: CONFIG_LIMIT = 2 * MEMBUF_PER_PROC_LIMIT * PROC_LIMIT; break; + + default: break; + } + //end Test code + */ + + // Get all targets of specified type and add to given domain. + TargetHandleList list = PlatServices::getFunctionalTargetList( i_type ); + for ( TargetHandleList::const_iterator itr = list.begin(); + itr != list.end(); ++itr ) + { + if ( NULL == *itr ) continue; + + // Test code to vary the target config + //if(count < CONFIG_LIMIT) + //{ + +// PRDF_TRAC( "[addDomainChips] build rule chip target: 0x%08x", +// PlatServices::getHuid(*itr) ); + + PrdfRuleChip * chip = new PrdfRuleChip( fileName, *itr, + scanFac, resFac ); + sysChipLst.push_back( chip ); + io_domain->AddChip( chip ); + + //} + //count++; + } + + // Flush rule table cache since objects are all built. + Prdr::LoadChipCache::flushCache(); + + } +} + diff --git a/src/usr/diag/prdf/plat/pegasus/prdfPegasusConfigurator.H b/src/usr/diag/prdf/plat/pegasus/prdfPegasusConfigurator.H new file mode 100644 index 000000000..8e638e64d --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfPegasusConfigurator.H @@ -0,0 +1,86 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfPegasusConfigurator.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef prdfPegasusConfigurator_H +#define prdfPegasusConfigurator_H + +/** @file prdfPegasusConfigurator.H + * @brief Builds the PRD system model for Pegasus (P8 based systems). + */ + +#include <iipConfigurator.h> +#include <iipCallAttnResolution.h> // For CallAttnResolution +#include <prdfRuleChipDomain.H> + +/** @brief PRD configurator for Pegasus (P8 systems) */ +class PrdfPegasusConfigurator : public Configurator +{ + public: + + /** + * @brief Constructor + */ + PrdfPegasusConfigurator() : + Configurator( PrdfRuleChipDomain::TOTAL_CHIPS, + PrdfRuleChipDomain::TOTAL_DOMAINS ) + {} + + /** + * @brief Destructor + * @note This configurator does not delete the objects it created during + * build(); that is the responsibility of the system object. + */ + ~PrdfPegasusConfigurator() {} + + /** + * @brief Create the PRD system object, all chip instances, and all domain + * instances. + * @return Pointer to configured system. + * @note The caller of this function owns the responsiblity of deleting + * the system object created. + */ + virtual System * build(); + + private: // functions + + /** @brief Copy not allowed. */ + PrdfPegasusConfigurator( const PrdfPegasusConfigurator & right ); + + /** @brief Assignment not allowed. */ + const PrdfPegasusConfigurator & operator=( const PrdfPegasusConfigurator & right ); + + /** + * @brief Will add all chips of a given type to a domain. + * @parm i_type The specified target type. + * @parm io_domain The associated domain. + */ + void addDomainChips( TARGETING::TYPE i_type, + PrdfRuleChipDomain * io_domain ); + + private: // data + + static CallAttnResolution noAttnResolution; + +}; + +#endif diff --git a/src/usr/diag/prdf/plat/prdfL3Table.C b/src/usr/diag/prdf/plat/prdfL3Table.C new file mode 100755 index 000000000..b10deca9a --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfL3Table.C @@ -0,0 +1,81 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfL3Table.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2004,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** + @file prdfL3Table.C + @brief description +*/ +//------------------------------------------------------------------------------------------------- +// Includes +//------------------------------------------------------------------------------------------------- +#define prdfL3Table_C + +#include <prdfL3Table.H> + +#undef prdfL3Table_C +//------------------------------------------------------------------------------------------------- +// User Types, Constants, macros, prototypes, globals +//------------------------------------------------------------------------------------------------- + +//------------------------------------------------------------------------------------------------- +// Member Function Specifications +//------------------------------------------------------------------------------------------------- + +//------------------------------------------------------------------------------------------------- + +int32_t prdfL3TableAdd(TARGETING::TargetHandle_t i_pl3targetHandle, uint32_t address) +{ + int32_t rc = 0; + return rc; +} + +//------------------------------------------------------------------------------------------------- + +void prdfL3TableGet(TARGETING::TargetHandle_t i_pl3targetHandle, uint32_t table[LineDeleteTableSize]) +{ +} + +//------------------------------------------------------------------------------------------------- + +int32_t prdfL3TableCount(TARGETING::TargetHandle_t i_pl3targetHandle) +{ + int32_t rc = 0; + return rc; +} + +//------------------------------------------------------------------------------------------------- + +errlHndl_t prdfL3LineDelete(TARGETING::TargetHandle_t i_pl3targetHandle, uint32_t address) +{ + return NULL; +} + +//------------------------------------------------------------------------------------------------- + +// Change Log ************************************************************************************* +// +// Flag Reason Vers Date Coder Description +// ---- ------ ------- -------- -------- ------------------------------------------------------- +// 485074 fips310 12/14/04 dgilbert Initial Creation +// +// End Change Log ********************************************************************************* diff --git a/src/usr/diag/prdf/plat/prdfL3Table.H b/src/usr/diag/prdf/plat/prdfL3Table.H new file mode 100755 index 000000000..28157a3e7 --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfL3Table.H @@ -0,0 +1,113 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfL3Table.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2004,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef PRDFL3TABLE_H +#define PRDFL3TABLE_H +/** + @file prdfL3Table.H + @brief Description +*/ + + +//-------------------------------------------------------------------- +// Includes +//-------------------------------------------------------------------- + +#include <stdint.h> +#include <targeting/common/target.H> +#include <errlentry.H> + +//-------------------------------------------------------------------- +// Forward References +//-------------------------------------------------------------------- + +enum l3TableEnum +{ + LineDeleteTableSize = 10, ///< Size of line delete table + TableSizeBytes = LineDeleteTableSize*4, // wl01 + allFox = 0xffffffff, ///< uint of -1 + l3AddressMask = 0x007ffff0 +}; + + /** + Add a cache line address to the cache line delete table + <ul> + <br><b>Parameters: </b> L3 target Handle, cacheline address in format from ReadDataErLg2 register + <br><b>Returns: </b> 0 = address already in table, 1-LineDeleteTableSize = position added to table, LineDeleteTableSize + 1 = table overflow + <br><b>Requirements:</b> preconditions + <br><b>Promises: </b> postconditions + <br><b>Exceptions: </b> None. + <br><b>Notes: </b> + </ul><br> +*/ +extern int32_t prdfL3TableAdd(TARGETING::TargetHandle_t i_pl3targetHandle, uint32_t address); + + /** + Copies the line delete table to memory address passed in + <ul> + <br><b>Parameters: </b> L3 target Handle, address of int32[10] + <br><b>Returns: </b> returns void + <br><b>Requirements:</b> preconditions + <br><b>Promises: </b> postconditions + <br><b>Exceptions: </b> None. + <br><b>Notes: </b> + </ul><br> +*/ +extern void prdfL3TableGet(TARGETING::TargetHandle_t i_pl3targetHandle, uint32_t table[LineDeleteTableSize]); + + /** + Get the count of line deletes in the table + <ul> + <br><b>Parameters: </b> L3 target Handle + <br><b>Returns: </b> returns the number of line deletes in the table + <br><b>Requirements:</b> preconditions + <br><b>Promises: </b> postconditions + <br><b>Exceptions: </b> None. + <br><b>Notes: </b> + </ul><br> +*/ +extern int32_t prdfL3TableCount(TARGETING::TargetHandle_t i_pl3targetHandle); + + /** + Makes the call to DA to do the line delete + <ul> + <br><b>Parameters: </b> L3 target Handle, cacheline address in format from ReadDataErLg2 register + <br><b>Returns: </b> returns return code from D/a + <br><b>Requirements:</b> preconditions + <br><b>Promises: </b> postconditions + <br><b>Exceptions: </b> None. + <br><b>Notes: </b> + </ul><br> +*/ +extern errlHndl_t prdfL3LineDelete(TARGETING::TargetHandle_t i_pl3targetHandle, uint32_t address); + + +#endif /* PRDFL3TABLE_H */ + +// Change Log ***************************************************************** +// +// Flag Reason Vers Date Coder Description +// ---- ------ -------- -------- -------- ------------------------------------ +// 485074 fips310 12/14/04 dgilbert Initial Creation from prdfGrL3Table.H +// +// End Change Log ************************************************************* diff --git a/src/usr/diag/prdf/plat/prdfLineDelete.C b/src/usr/diag/prdf/plat/prdfLineDelete.C new file mode 100755 index 000000000..9f866c74c --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfLineDelete.C @@ -0,0 +1,249 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfLineDelete.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2005,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfLineDelete.C + * Contains the definitions needed for the line delete algorithms and the CE + * table. + */ + + +#include <prdfLineDelete.H> +#include <iipServiceDataCollector.h> +#include <prdfBitString.H> + +// See prdfLineDelete.H for full function documentation. +namespace PrdfLineDelete +{ + + /* PrdfCacheCETable::addAddress + * Insert address into CE table. + */ + bool PrdfCacheCETable::addAddress( PrdfCacheAddress i_addr, + STEP_CODE_DATA_STRUCT & i_sdc ) + { + // Get the time of the current error. + PrdTimer timeOfError = i_sdc.service_data->GetTOE(); + + // Check if time interval has elapsed. If so, flush the table. + if ( (timeOfError > cv_flushTimer) || !cv_flushTimerInited ) + { + this->flushTable(); + cv_flushTimer = timeOfError + iv_thPolicy.interval; + cv_flushTimerInited = true; + } + + // Increment address hit count and total table count. + uint32_t count = ++cv_ceTable[i_addr]; + cv_total++; + + // Return whether the address threshold has been reached or not. + return ( iv_thPolicy.threshold <= count ); + } + + /* PrdfCacheCETable::isIntervalElapsed() + */ + bool PrdfCacheCETable::isIntervalElapsed( STEP_CODE_DATA_STRUCT & i_sdc ) + { + bool o_rc = false; + if ( cv_flushTimerInited ) + o_rc = ( i_sdc.service_data->GetTOE() > cv_flushTimer ); + return o_rc; + } + + /* PrdfCacheCETable::flushTable() + * Clear all entries from CE table. + */ + void PrdfCacheCETable::flushTable() + { + // wipe interval timer and clear all hits. + cv_flushTimerInited = false; + cv_ceTable.clear(); + cv_total = 0; + } + + /* PrdfCacheCETable::getTotalCount() + * Clear all CE hits from the table and reset timer to 0. + */ + uint32_t PrdfCacheCETable::getTotalCount() // zs01 + { + return cv_total; + } + + /* PrdfCacheCETable::addToCaptureData() + * Will add CE table to the capture data. + */ + void PrdfCacheCETable::addToCaptureData(TARGETING::TargetHandle_t i_pchipHandle, int32_t i_scomId, + CaptureData & io_cd) // zs02 + { + const uint32_t l_maxEntries + = CaptureData::MAX_ENTRY_SIZE / (2 * sizeof(uint32_t)); + + uint32_t l_entryTable[l_maxEntries * 2]; + uint32_t l_entryIndex = 0; + + // Loop on all entries in CE table. + for (PrdfCacheAddressTable::iterator i = cv_ceTable.begin(); + i != cv_ceTable.end(); ++i) + { + // Add entry to table. + l_entryTable[2 * l_entryIndex] = i.first(); + l_entryTable[2 * l_entryIndex + 1] = i.second(); + + // Check if entry chunk is filled, or reached the end of entries. + if ( ( l_maxEntries == (l_entryIndex + 1) ) || + ( (i + 1) == cv_ceTable.end() ) ) + { + // Add chunk to capture data. + BIT_STRING_ADDRESS_CLASS l_entryChunk( 0, + ( ( (l_entryIndex + 1) * (2 * sizeof(uint32_t)) ) * 8 ), + (CPU_WORD*) l_entryTable ); + io_cd.Add(i_pchipHandle, i_scomId, l_entryChunk); + } + + // Increment entry ID. + l_entryIndex = (l_entryIndex + 1) % l_maxEntries; + } + } + + /* PrdfCacheCETable::getLargestEntry + * Will search the PrdfCacheCETable for the address with the largest count + */ + PrdfCacheAddress PrdfCacheCETable::getLargestEntry( uint32_t * o_count ) + { + PrdfCacheAddress largestEntry = 0; + uint32_t highestCount = 0; + + // Loop on all entries in CE table. + for (PrdfCacheAddressTable::iterator i = cv_ceTable.begin(); + i != cv_ceTable.end(); ++i) + { + if ( i.second() > highestCount ) + { + largestEntry = i.first(); + highestCount = i.second(); + + if (o_count != NULL) + (*o_count) = highestCount; + } + } + + return largestEntry; + } + + /* PrdfCacheCETable::getTableSize + */ + uint32_t PrdfCacheCETable::getTableSize() //zs04 + { + return cv_ceTable.size(); + } + + //mp26 a + /* PrdfCacheCETable::getCRCAnalysisEntries + * Will search the PrdfCacheCETable for the address with the largest count + * Also returns highest, second highest, and lowest count values + */ + + //NOTE: need to make sure table size is not zero before calling this function. + PrdfCacheAddress PrdfCacheCETable::getCRCAnalysisEntries( + uint32_t & o_countHigh, + uint32_t & o_count2ndHigh, + uint32_t & o_countLow) + { + PrdfCacheAddress largestEntry = 0; + + do + { + + PrdfCacheAddressTable::iterator i = cv_ceTable.begin(); + + // Initialize the counts to the value of the first entry. + largestEntry = i.first(); + o_countHigh = i.second(); + o_count2ndHigh = 0; + o_countLow = 0; + + if ( 1 == getTableSize() ) break; // only one entry + + ++i; // There are at least two entries, start at the second. + + // Initialize 2nd highest count and low count. + if ( i.second() > o_countHigh ) + { + o_count2ndHigh = o_countHigh; + o_countLow = o_countHigh; + + largestEntry = i.first(); + o_countHigh = i.second(); + } + else + { + o_count2ndHigh = i.second(); + o_countLow = i.second(); + } + + // Loop on all entries in CE table. + ++i; // Start at third entry. + // Note: loop will exit immediately if the table count is 2. + for ( ; i != cv_ceTable.end(); ++i ) + { + // Get highest count. + if ( i.second() > o_countHigh ) + { + o_count2ndHigh = o_countHigh; + + largestEntry = i.first(); + o_countHigh = i.second(); + } + // Get second highest count. + else if ( (i.second() > o_count2ndHigh) && + (i.second() <= o_countHigh) ) + { + o_count2ndHigh = i.second(); + } + // Get lowest count. + else if ( i.second() < o_countLow ) + { + o_countLow = i.second(); + } + } + + } while (0); + + return largestEntry; + } +}; + + + +// Change Log ****************************************************************** +// +// Flag Reason Vers Date Coder Description +// ---- ------- ---- -------- -------- ----------------------------------------- +// F522128 f300 09/22/05 iawillia Initial File Creation +// zs01 F565934 f310 09/06/06 zshelle Adding getTotalCount() +// zs02 d573288 f310 10/05/06 zshelle Adding addToCaptureData() +// zs03 588751 f310 03/12/07 zshelle Adding getLargestEntry() +// zs04 633659 f340 04/11/08 zshelle Add getEntryCount() and getTableSize() +// mp26 F750906 f720 plute Add getCRCAnalysisEntries +// +// End Change Log ************************************************************** diff --git a/src/usr/diag/prdf/plat/prdfLineDelete.H b/src/usr/diag/prdf/plat/prdfLineDelete.H new file mode 100755 index 000000000..09efa6a97 --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfLineDelete.H @@ -0,0 +1,191 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfLineDelete.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2005,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfLineDelete.H + * Contains the definitions needed for the line delete algorithms and the CE + * table. + */ + +#ifndef __PRDFLINEDELETE_H +#define __PRDFLINEDELETE_H + +#include <UtilSMap.H> +#include <prdfThresholdResolutions.H> +#include <iipstep.h> +#include <iipCaptureData.h> + +/** @namespace PrdfLineDelete + * Namespace to encapsulate all of the LineDelete specific classes and enums. + */ +namespace PrdfLineDelete +{ + + /** @enum PrdfCacheType + * Used to express where a cache error occured. + */ + enum PrdfCacheType + { + L3 = 0, + L3_DIR = 1, + L2 = 2, + L2_DIR = 4, + CACHE_MASK = L3 | L3_DIR | L2 | L2_DIR, + + SLICE_A = 8, + SLICE_B = 16, + SLICE_MASK = SLICE_A | SLICE_B + }; + + /** @enum PrdfCacheErrorType + * Used to express the types of cache errors that can occur. + */ + enum PrdfCacheErrorType + { + UE, CE + }; + + /** @typedef PrdfCacheAddress + * Used to index cache error hits in the CE table. + */ + typedef uint32_t PrdfCacheAddress; + + /** @typedef PrdfCacheAddressTable + * Maps Cache Addresses to hit counts. + */ + typedef UtilSMap<PrdfCacheAddress, uint32_t> PrdfCacheAddressTable; + + /** @class PrdfCacheCETable + * Used to store and threshold cache CE errors. + * + * Takes a threshold policy (such as "2 per day") and allows that many hits + * per address before signalling "at threshold". (the 2nd occurance would + * be the at threshold). + * + * @note This is now being used for eRepair as well as cache CEs. + */ + class PrdfCacheCETable + { + public: + + /** + * @brief Constructor from ThresholdPolicy struct. + * @param i_thPolicy A pointer to a ThresholdPolicy struct. + */ + explicit PrdfCacheCETable( + const ThresholdResolution::ThresholdPolicy & i_thPolicy ) : + iv_thPolicy(i_thPolicy), cv_flushTimerInited(false), cv_total(0) + {} + + // NOTE: iv_thPolicy should never be deleted in this class so the + // default destructor will be sufficient. + + /** @fn addAddress + * Insert an address into the CE table. + * + * @param The CE address. + * @param The Service Data Collector to get the current time. + * + * @return true - if the threshold policy has been reached. + * @return false - if the threshold policy has not been reached. + */ + bool addAddress(PrdfCacheAddress, STEP_CODE_DATA_STRUCT &); + + /** @fn PrdfCacheCETable::isIntervalElapsed() + * @param STEP_CODE_DATA_STRUCT & i_sdc + * @return TRUE if the interval time has elapsed. + */ + bool isIntervalElapsed( STEP_CODE_DATA_STRUCT & i_sdc ); + + /** @fn flushTable + * Clear all CE hits from the table and reset timer to 0. + */ + void flushTable(); + + /** @fn getTotalCount + * Returns the total amount of CE hits in a table + * + * @return uint32_t - the total CE hits in a table + */ + uint32_t getTotalCount(); //zs01 + + /** @fn addToCaptureData + * Adds CE table to the capture data. + * + * @param The chip Handle. + * @param The scom id. + * @param The Service Data Collector. + */ + void addToCaptureData(TARGETING::TargetHandle_t i_pchipHandle, int32_t, CaptureData &); // zs02 + + /** @fn getLargestEntry + * @brief Will search the PrdfCacheCETable for the address with the + * largest count. + * @param The count of the highest entry (default = NULL). + * @return Address with the largest count. + */ + PrdfCacheAddress getLargestEntry( uint32_t * o_count = NULL ); + + /** @fn PrdfCacheCETable::getTableSize + * @return uint32_t - The total number of entries in the table + */ + uint32_t getTableSize(); //zs04 + + //mp26 a + /** @fn getCRCAnalysisEntries + * @brief Will search the PrdfCacheCETable for the different count + * values.. + * @param Output the highest count.. + * @param Output the second highest count.. + * @param Output the lowest count.. + * @return Address with the largest count. + */ + PrdfCacheAddress getCRCAnalysisEntries( + uint32_t & o_countHigh, + uint32_t & o_count2ndHigh, + uint32_t & o_countLow); + + private: + + const ThresholdResolution::ThresholdPolicy iv_thPolicy; + PrdfCacheAddressTable cv_ceTable; + PrdTimer cv_flushTimer; + bool cv_flushTimerInited; + uint32_t cv_total; //zs01 + + }; + +}; +#endif + +// Change Log ********************************************************* +// +// Flag Reason Vers Date Coder Description +// ---- -------- ---- -------- -------- ------------------------------- +// F522128 f300 09/22/05 iawillia Initial File Creation +// zs01 F565934 f310 09/06/06 zshelle Adding getTotalCount() +// zs02 d573288 f310 10/05/06 zshelle Adding addToCaptureData() +// zs03 588751 f310 03/12/07 zshelle Adding getLargestEntry() +// zs04 633659 f340 04/11/08 zshelle Add getEntryCount() and getTableSize() +// mp26 F750906 f720 plute Add getCRCAnalysisEntries +// +// End Change Log ***************************************************** diff --git a/src/usr/diag/prdf/plat/prdfMemoryMru.C b/src/usr/diag/prdf/plat/prdfMemoryMru.C new file mode 100755 index 000000000..01f112717 --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfMemoryMru.C @@ -0,0 +1,38 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfMemoryMru.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2008,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#include <prdfMemoryMru.H> + +//------------------------------------------------------------------------------ + +#ifndef CONTEXT_x86_nfp + +TARGETING::TargetHandleList PrdfMemoryMru::getCalloutList() const +{ + TARGETING::TargetHandleList o_dimmList; + + return o_dimmList; +} + +#endif + diff --git a/src/usr/diag/prdf/plat/prdfMemoryMru.H b/src/usr/diag/prdf/plat/prdfMemoryMru.H new file mode 100755 index 000000000..6043a152c --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfMemoryMru.H @@ -0,0 +1,111 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfMemoryMru.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2008,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef prdfMemoryMru_H +#define prdfMemoryMru_H + +/** @file prdfMemoryMru.H + */ + +#include <stdint.h> + +#ifndef CONTEXT_x86_nfp + #include <targeting/common/target.H> +#endif + +class PrdfMemoryMru +{ + public: + + /** + * @brief Used to specify the PrdfMemoryMru type. + * + * One requirement for all memory MRUs is that it must be able to be + * converted into a 32-bit representation of the object. This number is then + * passed around is different places, one in particular is word 9 of the + * SRC. Eventually, data will need to be retrieved from the number. Since + * the structure of each memory MRU may change, bits[0:2] of the 32-bit + * number is reserved for the version type of the memory MRU. Based on the + * version a new memory MRU can be constructed. + * + * NOTE: The reason MEMMRU_ECLIPZ starts with 3 is because in the original + * P6 memory MRU there was a 4-bit field for the version type in which + * the value was 6 (for P6). To save as much space as possible the + * version field was reduced to 3 bits and the P6 version as changed + * to 3. Thus, saving a bit of space without compromising the value of + * that field. + */ + enum PrdfMemMruVersion + { + MEMMRU_INVALID = 0, ///< An invalid memory MRU + MEMMRU_ECLIPZ = 3, ///< A P6 MC memory MRU + MEMMRU_APOLLO = 5, ///< A P7 MC memory MRU + }; + + public: + + /** + * @brief Default contructor. + */ + PrdfMemoryMru() : iv_memMruUint32( 0 ) {} + + /** + * @brief Constructor from 32-bit representation of a memory MRU. + * @param i_memMruUint32 A 32-bit representation of a memory MRU. + */ + explicit PrdfMemoryMru( uint32_t i_memMruUint32 ) : + iv_memMruUint32( i_memMruUint32 ) + {} + + /** + * @brief Default destructor. + */ + virtual ~PrdfMemoryMru() {} + + /** + * @brief Returns the 32-bit representation of this memory MRU. + * @return The 32-bit representation of this memory MRU. + */ + virtual uint32_t toUint32() const + { return iv_memMruUint32; } + +#ifndef CONTEXT_x86_nfp + + /** + * @brief Returns a list of targets that are represented by this + * memory MRU. + * @return The number of targets in the callout list is returned. + */ + virtual TARGETING::TargetHandleList getCalloutList() const; + +#endif + + private: + + /** The 32-bit representation of this memory MRU. */ + uint32_t iv_memMruUint32; + +}; + +#endif /* prdfMemoryMru_H */ + diff --git a/src/usr/diag/prdf/plat/prdfRepairHealth.C b/src/usr/diag/prdf/plat/prdfRepairHealth.C new file mode 100755 index 000000000..7fc2165c2 --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfRepairHealth.C @@ -0,0 +1,69 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfRepairHealth.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2009,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#include <prdfRepairHealth.H> +#include <svpdextstructs.H> +#include <svpdextinterface.H> + +//#include <prdfP7McRepairHealth.H> + +tracDesc_t g_asmTracDesc; +TRAC_INIT( &g_asmTracDesc, PRDF_COMP_NAME, 4096 ); + +/* prdfGetRepairHealthStatus + * Get repair objects for FRU. + */ +errlHndl_t prdfGetRepairHealthStatus(uint32_t i_rid, + std::vector<PrdfRepairHealthStatus> & o_repairs) +{ + o_repairs.clear(); + + errlHndl_t l_errl = NULL; +/* + svpd_FruEnum l_fruType; + + do + { + + // Determine RID's FRU type. + l_errl = SVPD_get_frutype(i_rid, &l_fruType); + if (NULL != l_errl) break; + + switch(l_fruType) + { + case FRU_MS: + prdfP7McGetDimmRepairHealthStatus( i_rid, o_repairs ); + break; + + case FRU_PF: + prdfP7McGetInterfaceRepairHealthStatus( i_rid, o_repairs); + break; + + default: + break; + } + } while (false); +*/ + return l_errl; +} + diff --git a/src/usr/diag/prdf/plat/prdfRepairHealth.H b/src/usr/diag/prdf/plat/prdfRepairHealth.H new file mode 100755 index 000000000..ff2b10354 --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfRepairHealth.H @@ -0,0 +1,216 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfRepairHealth.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2009,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfRepairHealth.H + * @brief Defines interfaces to get applied repairs and health for a FRU, such + * as a DIMM. + */ +#ifndef __PRDF_PRDFREPAIRHEALTH_H +#define __PRDF_PRDFREPAIRHEALTH_H + +#include <vector> +#include <algorithm> + +#include <errlentry.H> + +// NOTE: Cannot use utilities prdfTrace.H because this code is pulled into +// libprdf_asm.so which is a very limited environment. +extern tracDesc_t g_asmTracDesc; + +// Forward declaration. +class PrdfRepairHealthStatus; + +/** @fn prdfGetRepairHealthStatus + * @brief Get the repair / health information for a RID. + * + * @param i_rid - The RID to get health information on. + * @param o_repairs - Vector containing RepairHealthStatus objects found for + * the RID. + * + * @return NULL or error log. + * + * The vector returned can contain information about many repairs, each in + * their own object. These repairs may even be of the same type but will have + * a unique identifier. For instance, a DIMM RID might return a set of "Chip + * Marks" for each "Rank" in the DIMM, a set of "Symbol Marks" for each "Rank" + * in the DIMM, and a single "DRAM Steer" for the entire DIMM. + * + * RID types presently supported: + * - DIMMs. + */ +errlHndl_t prdfGetRepairHealthStatus(uint32_t i_rid, + std::vector<PrdfRepairHealthStatus> & o_repairs); + +/** @class PrdfRepairHealthStatus + * @brief Holds information about a particular repair. + * + * A particular repair contains: + * - An identifier of the type of repair this is. + * - A set of identifying information about the repair. + * - A maximum and currently applied repair count. + * + * The identifying information about a repair can be of various amounts + * depending on the type of repair. For instance, a DIMM "Chip Mark" may only + * list the DIMM "Rank" while a "Bus eRepair" might have "Bus Direction" and + * two or more associated FRU identifiers. + * + * @note The identifiers for Interface eRepair are not finalized. Support for + * this is not until 7.2. + */ +class PrdfRepairHealthStatus +{ + public: + /** Types of repairs possible. */ + enum RepairTypes + { + /** UNKNOWN / Default Repair */ + PRDF_REPAIR_UNKNOWN, + /** DIMM Chip Mark */ + PRDF_REPAIR_CHIP_MARK, + /** DIMM Symbol Mark */ + PRDF_REPAIR_SYMBOL_MARK, + /** DIMM Spare DRAM Steer - not supported on all DIMMs */ + PRDF_REPAIR_SPARE_DRAM_STEER, + /** Inter-chip Bus Repair (eRepair) */ + PRDF_REPAIR_INTERFACE_REPAIR, + }; + + /** Types of associated identifying information */ + enum RepairIdentifiers + { + /** DIMM Rank ID */ + PRDF_REPAIR_ID_RANK, + /** Inter-chip Bus Repair - Bus Direction */ + PRDF_REPAIR_ID_BUS_DIRECTION, + /** Inter-chip Bus Repair - Upstream Chip */ + PRDF_REPAIR_ID_BUS_UPSTREAM_CHIP, + //** Inter-chip Bus Repair - Memory Controller Sequence*/ + PRDF_REPAIR_ID_BUS_MC_SEQUENCE, + //** Inter-chip Bus Repair - Memory Controller Channel*/ + PRDF_REPAIR_ID_BUS_MC_CHANNEL, + //** Inter-chip Bus Repair - Bus Repair Bit*/ + PRDF_REPAIR_ID_BUS_REPAIR_BIT, + //** Inter-chip Bus Repair - Clock Repaired*/ + PRDF_REPAIR_ID_BUS_CLOCK_REPAIRED, + }; + + /** Structure to hold associated identifying information */ + struct RepairId + { + RepairIdentifiers idType; + uint32_t id; + }; + + public: + /** Default constructor */ + PrdfRepairHealthStatus() : iv_repairType(PRDF_REPAIR_UNKNOWN), + iv_repairIdsCount(0), + iv_repairIds(NULL), + iv_repairsAllowed(0), + iv_repairsPresent(0) {}; + /** Copy constructor */ + PrdfRepairHealthStatus(const PrdfRepairHealthStatus & copy) + : iv_repairType(copy.iv_repairType), + iv_repairIdsCount(copy.iv_repairIdsCount), + iv_repairsAllowed(copy.iv_repairsAllowed), + iv_repairsPresent(copy.iv_repairsPresent) + { + // Copy the identfying info array into new object. + if (NULL == copy.iv_repairIds) + iv_repairIds = NULL; + else + { + iv_repairIds = new RepairId[iv_repairIdsCount]; + + std::copy(copy.iv_repairIds, + ©.iv_repairIds[iv_repairIdsCount], + iv_repairIds); + } + } + /** Destructor */ + ~PrdfRepairHealthStatus() + { + // Clean up the identifying info array. + if (NULL != iv_repairIds) + { + delete [] iv_repairIds; + iv_repairIds = NULL; + } + } + + // ---- External interfaces ---- // + /** Return the type of repair. */ + RepairTypes getRepairType() const { return iv_repairType; } + /** Return the number of associated identifying infos. */ + size_t getRepairIdsCount() const { return iv_repairIdsCount; } + /** @fn getRepairIds + * + * @brief Return pointer to associated identifying info array. + * @note This pointer should NOT be deleted by the caller. It is + * owned by this object. */ + const RepairId * getRepairIds() const { return iv_repairIds; } + /** Return maximum number of repairs allowed of this type / id */ + size_t getRepairsAllowed() const { return iv_repairsAllowed; } + /** Return current number of repairs of this type / id */ + size_t getRepairsPresent() const { return iv_repairsPresent; } + + protected: + /* ---- Interfaces for assigning contents. ---- + * These are defined protected so that only inheriting classes can + * used these. Design is that a repair type will define a "builder" + * class that has a constructor with the parameters to complete this + * object and fill in the extra identifying information. + */ + /** Assign repair type */ + void setRepairType(RepairTypes i_repairType) + { iv_repairType = i_repairType; } + /** @fn setRepairIds + * + * @brief Assign identifying info + * @param i_repairIds - This must be allocated using the new[] and + * ownership of the memory transfers to this object. + */ + void setRepairIds(size_t i_repairIdsCount, RepairId * i_repairIds) + { iv_repairIdsCount = i_repairIdsCount; + iv_repairIds = i_repairIds; } + /** Assign max / current repair counts */ + void setRepairCounts(size_t i_allowed, size_t i_present) + { iv_repairsAllowed = i_allowed; + iv_repairsPresent = i_present; }; + + private: + /** Repair type */ + RepairTypes iv_repairType; + + /** Extra identifying info count */ + size_t iv_repairIdsCount; + /** Extra identifying info array */ + RepairId * iv_repairIds; + + /** Maximum repair count. */ + size_t iv_repairsAllowed; + /** Current repair count. */ + size_t iv_repairsPresent; +}; + +#endif diff --git a/src/usr/diag/prdf/plat/prdfTOD.H b/src/usr/diag/prdf/plat/prdfTOD.H new file mode 100755 index 000000000..572656fa1 --- /dev/null +++ b/src/usr/diag/prdf/plat/prdfTOD.H @@ -0,0 +1,57 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/prdfTOD.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2010,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef PRDFTOD_H +#define PRDFTOD_H + + +/** @struct PrdfTodFaultData + * TOD Fault isolation information from a chip. + */ +struct PrdfTodFaultData +{ + TARGETING::TargetHandle_t source_chipHandle; + bool phyp_fault; + bool topo_fault[2]; // 0 is active, 1 is backup + bool topo_fault_clock[2]; + TARGETING::TargetHandle_t topo_fault_chip[2]; +}; + +int32_t prdfTorrent_TodCaptureRegisters(STEP_CODE_DATA_STRUCT & i_stepcode); +int32_t prdfTorrent_TodCleanUpErrors(STEP_CODE_DATA_STRUCT & i_stepcode); +int32_t prdfTorrent_TodCollectFaultDataSys(vector<PrdfTodFaultData> & o_faults, + STEP_CODE_DATA_STRUCT & i_stepcode); +int32_t prdfTorrent_TodCollectFaultDataChip(PrdfExtensibleChip * i_chip, + vector<PrdfTodFaultData> & o_faults, + STEP_CODE_DATA_STRUCT & i_stepcode); + + +int32_t prdfP7_TodCaptureRegisters(STEP_CODE_DATA_STRUCT & i_stepcode); +int32_t prdfP7_TodCleanUpErrors(STEP_CODE_DATA_STRUCT & i_stepcode); +int32_t prdfP7_TodCollectFaultDataSys(vector<PrdfTodFaultData> & o_faults, + STEP_CODE_DATA_STRUCT & i_stepcode); +int32_t prdfP7_TodCollectFaultDataChip(PrdfExtensibleChip * i_chip, + vector<PrdfTodFaultData> & o_faults, + STEP_CODE_DATA_STRUCT & i_stepcode); + +#endif //PRDFTOD_H |