summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C
diff options
context:
space:
mode:
authorBrian Stegmiller <bjs@us.ibm.com>2018-05-22 16:55:47 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2018-06-17 16:35:15 -0400
commit86cda996b3fb7aece0e393b0c3dedb8a74ebb3fd (patch)
treebf897bc2e19e6e080300c1af80ab31f68074326b /src/usr/diag/prdf/common/plat/prdfPlatServices_common.C
parent34768601609c2ec3e9b60ef7663c5a7f485e5793 (diff)
downloadtalos-hostboot-86cda996b3fb7aece0e393b0c3dedb8a74ebb3fd.tar.gz
talos-hostboot-86cda996b3fb7aece0e393b0c3dedb8a74ebb3fd.zip
PRD: DMI Lane Repair
Change-Id: I0c96c32387cb068138c9a7de0f73fdfeaf02af6c RTC:144057 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59208 Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/60586 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf/common/plat/prdfPlatServices_common.C')
-rw-r--r--src/usr/diag/prdf/common/plat/prdfPlatServices_common.C409
1 files changed, 385 insertions, 24 deletions
diff --git a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C
index 240266908..d11255001 100644
--- a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C
+++ b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C
@@ -49,6 +49,11 @@
#include <p9_io_xbus_clear_firs.H>
#include <p9_io_erepairAccessorHwpFuncs.H>
#include <config.h>
+#include <p9_io_cen_read_erepair.H>
+#include <p9_io_cen_pdwn_lanes.H>
+#include <p9_io_dmi_read_erepair.H>
+#include <p9_io_dmi_clear_firs.H>
+#include <p9_io_dmi_pdwn_lanes.H>
#endif
using namespace TARGETING;
@@ -86,8 +91,10 @@ src/hwsv/server/hwpf2/fapi2/target_types.H for a list of all the TargetTypes
//## Lane Repair functions
//##############################################################################
-int32_t readErepairXbus(TargetHandle_t i_rxBusTgt,
- std::vector<uint8_t> &o_rxFailLanes, uint8_t i_clkGrp)
+template<>
+int32_t readErepair<TYPE_XBUS>(TargetHandle_t i_rxBusTgt,
+ std::vector<uint8_t> &o_rxFailLanes,
+ uint8_t i_clkGrp)
{
int32_t o_rc = SUCCESS;
@@ -105,8 +112,68 @@ int32_t readErepairXbus(TargetHandle_t i_rxBusTgt,
if(nullptr != err)
{
- PRDF_ERR( "[PlatServices::readErepair] HUID: 0x%08x io_read_erepair "
- "failed", getHuid(i_rxBusTgt) );
+ PRDF_ERR( "[PlatServices::readErepair] HUID: 0x%08x "
+ "p9_io_xbus_read_erepair failed", getHuid(i_rxBusTgt) );
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+template<>
+int32_t readErepair<TYPE_MEMBUF>(TargetHandle_t i_rxBusTgt,
+ std::vector<uint8_t> &o_rxFailLanes,
+ uint8_t i_clkGrp)
+{
+ int32_t o_rc = SUCCESS;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( TYPE_MEMBUF == getTargetType(i_rxBusTgt) );
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> fapiTrgt (i_rxBusTgt);
+ FAPI_INVOKE_HWP(err,
+ p9_io_cen_read_erepair,
+ fapiTrgt,
+ o_rxFailLanes);
+
+ if (nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::readErepairMembuf] HUID: 0x%08x "
+ "p9_io_cen_restore_erepair failed", getHuid(i_rxBusTgt) );
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+template<>
+int32_t readErepair<TYPE_DMI>(TargetHandle_t i_rxBusTgt,
+ std::vector<uint8_t> &o_rxFailLanes,
+ uint8_t i_clkGrp)
+{
+ int32_t o_rc = SUCCESS;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( TYPE_DMI == getTargetType(i_rxBusTgt) );
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_DMI> fapiTrgt (i_rxBusTgt);
+ FAPI_INVOKE_HWP(err,
+ p9_io_dmi_read_erepair,
+ fapiTrgt,
+ o_rxFailLanes);
+
+ if (nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::readErepairDmi] HUID: 0x%08x "
+ "p9_io_dmi_read_erepair failed", getHuid(i_rxBusTgt) );
PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
o_rc = FAIL;
}
@@ -115,7 +182,9 @@ int32_t readErepairXbus(TargetHandle_t i_rxBusTgt,
return o_rc;
}
-int32_t clearIOFirsXbus(TargetHandle_t i_rxBusTgt)
+//------------------------------------------------------------------------------
+template<>
+int32_t clearIOFirs<TYPE_XBUS>(TargetHandle_t i_rxBusTgt)
{
int32_t o_rc = SUCCESS;
@@ -132,21 +201,82 @@ int32_t clearIOFirsXbus(TargetHandle_t i_rxBusTgt)
FAPI_INVOKE_HWP(err, p9_io_xbus_clear_firs, fapiTrgt, i);
if(nullptr != err)
{
- PRDF_ERR( "[PlatServices::clearIOFirs] HUID: 0x%08x io_clear_firs "
- "failed", getHuid(i_rxBusTgt) );
+ PRDF_ERR( "[PlatServices::clearIOFirs<TYPE_XBUS>] HUID: 0x%08x "
+ "p9_io_xbus_clear_firs failed", getHuid(i_rxBusTgt) );
PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
o_rc = FAIL;
}
}
#endif
+
+ return o_rc;
+}
+
+template<>
+int32_t clearIOFirs<TYPE_MEMBUF>(TargetHandle_t i_rxBusTgt)
+{
+ int32_t o_rc = SUCCESS;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( TYPE_MEMBUF == getTargetType(i_rxBusTgt) );
+
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> fapiCenTrgt (i_rxBusTgt);
+ // Clear Centaur side
+ FAPI_INVOKE_HWP(err,
+ p9_io_dmi_cn_clear_firs,
+ fapiCenTrgt);
+
+ if (nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::clearIOFirs<TYPE_MEMBUF>] HUID: 0x%08x "
+ "p9_io_dmi_cn_clear_firs failed", getHuid(i_rxBusTgt) );
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+template<>
+int32_t clearIOFirs<TYPE_DMI>(TargetHandle_t i_rxBusTgt)
+{
+ int32_t o_rc = SUCCESS;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( TYPE_DMI == getTargetType(i_rxBusTgt) );
+
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_DMI> fapiTrgt (i_rxBusTgt);
+
+ FAPI_INVOKE_HWP(err,
+ p9_io_dmi_proc_clear_firs,
+ fapiTrgt);
+
+ if (nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::clearIOFirs<TYPE_DMI>] HUID: 0x%08x "
+ "p9_io_dmi_proc_clear_firs failed", getHuid(i_rxBusTgt) );
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
return o_rc;
}
-int32_t powerDownLanesXbus(TargetHandle_t i_rxBusTgt,
- const std::vector<uint8_t> &i_rxFailLanes,
- const std::vector<uint8_t> &i_txFailLanes,
- uint8_t i_clkGrp)
+//------------------------------------------------------------------------------
+template<>
+int32_t powerDownLanes<TYPE_XBUS>( TargetHandle_t i_rxBusTgt,
+ const std::vector<uint8_t> &i_rxFailLanes,
+ const std::vector<uint8_t> &i_txFailLanes,
+ uint8_t i_clkGrp )
{
int32_t o_rc = SUCCESS;
@@ -166,7 +296,7 @@ int32_t powerDownLanesXbus(TargetHandle_t i_rxBusTgt,
if(nullptr != err)
{
PRDF_ERR( "[PlatServices::powerDownLanes] HUID: 0x%08x "
- "io_power_down_lanes failed", getHuid(i_rxBusTgt) );
+ "p9_io_xbus_pdwn_lanes failed", getHuid(i_rxBusTgt) );
PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
o_rc = FAIL;
}
@@ -175,10 +305,78 @@ int32_t powerDownLanesXbus(TargetHandle_t i_rxBusTgt,
return o_rc;
}
-int32_t getVpdFailedLanesXbus(TargetHandle_t i_rxBusTgt,
- std::vector<uint8_t> &o_rxFailLanes,
- std::vector<uint8_t> &o_txFailLanes,
- uint8_t i_clkGrp)
+template<>
+int32_t powerDownLanes<TYPE_MEMBUF>(TargetHandle_t i_rxBusTgt,
+ const std::vector<uint8_t> &i_rxFailLanes,
+ const std::vector<uint8_t> &i_txFailLanes,
+ uint8_t i_clkGrp )
+{
+
+ int32_t o_rc = SUCCESS;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( TYPE_MEMBUF == getTargetType(i_rxBusTgt) );
+
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> fapiTrgt (i_rxBusTgt);
+ FAPI_INVOKE_HWP(err,
+ p9_io_cen_pdwn_lanes,
+ fapiTrgt,
+ i_txFailLanes,
+ i_rxFailLanes);
+
+ if(nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::powerDownLanesMembuf] HUID: 0x%08x "
+ "p9_io_cen_pdwn_lanes failed", getHuid(i_rxBusTgt) );
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+template<>
+int32_t powerDownLanes<TYPE_DMI>(TargetHandle_t i_rxBusTgt,
+ const std::vector<uint8_t> &i_rxFailLanes,
+ const std::vector<uint8_t> &i_txFailLanes,
+ uint8_t i_clkGrp )
+{
+ int32_t o_rc = SUCCESS;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( TYPE_DMI == getTargetType(i_rxBusTgt) );
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_DMI> fapiTrgt (i_rxBusTgt);
+ FAPI_INVOKE_HWP(err,
+ p9_io_dmi_pdwn_lanes,
+ fapiTrgt,
+ i_txFailLanes,
+ i_rxFailLanes);
+
+ if(nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::powerDownLanesDmi] HUID: 0x%08x "
+ "p9_io_dmi_pdwn_lanes failed", getHuid(i_rxBusTgt) );
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+//------------------------------------------------------------------------------
+template<>
+int32_t getVpdFailedLanes<TYPE_XBUS>(TargetHandle_t i_rxBusTgt,
+ std::vector<uint8_t> &o_rxFailLanes,
+ std::vector<uint8_t> &o_txFailLanes,
+ uint8_t i_clkGrp)
{
int32_t o_rc = SUCCESS;
@@ -210,13 +408,88 @@ int32_t getVpdFailedLanesXbus(TargetHandle_t i_rxBusTgt,
return o_rc;
}
-int32_t setVpdFailedLanesXbus(TargetHandle_t i_rxBusTgt,
- TargetHandle_t i_txBusTgt,
- std::vector<uint8_t> &i_rxFailLanes,
- bool & o_thrExceeded,
+template<>
+int32_t getVpdFailedLanes<TYPE_MEMBUF>(TargetHandle_t i_rxBusTgt,
+ std::vector<uint8_t> &o_rxFailLanes,
+ std::vector<uint8_t> &o_txFailLanes,
uint8_t i_clkGrp)
{
int32_t o_rc = SUCCESS;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( TYPE_MEMBUF == getTargetType(i_rxBusTgt) );
+
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> fapiTrgt (i_rxBusTgt);
+
+ FAPI_INVOKE_HWP(err,
+ erepairGetFailedLanes,
+ fapiTrgt,
+ i_clkGrp,
+ o_txFailLanes,
+ o_rxFailLanes);
+
+ if(nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::getVpdFailedLanesMembuf] HUID: 0x%08x "
+ "erepairGetFailedLanes failed",
+ getHuid(i_rxBusTgt));
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+template<>
+int32_t getVpdFailedLanes<TYPE_DMI>( TargetHandle_t i_rxBusTgt,
+ std::vector<uint8_t> &o_rxFailLanes,
+ std::vector<uint8_t> &o_txFailLanes,
+ uint8_t i_clkGrp )
+{
+ int32_t o_rc = SUCCESS;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( TYPE_DMI == getTargetType(i_rxBusTgt) );
+
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_DMI> fapiTrgt (i_rxBusTgt);
+
+ FAPI_INVOKE_HWP(err,
+ erepairGetFailedLanes,
+ fapiTrgt,
+ i_clkGrp,
+ o_txFailLanes,
+ o_rxFailLanes);
+
+ if(nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::getVpdFailedLanesDmi] HUID: 0x%08x "
+ "erepairGetFailedLanes failed",
+ getHuid(i_rxBusTgt));
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+//------------------------------------------------------------------------------
+template<>
+int32_t setVpdFailedLanes<TYPE_XBUS,TYPE_XBUS>(
+ TargetHandle_t i_rxBusTgt,
+ TargetHandle_t i_txBusTgt,
+ std::vector<uint8_t> &i_rxFailLanes,
+ bool & o_thrExceeded,
+ uint8_t i_clkGrp )
+{
+ int32_t o_rc = SUCCESS;
o_thrExceeded = false;
#ifdef __HOSTBOOT_MODULE
@@ -252,11 +525,103 @@ int32_t setVpdFailedLanesXbus(TargetHandle_t i_rxBusTgt,
return o_rc;
}
+
+template<>
+int32_t setVpdFailedLanes<TYPE_MEMBUF, TYPE_DMI>(
+ TargetHandle_t i_rxBusTgt,
+ TargetHandle_t i_txBusTgt,
+ std::vector<uint8_t> &i_rxFailLanes,
+ bool & o_thrExceeded,
+ uint8_t i_clkGrp )
+{
+ int32_t o_rc = SUCCESS;
+ o_thrExceeded = false;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( nullptr != i_txBusTgt);
+ PRDF_ASSERT( TYPE_MEMBUF == getTargetType(i_rxBusTgt) );
+ PRDF_ASSERT( TYPE_DMI == getTargetType(i_txBusTgt) );
+
+
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> fapiRxTrgt (i_rxBusTgt);
+ fapi2::Target<fapi2::TARGET_TYPE_DMI> fapiTxTrgt (i_txBusTgt);
+
+ FAPI_INVOKE_HWP(err,
+ erepairSetFailedLanes,
+ fapiTxTrgt,
+ fapiRxTrgt,
+ i_clkGrp,
+ i_rxFailLanes,
+ o_thrExceeded);
+
+ if(nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::setVpdFailedLanesMembuf] rxHUID: 0x%08x "
+ "txHUID: 0x%08x erepairSetFailedLanes failed",
+ getHuid(i_rxBusTgt), getHuid(i_txBusTgt));
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+
+template<>
+int32_t setVpdFailedLanes<TYPE_DMI,TYPE_MEMBUF>(
+ TargetHandle_t i_rxBusTgt,
+ TargetHandle_t i_txBusTgt,
+ std::vector<uint8_t> &i_rxFailLanes,
+ bool & o_thrExceeded,
+ uint8_t i_clkGrp )
+{
+ int32_t o_rc = SUCCESS;
+ o_thrExceeded = false;
+
+ #ifdef __HOSTBOOT_MODULE
+ PRDF_ASSERT( nullptr != i_rxBusTgt);
+ PRDF_ASSERT( nullptr != i_txBusTgt);
+ PRDF_ASSERT( TYPE_DMI == getTargetType(i_rxBusTgt) );
+ PRDF_ASSERT( TYPE_MEMBUF == getTargetType(i_txBusTgt) );
+
+
+ errlHndl_t err = nullptr;
+
+ fapi2::Target<fapi2::TARGET_TYPE_DMI> fapiRxTrgt (i_rxBusTgt);
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> fapiTxTrgt (i_txBusTgt);
+
+ FAPI_INVOKE_HWP(err,
+ erepairSetFailedLanes,
+ fapiTxTrgt,
+ fapiRxTrgt,
+ i_clkGrp,
+ i_rxFailLanes,
+ o_thrExceeded);
+
+ if(nullptr != err)
+ {
+ PRDF_ERR( "[PlatServices::setVpdFailedLanesDmi] rxHUID: 0x%08x "
+ "txHUID: 0x%08x erepairSetFailedLanes failed",
+ getHuid(i_rxBusTgt), getHuid(i_txBusTgt));
+ PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
+ o_rc = FAIL;
+ }
+
+ #endif
+ return o_rc;
+}
+
+//------------------------------------------------------------------------------
bool obusInSmpMode( TargetHandle_t obus )
{
return obus->getAttr<ATTR_OPTICS_CONFIG_MODE>() == OPTICS_CONFIG_MODE_SMP;
}
+
//##############################################################################
//## Memory specific functions
//##############################################################################
@@ -589,10 +954,6 @@ int32_t getDimmSpareConfig<TYPE_MBA>( TargetHandle_t i_mba, MemRank i_rank,
}
-
-
-
-
//------------------------------------------------------------------------------
template<>
OpenPOWER on IntegriCloud