summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorBilicon Patil <bilpatil@in.ibm.com>2014-12-05 01:56:53 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-01-16 13:45:43 -0600
commit8aac8685ccdff8d11bf648f3bce65704b461cbf2 (patch)
tree94e7c11114031593c5bdd482fc2c2a8e61ddbbcc /src/usr/diag
parent7595946c1ffd602893ee85ec007a7e9c68217b70 (diff)
downloadtalos-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-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C98
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfLaneRepair.C6
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
OpenPOWER on IntegriCloud