diff options
author | Sachin Gupta <sgupta2m@in.ibm.com> | 2013-10-18 10:24:04 +0530 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-12-13 09:21:27 -0600 |
commit | dfec95107ef614c457b61d03e36929e60e9c7e5e (patch) | |
tree | d0c0b979e2050b059ebe81de31cfe69584a20234 /src/usr/diag/prdf/common/framework/service | |
parent | 13e1e775ba297999579d8304e906c31c2e72a42a (diff) | |
download | talos-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-x | src/usr/diag/prdf/common/framework/service/prdfTargetServices.C | 60 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/framework/service/prdfTargetServices.H | 14 |
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 |