diff options
8 files changed, 412 insertions, 27 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C index a1d9d850f..41ebd1356 100755 --- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C +++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C @@ -973,6 +973,27 @@ uint32_t getNodePosition( TARGETING::TargetHandle_t i_target ) return o_pos; } +//------------------------------------------------------------------------------ + +TARGETING::MODEL getProcModel( TARGETING::TargetHandle_t i_proc ) +{ + #define PRDF_FUNC "[PlatServices::getProcModel] " + + MODEL l_model = MODEL_NA; + if( TYPE_PROC == getTargetType( i_proc ) ) + { + l_model = i_proc->getAttr<ATTR_MODEL>(); + } + else + { + PRDF_ERR( PRDF_FUNC"Invalid Target Huid = 0x%08x", getHuid( i_proc ) ); + } + + return l_model; + + #undef PRDF_FUNC +} + //############################################################################## //## //## Memory specific functions diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H index 2421fc144..1e2d5d9f7 100755 --- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H +++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H @@ -281,6 +281,14 @@ uint32_t getTargetPosition( TARGETING::TargetHandle_t i_target ); */ uint32_t getNodePosition( TARGETING::TargetHandle_t i_target ); +/** + * @brief Returns Model associated with Proc. + * Model expected is either MURANO or VENICE. + * @param i_proc a proc target + * @return proc model if target is valid else MODEL_NA + */ +TARGETING::MODEL getProcModel( TARGETING::TargetHandle_t i_proc ); + //############################################################################## //## //## Memory specific functions diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule index a767971c3..a00b1a3f3 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule @@ -2780,8 +2780,171 @@ group gPciNestFir filter singlebit ################################################################################ # PB Chiplet IOMCFIR_0 ################################################################################ +# RAS spreadsheet: p8dd1_mss_FFDC_37_ reviewd.xls + +rule IomcFir_0 +{ + CHECK_STOP: IOMCFIR_0 & ~IOMCFIR_0_MASK & ~IOMCFIR_0_ACT0 & ~IOMCFIR_0_ACT1; + RECOVERABLE: IOMCFIR_0 & ~IOMCFIR_0_MASK & ~IOMCFIR_0_ACT0 & IOMCFIR_0_ACT1; +}; + +group gIomcFir_0 filter singlebit +{ + /** IOMCFIR_0[0] + * FIR_RX_INVALID_STATE_OR_PARITY_ERROR + */ + (IomcFir_0, bit(0)) ? defaultMaskedError; + + /** IOMCFIR_0[1] + * FIR_TX_INVALID_STATE_OR_PARITY_ERROR + */ + (IomcFir_0, bit(1)) ? defaultMaskedError; + + /** IOMCFIR_0[2] + * FIR_GCR_HANG_ERROR + */ + (IomcFir_0, bit(2)) ? SelfHighThr1; + + /** IOMCFIR_0[3:7] + * Reserved + */ + (IomcFir_0, bit(3|4|5|6|7)) ? defaultMaskedError; + + /** IOMCFIR_0[8] + * MCS0 Training Error + */ + (IomcFir_0, bit(8)) ? defaultMaskedError; + + /** IOMCFIR_0[9] + * MCS0 Spare Deployed + */ + (IomcFir_0, bit(9)) ? spareDeployed_dmiBus0; + + /** IOMCFIR_0[10] + * MCS0 Max Spares Exceeded + */ + (IomcFir_0, bit(10)) ? maxSparesExceeded_dmiBus0; + + /** IOMCFIR_0[11] + * MCS0 Recalibration or Dynamic Repair Error + */ + (IomcFir_0, bit(11)) ? calloutDmiBus0Th1; + + /** IOMCFIR_0[12] + * MCS0 Too Many Bus Errors + */ + (IomcFir_0, bit(12)) ? defaultMaskedError; + + /** IOMCFIR_0[13:15] + * Reserved + */ + (IomcFir_0, bit(13|14|15)) ? defaultMaskedError; + + /** IOMCFIR_0[16] + * MCS1 Training Error + */ + (IomcFir_0, bit(16)) ? defaultMaskedError; + + /** IOMCFIR_0[17] + * MCS1 Spare Deployed + */ + (IomcFir_0, bit(17)) ? spareDeployed_dmiBus1; + + /** IOMCFIR_0[18] + * MCS1 Max Spares Exceeded + */ + (IomcFir_0, bit(18)) ? maxSparesExceeded_dmiBus1; + + /** IOMCFIR_0[19] + * MCS1 Recalibration or Dynamic Repair Error + */ + (IomcFir_0, bit(19)) ? calloutDmiBus1Th1; + + /** IOMCFIR_0[20] + * MCS1 Too Many Bus Errors + */ + (IomcFir_0, bit(20)) ? defaultMaskedError; + + /** IOMCFIR_0[21:23] + * Reserved + */ + (IomcFir_0, bit(21|22|23)) ? defaultMaskedError; + + /** IOMCFIR_0[24] + * MCS2 Training Error + */ + (IomcFir_0, bit(24)) ? defaultMaskedError; + + /** IOMCFIR_0[25] + * MCS2 Spare Deployed + */ + (IomcFir_0, bit(25)) ? spareDeployed_dmiBus2; + + /** IOMCFIR_0[26] + * MCS2 Max Spares Exceeded + */ + (IomcFir_0, bit(26)) ? maxSparesExceeded_dmiBus2; + + /** IOMCFIR_0[27] + * MCS2 Recalibration or Dynamic Repair Error + */ + (IomcFir_0, bit(27)) ? calloutDmiBus2Th1; + + /** IOMCFIR_0[28] + * MCS2 Too Many Bus Errors + */ + (IomcFir_0, bit(28)) ? defaultMaskedError; -# Venice only + /** IOMCFIR_0[29:31] + * Reserved + */ + (IomcFir_0, bit(29|30|31)) ? defaultMaskedError; + + /** IOMCFIR_0[32] + * MCS3 Training Error + */ + (IomcFir_0, bit(32)) ? defaultMaskedError; + + /** IOMCFIR_0[33] + * MCS3 Spare Deployed + */ + (IomcFir_0, bit(33)) ? spareDeployed_dmiBus3; + + /** IOMCFIR_0[34] + * MCS3 Max Spares Exceeded + */ + (IomcFir_0, bit(34)) ? maxSparesExceeded_dmiBus3; + + /** IOMCFIR_0[35] + * MCS3 Recalibration or Dynamic Repair Error + */ + (IomcFir_0, bit(35)) ? calloutDmiBus3Th1; + + /** IOMCFIR_0[36] + * MCS3 Too Many Bus Errors + */ + (IomcFir_0, bit(36)) ? defaultMaskedError; + + /** IOMCFIR_0[37:39] + * Reserved + */ + (IomcFir_0, bit(37|38|39)) ? defaultMaskedError; + + /** IOMCFIR_0[40:47] + * FIR_RX_BUS4 unused + */ + (IomcFir_0, bit(40|41|42|43|44|45|46|47)) ? defaultMaskedError; + + /** IOMCFIR_0[48] + * FIR_SCOMFIR_ERROR + */ + (IomcFir_0, bit(48)) ? defaultMaskedError; + + /** IOMCFIR_0[49] + * FIR_SCOMFIR_ERROR_CLONE + */ + (IomcFir_0, bit(49)) ? defaultMaskedError; +}; ################################################################################ # PB Chiplet IOMCFIR_1 @@ -3014,6 +3177,38 @@ actionclass calloutConnPci2AndIsolatePathTh1 calloutConnPci2Th1; }; +/** Callout the DMI bus 0 */ +actionclass calloutDmiBus0 +{ + callout(connected(TYPE_MCS, 0), MRU_MEDA); + callout(connected(TYPE_MEMBUF, 0), MRU_MEDA); + calloutDmiBusSymFru; +}; + +/** Callout the DMI bus 1 */ +actionclass calloutDmiBus1 +{ + callout(connected(TYPE_MCS, 1), MRU_MEDA); + callout(connected(TYPE_MEMBUF, 1), MRU_MEDA); + calloutDmiBusSymFru; +}; + +/** Callout the DMI bus 2 */ +actionclass calloutDmiBus2 +{ + callout(connected(TYPE_MCS, 2), MRU_MEDA); + callout(connected(TYPE_MEMBUF, 2), MRU_MEDA); + calloutDmiBusSymFru; +}; + +/** Callout the DMI bus 3 */ +actionclass calloutDmiBus3 +{ + callout(connected(TYPE_MCS, 3), MRU_MEDA); + callout(connected(TYPE_MEMBUF, 3), MRU_MEDA); + calloutDmiBusSymFru; +}; + /** Callout the DMI bus 4 */ actionclass calloutDmiBus4 { @@ -3046,6 +3241,18 @@ actionclass calloutDmiBus7 calloutDmiBusSymFru; }; +/** Callout the DMI bus 0, threshold 1 */ +actionclass calloutDmiBus0Th1 { calloutDmiBus0; threshold1; }; + +/** Callout the DMI bus 1, threshold 1 */ +actionclass calloutDmiBus1Th1 { calloutDmiBus1; threshold1; }; + +/** Callout the DMI bus 2, threshold 1 */ +actionclass calloutDmiBus2Th1 { calloutDmiBus2; threshold1; }; + +/** Callout the DMI bus 3, threshold 1 */ +actionclass calloutDmiBus3Th1 { calloutDmiBus3; threshold1; }; + /** Callout the DMI bus 4, threshold 1 */ actionclass calloutDmiBus4Th1 { calloutDmiBus4; threshold1; }; @@ -3058,6 +3265,22 @@ actionclass calloutDmiBus6Th1 { calloutDmiBus6; threshold1; }; /** Callout the DMI bus 7, threshold 1 */ actionclass calloutDmiBus7Th1 { calloutDmiBus7; threshold1; }; +/** Lane Repair: spare deployed - DMI bus 0 */ +actionclass spareDeployed_dmiBus0 +{ calloutDmiBus0; funccall("spareDeployed_dmiBus0"); }; + +/** Lane Repair: spare deployed - DMI bus 1 */ +actionclass spareDeployed_dmiBus1 +{ calloutDmiBus1; funccall("spareDeployed_dmiBus1"); }; + +/** Lane Repair: spare deployed - DMI bus 2 */ +actionclass spareDeployed_dmiBus2 +{ calloutDmiBus2; funccall("spareDeployed_dmiBus2"); }; + +/** Lane Repair: spare deployed - DMI bus 3 */ +actionclass spareDeployed_dmiBus3 +{ calloutDmiBus3; funccall("spareDeployed_dmiBus3"); }; + /** Lane Repair: spare deployed - DMI bus 4 */ actionclass spareDeployed_dmiBus4 { calloutDmiBus4; funccall("spareDeployed_dmiBus4"); }; @@ -3074,6 +3297,22 @@ actionclass spareDeployed_dmiBus6 actionclass spareDeployed_dmiBus7 { calloutDmiBus7; funccall("spareDeployed_dmiBus7"); }; +/** Lane Repair: max spares exceeded - DMI bus 0 */ +actionclass maxSparesExceeded_dmiBus0 +{ calloutDmiBus0Th1; funccall("maxSparesExceeded_dmiBus0"); }; + +/** Lane Repair: max spares exceeded - DMI bus 1 */ +actionclass maxSparesExceeded_dmiBus1 +{ calloutDmiBus1Th1; funccall("maxSparesExceeded_dmiBus1"); }; + +/** Lane Repair: max spares exceeded - DMI bus 2 */ +actionclass maxSparesExceeded_dmiBus2 +{ calloutDmiBus2Th1; funccall("maxSparesExceeded_dmiBus2"); }; + +/** Lane Repair: max spares exceeded - DMI bus 3 */ +actionclass maxSparesExceeded_dmiBus3 +{ calloutDmiBus3Th1; funccall("maxSparesExceeded_dmiBus3"); }; + /** Lane Repair: max spares exceeded - DMI bus 4 */ actionclass maxSparesExceeded_dmiBus4 { calloutDmiBus4Th1; funccall("maxSparesExceeded_dmiBus4"); }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule index c4a12584e..0518d5644 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule @@ -88,7 +88,7 @@ group gTpChipletFir filter singlebit /** TP_CHIPLET_FIR[13] * Attention from IOMCFIR_0 (Venice only) */ - (TpChipletFir, bit(13)) ? defaultMaskedError; + (TpChipletFir, bit(13)) ? analyze(gIomcFir_0); /** TP_CHIPLET_FIR[14] * Attention from IOMCFIR_1 diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_XBUS.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_XBUS.rule index 940a882c4..e3311b177 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_XBUS.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_XBUS.rule @@ -337,22 +337,22 @@ group gIoxFir_0 filter singlebit /** IOXFIR_0[9] * Spare Deployed */ - (IoxFir_0, bit(9)) ? defaultMaskedError; + (IoxFir_0, bit(9)) ? spareDeployed_xbus0; /** IOXFIR_0[10] * Max Spares Exceeded */ - (IoxFir_0, bit(10)) ? defaultMaskedError; + (IoxFir_0, bit(10)) ? maxSparesExceeded_xbus0; /** IOXFIR_0[11] * Recalibration or Dynamic Repair Error */ - (IoxFir_0, bit(11)) ? defaultMaskedError; + (IoxFir_0, bit(11)) ? calloutXbus0InterfaceTh1; /** IOXFIR_0[12] * Too Many Bus Errors */ - (IoxFir_0, bit(12)) ? defaultMaskedError; + (IoxFir_0, bit(12)) ? tooManyBusErrors_xbus0; /** IOXFIR_0[13:15] * Reserved @@ -523,22 +523,22 @@ group gIoxFir_2 filter singlebit /** IOXFIR_2[9] * Spare Deployed */ - (IoxFir_2, bit(9)) ? defaultMaskedError; + (IoxFir_2, bit(9)) ? spareDeployed_xbus2; /** IOXFIR_2[10] * Max Spares Exceeded */ - (IoxFir_2, bit(10)) ? defaultMaskedError; + (IoxFir_2, bit(10)) ? maxSparesExceeded_xbus2; /** IOXFIR_2[11] * Recalibration or Dynamic Repair Error */ - (IoxFir_2, bit(11)) ? defaultMaskedError; + (IoxFir_2, bit(11)) ? calloutXbus2InterfaceTh1; /** IOXFIR_2[12] * Too Many Bus Errors */ - (IoxFir_2, bit(12)) ? defaultMaskedError; + (IoxFir_2, bit(12)) ? tooManyBusErrors_xbus2; /** IOXFIR_2[13:15] * Reserved @@ -616,22 +616,22 @@ group gIoxFir_3 filter singlebit /** IOXFIR_3[9] * Spare Deployed */ - (IoxFir_3, bit(9)) ? defaultMaskedError; + (IoxFir_3, bit(9)) ? spareDeployed_xbus3; /** IOXFIR_3[10] * Max Spares Exceeded */ - (IoxFir_3, bit(10)) ? defaultMaskedError; + (IoxFir_3, bit(10)) ? maxSparesExceeded_xbus3; /** IOXFIR_3[11] * Recalibration or Dynamic Repair Error */ - (IoxFir_3, bit(11)) ? defaultMaskedError; + (IoxFir_3, bit(11)) ? calloutXbus3InterfaceTh1; /** IOXFIR_3[12] * Too Many Bus Errors */ - (IoxFir_3, bit(12)) ? defaultMaskedError; + (IoxFir_3, bit(12)) ? tooManyBusErrors_xbus3; /** IOXFIR_3[13:15] * Reserved @@ -717,6 +717,18 @@ actionclass calloutXbus2InterfaceTh1 { calloutXbus2Interface; threshold1; }; /** Callout the XBUS 3 interface, threshold 1 */ actionclass calloutXbus3InterfaceTh1 { calloutXbus3Interface; threshold1; }; +/** Lane Repair: spare deployed - XBUS 0 */ +actionclass spareDeployed_xbus0 +{ calloutXbus1Interface; funccall("spareDeployed_xbus0"); }; + +/** Lane Repair: max spares exceeded - XBUS 0 */ +actionclass maxSparesExceeded_xbus0 +{ calloutXbus1InterfaceTh1; funccall("maxSparesExceeded_xbus0"); }; + +/** Lane Repair: too many bus errors - XBUS 0 */ +actionclass tooManyBusErrors_xbus0 +{ calloutXbus1InterfaceTh1; funccall("tooManyBusErrors_xbus0"); }; + /** Lane Repair: spare deployed - XBUS 1 */ actionclass spareDeployed_xbus1 { calloutXbus1Interface; funccall("spareDeployed_xbus1"); }; @@ -729,6 +741,30 @@ actionclass maxSparesExceeded_xbus1 actionclass tooManyBusErrors_xbus1 { calloutXbus1InterfaceTh1; funccall("tooManyBusErrors_xbus1"); }; +/** Lane Repair: spare deployed - XBUS 2 */ +actionclass spareDeployed_xbus2 +{ calloutXbus1Interface; funccall("spareDeployed_xbus2"); }; + +/** Lane Repair: max spares exceeded - XBUS 2 */ +actionclass maxSparesExceeded_xbus2 +{ calloutXbus1InterfaceTh1; funccall("maxSparesExceeded_xbus2"); }; + +/** Lane Repair: too many bus errors - XBUS 2 */ +actionclass tooManyBusErrors_xbus2 +{ calloutXbus1InterfaceTh1; funccall("tooManyBusErrors_xbus2"); }; + +/** Lane Repair: spare deployed - XBUS 3 */ +actionclass spareDeployed_xbus3 +{ calloutXbus1Interface; funccall("spareDeployed_xbus3"); }; + +/** Lane Repair: max spares exceeded - XBUS 3 */ +actionclass maxSparesExceeded_xbus3 +{ calloutXbus1InterfaceTh1; funccall("maxSparesExceeded_xbus3"); }; + +/** Lane Repair: too many bus errors - XBUS 3 */ +actionclass tooManyBusErrors_xbus3 +{ calloutXbus1InterfaceTh1; funccall("tooManyBusErrors_xbus3"); }; + /** Threshold 5 per day, mask but do not predictively callout XBUS 0 */ actionclass calloutXbus0InterfaceTh5pDay { diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule index 772157838..ddff43d5f 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule @@ -728,7 +728,43 @@ # PB Chiplet IOMCFIR_0 ############################################################################ - # Venice only scomaddr = 0x02011A00 + register IOMCFIR_0 + { + name "IOMC0.BUSCTL.SCOM.FIR_REG"; + scomaddr 0x02011A00; + reset (&, 0x02011A01); + mask (|, 0x02011A05); + capture req funccall("isVeniceProc"); + capture group default; + }; + + register IOMCFIR_0_MASK + { + name "IOMC0.BUSCTL.SCOM.FIR_MASK_REG"; + scomaddr 0x02011A03; + capture req funccall("isVeniceProc"); + capture group default; + }; + + register IOMCFIR_0_ACT0 + { + name "IOMC0.BUSCTL.SCOM.FIR_ACTION0_REG"; + scomaddr 0x02011A06; + capture type secondary; + capture group default; + capture req funccall("isVeniceProc"); + capture req nonzero("IOMCFIR_0"); + }; + + register IOMCFIR_0_ACT1 + { + name "IOMC0.BUSCTL.SCOM.FIR_ACTION1_REG"; + scomaddr 0x02011A07; + capture type secondary; + capture group default; + capture req funccall("isVeniceProc"); + capture req nonzero("IOMCFIR_0"); + }; ############################################################################ # PB Chiplet IOMCFIR_1 diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_XBUS.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_XBUS.rule index 36047014e..41923663f 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_XBUS.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_XBUS.rule @@ -132,14 +132,16 @@ scomaddr 0x04011000; reset (&, 0x04011001); mask (|, 0x04011005); - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture group default; }; register IOXFIR_0_MASK { name "XBUS01.X0.BUSCTL.SCOM.FIR_MASK_REG"; scomaddr 0x04011003; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture group default; }; register IOXFIR_0_ACT0 @@ -147,7 +149,9 @@ name "XBUS01.X0.BUSCTL.SCOM.FIR_ACTION0_REG"; scomaddr 0x04011006; capture type secondary; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture req nonzero("IOXFIR_0"); + capture group default; }; register IOXFIR_0_ACT1 @@ -155,7 +159,9 @@ name "XBUS01.X0.BUSCTL.SCOM.FIR_ACTION1_REG"; scomaddr 0x04011007; capture type secondary; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture req nonzero("IOXFIR_0"); + capture group default; }; ############################################################################ @@ -206,14 +212,16 @@ scomaddr 0x04011800; reset (&, 0x04011801); mask (|, 0x04011805); - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture group default; }; register IOXFIR_2_MASK { name "XBUS23.X0.BUSCTL.SCOM.FIR_MASK_REG"; scomaddr 0x04011803; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture group default; }; register IOXFIR_2_ACT0 @@ -221,7 +229,9 @@ name "XBUS23.X0.BUSCTL.SCOM.FIR_ACTION0_REG"; scomaddr 0x04011806; capture type secondary; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture req nonzero("IOXFIR_2"); + capture group default; }; register IOXFIR_2_ACT1 @@ -229,7 +239,9 @@ name "XBUS23.X0.BUSCTL.SCOM.FIR_ACTION1_REG"; scomaddr 0x04011807; capture type secondary; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture req nonzero("IOXFIR_2"); + capture group default; }; ############################################################################ @@ -242,14 +254,16 @@ scomaddr 0x04011c00; reset (&, 0x04011c01); mask (|, 0x04011c05); - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture group default; }; register IOXFIR_3_MASK { name "XBUS23.X1.XBUS1.BUSCTL.SCOM.FIR_MASK_REG"; scomaddr 0x04011c03; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture group default; }; register IOXFIR_3_ACT0 @@ -257,7 +271,9 @@ name "XBUS23.X1.XBUS1.BUSCTL.SCOM.FIR_ACTION0_REG"; scomaddr 0x04011c06; capture type secondary; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture req nonzero("IOXFIR_3"); + capture group default; }; register IOXFIR_3_ACT1 @@ -265,7 +281,9 @@ name "XBUS23.X1.XBUS1.BUSCTL.SCOM.FIR_ACTION1_REG"; scomaddr 0x04011c07; capture type secondary; - capture group never; #FIXME: RTC 49971 + capture req funccall("isVeniceProc"); + capture req nonzero("IOXFIR_3"); + capture group default; }; ############################################################################ diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C index 02abce1f4..e77e092d4 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C @@ -423,12 +423,19 @@ int32_t maxSparesExceeded_##BUS##POS( ExtensibleChip * i_chip, \ { return LaneRepair::handleLaneRepairEvent(i_chip, TYPE, POS, i_sc, false); } \ PRDF_PLUGIN_DEFINE( Proc, maxSparesExceeded_##BUS##POS ); +PLUGIN_LANE_REPAIR( xbus, TYPE_XBUS, 0 ) PLUGIN_LANE_REPAIR( xbus, TYPE_XBUS, 1 ) +PLUGIN_LANE_REPAIR( xbus, TYPE_XBUS, 2 ) +PLUGIN_LANE_REPAIR( xbus, TYPE_XBUS, 3 ) PLUGIN_LANE_REPAIR( abus, TYPE_ABUS, 0 ) PLUGIN_LANE_REPAIR( abus, TYPE_ABUS, 1 ) PLUGIN_LANE_REPAIR( abus, TYPE_ABUS, 2 ) +PLUGIN_LANE_REPAIR( dmiBus, TYPE_MCS, 0 ) +PLUGIN_LANE_REPAIR( dmiBus, TYPE_MCS, 1 ) +PLUGIN_LANE_REPAIR( dmiBus, TYPE_MCS, 2 ) +PLUGIN_LANE_REPAIR( dmiBus, TYPE_MCS, 3 ) PLUGIN_LANE_REPAIR( dmiBus, TYPE_MCS, 4 ) PLUGIN_LANE_REPAIR( dmiBus, TYPE_MCS, 5 ) PLUGIN_LANE_REPAIR( dmiBus, TYPE_MCS, 6 ) @@ -442,7 +449,10 @@ int32_t tooManyBusErrors_##BUS##POS( ExtensibleChip * i_chip, \ { return LaneRepair::handleLaneRepairEvent(i_chip, TYPE, POS, i_sc, false); } \ PRDF_PLUGIN_DEFINE( Proc, tooManyBusErrors_##BUS##POS ); +PLUGIN_LANE_REPAIR( xbus, TYPE_XBUS, 0 ) PLUGIN_LANE_REPAIR( xbus, TYPE_XBUS, 1 ) +PLUGIN_LANE_REPAIR( xbus, TYPE_XBUS, 2 ) +PLUGIN_LANE_REPAIR( xbus, TYPE_XBUS, 3 ) PLUGIN_LANE_REPAIR( abus, TYPE_ABUS, 0 ) PLUGIN_LANE_REPAIR( abus, TYPE_ABUS, 1 ) @@ -566,6 +576,22 @@ int32_t MaskMCS31IfCentaurCheckstop( ExtensibleChip * i_chip, } PRDF_PLUGIN_DEFINE( Proc, MaskMCS31IfCentaurCheckstop ); +/** + * @brief checks if proc is Venice chip. + * @param i_chip P8 chip. + * @param isVenice TRUE if chip is venice false otherwise. + * @return SUCCESS + */ +int32_t isVeniceProc( ExtensibleChip * i_chip, bool & o_isVenice ) +{ + o_isVenice = false; + if( MODEL_VENICE == getProcModel( i_chip->GetChipHandle() ) ) + o_isVenice = true; + + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Proc, isVeniceProc ); + //------------------------------------------------------------------------------ // Callout plugins //------------------------------------------------------------------------------ @@ -689,6 +715,7 @@ int32_t phbConfigured(ExtensibleChip * i_chip, return SUCCESS; + #undef PRDF_FUNC } #define PLUGIN_PHB_CONFIGURED( POS ) \ |