summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2013-06-20 16:20:27 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-06-21 11:29:33 -0500
commitdee8369d052ac0682a42615645025e59dede268a (patch)
treeb8f3b67d8b8d69f85d2a89bed87b93788ed2e0b4 /src/usr/diag/prdf
parent13fac7b91c19c5115a1cf6453e19e4c8c32495cd (diff)
downloadtalos-hostboot-dee8369d052ac0682a42615645025e59dede268a.tar.gz
talos-hostboot-dee8369d052ac0682a42615645025e59dede268a.zip
PRD: Ignore specific RCs from dimmGetBadDqBitmap()
Change-Id: Icd2ca71ddf831bd90a353b7c2ffb1f1017747a46 CQ: SW210713 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5111 Tested-by: Jenkins Server Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5125
Diffstat (limited to 'src/usr/diag/prdf')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C31
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H9
-rw-r--r--src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C2
3 files changed, 27 insertions, 15 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 696761ab1..fed697795 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
@@ -254,7 +254,7 @@ int32_t erepairFirIsolation(TargetHandle_t i_rxBusTgt)
//##############################################################################
int32_t getBadDqBitmap( TargetHandle_t i_mba, const CenRank & i_rank,
- CenDqBitmap & o_bitmap )
+ CenDqBitmap & o_bitmap, bool i_allowNoDimm )
{
#define PRDF_FUNC "[PlatServices::getBadDqBitmap] "
@@ -264,17 +264,26 @@ int32_t getBadDqBitmap( TargetHandle_t i_mba, const CenRank & i_rank,
for ( int32_t ps = 0; ps < PORT_SLCT_PER_MBA; ps++ )
{
- errlHndl_t errl = NULL;
- PRD_FAPI_TO_ERRL( errl, dimmGetBadDqBitmap, getFapiTarget(i_mba),
- ps, i_rank.getDimmSlct(), i_rank.getRankSlct(),
- data[ps] );
- if ( NULL != errl )
+ fapi::ReturnCode l_rc = dimmGetBadDqBitmap( getFapiTarget(i_mba),
+ ps, i_rank.getDimmSlct(),
+ i_rank.getRankSlct(),
+ data[ps] );
+
+ if ( i_allowNoDimm && (fapi::RC_BAD_DQ_DIMM_NOT_FOUND == l_rc) )
{
- PRDF_ERR( PRDF_FUNC"dimmGetBadDqBitmap() failed: MBA=0x%08x "
- "ps=%d ds=%d rs=%d", getHuid(i_mba), ps,
- i_rank.getDimmSlct(), i_rank.getRankSlct() );
- PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
- o_rc = FAIL; break;
+ memset( &data[ps], 0x00, DIMM_DQ_RANK_BITMAP_SIZE );
+ }
+ else
+ {
+ errlHndl_t errl = fapi::fapiRcToErrl(l_rc);
+ if ( NULL != errl )
+ {
+ PRDF_ERR( PRDF_FUNC"dimmGetBadDqBitmap() failed: MBA=0x%08x "
+ "ps=%d ds=%d rs=%d", getHuid(i_mba), ps,
+ i_rank.getDimmSlct(), i_rank.getRankSlct() );
+ PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
+ o_rc = FAIL; break;
+ }
}
}
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
index 51fb8c1b9..19cdc84a6 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
@@ -197,12 +197,15 @@ int32_t erepairFirIsolation(TARGETING::TargetHandle_t i_rxBusTgt);
/**
* @brief Reads the bad DQ bitmap attribute for both ports of the target rank.
* @param i_mbaTarget A MBA target.
- * @param i_rank Target rank.
- * @param o_bitmap DQ bitmap container.
+ * @param i_rank Target rank.
+ * @param o_bitmap DQ bitmap container.
+ * @param i_allowNoDimm TRUE ignores rc from hardware procedure indicating no
+ * DIMM is attached. This is useful when iterating all
+ * possible ranks. Default is FALSE.
* @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
*/
int32_t getBadDqBitmap( TARGETING::TargetHandle_t i_mba, const CenRank & i_rank,
- CenDqBitmap & o_bitmap );
+ CenDqBitmap & o_bitmap, bool i_allowNoDimm = false );
/**
* @brief Writes the bad DQ bitmap attribute for both ports of the target rank.
diff --git a/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C b/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C
index b2a64ef8e..cfcf67afa 100644
--- a/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C
+++ b/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C
@@ -291,7 +291,7 @@ bool processDq(TargetHandle_t i_mba)
CenRank rank ( r );
CenDqBitmap bitmap;
- if ( SUCCESS != getBadDqBitmap(i_mba, rank, bitmap) )
+ if ( SUCCESS != getBadDqBitmap(i_mba, rank, bitmap, true) )
{
continue; // skip this rank
}
OpenPOWER on IntegriCloud