summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2014-03-18 19:27:33 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-03-21 11:21:54 -0500
commitc857bac776d690c846af8076f280a1e2f66d7e16 (patch)
tree4cb21dbbee0d19dea3e4b3df874e15d71238fe26
parentdde066c1eb21a4f9cc968614ab091d99d896223c (diff)
downloadtalos-hostboot-c857bac776d690c846af8076f280a1e2f66d7e16.tar.gz
talos-hostboot-c857bac776d690c846af8076f280a1e2f66d7e16.zip
PRD: Change ATTR_EFF_DIMM_SPARE to ATTR_VPD_DIMM_SPARE
Change-Id: I70fbd7265804ef24f98a1f17570d61352e2838b4 CQ: SW253113 Backport: release-fips810 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9713 Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Tested-by: Jenkins Server Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9796 Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C61
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H14
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.C59
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.H14
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C14
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C4
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C4
7 files changed, 86 insertions, 84 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 0288031b1..90f36a4b7 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
@@ -641,6 +641,67 @@ int32_t getMemAddrRange( TargetHandle_t i_mba, const CenRank & i_rank,
//------------------------------------------------------------------------------
+int32_t getDimmSpareConfig( TargetHandle_t i_mba, CenRank i_rank,
+ uint8_t i_ps, uint8_t & o_spareConfig )
+{
+ #define PRDF_FUNC "[PlatServices::getDimmSpareConfig] "
+ int32_t o_rc = SUCCESS;
+
+ using namespace fapi;
+
+ ATTR_VPD_DIMM_SPARE_Type attr;
+ o_spareConfig = ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE;
+ do
+ {
+ if( TYPE_MBA != getTargetType( i_mba ) )
+ {
+ PRDF_ERR( PRDF_FUNC"Invalid Target:0x%08X", getHuid( i_mba ) );
+ o_rc = FAIL; break;
+ }
+
+ if ( MAX_PORT_PER_MBA <= i_ps )
+ {
+ PRDF_ERR( PRDF_FUNC"Invalid parameters i_ps:%u", i_ps );
+ o_rc = FAIL; break;
+ }
+
+ fapi::Target fapiMba = getFapiTarget(i_mba);
+ ReturnCode l_rc = FAPI_ATTR_GET( ATTR_VPD_DIMM_SPARE, &fapiMba, attr );
+ errlHndl_t errl = fapi::fapiRcToErrl(l_rc);
+ if ( NULL != errl )
+ {
+ PRDF_ERR( PRDF_FUNC"Failed to get ATTR_VPD_DIMM_SPARE for Target:"
+ "0x%08X", getHuid( i_mba ) );
+ PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
+ o_rc = FAIL; break;
+ }
+ o_spareConfig = attr[i_ps][i_rank.getDimmSlct()][i_rank.getRankSlct()];
+
+ // Check for valid values
+ // For X4 DRAM, we can not have full byte as spare config. Also for X8
+ // DRAM we can not have nibble as spare.
+
+ if( ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE == o_spareConfig) break;
+
+ bool isFullByte = ( ENUM_ATTR_VPD_DIMM_SPARE_FULL_BYTE ==
+ o_spareConfig );
+ bool isX4Dram = isDramWidthX4(i_mba);
+
+ if ( ( isX4Dram && isFullByte ) || ( !isX4Dram && !isFullByte ) )
+ {
+ PRDF_ERR( PRDF_FUNC"Invalid Configuration: o_spareConfig:%u",
+ o_spareConfig );
+ o_rc = FAIL; break;
+ }
+
+ }while(0);
+
+ return o_rc;
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
/* TODO - Get the memory buffer raw card type (i.e. R/C A). This is needed for
the DRAM site locations for buffered DIMMs. Should be able to get this
from an attribute but doesn't look like this is available yet.
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 0e0dfbb16..3fc799733 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
@@ -315,6 +315,20 @@ int32_t getMemAddrRange( TARGETING::TargetHandle_t i_mba,
TARGETING::TargetHandle_t getMasterCore( TARGETING::TargetHandle_t i_procTgt );
/**
+ * @brief Get spare DRAM information on a DIMM.
+ * @param i_mba MBA target.
+ * @param i_rank Rank.
+ * @param i_ps MBA port select.
+ * @param o_spareConfig Spare DRAM config information.
+ * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
+ * @note On a DIMM its possible that spare is not present. Also on X4 DRAM
+ * spare can be on High nibble or low nibble. This function will
+ * populate spare config information in o_spareConfig.
+ */
+int32_t getDimmSpareConfig( TARGETING::TargetHandle_t i_mba, CenRank i_rank,
+ uint8_t i_ps, uint8_t & o_spareConfig );
+
+/**
* @brief Returns the memory buffer raw card type (i.e. R/C A).
* @param i_memTarget A memory buffer, MBA, or DIMM.
* @return
diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
index 80dac9523..4ba5af59e 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
@@ -1265,65 +1265,6 @@ bool isDramWidthX4( TargetHandle_t i_mba )
//------------------------------------------------------------------------------
-int32_t getDimmSpareConfig( TargetHandle_t i_mba, CenRank i_rank,
- uint8_t i_ps, uint8_t & o_spareConfig )
-{
- #define PRDF_FUNC "[PlatServices::getDimmSpareConfig] "
- int32_t o_rc = SUCCESS;
-
- using namespace fapi;
-
- ATTR_EFF_DIMM_SPARE_type attr;
- o_spareConfig = ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE;
- do
- {
- if( TYPE_MBA != getTargetType( i_mba ) )
- {
- PRDF_ERR( PRDF_FUNC"Invalid Target:0x%08X", getHuid( i_mba ) );
- o_rc = FAIL; break;
- }
-
- if ( MAX_PORT_PER_MBA <= i_ps )
- {
- PRDF_ERR( PRDF_FUNC"Invalid parameters i_ps:%u", i_ps );
- o_rc = FAIL; break;
- }
-
- // Using namespace explicitly in ATTR_EFF_DIMM_SPARE as otherwise it
- // has conflict with fapi namespace.
- if ( !i_mba->tryGetAttr< TARGETING::ATTR_EFF_DIMM_SPARE>( attr ))
- {
- PRDF_ERR( PRDF_FUNC"Failed to get ATTR_EFF_DIMM_SPARE for Target:"
- "0x%08X", getHuid( i_mba ) );
- o_rc = FAIL; break;
- }
- o_spareConfig = attr[i_ps][i_rank.getDimmSlct()][i_rank.getRankSlct()];
-
- // Check for valid values
- // For X4 DRAM, we can not have full byte as spare config. Also for X8
- // DRAM we can not have nibble as spare.
-
- if( ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE == o_spareConfig) break;
-
- bool isFullByte = ( ENUM_ATTR_EFF_DIMM_SPARE_FULL_BYTE ==
- o_spareConfig );
- bool isX4Dram = isDramWidthX4(i_mba);
-
- if ( ( isX4Dram && isFullByte ) || ( !isX4Dram && !isFullByte ) )
- {
- PRDF_ERR( PRDF_FUNC"Invalid Configuration: o_spareConfig:%u",
- o_spareConfig );
- o_rc = FAIL; break;
- }
-
- }while(0);
-
- return o_rc;
- #undef PRDF_FUNC
-}
-
-//------------------------------------------------------------------------------
-
uint8_t getRanksPerDimm( TargetHandle_t i_mba, uint8_t i_ds )
{
#define PRDF_FUNC "[PlatServices::getRanksPerDimm] "
diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H
index 6c549b6f6..b1efc3571 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H
@@ -388,20 +388,6 @@ int32_t getDimmRowCol( TARGETING::TargetHandle_t i_mba, uint8_t & o_rowNum,
*/
uint8_t getRanksPerDimm( TARGETING::TargetHandle_t i_mbaTarget, uint8_t i_ds );
-/**
- * @brief Get spare DRAM information on a DIMM.
- * @param i_mba MBA target.
- * @param i_rank Rank.
- * @param i_ps MBA port select.
- * @param o_spareConfig Spare DRAM config information.
- * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
- * @note On a DIMM its possible that spare is not present. Also on X4 DRAM
- * spare can be on High nibble or low nibble. This function will
- * populate spare config information in o_spareConfig.
- */
-int32_t getDimmSpareConfig( TARGETING::TargetHandle_t i_mba, CenRank i_rank,
- uint8_t i_ps, uint8_t & o_spareConfig );
-
//##############################################################################
//##
//## Clock specific functions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C
index 7cd95199b..1cde6b81d 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C
@@ -252,7 +252,7 @@ int32_t CenDqBitmap::setDramSpare( uint8_t i_portSlct, uint8_t i_pins )
o_rc = FAIL; break;
}
- uint8_t spareConfig = ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE;
+ uint8_t spareConfig = ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE;
o_rc = getDimmSpareConfig( iv_mba , iv_rank, i_portSlct,
spareConfig );
if( SUCCESS != o_rc )
@@ -261,7 +261,7 @@ int32_t CenDqBitmap::setDramSpare( uint8_t i_portSlct, uint8_t i_pins )
o_rc = FAIL; break;
}
- if ( ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE == spareConfig )
+ if ( ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE == spareConfig )
{
PRDF_ERR( PRDF_FUNC" Spare is not avaiable" );
o_rc = FAIL; break;
@@ -271,7 +271,7 @@ int32_t CenDqBitmap::setDramSpare( uint8_t i_portSlct, uint8_t i_pins )
{
i_pins &= 0xf; // limit to 4 bits
- if( ENUM_ATTR_EFF_DIMM_SPARE_LOW_NIBBLE == spareConfig )
+ if( ENUM_ATTR_VPD_DIMM_SPARE_LOW_NIBBLE == spareConfig )
{
i_pins = i_pins << 4;
}
@@ -335,7 +335,7 @@ int32_t CenDqBitmap::isDramSpareAvailable( uint8_t i_portSlct,
o_rc = FAIL; break;
}
- uint8_t spareConfig = ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE;
+ uint8_t spareConfig = ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE;
o_rc = getDimmSpareConfig( iv_mba , iv_rank, i_portSlct,
spareConfig );
if( SUCCESS != o_rc )
@@ -349,11 +349,11 @@ int32_t CenDqBitmap::isDramSpareAvailable( uint8_t i_portSlct,
if ( isDramWidthX4(iv_mba) )
{
// Check for DRAM spare
- if( ENUM_ATTR_EFF_DIMM_SPARE_LOW_NIBBLE == spareConfig )
+ if( ENUM_ATTR_VPD_DIMM_SPARE_LOW_NIBBLE == spareConfig )
{
o_available = ( 0 == ( spareDqBits & 0xf0 ) );
}
- else if( ENUM_ATTR_EFF_DIMM_SPARE_HIGH_NIBBLE == spareConfig )
+ else if( ENUM_ATTR_VPD_DIMM_SPARE_HIGH_NIBBLE == spareConfig )
{
o_available = ( 0 == ( spareDqBits & 0x0f ) );
}
@@ -377,7 +377,7 @@ int32_t CenDqBitmap::isDramSpareAvailable( uint8_t i_portSlct,
}
else
{
- if ( ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE == spareConfig )
+ if ( ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE == spareConfig )
{
// spare is not available.
o_available = false;
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C
index d7ee68ae1..59d9d5cb5 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C
@@ -187,7 +187,7 @@ void captureDramRepairsData( TARGETING::TargetHandle_t i_mbaTrgt,
PRDF_ERR( PRDF_FUNC"Master Rank list size is 0");
break;;
}
- uint8_t spareConfig = ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE;
+ uint8_t spareConfig = ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE;
// check for spare DRAM. Port does not matter.
// Also this configuration is same for all ranks on MBA.
rc = getDimmSpareConfig( i_mbaTrgt, masterRanks[0], 0, spareConfig );
@@ -197,7 +197,7 @@ void captureDramRepairsData( TARGETING::TargetHandle_t i_mbaTrgt,
break;
}
- if( ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE != spareConfig )
+ if( ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE != spareConfig )
mbaData.header.isSpareDram = true;
// Iterate all ranks to get DRAM repair data
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C
index 1116eda1f..43870c8e1 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C
@@ -431,7 +431,7 @@ int32_t CenMbaTdCtlrCommon::handleMCE_VCM2( STEP_CODE_DATA_STRUCT & io_sc )
}
uint8_t ps = iv_mark.getCM().getPortSlct();
- uint8_t spareConfig = ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE;
+ uint8_t spareConfig = ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE;
o_rc = getDimmSpareConfig( iv_mbaTrgt, iv_rank, ps,
spareConfig );
if ( SUCCESS != o_rc )
@@ -442,7 +442,7 @@ int32_t CenMbaTdCtlrCommon::handleMCE_VCM2( STEP_CODE_DATA_STRUCT & io_sc )
// Check if DRAM spare is present. Also, ECC spares are available on all
// x4 DIMMS.
- if ( ( ENUM_ATTR_EFF_DIMM_SPARE_NO_SPARE != spareConfig ) || iv_x4Dimm )
+ if ( ( ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE != spareConfig ) || iv_x4Dimm )
{
// It is possible that a Centaur DIMM does not have spare DRAMs.
// Check the VPD for available spares. Note that a x4 DIMM has
OpenPOWER on IntegriCloud