diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2014-03-18 19:27:33 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-03-21 11:21:54 -0500 |
commit | c857bac776d690c846af8076f280a1e2f66d7e16 (patch) | |
tree | 4cb21dbbee0d19dea3e4b3df874e15d71238fe26 | |
parent | dde066c1eb21a4f9cc968614ab091d99d896223c (diff) | |
download | talos-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>
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 |