From 66555fc888741e710ffab19e8f0a7c2b2341d0bf Mon Sep 17 00:00:00 2001 From: Zane Shelley Date: Wed, 28 Sep 2016 13:55:47 -0500 Subject: PRD: Simplified templates in TD controller code Change-Id: I4db0c3e463f5bfc9cb698815b9932dfaafa6ddde Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30428 Tested-by: Jenkins Server Reviewed-by: Caleb N. Palmer Reviewed-by: Brian J. Stegmiller Reviewed-by: Benjamin J. Weisenbeck Reviewed-by: Zane C. Shelley Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30988 Tested-by: FSP CI Jenkins --- src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.H | 6 +- src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C | 8 +- src/usr/diag/prdf/plat/mem/prdfMemTdQueue.H | 130 ++++++-------------------- src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C | 6 +- src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.H | 13 ++- src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C | 6 +- src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.H | 13 ++- 7 files changed, 55 insertions(+), 127 deletions(-) (limited to 'src/usr/diag/prdf') 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 * 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 iv_queue; + TdQueue iv_queue; /** The procedure that is currently in progress. */ - TdEntry * 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::handleCmdComplete( STEP_CODE_DATA_STRUCT & io_sc ) template uint32_t MemTdCtlr::handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc, - TdEntry * i_entry ) + TdEntry * i_entry ) { #define PRDF_FUNC "[MemTdCtlr::handleTdEvent] " @@ -121,7 +121,8 @@ uint32_t MemTdCtlr::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::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 class TdEntry; - -/** @brief TdEntry specialization for MCBIST. */ -template<> -class TdEntry : public TdEntryBase -{ - public: // enums, constants - - enum - { - PORTS_PER_MCBIST = 4, - }; - - public: // functions - - /** @brief Default destructor */ - virtual ~TdEntry() = default; - - // Overloaded functions - virtual uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc, - bool & o_done ) = 0; - /** @brief '==' operator */ - bool operator==( const TdEntry & 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 & i_e ) const + bool operator<( const TdEntry & i_e ) const { return this->iv_tdType < i_e.iv_tdType; } protected: // functions - /** @brief Constructor */ - TdEntry( 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 : public TdEntryBase -{ - public: // functions - - /** @brief Default destructor */ - virtual ~TdEntry() = default; - - // Overloaded functions - virtual uint32_t nextStep( STEP_CODE_DATA_STRUCT & io_sc, - bool & o_done ) = 0; - - /** @brief '==' operator */ - bool operator==( const TdEntry & 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 & 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( 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 : public TdEntryBase * @note Events with a higher priority will be moved ahead of lower priority * events. */ -template class TdQueue { public: // typedefs - typedef std::vector< TdEntry * > Queue; - typedef typename std::vector< TdEntry * >::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 * 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 * a, TdEntry * 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 * i_e ) + void push( TdEntry * i_e ) { QueueItr it = std::find_if( iv_queue.begin(), iv_queue.end(), - [=](TdEntry * 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::nextStep( STEP_CODE_DATA_STRUCT & io_sc, - bool & o_done ) +uint32_t VcmEvent::nextStep( STEP_CODE_DATA_STRUCT & io_sc, + bool & o_done ) { - #define PRDF_FUNC "[VcmEvent::nextStep] " + #define PRDF_FUNC "[VcmEvent::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 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 : public TdEntry +class VcmEvent : public TdEntry { public: // functions /** @brief Constructor */ - VcmEvent( ExtensibleChip * i_chip, - MemRank i_rank, uint8_t i_port ) : - TdEntry(VCM_EVENT, i_chip, i_rank, i_port) + VcmEvent( 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 : public TdEntry // TODO: RTC 157888 Actual implementation of this procedure will be done later. /** @brief Verify chip mark procedure for MBA (IPL only). */ template <> -class VcmEvent : public TdEntry +class VcmEvent : public TdEntry { public: // functions /** @brief Constructor */ VcmEvent( ExtensibleChip * i_chip, MemRank i_rank ) : - TdEntry(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::nextStep( STEP_CODE_DATA_STRUCT & io_sc, - bool & o_done ) +uint32_t VcmEvent::nextStep( STEP_CODE_DATA_STRUCT & io_sc, + bool & o_done ) { - #define PRDF_FUNC "[VcmEvent::nextStep] " + #define PRDF_FUNC "[VcmEvent::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 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 : public TdEntry +class VcmEvent : public TdEntry { public: // functions /** @brief Constructor */ - VcmEvent( ExtensibleChip * i_chip, - MemRank i_rank, uint8_t i_port ) : - TdEntry(VCM_EVENT, i_chip, i_rank, i_port) + VcmEvent( 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 : public TdEntry // TODO: RTC 157888 Actual implementation of this procedure will be done later. /** @brief Verify chip mark procedure for MBA (RT only). */ template <> -class VcmEvent : public TdEntry +class VcmEvent : public TdEntry { public: // functions /** @brief Constructor */ VcmEvent( ExtensibleChip * i_chip, MemRank i_rank ) : - TdEntry(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 ); -- cgit v1.2.1