diff options
Diffstat (limited to 'src/usr/diag/prdf/common')
-rwxr-xr-x | src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C | 98 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C | 6 |
2 files changed, 69 insertions, 35 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C index 4a3bab2f7..0ce4f59f7 100755 --- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C +++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C @@ -51,6 +51,9 @@ #include <erepairAccessorHwpFuncs.H> #include <io_fir_isolation.H> #include <fapiAttributeIds.H> +#ifdef __HOSTBOOT_MODULE +#include <config.h> +#endif using namespace TARGETING; @@ -179,22 +182,40 @@ int32_t getVpdFailedLanes(TargetHandle_t i_rxBusTgt, std::vector<uint8_t> &o_txFailLanes) { int32_t o_rc = SUCCESS; - errlHndl_t err = NULL; + do + { - PRD_FAPI_TO_ERRL(err, - erepairGetFailedLanes, - getFapiTarget(i_rxBusTgt), - o_txFailLanes, - o_rxFailLanes); + // Some hardware configurations do not have Memory Buffer VPD. + // Hence, reading of DMI lane eRepair data from MBVPD need + // to be skipped. +#if defined(__HOSTBOOT_MODULE) and !defined(CONFIG_HAVE_MBVPD) + if(TYPE_MEMBUF == getTargetType(i_rxBusTgt)) + { + // Return zero fail lanes when we are not reading the MBVPD. + o_rxFailLanes.clear(); + o_txFailLanes.clear(); + break; + } +#endif + + errlHndl_t err = NULL; + PRD_FAPI_TO_ERRL(err, + erepairGetFailedLanes, + getFapiTarget(i_rxBusTgt), + o_txFailLanes, + o_rxFailLanes); + + if(NULL != err) + { + PRDF_ERR( "[PlatServices::getVpdFailedLanes] HUID: 0x%08x " + "erepairGetFailedLanes failed", + getHuid(i_rxBusTgt)); + PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT ); + o_rc = FAIL; + break; + } + }while(0); - if(NULL != err) - { - PRDF_ERR( "[PlatServices::getVpdFailedLanes] HUID: 0x%08x " - "erepairGetFailedLanes failed", - getHuid(i_rxBusTgt)); - PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT ); - o_rc = FAIL; - } return o_rc; } @@ -204,22 +225,41 @@ int32_t setVpdFailedLanes(TargetHandle_t i_rxBusTgt, bool & o_thrExceeded) { int32_t o_rc = SUCCESS; - errlHndl_t err = NULL; - - PRD_FAPI_TO_ERRL(err, - erepairSetFailedLanes, - getFapiTarget(i_txBusTgt), - getFapiTarget(i_rxBusTgt), - i_rxFailLanes, - o_thrExceeded); - if(NULL != err) + do { - PRDF_ERR( "[PlatServices::setVpdFailedLanes] rxHUID: 0x%08x " - "txHUID: 0x%08x erepairSetFailedLanes failed", - getHuid(i_rxBusTgt), getHuid(i_txBusTgt)); - PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT ); - o_rc = FAIL; - } + + // Some hardware configurations do not have Memory Buffer VPD. + // Hence, writing of DMI lane eRepair data into MBVPD need + // to be skipped. +#if defined(__HOSTBOOT_MODULE) and !defined(CONFIG_HAVE_MBVPD) + if(TYPE_MEMBUF == getTargetType(i_rxBusTgt) || + TYPE_MEMBUF == getTargetType(i_txBusTgt)) + { + // Threshold is not exceeded when there is no + // MBVPD and hence no checking of any existing faillanes. + o_thrExceeded = false; + break; + } +#endif + + errlHndl_t err = NULL; + PRD_FAPI_TO_ERRL(err, + erepairSetFailedLanes, + getFapiTarget(i_txBusTgt), + getFapiTarget(i_rxBusTgt), + i_rxFailLanes, + o_thrExceeded); + if(NULL != err) + { + PRDF_ERR( "[PlatServices::setVpdFailedLanes] rxHUID: 0x%08x " + "txHUID: 0x%08x erepairSetFailedLanes failed", + getHuid(i_rxBusTgt), getHuid(i_txBusTgt)); + PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT ); + o_rc = FAIL; + break; + } + }while(0); + return o_rc; } diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C b/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C index d29281ae8..dfba20330 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C @@ -36,7 +36,6 @@ #include <iipServiceDataCollector.h> #include <prdfExtensibleChip.H> #include <UtilHash.H> -#include <config.h> // Pegasus includes #include <prdfCalloutUtil.H> @@ -63,10 +62,8 @@ int32_t handleLaneRepairEvent( ExtensibleChip * i_chip, int32_t l_rc = SUCCESS; TargetHandle_t rxBusTgt = NULL; -#ifdef CONFIG_HAVE_MBVPD TargetHandle_t txBusTgt = NULL; bool thrExceeded = true; -#endif // CONFIG_HAVE_MBVPD std::vector<uint8_t> rx_lanes; std::vector<uint8_t> rx_vpdLanes; std::vector<uint8_t> tx_vpdLanes; @@ -139,7 +136,6 @@ int32_t handleLaneRepairEvent( ExtensibleChip * i_chip, i_chip->getSignatureOffset() ), l_newLaneMap64to127); -#ifdef CONFIG_HAVE_MBVPD if (!mfgMode()) // Don't read/write VPD in mfg mode { // Read Failed Lanes from VPD @@ -245,8 +241,6 @@ int32_t handleLaneRepairEvent( ExtensibleChip * i_chip, // Make predictive i_sc.service_data->SetServiceCall(); } - -#endif // CONFIG_HAVE_MBVPD } while (0); // Clear FIRs |