summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2017-02-20 15:44:24 -0600
committerZane C. Shelley <zshelle@us.ibm.com>2017-02-27 10:41:20 -0500
commitc45b0ef7838420bcae023e1fbe6d2ae7cbf730bb (patch)
treeac6f7c35e1d96c48bb1471777eca68f70c11cdcb /src/usr
parentf47866a84121fc8ab6f3420138d9bb5be785559b (diff)
downloadtalos-hostboot-c45b0ef7838420bcae023e1fbe6d2ae7cbf730bb.tar.gz
talos-hostboot-c45b0ef7838420bcae023e1fbe6d2ae7cbf730bb.zip
PRD: add MCA data bundle wrapper for MCBIST TdCtlr
Change-Id: If27fb37f425db1ee00f181663944396bd07fdacb RTC: 165382 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36757 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/37019 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C82
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H4
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H26
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C5
4 files changed, 56 insertions, 61 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
index bb5ce2592..c38863291 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
@@ -89,39 +89,24 @@ void calloutMemUe<TYPE_MBA>( ExtensibleChip * i_chip, const MemRank & i_rank,
#ifdef __HOSTBOOT_MODULE
-template<>
-uint32_t addVcmEvent<TYPE_MCA>( ExtensibleChip * i_chip,
- const MemRank & i_rank,
- const MemMark & i_mark,
- STEP_CODE_DATA_STRUCT & io_sc )
+template<TARGETING::TYPE T, typename D>
+uint32_t addVcmEvent( ExtensibleChip * i_chip, const MemRank & i_rank,
+ const MemMark & i_mark, STEP_CODE_DATA_STRUCT & io_sc )
{
- PRDF_ASSERT( TYPE_MCA == i_chip->getType() );
-
- ExtensibleChip * mcbChip = getConnectedParent( i_chip, TYPE_MCBIST );
+ PRDF_ASSERT( T == i_chip->getType() );
- McbistDataBundle * mcbdb = getMcbistDataBundle( mcbChip );
+ D db = static_cast<D>(i_chip->getDataBundle());
- TdEntry * entry = new VcmEvent<TYPE_MCA>( i_chip, i_rank, i_mark );
+ TdEntry * entry = new VcmEvent<T>( i_chip, i_rank, i_mark );
- return mcbdb->getTdCtlr()->handleTdEvent( io_sc, entry );
+ return db->getTdCtlr()->handleTdEvent( io_sc, entry );
}
-/* TODO: RTC 144083
-template<>
-uint32_t addVcmEvent<TYPE_MBA>( ExtensibleChip * i_chip,
- const MemRank & i_rank,
- const MemMark & i_mark,
- STEP_CODE_DATA_STRUCT & io_sc )
-{
- PRDF_ASSERT( TYPE_MBA == i_chip->getType() );
-
- CenMbaDataBundle * mbadb = getMbaDataBundle( i_chip );
-
- TdEntry * entry = new VcmEvent<TYPE_MBA>( i_chip, i_rank, i_mark );
-
- return mbadb->getTdCtlr()->handleTdEvent( io_sc, entry );
-}
-*/
+template
+uint32_t addVcmEvent<TYPE_MCA, McaDataBundle *>( ExtensibleChip * i_chip,
+ const MemRank & i_rank,
+ const MemMark & i_mark,
+ STEP_CODE_DATA_STRUCT & io_sc);
#endif
@@ -129,39 +114,24 @@ uint32_t addVcmEvent<TYPE_MBA>( ExtensibleChip * i_chip,
#ifdef __HOSTBOOT_MODULE
-
-template<>
-uint32_t addTpsEvent<TYPE_MCA>( ExtensibleChip * i_chip,
- const MemRank & i_rank,
- STEP_CODE_DATA_STRUCT & io_sc, bool i_banTps )
+template<TARGETING::TYPE T, typename D>
+uint32_t addTpsEvent( ExtensibleChip * i_chip, const MemRank & i_rank,
+ STEP_CODE_DATA_STRUCT & io_sc, bool i_banTps )
{
- PRDF_ASSERT( TYPE_MCA == i_chip->getType() );
-
- ExtensibleChip * mcbChip = getConnectedParent( i_chip, TYPE_MCBIST );
- PRDF_ASSERT( nullptr != mcbChip ); // definitely a bug
+ PRDF_ASSERT( T == i_chip->getType() );
- McbistDataBundle * mcbdb = getMcbistDataBundle( mcbChip );
+ D db = static_cast<D>(i_chip->getDataBundle());
- TdEntry * entry = new TpsEvent<TYPE_MCA>( i_chip, i_rank, i_banTps );
+ TdEntry * entry = new TpsEvent<T>( i_chip, i_rank, i_banTps );
- return mcbdb->getTdCtlr()->handleTdEvent( io_sc, entry );
+ return db->getTdCtlr()->handleTdEvent( io_sc, entry );
}
-/* TODO: RTC 144083
-template<>
-uint32_t addTpsEvent<TYPE_MBA>( ExtensibleChip * i_chip,
- const MemRank & i_rank,
- STEP_CODE_DATA_STRUCT & io_sc, bool i_banTps )
-{
- PRDF_ASSERT( TYPE_MBA == i_chip->getType() );
-
- CenMbaDataBundle * mbadb = getMbaDataBundle( i_chip );
-
- TdEntry * entry = new TpsEvent<TYPE_MBA>( i_chip, i_rank, i_banTps );
-
- return mbadb->getTdCtlr()->handleTdEvent( io_sc, entry );
-}
-*/
+template
+uint32_t addTpsEvent<TYPE_MCA, McaDataBundle *>( ExtensibleChip * i_chip,
+ const MemRank & i_rank,
+ STEP_CODE_DATA_STRUCT & io_sc,
+ bool i_banTps );
#endif
@@ -229,7 +199,7 @@ uint32_t analyzeFetchMpe( ExtensibleChip * i_chip, const MemRank & i_rank,
io_sc.service_data->SetCallout( mm );
// Add a VCM request to the TD queue.
- o_rc = addVcmEvent<T>( i_chip, i_rank, chipMark, io_sc );
+ o_rc = addVcmEvent<T,D>( i_chip, i_rank, chipMark, io_sc );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "addVcmEvent() failed: i_chip=0x%08x "
@@ -341,7 +311,7 @@ uint32_t analyzeFetchUe( ExtensibleChip * i_chip,
// Add a TPS request to the TD queue and ban any further TPS requests
// for this rank.
- o_rc = addTpsEvent<T>( i_chip, rank, io_sc, true );
+ o_rc = addTpsEvent<T,D>( i_chip, rank, io_sc, true );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "addTpsEvent() failed: i_chip=0x%08x "
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H
index a96b28a14..1ed11fdcc 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.H
@@ -101,11 +101,11 @@ uint32_t analyzeFetchUe( ExtensibleChip * i_chip,
#ifdef __HOSTBOOT_MODULE
-template<TARGETING::TYPE T>
+template<TARGETING::TYPE T, typename D>
uint32_t addVcmEvent( ExtensibleChip * i_chip, const MemRank & i_rank,
const MemMark & i_mark, STEP_CODE_DATA_STRUCT & io_sc );
-template<TARGETING::TYPE T>
+template<TARGETING::TYPE T, typename D>
uint32_t addTpsEvent( ExtensibleChip * i_chip, const MemRank & i_rank,
STEP_CODE_DATA_STRUCT & io_sc, bool i_banTps = false );
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H b/src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H
index 75075a98e..aea42630f 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H
@@ -32,6 +32,11 @@
// Platform includes
#include <prdfMemCeTable.H>
#include <prdfMemUeTable.H>
+#include <prdfPlatServices.H>
+
+#ifdef __HOSTBOOT_MODULE
+ #include <prdfP9McbistDataBundle.H>
+#endif
namespace PRDF
{
@@ -46,18 +51,37 @@ class McaDataBundle : public DataBundle
* @param i_chip An MCA chip.
*/
explicit McaDataBundle( ExtensibleChip * i_chip ) :
- iv_ceTable(i_chip), iv_ueTable(i_chip)
+ iv_chip(i_chip), iv_ceTable(i_chip), iv_ueTable(i_chip)
{}
/** @brief Destructor */
~McaDataBundle() = default;
+ #ifdef __HOSTBOOT_MODULE
+
+ /** @return Wrapper to get Targeted Diagnostics controller from MCBIST. */
+ MemTdCtlr<TARGETING::TYPE_MCBIST> * getTdCtlr()
+ {
+ using namespace TARGETING;
+ using namespace PlatServices;
+
+ ExtensibleChip * mcbChip = getConnectedParent( iv_chip, TYPE_MCBIST );
+ McbistDataBundle * mcbdb = getMcbistDataBundle( mcbChip );
+ return mcbdb->getTdCtlr();
+ }
+
+ #endif
+
private: // functions
// Don't allow copy or assignment.
McaDataBundle( const McaDataBundle & ) = delete;
const McaDataBundle & operator=( const McaDataBundle & ) = delete;
+ private: // instance variables
+
+ ExtensibleChip * iv_chip; // This MCA.
+
public: // instance variables
MemCeTable<TARGETING::TYPE_MCA> iv_ceTable; ///< CE table for FFDC
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
index 3a4f0a714..e123b84ed 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
@@ -31,6 +31,7 @@
#include <prdfMemMark.H>
#include <prdfMemScrubUtils.H>
#include <prdfMemTps.H>
+#include <prdfP9McaDataBundle.H>
#include <prdfP9McaExtraSig.H>
#include <prdfPlatServices.H>
@@ -140,8 +141,8 @@ uint32_t TpsEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
io_sc.service_data->SetCallout( memmru );
//Add a VCM procedure to the queue
- MemEcc::addVcmEvent<TYPE_MCA>( iv_chip, iv_rank, chipMark,
- io_sc );
+ MemEcc::addVcmEvent<TYPE_MCA, McaDataBundle *>(iv_chip, iv_rank,
+ chipMark, io_sc);
//Abort this procedure
o_done = true;
OpenPOWER on IntegriCloud