diff options
Diffstat (limited to 'src/usr/diag/prdf/common')
-rw-r--r-- | src/usr/diag/prdf/common/plat/p9/p9_cumulus.rule | 24 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/p9/p9_nimbus.rule | 24 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/p9/p9_proc_common_actions.rule | 21 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/p9/p9_xbus.rule | 22 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/p9/p9_xbus_actions.rule | 9 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C | 49 |
6 files changed, 113 insertions, 36 deletions
diff --git a/src/usr/diag/prdf/common/plat/p9/p9_cumulus.rule b/src/usr/diag/prdf/common/plat/p9/p9_cumulus.rule index 12c54db9a..0626535ef 100644 --- a/src/usr/diag/prdf/common/plat/p9/p9_cumulus.rule +++ b/src/usr/diag/prdf/common/plat/p9/p9_cumulus.rule @@ -6213,32 +6213,32 @@ group gPBIOEFIR filter singlebit, cs_root_cause( 8, 11, 14 ) /** PBIOEFIR[28] * parser00 attn or X0evn link down */ - (rPBIOEFIR, bit(28)) ? self_th_1; + (rPBIOEFIR, bit(28)) ? calloutBusInterface_xbus0_th_1; /** PBIOEFIR[29] * parser01 attn or X0odd link down */ - (rPBIOEFIR, bit(29)) ? self_th_1; + (rPBIOEFIR, bit(29)) ? calloutBusInterface_xbus0_th_1; /** PBIOEFIR[30] * parser02 attn or X1evn link down */ - (rPBIOEFIR, bit(30)) ? self_th_1; + (rPBIOEFIR, bit(30)) ? calloutBusInterface_xbus1_th_1; /** PBIOEFIR[31] * parser03 attn or X1odd link down */ - (rPBIOEFIR, bit(31)) ? self_th_1; + (rPBIOEFIR, bit(31)) ? calloutBusInterface_xbus1_th_1; /** PBIOEFIR[32] * parser04 attn or X2evn link down */ - (rPBIOEFIR, bit(32)) ? self_th_1; + (rPBIOEFIR, bit(32)) ? calloutBusInterface_xbus2_th_1; /** PBIOEFIR[33] * parser05 attn or X2odd link down */ - (rPBIOEFIR, bit(33)) ? self_th_1; + (rPBIOEFIR, bit(33)) ? calloutBusInterface_xbus2_th_1; /** PBIOEFIR[34:35] * spare @@ -6313,17 +6313,17 @@ group gPBIOEFIR filter singlebit, cs_root_cause( 8, 11, 14 ) /** PBIOEFIR[52] * data outbnd switch int. err-links 01 */ - (rPBIOEFIR, bit(52)) ? chip_to_chip; + (rPBIOEFIR, bit(52)) ? calloutBusInterface_xbus0_th_1; /** PBIOEFIR[53] * data outbnd switch int. err-links 23 */ - (rPBIOEFIR, bit(53)) ? chip_to_chip; + (rPBIOEFIR, bit(53)) ? calloutBusInterface_xbus1_th_1; /** PBIOEFIR[54] * data outbnd switch int. err-links 45 */ - (rPBIOEFIR, bit(54)) ? chip_to_chip; + (rPBIOEFIR, bit(54)) ? calloutBusInterface_xbus2_th_1; /** PBIOEFIR[55] * spare @@ -6333,17 +6333,17 @@ group gPBIOEFIR filter singlebit, cs_root_cause( 8, 11, 14 ) /** PBIOEFIR[56] * data inbnd switch int. err-links 01 */ - (rPBIOEFIR, bit(56)) ? chip_to_chip; + (rPBIOEFIR, bit(56)) ? calloutBusInterface_xbus0_th_1; /** PBIOEFIR[57] * data inbnd switch int. err-links 23 */ - (rPBIOEFIR, bit(57)) ? chip_to_chip; + (rPBIOEFIR, bit(57)) ? calloutBusInterface_xbus1_th_1; /** PBIOEFIR[58] * data inbnd switch int. err-links 45 */ - (rPBIOEFIR, bit(58)) ? chip_to_chip; + (rPBIOEFIR, bit(58)) ? calloutBusInterface_xbus2_th_1; /** PBIOEFIR[59:61] * spare diff --git a/src/usr/diag/prdf/common/plat/p9/p9_nimbus.rule b/src/usr/diag/prdf/common/plat/p9/p9_nimbus.rule index 3a9811320..80b301266 100644 --- a/src/usr/diag/prdf/common/plat/p9/p9_nimbus.rule +++ b/src/usr/diag/prdf/common/plat/p9/p9_nimbus.rule @@ -6193,32 +6193,32 @@ group gPBIOEFIR filter singlebit, cs_root_cause( 8, 11, 14 ) /** PBIOEFIR[28] * parser00 attn or X0evn link down */ - (rPBIOEFIR, bit(28)) ? self_th_1; + (rPBIOEFIR, bit(28)) ? calloutBusInterface_xbus0_th_1; /** PBIOEFIR[29] * parser01 attn or X0odd link down */ - (rPBIOEFIR, bit(29)) ? self_th_1; + (rPBIOEFIR, bit(29)) ? calloutBusInterface_xbus0_th_1; /** PBIOEFIR[30] * parser02 attn or X1evn link down */ - (rPBIOEFIR, bit(30)) ? self_th_1; + (rPBIOEFIR, bit(30)) ? calloutBusInterface_xbus1_th_1; /** PBIOEFIR[31] * parser03 attn or X1odd link down */ - (rPBIOEFIR, bit(31)) ? self_th_1; + (rPBIOEFIR, bit(31)) ? calloutBusInterface_xbus1_th_1; /** PBIOEFIR[32] * parser04 attn or X2evn link down */ - (rPBIOEFIR, bit(32)) ? self_th_1; + (rPBIOEFIR, bit(32)) ? calloutBusInterface_xbus2_th_1; /** PBIOEFIR[33] * parser05 attn or X2odd link down */ - (rPBIOEFIR, bit(33)) ? self_th_1; + (rPBIOEFIR, bit(33)) ? calloutBusInterface_xbus2_th_1; /** PBIOEFIR[34:35] * spare @@ -6293,17 +6293,17 @@ group gPBIOEFIR filter singlebit, cs_root_cause( 8, 11, 14 ) /** PBIOEFIR[52] * data outbnd switch int. err-links 01 */ - (rPBIOEFIR, bit(52)) ? chip_to_chip; + (rPBIOEFIR, bit(52)) ? calloutBusInterface_xbus0_th_1; /** PBIOEFIR[53] * data outbnd switch int. err-links 23 */ - (rPBIOEFIR, bit(53)) ? chip_to_chip; + (rPBIOEFIR, bit(53)) ? calloutBusInterface_xbus1_th_1; /** PBIOEFIR[54] * data outbnd switch int. err-links 45 */ - (rPBIOEFIR, bit(54)) ? chip_to_chip; + (rPBIOEFIR, bit(54)) ? calloutBusInterface_xbus2_th_1; /** PBIOEFIR[55] * spare @@ -6313,17 +6313,17 @@ group gPBIOEFIR filter singlebit, cs_root_cause( 8, 11, 14 ) /** PBIOEFIR[56] * data inbnd switch int. err-links 01 */ - (rPBIOEFIR, bit(56)) ? chip_to_chip; + (rPBIOEFIR, bit(56)) ? calloutBusInterface_xbus0_th_1; /** PBIOEFIR[57] * data inbnd switch int. err-links 23 */ - (rPBIOEFIR, bit(57)) ? chip_to_chip; + (rPBIOEFIR, bit(57)) ? calloutBusInterface_xbus1_th_1; /** PBIOEFIR[58] * data inbnd switch int. err-links 45 */ - (rPBIOEFIR, bit(58)) ? chip_to_chip; + (rPBIOEFIR, bit(58)) ? calloutBusInterface_xbus2_th_1; /** PBIOEFIR[59:61] * spare diff --git a/src/usr/diag/prdf/common/plat/p9/p9_proc_common_actions.rule b/src/usr/diag/prdf/common/plat/p9/p9_proc_common_actions.rule index 23820b776..a09d030db 100644 --- a/src/usr/diag/prdf/common/plat/p9/p9_proc_common_actions.rule +++ b/src/usr/diag/prdf/common/plat/p9/p9_proc_common_actions.rule @@ -122,3 +122,24 @@ actionclass analyzeNPU0FIR analyze(gNPU0FIR); }; +/** Callout connected XBUS 0 interface on first occurrence */ +actionclass calloutBusInterface_xbus0_th_1 +{ + funccall("calloutBusInterface_XBUS0"); + threshold1; +}; + +/** Callout connected XBUS 1 interface on first occurrence */ +actionclass calloutBusInterface_xbus1_th_1 +{ + funccall("calloutBusInterface_XBUS1"); + threshold1; +}; + +/** Callout connected XBUS 2 interface on first occurrence */ +actionclass calloutBusInterface_xbus2_th_1 +{ + funccall("calloutBusInterface_XBUS2"); + threshold1; +}; + diff --git a/src/usr/diag/prdf/common/plat/p9/p9_xbus.rule b/src/usr/diag/prdf/common/plat/p9/p9_xbus.rule index a793d3855..512195c30 100644 --- a/src/usr/diag/prdf/common/plat/p9/p9_xbus.rule +++ b/src/usr/diag/prdf/common/plat/p9/p9_xbus.rule @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2016,2017 +# Contributors Listed Below - COPYRIGHT 2016,2018 # [+] International Business Machines Corp. # # @@ -189,7 +189,7 @@ group gIOXBFIR filter singlebit, cs_root_cause /** IOXBFIR[2] * GCR_HANG_ERROR */ - (rIOXBFIR, bit(2)) ? calloutXbusInterface; + (rIOXBFIR, bit(2)) ? calloutBusInterface_th_32perDay; /** IOXBFIR[3:7] * spare @@ -372,7 +372,7 @@ rule rIOELFIR IOELFIR & ~IOELFIR_MASK & IOELFIR_ACT0 & IOELFIR_ACT1; }; -group gIOELFIR filter singlebit, cs_root_cause +group gIOELFIR filter singlebit, cs_root_cause( 54, 55, 56, 57, 58, 59 ) { /** IOELFIR[0] * link0 trained @@ -512,42 +512,42 @@ group gIOELFIR filter singlebit, cs_root_cause /** IOELFIR[52] * link0 correctable array error */ - (rIOELFIR, bit(52)) ? self_th_32perDay; + (rIOELFIR, bit(52)) ? calloutBusInterface_th_32perDay; /** IOELFIR[53] * link1 correctable array error */ - (rIOELFIR, bit(53)) ? self_th_32perDay; + (rIOELFIR, bit(53)) ? calloutBusInterface_th_32perDay; /** IOELFIR[54] * link0 uncorrectable array error */ - (rIOELFIR, bit(54)) ? self_th_32perDay; + (rIOELFIR, bit(54)) ? calloutBusInterface_th_32perDay; /** IOELFIR[55] * link1 uncorrectable array error */ - (rIOELFIR, bit(55)) ? self_th_32perDay; + (rIOELFIR, bit(55)) ? calloutBusInterface_th_32perDay; /** IOELFIR[56] * link0 training failed */ - (rIOELFIR, bit(56)) ? self_th_32perDay; + (rIOELFIR, bit(56)) ? calloutBusInterface_th_32perDay; /** IOELFIR[57] * link1 training failed */ - (rIOELFIR, bit(57)) ? self_th_32perDay; + (rIOELFIR, bit(57)) ? calloutBusInterface_th_32perDay; /** IOELFIR[58] * link0 unrecoverable error */ - (rIOELFIR, bit(58)) ? self_th_32perDay; + (rIOELFIR, bit(58)) ? calloutBusInterface_th_32perDay; /** IOELFIR[59] * link1 unrecoverable error */ - (rIOELFIR, bit(59)) ? self_th_32perDay; + (rIOELFIR, bit(59)) ? calloutBusInterface_th_32perDay; /** IOELFIR[60] * link0 internal error diff --git a/src/usr/diag/prdf/common/plat/p9/p9_xbus_actions.rule b/src/usr/diag/prdf/common/plat/p9/p9_xbus_actions.rule index 5db21f969..2afb6c9ed 100644 --- a/src/usr/diag/prdf/common/plat/p9/p9_xbus_actions.rule +++ b/src/usr/diag/prdf/common/plat/p9/p9_xbus_actions.rule @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2017 +# Contributors Listed Below - COPYRIGHT 2017,2018 # [+] International Business Machines Corp. # # @@ -29,6 +29,13 @@ actionclass calloutXbusInterface funccall("calloutInterface_xbus"); }; +/** Callout the XBUS interface, threshold 32 per day */ +actionclass calloutBusInterface_th_32perDay +{ + calloutXbusInterface; + threshold32pday; +}; + /** Lane Repair: spare deployed */ actionclass spareDeployed { diff --git a/src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C b/src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C index 98c33238e..4fb6be4c5 100644 --- a/src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C +++ b/src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C @@ -44,6 +44,8 @@ #include <prdfP9PmRecovery.H> #endif +#include <prdfLaneRepair.H> + // Platform includes using namespace TARGETING; @@ -477,6 +479,53 @@ PRDF_PLUGIN_DEFINE_NS( p9_cumulus, Proc, PmRecovery ); //------------------------------------------------------------------------------ +/** + * @brief Callout a bus interface (i.e. XBUS, OBUS, DMI, etc.) + * @param i_chip PROC chip. + * @param i_type The bus endpoint type. + * @param i_pos The bus endpoint position relative to the processor. + * @param io_sc The step code data struct. + * @return SUCCESS + */ +int32_t calloutBusInterface( ExtensibleChip * i_chip, TARGETING::TYPE i_type, + uint32_t i_pos, STEP_CODE_DATA_STRUCT & io_sc ) +{ + ExtensibleChip * endPoint = getConnectedChild( i_chip, i_type, i_pos ); + if ( nullptr == endPoint ) + { + PRDF_ERR( "[calloutBusInterface] connection lookup failed: 0x%08x " + "0x%02x %d", i_chip->getHuid(), i_type, i_pos ); + io_sc.service_data->SetCallout(LEVEL2_SUPPORT, MRU_HIGH); + io_sc.service_data->SetCallout(i_chip->getTrgt()); + io_sc.service_data->SetThresholdMaskId(0); + } + else + { + LaneRepair::calloutBusInterface( endPoint, io_sc, MRU_LOW ); + } + + return SUCCESS; +} +PRDF_PLUGIN_DEFINE_NS( p9_nimbus, Proc, calloutBusInterface ); +PRDF_PLUGIN_DEFINE_NS( p9_cumulus, Proc, calloutBusInterface ); + +#define PLUGIN_CALLOUT_INTERFACE( TYPE, POS ) \ +int32_t calloutBusInterface_##TYPE##POS( ExtensibleChip * i_chip, \ + STEP_CODE_DATA_STRUCT & io_sc ) \ +{ \ + return calloutBusInterface( i_chip, TYPE_##TYPE, POS, io_sc ); \ +} \ +PRDF_PLUGIN_DEFINE_NS( p9_nimbus, Proc, calloutBusInterface_##TYPE##POS ); \ +PRDF_PLUGIN_DEFINE_NS( p9_cumulus, Proc, calloutBusInterface_##TYPE##POS ); + +PLUGIN_CALLOUT_INTERFACE( XBUS, 0 ) +PLUGIN_CALLOUT_INTERFACE( XBUS, 1 ) +PLUGIN_CALLOUT_INTERFACE( XBUS, 2 ) + +#undef PLUGIN_CALLOUT_INTERFACE + +//------------------------------------------------------------------------------ + } // end namespace Proc } // end namespace PRDF |