diff options
author | Sachin Gupta <sgupta2m@in.ibm.com> | 2014-01-23 15:55:45 +0530 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-03-20 14:01:58 -0500 |
commit | 90d0129fe35f1e5d437ef4cab3b8e0bbacc95825 (patch) | |
tree | 211cd0936af336ba8914a0a4b0c87a779240abc4 /src/usr/diag/prdf/common/framework/service | |
parent | dd911ee39fd8e3d4fd7a6157bdb0745e97462569 (diff) | |
download | talos-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-x | src/usr/diag/prdf/common/framework/service/prdfTargetServices.C | 72 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/framework/service/prdfTargetServices.H | 24 |
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. |