diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2016-08-05 10:06:13 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-08-31 18:00:59 -0400 |
commit | 95aa654c3cd18d2d6e209c5554e405bfe871378e (patch) | |
tree | 9de7d39fedb1a510ffdeea6a3279eb51a20e6dd9 | |
parent | 57e84c7a1e4cc3127213f6fb48052361bb167dee (diff) | |
download | talos-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>
-rw-r--r-- | src/usr/diag/prdf/common/plugins/prdfParserEnums.H | 5 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/prdfPlatServices.C | 78 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/prdfPlatServices.H | 19 |
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 |