diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2019-01-18 16:27:53 -0600 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2019-01-22 09:38:59 -0600 |
commit | d276ff6b5326670bf5aea50262cd49d128a468ce (patch) | |
tree | fb2077986a9a977886ae726d2df67b76dd1fe73e /src/usr/diag/prdf/common | |
parent | 12264bb842174f95caa64be7aaa375b33839f805 (diff) | |
download | talos-hostboot-d276ff6b5326670bf5aea50262cd49d128a468ce.tar.gz talos-hostboot-d276ff6b5326670bf5aea50262cd49d128a468ce.zip |
PRD: Bad dq bitmap add proper clear func
Change-Id: I812b58611e9306fd0f2ead9fa91bb36a55708dca
CQ: SW454629
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/70660
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/70705
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf/common')
4 files changed, 63 insertions, 0 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C b/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C index 311329dfd..4bed4b987 100644 --- a/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C +++ b/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C @@ -252,6 +252,18 @@ uint32_t MemDqBitmap::clearDram( const MemSymbol & i_symbol, uint8_t i_pins ) //------------------------------------------------------------------------------ +void MemDqBitmap::clearBitmap() +{ + size_t maxPorts = getNumPorts(); + + for ( uint32_t i = 0; i < maxPorts; i++ ) + { + memset( iv_data[i].bitmap, 0x00, sizeof(iv_data[i].bitmap) ); + } +} + +//------------------------------------------------------------------------------ + void MemDqBitmap::getCaptureData( CaptureData & o_cd ) const { uint8_t rank = iv_rank.getMaster(); diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H b/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H index 5877600a8..b407d9835 100644 --- a/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H +++ b/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H @@ -132,6 +132,11 @@ class MemDqBitmap uint32_t clearDram( const MemSymbol & i_symbol, uint8_t i_pins = 0xff ); /** + * @brief Clears the entire bitmap. + */ + void clearBitmap(); + + /** * @brief Adds the bitmaps for both ports to the capture data. * @param o_cd Capture data struct. */ diff --git a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C index fee031aae..970a705ef 100644 --- a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C +++ b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C @@ -789,6 +789,42 @@ uint32_t setBadDqBitmap( TargetHandle_t i_trgt, const MemRank & i_rank, } //------------------------------------------------------------------------------ + +uint32_t clearBadDqBitmap( TargetHandle_t i_trgt, const MemRank & i_rank ) +{ + #define PRDF_FUNC "[PlatServices::clearBadDqBitmap] " + + uint32_t o_rc = SUCCESS; + + do + { + MemDqBitmap dqBitmap; + o_rc = getBadDqBitmap( i_trgt, i_rank, dqBitmap ); + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC "getBadDqBitmap(0x%08x, 0x%02x) failed.", + getHuid(i_trgt), i_rank.getKey() ); + break; + } + + dqBitmap.clearBitmap(); + + o_rc = setBadDqBitmap( i_trgt, i_rank, dqBitmap ); + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC "setBadDqBitmap(0x%08x, 0x%02x) failed.", + getHuid(i_trgt), i_rank.getKey() ); + break; + } + }while(0); + + return o_rc; + + #undef PRDF_FUNC +} + + +//------------------------------------------------------------------------------ template<> void getDimmDqAttr<TYPE_MCA>( TargetHandle_t i_target, uint8_t (&o_dqMapPtr)[DQS_PER_DIMM] ) diff --git a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H index 190f1c2bb..856fe72f1 100755 --- a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H +++ b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H @@ -214,6 +214,16 @@ uint32_t setBadDqBitmap( TARGETING::TargetHandle_t i_trgt, const MemDqBitmap & i_bitmap ); /** + * @brief Clears the bad DQ bitmap attribute for all ports of the target rank. + * @param i_trgt A MCA/MBA/MEM_PORT target. + * @param i_rank Target rank. + * @note This is a no-op if DRAM Repairs are disabled in manufacturing. + * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. + */ +uint32_t clearBadDqBitmap( TARGETING::TargetHandle_t i_trgt, + const MemRank & i_rank ); + +/** * @brief Invokes the get steer mux hardware procedure. * @param i_mba Target MBA/MCA * @param i_rank Target rank. |