summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2016-09-28 13:55:47 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2016-10-12 09:20:35 -0400
commit66555fc888741e710ffab19e8f0a7c2b2341d0bf (patch)
tree041a1dde8f35db556b8d340ad84ca211711ad711 /src/usr/diag/prdf
parent4bef081ac03645c13eef87c50b534764eb28f6a0 (diff)
downloadtalos-hostboot-66555fc888741e710ffab19e8f0a7c2b2341d0bf.tar.gz
talos-hostboot-66555fc888741e710ffab19e8f0a7c2b2341d0bf.zip
PRD: Simplified templates in TD controller code
Change-Id: I4db0c3e463f5bfc9cb698815b9932dfaafa6ddde Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30428 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@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/30988 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf')
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.H6
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C8
-rwxr-xr-xsrc/usr/diag/prdf/plat/mem/prdfMemTdQueue.H130
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C6
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.H13
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C6
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.H13
7 files changed, 55 insertions, 127 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.H b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.H
index c9cdd23ea..eacdb7cff 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.H
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.H
@@ -94,7 +94,7 @@ class MemTdCtlr
* @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
*/
uint32_t handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc,
- TdEntry<T> * i_entry );
+ TdEntry * i_entry );
#endif
@@ -188,10 +188,10 @@ class MemTdCtlr
ExtensibleChip * const iv_chip;
/** The TD queue that contains all of the pending TD procedures. */
- TdQueue<T> iv_queue;
+ TdQueue iv_queue;
/** The procedure that is currently in progress. */
- TdEntry<T> * iv_curProcedure = nullptr;
+ TdEntry * iv_curProcedure = nullptr;
#ifdef __HOSTBOOT_RUNTIME
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
index adc038fa3..7bcf65514 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
@@ -109,7 +109,7 @@ uint32_t MemTdCtlr<T,D>::handleCmdComplete( STEP_CODE_DATA_STRUCT & io_sc )
template <TYPE T, typename D>
uint32_t MemTdCtlr<T,D>::handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc,
- TdEntry<T> * i_entry )
+ TdEntry * i_entry )
{
#define PRDF_FUNC "[MemTdCtlr::handleTdEvent] "
@@ -121,7 +121,8 @@ uint32_t MemTdCtlr<T,D>::handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc,
o_rc = initialize();
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "initialize() failed" );
+ PRDF_ERR( PRDF_FUNC "initialize() failed on 0x%08x",
+ iv_chip->getHuid() );
break;
}
@@ -144,7 +145,8 @@ uint32_t MemTdCtlr<T,D>::handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc,
o_rc = nextStep( io_sc );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC "nextStep() failed" );
+ PRDF_ERR( PRDF_FUNC "nextStep() failed on 0x%08x",
+ iv_chip->getHuid() );
break;
}
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdQueue.H b/src/usr/diag/prdf/plat/mem/prdfMemTdQueue.H
index d74e45736..ec3c21dc5 100755
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdQueue.H
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdQueue.H
@@ -44,11 +44,11 @@ namespace PRDF
{
//------------------------------------------------------------------------------
-// TdEntry classes
+// TdEntry class
//------------------------------------------------------------------------------
/** @brief Abstract class for a Targeted Diagnostics event. */
-class TdEntryBase
+class TdEntry
{
public: // enums, constants
@@ -67,7 +67,7 @@ class TdEntryBase
public: // functions
/** @brief Default destructor */
- virtual ~TdEntryBase() = default;
+ virtual ~TdEntry() = default;
/**
* @brief Each entry will have a set of steps that need to be performed.
@@ -80,117 +80,46 @@ class TdEntryBase
virtual uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc,
bool & o_done ) = 0;
- protected: // functions
-
- /** @brief Constructor */
- TdEntryBase( TdType i_tdType, ExtensibleChip * i_chip, MemRank i_rank ) :
- iv_tdType(i_tdType), iv_rank(i_rank), iv_chip(i_chip)
- {}
-
- protected: // instance variables
-
- const TdType iv_tdType; ///< The event type (see enum TdType).
- const MemRank iv_rank; ///< The rank in which this event occurred.
-
- /** The chip associated with this entry. This isn't used for any
- * comparisons, but is needed for every TD procedure. */
- ExtensibleChip * const iv_chip;
-};
-
-// Only implement specializations of TdEntry.
-template<TARGETING::TYPE T> class TdEntry;
-
-/** @brief TdEntry specialization for MCBIST. */
-template<>
-class TdEntry<TARGETING::TYPE_MCBIST> : public TdEntryBase
-{
- public: // enums, constants
-
- enum
- {
- PORTS_PER_MCBIST = 4,
- };
-
- public: // functions
-
- /** @brief Default destructor */
- virtual ~TdEntry<TARGETING::TYPE_MCBIST>() = default;
-
- // Overloaded functions
- virtual uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc,
- bool & o_done ) = 0;
-
/** @brief '==' operator */
- bool operator==( const TdEntry<TARGETING::TYPE_MCBIST> & i_e ) const
+ bool operator==( const TdEntry & i_e ) const
{
- return ( this->iv_tdType == i_e.iv_tdType &&
- this->iv_rank == i_e.iv_rank &&
- this->iv_port == i_e.iv_port );
+ return ( this->iv_chip == i_e.iv_chip &&
+ this->iv_tdType == i_e.iv_tdType &&
+ this->iv_rank == i_e.iv_rank );
}
/**
* @brief '<' operator
* @note This only compares iv_tdType because the TdQueue only sorts by type
*/
- bool operator<( const TdEntry<TARGETING::TYPE_MCBIST> & i_e ) const
+ bool operator<( const TdEntry & i_e ) const
{
return this->iv_tdType < i_e.iv_tdType;
}
protected: // functions
- /** @brief Constructor */
- TdEntry<TARGETING::TYPE_MCBIST>( TdType i_tdType, ExtensibleChip * i_chip,
- MemRank i_rank, uint8_t i_port ) :
- TdEntryBase(i_tdType, i_chip, i_rank), iv_port(i_port)
- {
- PRDF_ASSERT( TARGETING::TYPE_MCBIST == iv_chip->getTrgtType() );
- PRDF_ASSERT( iv_port < PORTS_PER_MCBIST );
- }
-
- protected: // Instance variables
-
- const uint32_t iv_port; ///< MCBIST memory port.
-};
-
-/** @brief TdEntry specialization for MBA. */
-template<>
-class TdEntry<TARGETING::TYPE_MBA> : public TdEntryBase
-{
- public: // functions
-
- /** @brief Default destructor */
- virtual ~TdEntry<TARGETING::TYPE_MBA>() = default;
-
- // Overloaded functions
- virtual uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc,
- bool & o_done ) = 0;
-
- /** @brief '==' operator */
- bool operator==( const TdEntry<TARGETING::TYPE_MBA> & i_e ) const
- {
- return ( this->iv_tdType == i_e.iv_tdType &&
- this->iv_rank == i_e.iv_rank );
- }
-
/**
- * @brief '<' operator
- * @note This only compares iv_tdType because the TdQueue only sorts by type
+ * @brief Constructor
+ * @param i_tdType See TdType enum
+ * @param i_chip MCA or MBA chip
+ * @param i_rank Target rank
*/
- bool operator<( const TdEntry<TARGETING::TYPE_MBA> & i_e ) const
+ TdEntry( TdType i_tdType, ExtensibleChip * i_chip, MemRank i_rank ) :
+ iv_chip(i_chip), iv_tdType(i_tdType), iv_rank(i_rank)
{
- return this->iv_tdType < i_e.iv_tdType;
+ PRDF_ASSERT( (TARGETING::TYPE_MCA == iv_chip->getTrgtType()) ||
+ (TARGETING::TYPE_MBA == iv_chip->getTrgtType()) );
}
- protected: // functions
+ protected: // instance variables
- /** @brief Constructor */
- TdEntry<TARGETING::TYPE_MBA>( TdType i_tdType, ExtensibleChip * i_chip,
- MemRank i_rank ) :
- TdEntryBase(i_tdType, i_chip, i_rank)
- {
- PRDF_ASSERT( TARGETING::TYPE_MBA == iv_chip->getTrgtType() );
- }
+ /** The chip associated with this entry. This isn't used for any
+ * comparisons, but is needed for every TD procedure. */
+ ExtensibleChip * const iv_chip;
+
+ const TdType iv_tdType; ///< The event type (see enum TdType).
+ const MemRank iv_rank; ///< The rank in which this event occurred.
};
//------------------------------------------------------------------------------
@@ -202,13 +131,12 @@ class TdEntry<TARGETING::TYPE_MBA> : public TdEntryBase
* @note Events with a higher priority will be moved ahead of lower priority
* events.
*/
-template <TARGETING::TYPE T>
class TdQueue
{
public: // typedefs
- typedef std::vector< TdEntry<T> * > Queue;
- typedef typename std::vector< TdEntry<T> * >::iterator QueueItr;
+ typedef std::vector< TdEntry * > Queue;
+ typedef typename std::vector< TdEntry * >::iterator QueueItr;
public: // functions
@@ -228,7 +156,7 @@ class TdQueue
* mistakenly removed via pop() before the TD controller is able to
* execute the request.
*/
- TdEntry<T> * getNextEntry()
+ TdEntry * getNextEntry()
{
PRDF_ASSERT( !iv_queue.empty() );
@@ -239,7 +167,7 @@ class TdQueue
// while a TD procedure is in progress, which is undesirable.
std::sort( iv_queue.begin(), iv_queue.end(),
- [](TdEntry<T> * a, TdEntry<T> * b) { return *a < *b; } );
+ [](TdEntry * a, TdEntry * b) { return *a < *b; } );
return iv_queue.front();
}
@@ -250,10 +178,10 @@ class TdQueue
* @note Only adds the entry to the queue if the entry does not already
* exist in the queue.
*/
- void push( TdEntry<T> * i_e )
+ void push( TdEntry * i_e )
{
QueueItr it = std::find_if( iv_queue.begin(), iv_queue.end(),
- [=](TdEntry<T> * a){return *i_e == *a;} );
+ [=](TdEntry * a){return *i_e == *a;} );
if ( iv_queue.end() == it )
{
iv_queue.push_back( i_e );
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
index 91a652896..b116345e5 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
@@ -36,10 +36,10 @@ namespace PRDF
//------------------------------------------------------------------------------
// TODO: RTC 157608 Actual implementation of this procedure will be done later.
-uint32_t VcmEvent<TYPE_MCBIST>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
- bool & o_done )
+uint32_t VcmEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
+ bool & o_done )
{
- #define PRDF_FUNC "[VcmEvent<TYPE_MCBIST>::nextStep] "
+ #define PRDF_FUNC "[VcmEvent<TYPE_MCA>::nextStep] "
uint32_t o_rc = SUCCESS;
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.H b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.H
index b46460182..4148acc51 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.H
+++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.H
@@ -38,16 +38,15 @@ namespace PRDF
template<TARGETING::TYPE T> class VcmEvent;
// TODO: RTC 157608 Actual implementation of this procedure will be done later.
-/** @brief Verify chip mark procedure for MCBIST (IPL only). */
+/** @brief Verify chip mark procedure for MCA (IPL only). */
template <>
-class VcmEvent<TARGETING::TYPE_MCBIST> : public TdEntry<TARGETING::TYPE_MCBIST>
+class VcmEvent<TARGETING::TYPE_MCA> : public TdEntry
{
public: // functions
/** @brief Constructor */
- VcmEvent<TARGETING::TYPE_MCBIST>( ExtensibleChip * i_chip,
- MemRank i_rank, uint8_t i_port ) :
- TdEntry<TARGETING::TYPE_MCBIST>(VCM_EVENT, i_chip, i_rank, i_port)
+ VcmEvent<TARGETING::TYPE_MCA>( ExtensibleChip * i_chip, MemRank i_rank ) :
+ TdEntry(VCM_EVENT, i_chip, i_rank)
{}
uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc, bool & o_done );
@@ -57,13 +56,13 @@ class VcmEvent<TARGETING::TYPE_MCBIST> : public TdEntry<TARGETING::TYPE_MCBIST>
// TODO: RTC 157888 Actual implementation of this procedure will be done later.
/** @brief Verify chip mark procedure for MBA (IPL only). */
template <>
-class VcmEvent<TARGETING::TYPE_MBA> : public TdEntry<TARGETING::TYPE_MBA>
+class VcmEvent<TARGETING::TYPE_MBA> : public TdEntry
{
public: // functions
/** @brief Constructor */
VcmEvent<TARGETING::TYPE_MBA>( ExtensibleChip * i_chip, MemRank i_rank ) :
- TdEntry<TARGETING::TYPE_MBA>(VCM_EVENT, i_chip, i_rank)
+ TdEntry(VCM_EVENT, i_chip, i_rank)
{}
uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc, bool & o_done );
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C
index 71fee3638..b9f9c98c5 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C
@@ -36,10 +36,10 @@ namespace PRDF
//------------------------------------------------------------------------------
// TODO: RTC 136126 Actual implementation of this procedure will be done later.
-uint32_t VcmEvent<TYPE_MCBIST>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
- bool & o_done )
+uint32_t VcmEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
+ bool & o_done )
{
- #define PRDF_FUNC "[VcmEvent<TYPE_MCBIST>::nextStep] "
+ #define PRDF_FUNC "[VcmEvent<TYPE_MCA>::nextStep] "
uint32_t o_rc = SUCCESS;
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.H b/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.H
index 0b554d78e..62f0130bb 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.H
+++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.H
@@ -38,16 +38,15 @@ namespace PRDF
template<TARGETING::TYPE T> class VcmEvent;
// TODO: RTC 136126 Actual implementation of this procedure will be done later.
-/** @brief Verify chip mark procedure for MCBIST (RT only). */
+/** @brief Verify chip mark procedure for MCA (RT only). */
template <>
-class VcmEvent<TARGETING::TYPE_MCBIST> : public TdEntry<TARGETING::TYPE_MCBIST>
+class VcmEvent<TARGETING::TYPE_MCA> : public TdEntry
{
public: // functions
/** @brief Constructor */
- VcmEvent<TARGETING::TYPE_MCBIST>( ExtensibleChip * i_chip,
- MemRank i_rank, uint8_t i_port ) :
- TdEntry<TARGETING::TYPE_MCBIST>(VCM_EVENT, i_chip, i_rank, i_port)
+ VcmEvent<TARGETING::TYPE_MCA>( ExtensibleChip * i_chip, MemRank i_rank ) :
+ TdEntry(VCM_EVENT, i_chip, i_rank)
{}
uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc, bool & o_done );
@@ -57,13 +56,13 @@ class VcmEvent<TARGETING::TYPE_MCBIST> : public TdEntry<TARGETING::TYPE_MCBIST>
// TODO: RTC 157888 Actual implementation of this procedure will be done later.
/** @brief Verify chip mark procedure for MBA (RT only). */
template <>
-class VcmEvent<TARGETING::TYPE_MBA> : public TdEntry<TARGETING::TYPE_MBA>
+class VcmEvent<TARGETING::TYPE_MBA> : public TdEntry
{
public: // functions
/** @brief Constructor */
VcmEvent<TARGETING::TYPE_MBA>( ExtensibleChip * i_chip, MemRank i_rank ) :
- TdEntry<TARGETING::TYPE_MBA>(VCM_EVENT, i_chip, i_rank)
+ TdEntry(VCM_EVENT, i_chip, i_rank)
{}
uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc, bool & o_done );
OpenPOWER on IntegriCloud