summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2018-03-28 13:41:01 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2018-04-12 22:19:00 -0400
commit0c5b62c1df484f4fd6549f1ba9420a8e24791d9f (patch)
tree0c266ee30a8afa0a76ef963519ef719755818bea /src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
parent18dba5172c7d022d5b5b119d758fe167868cb00d (diff)
downloadtalos-hostboot-0c5b62c1df484f4fd6549f1ba9420a8e24791d9f.tar.gz
talos-hostboot-0c5b62c1df484f4fd6549f1ba9420a8e24791d9f.zip
PRD: IPL VCM for Centaur
Change-Id: I881eea3fdbac2e644f7df6b001ffe63cf86ddf33 RTC: 189615 RTC: 169933 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/56902 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/57037 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C')
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C94
1 files changed, 29 insertions, 65 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
index f4c75efb8..bd8a3fde2 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016,2017 */
+/* Contributors Listed Below - COPYRIGHT 2016,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -122,22 +122,30 @@ uint32_t VcmEvent<T>::cleanup( STEP_CODE_DATA_STRUCT & io_sc )
//------------------------------------------------------------------------------
-// Avoid linker errors with the template.
-template class VcmEvent<TYPE_MCA>;
-template class VcmEvent<TYPE_MBA>;
+template<TARGETING::TYPE T>
+bool __iueCheck( uint32_t i_eccAttns );
-//##############################################################################
-//
-// Specializations for MCA
-//
-//##############################################################################
+template<>
+bool __iueCheck<TYPE_MCA>( uint32_t i_eccAttns )
+{
+ return ( 0 != (i_eccAttns & MAINT_IUE) );
+}
template<>
-uint32_t VcmEvent<TYPE_MCA>::checkEcc( const uint32_t & i_eccAttns,
- STEP_CODE_DATA_STRUCT & io_sc,
- bool & o_done )
+bool __iueCheck<TYPE_MBA>( uint32_t i_eccAttns )
{
- #define PRDF_FUNC "[VcmEvent<TYPE_MCA>::checkEcc] "
+ // IUES are reported via RCE ETE on Centaur
+ return ( 0 != (i_eccAttns & MAINT_RCE_ETE) );
+}
+
+//------------------------------------------------------------------------------
+
+template<TARGETING::TYPE T>
+uint32_t VcmEvent<T>::checkEcc( const uint32_t & i_eccAttns,
+ STEP_CODE_DATA_STRUCT & io_sc,
+ bool & o_done )
+{
+ #define PRDF_FUNC "[VcmEvent<T>::checkEcc] "
uint32_t o_rc = SUCCESS;
@@ -146,7 +154,7 @@ uint32_t VcmEvent<TYPE_MCA>::checkEcc( const uint32_t & i_eccAttns,
// IUEs are reported as UEs during read operations. Therefore, we will
// treat IUEs like UEs for these scrub operations simply to maintain
// consistency during all of Memory Diagnostics.
- if ( (i_eccAttns & MAINT_UE) || (i_eccAttns & MAINT_IUE) )
+ if ( (i_eccAttns & MAINT_UE) || __iueCheck<T>(i_eccAttns) )
{
PRDF_TRAC( PRDF_FUNC "UE Detected: 0x%08x,0x%02x",
iv_chip->getHuid(), getKey() );
@@ -159,7 +167,7 @@ uint32_t VcmEvent<TYPE_MCA>::checkEcc( const uint32_t & i_eccAttns,
// At this point we don't actually have an address for the UE. The
// best we can do is get the address in which the command stopped.
MemAddr addr;
- o_rc = getMemMaintAddr<TYPE_MCA>( iv_chip, addr );
+ o_rc = getMemMaintAddr<T>( iv_chip, addr );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "getMemMaintAddr(0x%08x) failed",
@@ -167,8 +175,8 @@ uint32_t VcmEvent<TYPE_MCA>::checkEcc( const uint32_t & i_eccAttns,
break;
}
- o_rc = MemEcc::handleMemUe<TYPE_MCA>( iv_chip, addr,
- UE_TABLE::SCRUB_UE, io_sc );
+ o_rc = MemEcc::handleMemUe<T>( iv_chip, addr, UE_TABLE::SCRUB_UE,
+ io_sc );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "handleMemUe(0x%08x,0x%02x) failed",
@@ -187,55 +195,11 @@ uint32_t VcmEvent<TYPE_MCA>::checkEcc( const uint32_t & i_eccAttns,
#undef PRDF_FUNC
}
-//##############################################################################
-//
-// Specializations for MBA
-//
-//##############################################################################
-
-template<>
-uint32_t VcmEvent<TYPE_MBA>::checkEcc( const uint32_t & i_eccAttns,
- STEP_CODE_DATA_STRUCT & io_sc,
- bool & o_done )
-{
- #define PRDF_FUNC "[VcmEvent<TYPE_MBA>::checkEcc] "
-
- uint32_t o_rc = SUCCESS;
-
- do
- {
- // IUEs (reported via RCE ETE) are reported as UEs during read
- // operations. Therefore, we will treat IUEs like UEs for these scrub
- // operations simply to maintain consistency during all of Memory
- // Diagnostics.
- if ( (i_eccAttns & MAINT_UE) || (i_eccAttns & MAINT_RCE_ETE) )
- {
- PRDF_TRAC( PRDF_FUNC "UE Detected: 0x%08x,0x%02x",
- iv_chip->getHuid(), getKey() );
-
- io_sc.service_data->setSignature( iv_chip->getHuid(),
- (i_eccAttns & MAINT_UE)
- ? PRDFSIG_MaintUE
- : PRDFSIG_MaintRETRY_CTE );
- // TODO: RTC 157888
- // - Call mssIplUeIsolation() and add all DIMMs with bad bits to the
- // callout list.
- // - Make the error log predictive.
- // - Might be able to tuck this into MemEcc::handleMemUe().
- PRDF_ERR( PRDF_FUNC "function not implemented yet" );
-
- // Leave the mark in place and abort this procedure.
- o_done = true;
- }
-
- } while (0);
-
- return o_rc;
-
- #undef PRDF_FUNC
-}
-
//------------------------------------------------------------------------------
+// Avoid linker errors with the template.
+template class VcmEvent<TYPE_MCA>;
+template class VcmEvent<TYPE_MBA>;
+
} // end namespace PRDF
OpenPOWER on IntegriCloud