summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/framework/service
diff options
context:
space:
mode:
authorSachin Gupta <sgupta2m@in.ibm.com>2013-10-18 10:24:04 +0530
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-12-13 09:21:27 -0600
commitdfec95107ef614c457b61d03e36929e60e9c7e5e (patch)
treed0c0b979e2050b059ebe81de31cfe69584a20234 /src/usr/diag/prdf/common/framework/service
parent13e1e775ba297999579d8304e906c31c2e72a42a (diff)
downloadtalos-hostboot-dfec95107ef614c457b61d03e36929e60e9c7e5e.tar.gz
talos-hostboot-dfec95107ef614c457b61d03e36929e60e9c7e5e.zip
PRD: X4 DRAM Support
Change-Id: Ifa03de75b514c272574c0549113b60e3c29a75de RTC: 68096 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/6739 Tested-by: Jenkins Server Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com> Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7703
Diffstat (limited to 'src/usr/diag/prdf/common/framework/service')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.C60
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.H14
2 files changed, 74 insertions, 0 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
index f3f76bab3..764ea5d1f 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
@@ -1183,6 +1183,66 @@ 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 ( SUCCESS != 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 10e47cd03..19dd32b97 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H
@@ -365,6 +365,20 @@ bool isDramWidthX4(TARGETING::TargetHandle_t i_mbaTarget);
*/
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
OpenPOWER on IntegriCloud