summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2018-05-15 21:17:35 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2018-05-23 15:11:16 -0400
commit5064efd9ee552ace99fb051ce98bb896202933ab (patch)
treea162ded1c13ee10a2e9edcdadd243ed961970f89
parent0535232e93da36701b20fd52022f02af6fdfc7f4 (diff)
downloadtalos-hostboot-5064efd9ee552ace99fb051ce98bb896202933ab.tar.gz
talos-hostboot-5064efd9ee552ace99fb051ce98bb896202933ab.zip
PRD: Simplify templates in memory CE functions
Change-Id: I8182ce256b247009b198220f937aef58343a61bf Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/58879 Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@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/59227 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
-rw-r--r--src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C2
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemDbUtils.H32
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C20
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H4
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfP9Mca_common.C2
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C12
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C18
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C36
8 files changed, 73 insertions, 53 deletions
diff --git a/src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C b/src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C
index eda3cea48..e34b40591 100644
--- a/src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C
+++ b/src/usr/diag/prdf/common/plat/cen/prdfCenMembuf_common.C
@@ -260,7 +260,7 @@ int32_t AnalyzeFetchNce##POS( ExtensibleChip * i_chip, \
{ \
ExtensibleChip * mbaChip = getConnectedChild( i_chip, TYPE_MBA, POS ); \
PRDF_ASSERT( nullptr != mbaChip ); \
- MemEcc::analyzeFetchNceTce<TYPE_MBA, MbaDataBundle *>( mbaChip, io_sc ); \
+ MemEcc::analyzeFetchNceTce<TYPE_MBA>( mbaChip, io_sc ); \
return SUCCESS; \
} \
PRDF_PLUGIN_DEFINE( cen_centaur, AnalyzeFetchNce##POS );
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemDbUtils.H b/src/usr/diag/prdf/common/plat/mem/prdfMemDbUtils.H
index fc4ff7800..9028dec8e 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemDbUtils.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemDbUtils.H
@@ -40,6 +40,38 @@ namespace MemDbUtils
//##############################################################################
/**
+ * @brief Generic wrapper to add an entry to the CE table.
+ * @param i_chip MCA or MBA.
+ * @param i_addr CE address.
+ * @param i_symbol CE symbol.
+ * @param i_isHard True if this was a hard CE. False otherwise.
+ * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
+ */
+template<TARGETING::TYPE T>
+uint32_t addCeTableEntry( ExtensibleChip * i_chip, const MemAddr & i_addr,
+ const MemSymbol & i_symbol, bool i_isHard );
+
+template<> inline
+uint32_t addCeTableEntry<TARGETING::TYPE_MCA>( ExtensibleChip * i_chip,
+ const MemAddr & i_addr,
+ const MemSymbol & i_symbol,
+ bool i_isHard )
+{
+ return getMcaDataBundle(i_chip)->iv_ceTable.addEntry( i_addr, i_symbol,
+ i_isHard );
+}
+
+template<> inline
+uint32_t addCeTableEntry<TARGETING::TYPE_MBA>( ExtensibleChip * i_chip,
+ const MemAddr & i_addr,
+ const MemSymbol & i_symbol,
+ bool i_isHard )
+{
+ return getMbaDataBundle(i_chip)->iv_ceTable.addEntry( i_addr, i_symbol,
+ i_isHard );
+}
+
+/**
* @brief Generic wrapper to add an entry to the UE table.
* @param i_chip MCA or MBA.
* @param i_type UE table entry type.
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
index 9cb7f5b42..467441c5a 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
@@ -585,7 +585,7 @@ uint32_t analyzeFetchMpe<TYPE_MBA>( ExtensibleChip * i_chip,
//------------------------------------------------------------------------------
-template<TARGETING::TYPE T, typename D>
+template<TARGETING::TYPE T>
uint32_t handleMemCe( ExtensibleChip * i_chip, const MemAddr & i_addr,
const MemSymbol & i_symbol, bool & o_doTps,
STEP_CODE_DATA_STRUCT & io_sc, bool i_isHard )
@@ -604,8 +604,8 @@ uint32_t handleMemCe( ExtensibleChip * i_chip, const MemAddr & i_addr,
io_sc.service_data->SetCallout( memmru, MRU_MEDA );
// Add data to the CE table.
- D db = static_cast<D>(i_chip->getDataBundle());
- uint32_t ceTableRc = db->iv_ceTable.addEntry( i_addr, i_symbol, i_isHard );
+ uint32_t ceTableRc = MemDbUtils::addCeTableEntry<T>( i_chip, i_addr,
+ i_symbol, i_isHard );
// Check MNFG thresholds, if needed.
// NOTE: We will only check the MNFG thresholds if DRAM repairs is disabled.
@@ -688,7 +688,7 @@ uint32_t handleMemCe( ExtensibleChip * i_chip, const MemAddr & i_addr,
//------------------------------------------------------------------------------
-template<TARGETING::TYPE T, typename D>
+template<TARGETING::TYPE T>
uint32_t analyzeFetchNceTce( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
@@ -726,7 +726,7 @@ uint32_t analyzeFetchNceTce( ExtensibleChip * i_chip,
bool doTps = false;
if ( sym1.isValid() )
{
- o_rc = handleMemCe<T,D>( i_chip, addr, sym1, doTps, io_sc );
+ o_rc = handleMemCe<T>( i_chip, addr, sym1, doTps, io_sc );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "handleMemCe(0x%08x,0x%02x,%d) failed",
@@ -747,7 +747,7 @@ uint32_t analyzeFetchNceTce( ExtensibleChip * i_chip,
if ( sym2.isValid() )
{
bool tmp;
- o_rc = handleMemCe<T,D>( i_chip, addr, sym2, tmp, io_sc );
+ o_rc = handleMemCe<T>( i_chip, addr, sym2, tmp, io_sc );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "handleMemCe(0x%08x,0x%02x,%d) failed",
@@ -790,11 +790,11 @@ uint32_t analyzeFetchNceTce( ExtensibleChip * i_chip,
// To resolve template linker errors.
template
-uint32_t analyzeFetchNceTce<TYPE_MCA, McaDataBundle *>( ExtensibleChip * i_chip,
- STEP_CODE_DATA_STRUCT & io_sc );
+uint32_t analyzeFetchNceTce<TYPE_MCA>( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc );
template
-uint32_t analyzeFetchNceTce<TYPE_MBA, MbaDataBundle *>( ExtensibleChip * i_chip,
- STEP_CODE_DATA_STRUCT & io_sc );
+uint32_t analyzeFetchNceTce<TYPE_MBA>( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc );
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H
index 1a96afeec..735ae436f 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H
@@ -59,7 +59,7 @@ namespace MemEcc
* @param i_isHard True if this is a hard CE. Default is false.
* @return Non-SUCCESS if an interal function fails, SUCCESS otherwise.
*/
-template<TARGETING::TYPE T, typename D>
+template<TARGETING::TYPE T>
uint32_t handleMemCe( ExtensibleChip * i_chip, const MemAddr & i_addr,
const MemSymbol & i_symbol, bool & o_doTps,
STEP_CODE_DATA_STRUCT & io_sc, bool i_isHard = false );
@@ -150,7 +150,7 @@ uint32_t analyzeFetchMpe( ExtensibleChip * i_chip, const MemRank & i_rank,
* @param io_sc The step code data struct.
* @return Non-SUCCESS if an interal function fails, SUCCESS otherwise.
*/
-template<TARGETING::TYPE T, typename D>
+template<TARGETING::TYPE T>
uint32_t analyzeFetchNceTce( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc );
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfP9Mca_common.C b/src/usr/diag/prdf/common/plat/mem/prdfP9Mca_common.C
index c5e9680c4..ac54ac97e 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfP9Mca_common.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfP9Mca_common.C
@@ -211,7 +211,7 @@ PLUGIN_FETCH_MPE_ERROR( 7 )
int32_t AnalyzeFetchNceTce( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
- MemEcc::analyzeFetchNceTce<TYPE_MCA, McaDataBundle *>( i_chip, io_sc );
+ MemEcc::analyzeFetchNceTce<TYPE_MCA>( i_chip, io_sc );
return SUCCESS; // nothing to return to rule code
}
PRDF_PLUGIN_DEFINE( p9_mca, AnalyzeFetchNceTce );
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
index 410ef7ac8..d4e29723c 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
@@ -218,7 +218,7 @@ uint32_t MemTdCtlr<T>::handleCmdComplete( STEP_CODE_DATA_STRUCT & io_sc )
// some way to change the template to use the MCA. It is also a local function
// because this is only for MemTdCtlr internal use and it didn't make much sense
// to create a public function.
-template<TARGETING::TYPE T, typename D>
+template<TARGETING::TYPE T>
uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
const MemAddr & i_addr, bool & o_errorsFound,
STEP_CODE_DATA_STRUCT & io_sc );
@@ -272,11 +272,8 @@ uint32_t __analyzeCmdComplete<TYPE_MCBIST>( ExtensibleChip * i_chip,
for ( auto & mcaChip : portList )
{
bool errorsFound;
- uint32_t l_rc = __checkEcc<TYPE_MCA, McaDataBundle *>( mcaChip,
- io_queue,
- i_addr,
- errorsFound,
- io_sc );
+ uint32_t l_rc = __checkEcc<TYPE_MCA>( mcaChip, io_queue, i_addr,
+ errorsFound, io_sc );
if ( SUCCESS != l_rc )
{
PRDF_ERR( PRDF_FUNC "__checkEcc<TYPE_MCA>(0x%08x) failed",
@@ -307,8 +304,7 @@ uint32_t __analyzeCmdComplete<TYPE_MBA>( ExtensibleChip * i_chip,
o_stoppedRank = __getStopRank<TYPE_MBA>( i_chip, i_addr );
// Check the MBA for ECC errors.
- return __checkEcc<TYPE_MBA, MbaDataBundle *>( i_chip, io_queue, i_addr,
- o_errorsFound, io_sc );
+ return __checkEcc<TYPE_MBA>(i_chip, io_queue, i_addr, o_errorsFound, io_sc);
}
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
index b0901b456..6fcd0f4de 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_ipl.C
@@ -165,7 +165,7 @@ bool __mnfgCeCheck<TYPE_MBA>( uint32_t i_eccAttns )
return ( 0 != (i_eccAttns & MAINT_HARD_NCE_ETE) );
}
-template <TARGETING::TYPE T, typename D>
+template <TARGETING::TYPE T>
uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
const MemAddr & i_addr, bool & o_errorsFound,
STEP_CODE_DATA_STRUCT & io_sc )
@@ -244,17 +244,13 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
}
template
-uint32_t __checkEcc<TYPE_MCA, McaDataBundle *>( ExtensibleChip * i_chip,
- TdQueue & io_queue,
- const MemAddr & i_addr,
- bool & o_errorsFound,
- STEP_CODE_DATA_STRUCT & io_sc );
+uint32_t __checkEcc<TYPE_MCA>( ExtensibleChip * i_chip, TdQueue & io_queue,
+ const MemAddr & i_addr, bool & o_errorsFound,
+ STEP_CODE_DATA_STRUCT & io_sc );
template
-uint32_t __checkEcc<TYPE_MBA, MbaDataBundle *>( ExtensibleChip * i_chip,
- TdQueue & io_queue,
- const MemAddr & i_addr,
- bool & o_errorsFound,
- STEP_CODE_DATA_STRUCT & io_sc );
+uint32_t __checkEcc<TYPE_MBA>( ExtensibleChip * i_chip, TdQueue & io_queue,
+ const MemAddr & i_addr, bool & o_errorsFound,
+ STEP_CODE_DATA_STRUCT & io_sc );
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
index 0c329f89b..e0835df7e 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
@@ -457,7 +457,7 @@ uint32_t MemTdCtlr<T>::defaultStep( STEP_CODE_DATA_STRUCT & io_sc )
//------------------------------------------------------------------------------
-template<TARGETING::TYPE T, typename D>
+template<TARGETING::TYPE T>
uint32_t __handleNceEte( ExtensibleChip * i_chip, TdQueue & io_queue,
const MemAddr & i_addr, STEP_CODE_DATA_STRUCT & io_sc,
bool i_isHard = false )
@@ -496,8 +496,8 @@ uint32_t __handleNceEte( ExtensibleChip * i_chip, TdQueue & io_queue,
{
// Add the symbol(s) to the callout list and CE table.
bool doTps;
- o_rc = MemEcc::handleMemCe<T,D>( i_chip, i_addr, d.symbol, doTps,
- io_sc, i_isHard );
+ o_rc = MemEcc::handleMemCe<T>( i_chip, i_addr, d.symbol, doTps,
+ io_sc, i_isHard );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "handleMemCe(0x%08x) failed",
@@ -595,7 +595,7 @@ uint32_t __handleRceEte<TYPE_MBA>( ExtensibleChip * i_chip,
//------------------------------------------------------------------------------
-template <TARGETING::TYPE T, typename D>
+template <TARGETING::TYPE T>
uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
const MemAddr & i_addr, bool & o_errorsFound,
STEP_CODE_DATA_STRUCT & io_sc )
@@ -630,10 +630,10 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
o_errorsFound = true;
io_sc.service_data->AddSignatureList( trgt, PRDFSIG_MaintINTER_CTE);
- o_rc = __handleNceEte<T,D>( i_chip, io_queue, i_addr, io_sc );
+ o_rc = __handleNceEte<T>( i_chip, io_queue, i_addr, io_sc );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "__handleNceEte<T,D>(0x%08x) failed",
+ PRDF_ERR( PRDF_FUNC "__handleNceEte<T>(0x%08x) failed",
huid );
break;
}
@@ -644,10 +644,10 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
o_errorsFound = true;
io_sc.service_data->AddSignatureList( trgt, PRDFSIG_MaintSOFT_CTE );
- o_rc = __handleNceEte<T,D>( i_chip, io_queue, i_addr, io_sc );
+ o_rc = __handleNceEte<T>( i_chip, io_queue, i_addr, io_sc );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "__handleNceEte<T,D>(0x%08x) failed",
+ PRDF_ERR( PRDF_FUNC "__handleNceEte<T>(0x%08x) failed",
huid );
break;
}
@@ -658,10 +658,10 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
o_errorsFound = true;
io_sc.service_data->AddSignatureList( trgt, PRDFSIG_MaintHARD_CTE );
- o_rc = __handleNceEte<T,D>( i_chip, io_queue, i_addr, io_sc, true );
+ o_rc = __handleNceEte<T>( i_chip, io_queue, i_addr, io_sc, true );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "__handleNceEte<T,D>(0x%08x) failed",
+ PRDF_ERR( PRDF_FUNC "__handleNceEte<T>(0x%08x) failed",
huid );
break;
}
@@ -734,17 +734,13 @@ uint32_t __checkEcc( ExtensibleChip * i_chip, TdQueue & io_queue,
}
template
-uint32_t __checkEcc<TYPE_MCA, McaDataBundle *>( ExtensibleChip * i_chip,
- TdQueue & io_queue,
- const MemAddr & i_addr,
- bool & o_errorsFound,
- STEP_CODE_DATA_STRUCT & io_sc );
+uint32_t __checkEcc<TYPE_MCA>( ExtensibleChip * i_chip, TdQueue & io_queue,
+ const MemAddr & i_addr, bool & o_errorsFound,
+ STEP_CODE_DATA_STRUCT & io_sc );
template<>
-uint32_t __checkEcc<TYPE_MBA, MbaDataBundle *>( ExtensibleChip * i_chip,
- TdQueue & io_queue,
- const MemAddr & i_addr,
- bool & o_errorsFound,
- STEP_CODE_DATA_STRUCT & io_sc )
+uint32_t __checkEcc<TYPE_MBA>( ExtensibleChip * i_chip, TdQueue & io_queue,
+ const MemAddr & i_addr, bool & o_errorsFound,
+ STEP_CODE_DATA_STRUCT & io_sc )
{
// TODO: remove this once runtime support is abled for MBA.
return SUCCESS;
OpenPOWER on IntegriCloud