summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2016-08-05 10:06:13 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-08-31 18:00:59 -0400
commit95aa654c3cd18d2d6e209c5554e405bfe871378e (patch)
tree9de7d39fedb1a510ffdeea6a3279eb51a20e6dd9 /src/usr/diag/prdf
parent57e84c7a1e4cc3127213f6fb48052361bb167dee (diff)
downloadtalos-hostboot-95aa654c3cd18d2d6e209c5554e405bfe871378e.tar.gz
talos-hostboot-95aa654c3cd18d2d6e209c5554e405bfe871378e.zip
PRD: Add support to start background scrubbing
Change-Id: I11de553e0581693151bfb176d262969fd4ef6399 RTC: 157894 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/27916 Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/28816 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf')
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfParserEnums.H5
-rw-r--r--src/usr/diag/prdf/plat/prdfPlatServices.C78
-rw-r--r--src/usr/diag/prdf/plat/prdfPlatServices.H19
3 files changed, 100 insertions, 2 deletions
diff --git a/src/usr/diag/prdf/common/plugins/prdfParserEnums.H b/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
index 48fbda48d..998393553 100644
--- a/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
+++ b/src/usr/diag/prdf/common/plugins/prdfParserEnums.H
@@ -81,8 +81,9 @@ enum PositionBounds
MAX_MCA_PER_MCS = 2,
MAX_MCA_PER_MCBIST = MAX_MCA_PER_MCS * MAX_MCS_PER_MCBIST,
- MAX_MCA_PER_PROC = MAX_MCA_PER_MCS * MAX_MCS_PER_MCBIST *
- MAX_MCBIST_PER_PROC,
+ MAX_MCA_PER_PROC = MAX_MCA_PER_MCS * MAX_MCS_PER_PROC,
+
+ MAX_PORT_PER_MCBIST = MAX_MCA_PER_MCBIST, // MCA == PORT
MAX_MEMBUF_PER_PROC = MAX_MCS_PER_PROC,
diff --git a/src/usr/diag/prdf/plat/prdfPlatServices.C b/src/usr/diag/prdf/plat/prdfPlatServices.C
index 1effdf6da..552919c01 100644
--- a/src/usr/diag/prdf/plat/prdfPlatServices.C
+++ b/src/usr/diag/prdf/plat/prdfPlatServices.C
@@ -288,6 +288,84 @@ TARGETING::TargetHandle_t getActiveRefClk(TARGETING::TargetHandle_t
i_oscPos );
}
+//##############################################################################
+//## MCBIST/Maintenance Command wrappers
+//##############################################################################
+
+template<>
+uint32_t startBgScrub<TYPE_MCBIST>( TargetHandle_t i_trgt,
+ const MemRank & i_rank,
+ uint8_t i_port )
+{
+ #define PRDF_FUNC "[PlatServices::startBgScrub<TYPE_MCBIST>] "
+
+ PRDF_ASSERT( TYPE_MCBIST == getTargetType(i_trgt) );
+ PRDF_ASSERT( i_port < MAX_PORT_PER_MCBIST );
+
+ uint32_t rc = SUCCESS;
+
+ fapi2::Target<fapi2::TARGET_TYPE_MCBIST> fapiTrgt ( i_trgt );
+
+ mss::mcbist::stop_conditions stopCond;
+ stopCond.set_thresh_nce_int(1)
+ .set_thresh_nce_soft(1)
+ .set_thresh_nce_hard(1)
+ .set_pause_on_mpe(mss::ON)
+ .set_pause_on_ue(mss::ON)
+ .set_pause_on_aue(mss::ON)
+ .set_nce_hard_symbol_count_enable(mss::ON);
+
+ mss::mcbist::speed scrubSpeed = enableFastBgScrub() ? mss::mcbist::LUDICROUS
+ : mss::mcbist::BG_SCRUB;
+
+ mss::mcbist::address saddr, eaddr;
+ mss::mcbist::address::get_srank_range( i_port,
+ i_rank.getDimmSlct(),
+ i_rank.getRankSlct(),
+ i_rank.getSlave(),
+ saddr,
+ eaddr );
+
+ fapi2::ReturnCode fapi_rc = memdiags::background_scrub( fapiTrgt, stopCond,
+ scrubSpeed, saddr );
+
+ errlHndl_t errl = fapi2::rcToErrl( fapi_rc );
+ if ( nullptr != errl )
+ {
+ PRDF_ERR( PRDF_FUNC "memdiags::stop(0x%08x) failed", getHuid(i_trgt) );
+ PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
+ rc = FAIL;
+ }
+
+ return rc;
+
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
+template<>
+uint32_t startBgScrub<TYPE_MBA>( TargetHandle_t i_trgt,
+ const MemRank & i_rank,
+ uint8_t i_port )
+{
+ #define PRDF_FUNC "[PlatServices::startBgScrub<TYPE_MBA>] "
+
+ PRDF_ASSERT( TYPE_MBA == getTargetType(i_trgt) );
+ // i_port is not used in this function.
+
+ uint32_t rc = SUCCESS;
+
+ PRDF_ERR( PRDF_FUNC "function not implemented yet" );
+// TODO RTC 136126
+
+ return rc;
+
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
} // end namespace PlatServices
} // end namespace PRDF
diff --git a/src/usr/diag/prdf/plat/prdfPlatServices.H b/src/usr/diag/prdf/plat/prdfPlatServices.H
index 66a8556e0..af396d168 100644
--- a/src/usr/diag/prdf/plat/prdfPlatServices.H
+++ b/src/usr/diag/prdf/plat/prdfPlatServices.H
@@ -50,6 +50,7 @@
#endif
#include <prdfBitString.H>
+#include <mem/prdfMemRank.H>
//------------------------------------------------------------------------------
@@ -101,6 +102,24 @@ uint32_t getScom(TARGETING::TargetHandle_t i_target, BIT_STRING_CLASS& io_bs,
uint32_t putScom(TARGETING::TargetHandle_t i_target, BIT_STRING_CLASS& io_bs,
uint64_t i_address);
+//##############################################################################
+//## MCBIST/Maintenance Command wrappers
+//##############################################################################
+
+/**
+ * @brief Starts Background Scrubbing.
+ * @param i_trgt MCBIST or MBA target.
+ * @param i_rank Will start background scrubbing on the first address of this
+ * slave rank. To ensure the command is started on a master rank
+ * boundary, make sure the slave rank value is 0.
+ * @param i_port The MCBIST port. Not used for MBA.
+ * @return Non-SUCCESS if an internal function fails, otherwise SUCCESS.
+ */
+template<TARGETING::TYPE T>
+uint32_t startBgScrub( TARGETING::TargetHandle_t i_trgt,
+ const MemRank & i_rank,
+ uint8_t i_port = 0xff );
+
} // end namespace PlatServices
} // end namespace PRDF
OpenPOWER on IntegriCloud