summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2015-03-10 15:42:28 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-04-13 12:23:09 -0500
commit27ea9d15f97d6e34e47c63e5654a30d7923acd87 (patch)
tree625f84f20c93a5aef98b454cf01770783ed85e5b /src/usr
parent4f3df8aacc525487f04e81603f41ea9312cd14ea (diff)
downloadtalos-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')
-rw-r--r--src/usr/diag/prdf/common/framework/resolution/prdfCalloutMap.H4
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/CommonActions.rule4
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Mcs.rule4
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Membuf_acts_NEST.rule2
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_ABUS.rule3
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule17
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_XBUS.rule8
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C161
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H53
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C10
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C48
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfP8Mcs.C10
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C35
-rw-r--r--src/usr/diag/prdf/prdfErrlUtil.H9
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.
*/
OpenPOWER on IntegriCloud