diff options
author | Brian Stegmiller <bjs@us.ibm.com> | 2018-05-22 16:55:47 -0500 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2018-06-17 16:35:15 -0400 |
commit | 86cda996b3fb7aece0e393b0c3dedb8a74ebb3fd (patch) | |
tree | bf897bc2e19e6e080300c1af80ab31f68074326b /src/usr/diag/prdf/common/plat/prdfPlatServices_common.C | |
parent | 34768601609c2ec3e9b60ef7663c5a7f485e5793 (diff) | |
download | talos-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.C | 409 |
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<> |