summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsachin gupta <sgupta2m@in.ibm.com>2013-10-26 12:55:19 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-11-13 10:12:11 -0600
commit7ed6a31d42398e5376a61cd5404f03ce788855f4 (patch)
tree1b4ac50693008220252a964e99b73e217ec83d93 /src
parent584cce07fa7485820b25e70b002f055ab109889f (diff)
downloadtalos-hostboot-7ed6a31d42398e5376a61cd5404f03ce788855f4.tar.gz
talos-hostboot-7ed6a31d42398e5376a61cd5404f03ce788855f4.zip
PRD: Brazos lane repair
Change-Id: I0829fadcb5ec910531d722c6bd8511452b2f290b RTC: 49927 CQ: SW231329 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/6892 Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Tested-by: Jenkins Server Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7208 Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.C21
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.H8
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule241
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_TP.rule2
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_XBUS.rule60
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule38
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_regs_XBUS.rule42
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C27
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 ) \
OpenPOWER on IntegriCloud