diff options
author | Bilicon Patil <bilpatil@in.ibm.com> | 2014-12-05 01:56:53 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-01-16 13:45:43 -0600 |
commit | 8aac8685ccdff8d11bf648f3bce65704b461cbf2 (patch) | |
tree | 94e7c11114031593c5bdd482fc2c2a8e61ddbbcc /src/usr/diag | |
parent | 7595946c1ffd602893ee85ec007a7e9c68217b70 (diff) | |
download | talos-hostboot-8aac8685ccdff8d11bf648f3bce65704b461cbf2.tar.gz talos-hostboot-8aac8685ccdff8d11bf648f3bce65704b461cbf2.zip |
PRD: Correcting the eRepair VPD changes from Stradale
Stradale systems do not have a Memory Buffer VPD and hence code was pushed
(http://gfw160.aus.stglabs.ibm.com:8080/gerrit/#/c/11661/) to disable
read-write DMI lane eRepair data in VPD. This change is incorrect because
it disables read-write of fabric bus eRepair data.
Change-Id: Ib93f8df1268eeaa1852682af84ce5c8c5f37f73c
RTC: 119447
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14743
Tested-by: Jenkins Server
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Reviewed-by: Christopher T. Phan <cphan@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-by: Corey V. Swenson <cswenson@us.ibm.com>
Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/diag')
-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 |