diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2015-03-10 15:42:28 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-04-13 12:23:09 -0500 |
commit | 27ea9d15f97d6e34e47c63e5654a30d7923acd87 (patch) | |
tree | 625f84f20c93a5aef98b454cf01770783ed85e5b /src/usr | |
parent | 4f3df8aacc525487f04e81603f41ea9312cd14ea (diff) | |
download | talos-hostboot-27ea9d15f97d6e34e47c63e5654a30d7923acd87.tar.gz talos-hostboot-27ea9d15f97d6e34e47c63e5654a30d7923acd87.zip |
PRD: replace bus symbolic FRUs with HW callouts
Change-Id: If1ba6d78a8c3e995b3795eb999ccdbe4b89dde59
RTC: 114364
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16340
Tested-by: Jenkins Server
Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/17024
Diffstat (limited to 'src/usr')
14 files changed, 302 insertions, 66 deletions
diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfCalloutMap.H b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutMap.H index 811bdd346..fbc202914 100644 --- a/src/usr/diag/prdf/common/framework/resolution/prdfCalloutMap.H +++ b/src/usr/diag/prdf/common/framework/resolution/prdfCalloutMap.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2014 */ +/* Contributors Listed Below - COPYRIGHT 2012,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -80,8 +80,6 @@ PRDF_SYM_CALLOUT_ALIAS( AllProcessors, EPUB_PRC_ALL_PROCS ) PRDF_SYM_CALLOUT_ALIAS( SP_CODE, EPUB_PRC_SP_CODE ) PRDF_SYM_CALLOUT_ALIAS( SystemSW_Code_ENUM, EPUB_PRC_PHYP_CODE ) PRDF_SYM_CALLOUT_ALIAS( NextLevelSupport_ENUM, EPUB_PRC_LVL_SUPP ) -PRDF_SYM_CALLOUT_ALIAS( MEMBUS_ERROR_ENUM, EPUB_PRC_MEMBUS_ERROR ) -PRDF_SYM_CALLOUT_ALIAS( PassiveFabric_OnNode_ENUM, EPUB_PRC_PROC_XYZ_BUS ) PRDF_SYM_CALLOUT_ALIAS( PassiveFabric_OffNode_ENUM, EPUB_PRC_PROC_AB_BUS ) PRDF_SYM_CALLOUT_ALIAS( ErrorCausedByMemUE_ENUM, EPUB_PRC_MEMORY_UE ) PRDF_SYM_CALLOUT_ALIAS( TODProcInterface_Enum, EPUB_PRC_TOD_CLOCK_ERR ) diff --git a/src/usr/diag/prdf/common/plat/pegasus/CommonActions.rule b/src/usr/diag/prdf/common/plat/pegasus/CommonActions.rule index a4488f1af..0747c0236 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/CommonActions.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/CommonActions.rule @@ -141,10 +141,6 @@ actionclass callout2ndLvlMed actionclass callout2ndLvlLow { callout(procedure(NextLevelSupport_ENUM), MRU_LOW); }; -/** Callout the DMI bus symbolic FRU */ -actionclass calloutDmiBusSymFru -{ callout(procedure(MEMBUS_ERROR_ENUM), MRU_LOW); }; - /** Callout self with medium priority but don't gard it */ actionclass calloutSelfMedNoGard { callout(MRU_MED, NO_GARD); }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/Mcs.rule b/src/usr/diag/prdf/common/plat/pegasus/Mcs.rule index d29652f56..e70bb0349 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Mcs.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Mcs.rule @@ -518,7 +518,7 @@ actionclass calloutDmiBus { calloutSelfMedA; callout(connected(TYPE_MEMBUF), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi"); }; /** Clear MBS SecondaryBits and calloutDmiBusTh1 */ @@ -578,7 +578,7 @@ actionclass calloutDmiBusSelfLowConnMed { calloutSelfLow; callout(connected(TYPE_MEMBUF), MRU_MED); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi"); threshold1; }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule b/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule index e0c67dd2d..2ce8efa93 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule @@ -1261,7 +1261,7 @@ actionclass calloutDmiBus { calloutSelfMedA; callout(connected(TYPE_MCS), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi"); }; /** Handles MCS Chnl XSTOP if present otherwise handles MBIFIR Replay Timeout */ diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_ABUS.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_ABUS.rule index 51f530f58..4d7e45728 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_ABUS.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_ABUS.rule @@ -524,6 +524,7 @@ actionclass calloutAbus0Interface callout(procedure(PassiveFabric_OffNode_ENUM), MRU_MED); callout(connected(TYPE_ABUS, 0), MRU_MEDA); callout(connected_peer(TYPE_ABUS, 0), MRU_MEDA); + funccall("calloutInterface_abus0"); }; /** Callout the ABUS 1 interface */ @@ -532,6 +533,7 @@ actionclass calloutAbus1Interface callout(procedure(PassiveFabric_OffNode_ENUM), MRU_MED); callout(connected(TYPE_ABUS, 1), MRU_MEDA); callout(connected_peer(TYPE_ABUS, 1), MRU_MEDA); + funccall("calloutInterface_abus1"); }; /** Callout the ABUS 2 interface */ @@ -540,6 +542,7 @@ actionclass calloutAbus2Interface callout(procedure(PassiveFabric_OffNode_ENUM), MRU_MED); callout(connected(TYPE_ABUS, 2), MRU_MEDA); callout(connected_peer(TYPE_ABUS, 2), MRU_MEDA); + funccall("calloutInterface_abus2"); }; /** Callout the ABUS 0 interface, threshold 1 */ 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 56cf7b1a6..cdee22b3c 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 @@ -2993,8 +2993,7 @@ actionclass calloutDmiBus0 { callout(connected(TYPE_MCS, 0), MRU_MEDA); callout(connected(TYPE_MEMBUF, 0), MRU_MEDA); - calloutDmiBusSymFru; - + funccall("calloutInterface_dmi0"); }; /** Callout the DMI bus 1 */ @@ -3002,7 +3001,7 @@ actionclass calloutDmiBus1 { callout(connected(TYPE_MCS, 1), MRU_MEDA); callout(connected(TYPE_MEMBUF, 1), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi1"); }; /** Callout the DMI bus 2 */ @@ -3010,7 +3009,7 @@ actionclass calloutDmiBus2 { callout(connected(TYPE_MCS, 2), MRU_MEDA); callout(connected(TYPE_MEMBUF, 2), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi2"); }; /** Callout the DMI bus 3 */ @@ -3018,7 +3017,7 @@ actionclass calloutDmiBus3 { callout(connected(TYPE_MCS, 3), MRU_MEDA); callout(connected(TYPE_MEMBUF, 3), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi3"); }; /** Callout the DMI bus 4 */ @@ -3026,7 +3025,7 @@ actionclass calloutDmiBus4 { callout(connected(TYPE_MCS, 4), MRU_MEDA); callout(connected(TYPE_MEMBUF, 4), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi4"); }; /** Callout the DMI bus 5 */ @@ -3034,7 +3033,7 @@ actionclass calloutDmiBus5 { callout(connected(TYPE_MCS, 5), MRU_MEDA); callout(connected(TYPE_MEMBUF, 5), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi5"); }; /** Callout the DMI bus 6 */ @@ -3042,7 +3041,7 @@ actionclass calloutDmiBus6 { callout(connected(TYPE_MCS, 6), MRU_MEDA); callout(connected(TYPE_MEMBUF, 6), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi6"); }; /** Callout the DMI bus 7 */ @@ -3050,7 +3049,7 @@ actionclass calloutDmiBus7 { callout(connected(TYPE_MCS, 7), MRU_MEDA); callout(connected(TYPE_MEMBUF, 7), MRU_MEDA); - calloutDmiBusSymFru; + funccall("calloutInterface_dmi7"); }; /** Callout the DMI bus 0, threshold 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 33407a292..744d10c6b 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 @@ -685,7 +685,7 @@ actionclass calloutXbus0Interface { callout(connected(TYPE_XBUS, 0), MRU_MEDA); callout(connected_peer(TYPE_XBUS, 0), MRU_MEDA); - callout(procedure(PassiveFabric_OnNode_ENUM), MRU_LOW); + funccall("calloutInterface_xbus0"); }; /** Callout the XBUS 1 interface */ @@ -693,7 +693,7 @@ actionclass calloutXbus1Interface { callout(connected(TYPE_XBUS, 1), MRU_MEDA); callout(connected_peer(TYPE_XBUS, 1), MRU_MEDA); - callout(procedure(PassiveFabric_OnNode_ENUM), MRU_LOW); + funccall("calloutInterface_xbus1"); }; /** Callout the XBUS 2 interface */ @@ -701,7 +701,7 @@ actionclass calloutXbus2Interface { callout(connected(TYPE_XBUS, 2), MRU_MEDA); callout(connected_peer(TYPE_XBUS, 2), MRU_MEDA); - callout(procedure(PassiveFabric_OnNode_ENUM), MRU_LOW); + funccall("calloutInterface_xbus2"); }; /** Callout the XBUS 3 interface */ @@ -709,7 +709,7 @@ actionclass calloutXbus3Interface { callout(connected(TYPE_XBUS, 3), MRU_MEDA); callout(connected_peer(TYPE_XBUS, 3), MRU_MEDA); - callout(procedure(PassiveFabric_OnNode_ENUM), MRU_LOW); + funccall("calloutInterface_xbus3"); }; /** Callout the XBUS 0 interface, threshold 1 */ diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C index ba6e40da7..f09ec6c3d 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C @@ -30,9 +30,12 @@ #include <iipServiceDataCollector.h> #include <prdfCenAddress.H> #include <prdfCenMarkstore.H> +#include <prdfErrlUtil.H> #include <prdfPlatServices.H> #include <prdfTrace.H> +#include <hwas/common/hwasCallout.H> + using namespace TARGETING; namespace PRDF @@ -223,6 +226,164 @@ TargetHandleList getConnectedDimms( TargetHandle_t i_mba, #undef PRDF_FUNC } +//------------------------------------------------------------------------------ + +int32_t getBusEndpoints( ExtensibleChip * i_chip, + TargetHandle_t o_rxTrgt, TargetHandle_t o_txTrgt, + TYPE i_busType, uint32_t i_busPos ) +{ + #define PRDF_FUNC "[CalloutUtil::getBusEndpoints] " + + int32_t rc = SUCCESS; + + o_rxTrgt = NULL; + o_txTrgt = NULL; + + TargetHandle_t chipTrgt = i_chip->GetChipHandle(); + TYPE chipType = getTargetType(chipTrgt); + + if ( TYPE_PROC == chipType ) + { + o_rxTrgt = getConnectedChild( chipTrgt, i_busType, i_busPos ); + + if ( TYPE_ABUS == i_busType || TYPE_XBUS == i_busType ) + { + o_txTrgt = getConnectedPeerTarget( o_rxTrgt ); + } + else if ( TYPE_MCS == i_busType ) + { + o_txTrgt = getConnectedChild( o_rxTrgt, TYPE_MEMBUF, 0 ); + } + } + else if ( TYPE_MCS == chipType ) + { + o_rxTrgt = chipTrgt; + o_txTrgt = getConnectedChild( o_rxTrgt, TYPE_MEMBUF, 0 ); + } + else if ( TYPE_MEMBUF == chipType ) + { + o_rxTrgt = chipTrgt; + o_txTrgt = getConnectedParent( o_rxTrgt, TYPE_MCS ); + } + + // Note that all of the 'getConnected' functions above do proper parameter + // checking and will return NULL if anything is wrong. So this is the only + // NULL check we actually need in this function. + + if ( NULL == o_rxTrgt || NULL == o_txTrgt ) + { + PRDF_ERR( PRDF_FUNC"i_chip:0x%08x o_rxTrgt:0x%08x o_txTrgt:0x%08x " + "i_busType:%d i_busPos:%d", getHuid(chipTrgt), + getHuid(o_rxTrgt), getHuid(o_txTrgt), i_busType, i_busPos ); + rc = FAIL; + } + + return rc; + + #undef PRDF_FUNC +} + +//------------------------------------------------------------------------------ + +int32_t calloutBusInterface( TargetHandle_t i_rxTrgt, TargetHandle_t i_txTrgt, + PRDpriority i_priority ) +{ + #define PRDF_FUNC "[CalloutUtil::calloutBusInterface] " + + int32_t rc = SUCCESS; + + do + { + // Check for valid targets. + if ( NULL == i_rxTrgt || NULL == i_txTrgt ) + { + PRDF_ERR( PRDF_FUNC"Given target(s) are NULL" ); + rc = FAIL; break; + } + + // Get the HWAS bus type. + HWAS::busTypeEnum hwasType; + + TYPE rxType = getTargetType(i_rxTrgt); + TYPE txType = getTargetType(i_txTrgt); + + if ( TYPE_ABUS == rxType && TYPE_ABUS == txType ) + { + hwasType = HWAS::A_BUS_TYPE; + } + else if ( TYPE_XBUS == rxType && TYPE_XBUS == txType ) + { + hwasType = HWAS::X_BUS_TYPE; + } + else if ( (TYPE_MCS == rxType && TYPE_MEMBUF == txType) || + (TYPE_MEMBUF == rxType && TYPE_MCS == txType) ) + { + hwasType = HWAS::DMI_BUS_TYPE; + } + else + { + PRDF_ERR( PRDF_FUNC"Unsupported target types" ); + rc = FAIL; break; + } + + // Get the global error log. + errlHndl_t errl = NULL; + errl = ServiceGeneratorClass::ThisServiceGenerator().getErrl(); + if ( NULL == errl ) + { + PRDF_ERR( PRDF_FUNC"Failed to get the global error log" ); + rc = FAIL; break; + } + + // Callout this bus interface. + PRDF_ADD_BUS_CALLOUT( errl, i_rxTrgt, i_txTrgt, hwasType, i_priority ); + + } while(0); + + if ( SUCCESS != rc ) + { + PRDF_ERR( PRDF_FUNC"i_rxTrgt:0x%08x i_txTrgt:0x%08x i_priority:%d", + getHuid(i_rxTrgt), getHuid(i_txTrgt), i_priority ); + } + + return rc; + + #undef PRDF_FUNC +} + +//------------------------------------------------------------------------------ + +int32_t calloutBusInterface( ExtensibleChip * i_chip, PRDpriority i_priority, + TYPE i_busType, uint32_t i_busPos ) +{ + #define PRDF_FUNC "[CalloutUtil::calloutBusInterface] " + + int32_t rc = SUCCESS; + + do + { + TargetHandle_t rxTrgt = NULL; TargetHandle_t txTrgt = NULL; + + rc = getBusEndpoints( i_chip, rxTrgt, txTrgt, i_busType, i_busPos ); + if ( SUCCESS != rc ) break; + + rc = calloutBusInterface( rxTrgt, txTrgt, i_priority ); + if ( SUCCESS != rc ) break; + + } while(0); + + if ( SUCCESS != rc ) + { + PRDF_ERR( PRDF_FUNC"i_chip:0x%08x i_busType:%d i_busPos:%d " + "i_priority:%d", i_chip->GetId(), i_busType, i_busPos, + i_priority ); + } + + return rc; + + #undef PRDF_FUNC +} + } // end namespace CalloutUtil } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H index ba7eba740..fa3e84388 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H @@ -115,6 +115,59 @@ TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_mba, TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_mba, uint8_t i_port ); +/** + * @brief Will return the bus endpoint targets based in the given information. + * + * Supported configurations: + * i_chip i_busType i_busPos o_rxTrgt o_txTrgt + * ------ ----------- -------- ------------- ------------- + * PROC TYPE_ABUS 0-2 ABUS target ABUS target + * PROC TYPE_XBUS 0-3 XBUS target XBUS target + * PROC TYPE_MCS 0-7 MCS target MEMBUF target + * MCS n/a n/a MCS target MEMBUF target + * MEMBUF n/a n/a MEMBUF target MCS target + * + * @param i_chip Chip or unit on the RX side of the bus. + * @param o_rxTrgt The RX target, NULL on failure. + * @param o_txTrgt The TX target, NULL on failure. + * @param i_busType Bus type. + * @param i_busPos Bus position. + * @return Non-SUCCESS if an internal function fails. SUCCESS otherwise. + * + */ +int32_t getBusEndpoints( ExtensibleChip * i_chip, + TARGETING::TargetHandle_t o_rxTrgt, + TARGETING::TargetHandle_t o_txTrgt, + TARGETING::TYPE i_busType = TARGETING::TYPE_NA, + uint32_t i_busPos = 0 ); + +/** + * @brief Will add target bus interface endpoints and all parts in between the + * endpoints to the global error log in RasServices. + * @param i_rxTrgt The RX target. + * @param i_txTrgt The TX target. + * @param i_priority Callout priority (default MRU_LOW). + * @return Non-SUCCESS if an internal function fails. SUCCESS otherwise. + */ +int32_t calloutBusInterface( TARGETING::TargetHandle_t i_rxTrgt, + TARGETING::TargetHandle_t i_txTrgt, + PRDpriority i_priority = MRU_LOW ); + +/** + * @brief Will add target bus interface endpoints and all parts in between the + * endpoints to the global error log in RasServices. + * @note See function getBusEndpoints() for parameter rules. + * @param i_chip Chip or unit on the RX side of the bus. + * @param i_priority Callout priority (default MRU_LOW). + * @param i_busType Bus type. + * @param i_busPos Bus position. + * @return Non-SUCCESS if an internal function fails. SUCCESS otherwise. + */ +int32_t calloutBusInterface( ExtensibleChip * i_chip, + PRDpriority i_priority = MRU_LOW, + TARGETING::TYPE i_busType = TARGETING::TYPE_NA, + uint32_t i_busPos = 0 ); + } // end namespace CalloutUtil } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C index 69946f6ac..741c6fb83 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C @@ -1339,6 +1339,16 @@ PLUGIN_MEMORY_MPE_ERROR( 1, 7 ) #undef PLUGIN_MEMORY_MPE_ERROR +//------------------------------------------------------------------------------ + +int32_t calloutInterface_dmi( ExtensibleChip * i_membChip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + CalloutUtil::calloutBusInterface( i_membChip, MRU_LOW ); + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Membuf, calloutInterface_dmi ); + } // end namespace Membuf } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C b/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C index 744b18d98..8d49f8324 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C @@ -86,28 +86,13 @@ int32_t handleLaneRepairEvent( ExtensibleChip * i_chip, } #endif - // Get RX bus target - TYPE iChipType = getTargetType(i_chip->GetChipHandle()); - - if (iChipType == TYPE_MEMBUF) - { - rxBusTgt = i_chip->GetChipHandle(); - } - else if (iChipType == TYPE_PROC) - { - // i_chip is a Proc, Get connected XBUS, ABUS, or MCS target - rxBusTgt = getConnectedChild( i_chip->GetChipHandle(), - i_busType, i_busPos ); - if ( NULL == rxBusTgt ) - { - PRDF_ERR( PRDF_FUNC"Could not find RX connected bus" ); - l_rc = FAIL; break; - } - } - else + // Get the RX and TX targets. + l_rc = CalloutUtil::getBusEndpoints( i_chip, rxBusTgt, txBusTgt, + i_busType, i_busPos ); + if ( SUCCESS != l_rc ) { - PRDF_ERR( PRDF_FUNC"i_chip is not of type MEMBUF or PROC" ); - l_rc = FAIL; break; + PRDF_ERR( PRDF_FUNC"getBusEndpoints() failed" ); + break; } // Call io_read_erepair @@ -188,27 +173,6 @@ int32_t handleLaneRepairEvent( ExtensibleChip * i_chip, if (i_spareDeployed) { - // Get TX bus target - if (i_busType == TYPE_XBUS || i_busType == TYPE_ABUS) - { - txBusTgt = getConnectedPeerTarget(rxBusTgt); - } - else if (i_busType == TYPE_MEMBUF) - { - txBusTgt = getConnectedParent(rxBusTgt, TYPE_MCS); - } - else if (i_busType == TYPE_MCS) - { - txBusTgt = getConnectedChild(rxBusTgt, TYPE_MEMBUF, 0); - } - - if ( NULL == txBusTgt ) - { - PRDF_ERR( PRDF_FUNC"Could not find TX connected bus: " - "rxBusTgt: 0x%08x", getHuid(rxBusTgt) ); - l_rc = FAIL; break; - } - // Call Erepair to update VPD l_rc = setVpdFailedLanes(rxBusTgt, txBusTgt, rx_lanes, thrExceeded); diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C index be146af52..2a02f74c2 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C @@ -36,6 +36,7 @@ #include <UtilHash.H> // Pegasus includes +#include <prdfCalloutUtil.H> #include <prdfCenMbaCaptureData.H> #include <prdfCenMembufDataBundle.H> #include <prdfLaneRepair.H> @@ -365,6 +366,15 @@ int32_t handleMirrorAction( ExtensibleChip * i_mcsChip, } PRDF_PLUGIN_DEFINE( Mcs, handleMirrorAction ); +//------------------------------------------------------------------------------ + +int32_t calloutInterface_dmi( ExtensibleChip * i_mcsChip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + CalloutUtil::calloutBusInterface( i_mcsChip, MRU_LOW ); + return SUCCESS; +} +PRDF_PLUGIN_DEFINE( Mcs, calloutInterface_dmi ); } // end namespace Mcs } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C index 66f9e0191..883438f73 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C @@ -766,6 +766,37 @@ PRDF_PLUGIN_DEFINE( Proc, combinedResponseCallout ); //------------------------------------------------------------------------------ +#define PLUGIN_BUS_INTERFACE_CALLOUT( BUS, TYPE, POS ) \ +int32_t calloutInterface_##BUS##POS( ExtensibleChip * i_chip, \ + STEP_CODE_DATA_STRUCT & io_sc ) \ +{ \ + CalloutUtil::calloutBusInterface(i_chip, MRU_LOW, TYPE, POS); \ + return SUCCESS; \ +} \ +PRDF_PLUGIN_DEFINE( Proc, calloutInterface_##BUS##POS ); + +PLUGIN_BUS_INTERFACE_CALLOUT( abus, TYPE_ABUS, 0 ) +PLUGIN_BUS_INTERFACE_CALLOUT( abus, TYPE_ABUS, 1 ) +PLUGIN_BUS_INTERFACE_CALLOUT( abus, TYPE_ABUS, 2 ) + +PLUGIN_BUS_INTERFACE_CALLOUT( xbus, TYPE_XBUS, 0 ) +PLUGIN_BUS_INTERFACE_CALLOUT( xbus, TYPE_XBUS, 1 ) +PLUGIN_BUS_INTERFACE_CALLOUT( xbus, TYPE_XBUS, 2 ) +PLUGIN_BUS_INTERFACE_CALLOUT( xbus, TYPE_XBUS, 3 ) + +PLUGIN_BUS_INTERFACE_CALLOUT( dmi, TYPE_MCS, 0 ) +PLUGIN_BUS_INTERFACE_CALLOUT( dmi, TYPE_MCS, 1 ) +PLUGIN_BUS_INTERFACE_CALLOUT( dmi, TYPE_MCS, 2 ) +PLUGIN_BUS_INTERFACE_CALLOUT( dmi, TYPE_MCS, 3 ) +PLUGIN_BUS_INTERFACE_CALLOUT( dmi, TYPE_MCS, 4 ) +PLUGIN_BUS_INTERFACE_CALLOUT( dmi, TYPE_MCS, 5 ) +PLUGIN_BUS_INTERFACE_CALLOUT( dmi, TYPE_MCS, 6 ) +PLUGIN_BUS_INTERFACE_CALLOUT( dmi, TYPE_MCS, 7 ) + +#undef PLUGIN_BUS_INTERFACE_CALLOUT + +//------------------------------------------------------------------------------ + /** * @brief When not in MNFG mode, clear the service call flag so that * thresholding will still be done, but no visible error log committed. @@ -878,6 +909,10 @@ PLUGIN_CALLOUT_PHB( 1 ) #undef PLUGIN_CALLOUT_PHB +//------------------------------------------------------------------------------ +// Misc plugins +//------------------------------------------------------------------------------ + /** * @brief checks if proc is Venice chip. * @param i_chip P8 chip. diff --git a/src/usr/diag/prdf/prdfErrlUtil.H b/src/usr/diag/prdf/prdfErrlUtil.H index 4729f76b5..2bbf0589d 100644 --- a/src/usr/diag/prdf/prdfErrlUtil.H +++ b/src/usr/diag/prdf/prdfErrlUtil.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2014 */ +/* Contributors Listed Below - COPYRIGHT 2013,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -183,6 +183,13 @@ i_gardErrType); /** + * @brief Add bus callout user data section to an existing error log + */ +#define PRDF_ADD_BUS_CALLOUT( io_errl, i_ep1, i_ep2, i_busType, i_priority ) \ + io_errl->addBusCallout( i_ep1, i_ep2, i_busType, \ + (const HWAS::callOutPriority)i_priority ); + +/** * @brief Process's pending deconfig and GARD service actions * and thencommits and deletes the error log. */ |