diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2017-02-20 15:44:24 -0600 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2017-02-27 10:41:20 -0500 |
commit | c45b0ef7838420bcae023e1fbe6d2ae7cbf730bb (patch) | |
tree | ac6f7c35e1d96c48bb1471777eca68f70c11cdcb /src/usr | |
parent | f47866a84121fc8ab6f3420138d9bb5be785559b (diff) | |
download | talos-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')
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; |