summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/framework/service
diff options
context:
space:
mode:
authorSachin Gupta <sgupta2m@in.ibm.com>2014-01-23 15:55:45 +0530
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-03-20 14:01:58 -0500
commit90d0129fe35f1e5d437ef4cab3b8e0bbacc95825 (patch)
tree211cd0936af336ba8914a0a4b0c87a779240abc4 /src/usr/diag/prdf/common/framework/service
parentdd911ee39fd8e3d4fd7a6157bdb0745e97462569 (diff)
downloadtalos-hostboot-90d0129fe35f1e5d437ef4cab3b8e0bbacc95825.tar.gz
talos-hostboot-90d0129fe35f1e5d437ef4cab3b8e0bbacc95825.zip
PRD: Dynamic Memory Deallocation.
Change-Id: I6cdb2385452fcd4168ce980c7e5f939148dd058c RTC: 22869 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8316 Tested-by: Jenkins Server Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com> Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Backport: release-fips810 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9755
Diffstat (limited to 'src/usr/diag/prdf/common/framework/service')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.C72
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfTargetServices.H24
2 files changed, 94 insertions, 2 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
index 228b06c55..80dac9523 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C
@@ -1039,7 +1039,8 @@ uint32_t getPhbConfig( TARGETING::TargetHandle_t i_proc )
//##############################################################################
int32_t getMasterRanks( TargetHandle_t i_memTrgt,
- std::vector<CenRank> & o_ranks )
+ std::vector<CenRank> & o_ranks,
+ uint8_t i_ds )
{
#define PRDF_FUNC "PlatServices::getMasterRanks] "
@@ -1058,6 +1059,12 @@ int32_t getMasterRanks( TargetHandle_t i_memTrgt,
break;
}
+ if( MAX_DIMM_PER_PORT < i_ds )
+ {
+ PRDF_ERR( PRDF_FUNC"Invalid value for Dimm Slct:%u", i_ds );
+ break;
+ }
+
uint8_t info[MAX_PORT_PER_MBA][MAX_DIMM_PER_PORT];
if ( !mbaTrgt->tryGetAttr<ATTR_EFF_DIMM_RANKS_CONFIGED>(info) )
{
@@ -1071,6 +1078,14 @@ int32_t getMasterRanks( TargetHandle_t i_memTrgt,
for ( uint32_t ds = 0; ds < MAX_DIMM_PER_PORT; ds++ )
{
+ // if we are requested to get master ranks on a specific
+ // DIMM, ignore if ds does not match the specific DIMM.
+ // We have kept MAX_DIMM_PER_PORT as special value ( default )
+ // for getting total ranks across both DIMMS.
+
+ if( ( MAX_DIMM_PER_PORT != i_ds ) && ( ds != i_ds ) )
+ continue;
+
uint8_t rankMask = info[0][ds];
if ( 0 == (rankMask & 0xf0) ) continue; // Nothing configured.
@@ -1187,6 +1202,61 @@ int32_t getMbaDimm( TARGETING::TargetHandle_t i_dimmTarget, uint8_t & o_dimm )
//------------------------------------------------------------------------------
+int32_t getDramGen( TARGETING::TargetHandle_t i_mba, uint8_t & o_dramGen )
+{
+ #define PRDF_FUNC "[PlatServices::getDramGen] "
+
+ int32_t o_rc = FAIL;
+ do
+ {
+ if ( TYPE_MBA != getTargetType( i_mba ) )
+ {
+ PRDF_ERR( PRDF_FUNC"Invalid Target. HUID:0X%08X",
+ getHuid( i_mba ) );
+ break;
+ }
+
+ o_dramGen = i_mba->getAttr<ATTR_EFF_DRAM_GEN>( );
+
+ o_rc = SUCCESS;
+
+ }while(0);
+
+ return o_rc;
+
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
+int32_t getDimmRowCol( TARGETING::TargetHandle_t i_mba, uint8_t & o_rowNum,
+ uint8_t & o_colNum )
+{
+ #define PRDF_FUNC "[PlatServices::getDimmRowCol] "
+
+ int32_t o_rc = FAIL;
+ do
+ {
+ if ( TYPE_MBA != getTargetType( i_mba ) )
+ {
+ PRDF_ERR( PRDF_FUNC"Invalid Target. HUID:0X%08X",
+ getHuid( i_mba ) );
+ break;
+ }
+
+ o_rowNum = i_mba->getAttr<ATTR_EFF_DRAM_ROWS>();
+ o_colNum = i_mba->getAttr<ATTR_EFF_DRAM_COLS>();
+
+ o_rc = SUCCESS;
+
+ }while(0);
+
+ return o_rc;
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
bool isDramWidthX4( TargetHandle_t i_mba )
{
return ( fapi::ENUM_ATTR_EFF_DRAM_WIDTH_X4 ==
diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H
index 814465eec..6c549b6f6 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.H
@@ -310,10 +310,14 @@ uint32_t getPhbConfig( TARGETING::TargetHandle_t i_proc );
* @brief Returns the list of configured master ranks for an MBA.
* @param i_memTrgt MBA target or child of MBA.
* @param o_ranks The returned list.
+ * @param i_ds Dimm Slct for which rank information is required. If this
+ * equals to MAX_DIMM_PER_PORT, function will return rank
+ * information for both DIMMS on this MBA.
* @return Non-SUCCESS if internal functions fail, SUCCESS otherwise.
*/
int32_t getMasterRanks( TARGETING::TargetHandle_t i_memTrgt,
- std::vector<CenRank> & o_ranks );
+ std::vector<CenRank> & o_ranks,
+ uint8_t i_ds = MAX_DIMM_PER_PORT );
/**
* @brief Returns the DMI bus channel for the given memory target.
@@ -358,6 +362,24 @@ int32_t getMbaDimm( TARGETING::TargetHandle_t i_dimmTarget, uint8_t & o_dimm );
bool isDramWidthX4(TARGETING::TargetHandle_t i_mbaTarget);
/**
+ * @brief Get DRAM generation
+ * @param i_mba MBA target
+ * @param o_dramGen DRAM generation ( 1 - DDR3, 2 - DDR4 )
+ * @return Non-SUCCESS if internal functions fail, SUCCESS otherwise.
+ */
+int32_t getDramGen( TARGETING::TargetHandle_t i_mba, uint8_t & o_dramGen );
+
+/**
+ * @brief Get DIMM number of rows and columns
+ * @param i_mba MBA target
+ * @param o_rowNum Number of rows
+ * @param o_colNum Number of columns
+ * @return Non-SUCCESS if internal functions fail, SUCCESS otherwise.
+ */
+int32_t getDimmRowCol( TARGETING::TargetHandle_t i_mba, uint8_t & o_rowNum,
+ uint8_t & o_colNum );
+
+/**
* @brief Obtains number of ranks (including slave ranks) per DIMM select.
* @param i_mbaTarget MBA target.
* @param i_ds DIMM select for DIMM.
OpenPOWER on IntegriCloud