summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2019-01-18 16:27:53 -0600
committerZane C. Shelley <zshelle@us.ibm.com>2019-01-22 09:38:59 -0600
commitd276ff6b5326670bf5aea50262cd49d128a468ce (patch)
treefb2077986a9a977886ae726d2df67b76dd1fe73e /src/usr/diag/prdf/common
parent12264bb842174f95caa64be7aaa375b33839f805 (diff)
downloadtalos-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')
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C12
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H5
-rw-r--r--src/usr/diag/prdf/common/plat/prdfPlatServices_common.C36
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/prdfPlatServices_common.H10
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.
OpenPOWER on IntegriCloud