diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2014-03-13 11:23:36 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-04-02 15:59:56 -0500 |
commit | 1afe8d7e76c8b3b00524b8e9c7b47a27183fe00b (patch) | |
tree | bdf0b7cd3d26512c2b36ac9bcb195fc2fcaf88cd /src/usr/diag/prdf/common/plat | |
parent | dbe68e2e6ee4610d43b6a643e0e9bb703f6b3b7c (diff) | |
download | talos-hostboot-1afe8d7e76c8b3b00524b8e9c7b47a27183fe00b.tar.gz talos-hostboot-1afe8d7e76c8b3b00524b8e9c7b47a27183fe00b.zip |
PRD: DRAM site support for CE table
Change-Id: If19329244d080b5dd2aff5cabedaf953b6467dc4
CQ: SW251007
Backport: release-fips810
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9623
Tested-by: Jenkins Server
Reviewed-by: Christopher T. Phan <cphan@us.ibm.com>
Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Squashed: I5e3647001437545e9da27af17640e6212d03cf7b
Squashed: I85bd52ebf9ef4e3fbfc6507221969e90e6a1fe3b
Squashed: I28cd646881b1a6934c35ef968d7c74543df3733e
Squashed: I81aa52ba32ed6671cc57fff60842839fc989faac
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9865
Diffstat (limited to 'src/usr/diag/prdf/common/plat')
10 files changed, 86 insertions, 39 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule b/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule index 5c22cc847..754c99649 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule @@ -869,14 +869,14 @@ { name "MBU.MBS.ARB.RXLT.MBAXCR01Q"; scomaddr 0x0201140B; - capture group never; + capture group default; }; register MBA1_MBAXCR { name "MBU.MBS.ARB.RXLT.MBAXCR23Q"; scomaddr 0x0201140C; - capture group never; + capture group default; }; ############################################################################ diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H index 4dcbcc0f6..5b38761b8 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2004,2013 */ +/* COPYRIGHT International Business Machines Corp. 2004,2014 */ /* */ /* p1 */ /* */ @@ -55,6 +55,9 @@ enum SYMBOLS_PER_X8DRAM = 4, SYMBOLS_PER_X4DRAM = 2, + DQS_PER_X8DRAM = DQS_PER_SYMBOL * SYMBOLS_PER_X8DRAM, + DQS_PER_X4DRAM = DQS_PER_SYMBOL * SYMBOLS_PER_X4DRAM, + X8DRAMS_PER_RANK = SYMBOLS_PER_RANK / SYMBOLS_PER_X8DRAM, X4DRAMS_PER_RANK = SYMBOLS_PER_RANK / SYMBOLS_PER_X4DRAM, }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C index 59d9d5cb5..180bf563e 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C @@ -145,13 +145,13 @@ void addMemEccData( ExtensibleChip * i_mbaChip, STEP_CODE_DATA_STRUCT & io_sc ) TargetHandle_t mbaTarget = i_mbaChip->GetChipHandle(); // Add UE table to capture data. - mbadb->iv_ueTable.addCapData( mbaTarget, cd ); + mbadb->iv_ueTable.addCapData( cd ); // Add CE table to capture data. - mbadb->iv_ceTable.addCapData( mbaTarget, cd ); + mbadb->iv_ceTable.addCapData( cd ); // Add RCE table to capture data. - mbadb->iv_rceTable.addCapData( mbaTarget, cd ); + mbadb->iv_rceTable.addCapData( cd ); // Add DRAM repairs data from hardware. captureDramRepairsData( mbaTarget, cd ); diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C index 311d94628..3dfe9b263 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C @@ -27,6 +27,7 @@ // Framwork includes #include <iipServiceDataCollector.h> +#include <prdfPlatServices.H> #include <UtilHash.H> // Pegasus includes @@ -37,6 +38,7 @@ using namespace TARGETING; namespace PRDF { +using namespace PlatServices; using namespace CE_TABLE; //------------------------------------------------------------------------------ @@ -48,7 +50,8 @@ bool CenMbaCeTable::addEntry( const CenAddr & i_addr, TableData data ( i_addr, i_symbol.getDram(), i_symbol.getDramPins(), i_symbol.getPortSlct(), i_symbol.getWiringType(), - i_isHard ); + i_isHard, i_symbol.isDramSpared(), + i_symbol.isEccSpared() ); // First, check if the entry already exists. If so, increment its count and // move it to the end of the queue. @@ -180,7 +183,7 @@ void CenMbaCeTable::getMnfgCounts( const CenRank & i_rank, //------------------------------------------------------------------------------ -void CenMbaCeTable::addCapData( TargetHandle_t i_mbaTrgt, CaptureData & io_cd ) +void CenMbaCeTable::addCapData( CaptureData & io_cd ) { static const size_t sz_word = sizeof(CPU_WORD); @@ -193,6 +196,8 @@ void CenMbaCeTable::addCapData( TargetHandle_t i_mbaTrgt, CaptureData & io_cd ) size_t sz_actData = 0; + uint32_t mbaPos = getTargetPosition( iv_mbaTrgt ); + for ( CeTable::iterator it = iv_table.begin(); it != iv_table.end(); it++ ) { uint32_t mrnk = it->addr.getRank().getMaster(); // 3-bit @@ -211,9 +216,13 @@ void CenMbaCeTable::addCapData( TargetHandle_t i_mbaTrgt, CaptureData & io_cd ) uint8_t active = it->active ? 1 : 0; uint8_t isHard = it->isHard ? 1 : 0; + uint8_t isSp = it->isDramSpared ? 1 : 0; + uint8_t isEcc = it->isEccSpared ? 1 : 0; data[sz_actData ] = it->count; - data[sz_actData+1] = it->type << 4; // 4 spare bits + data[sz_actData+1] = (it->type << 5) | + (mbaPos << 4) | (it->portSlct << 3) | + (isSp << 2) | (isEcc << 1); // 1 spare bit data[sz_actData+2] = (isHard << 7) | (active << 6) | (it->dram & 0x3f); data[sz_actData+3] = it->dramPins; data[sz_actData+4] = (mrnk << 5) | (srnk << 2) | (svld << 1) | row0; @@ -234,7 +243,7 @@ void CenMbaCeTable::addCapData( TargetHandle_t i_mbaTrgt, CaptureData & io_cd ) // Add data to capture data. BIT_STRING_ADDRESS_CLASS bs ( 0, sz_actData*8, (CPU_WORD *) &data ); - io_cd.Add( i_mbaTrgt, Util::hashString("MEM_CE_TABLE"), bs ); + io_cd.Add( iv_mbaTrgt, Util::hashString("MEM_CE_TABLE"), bs ); } } diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.H index 7bd147e64..f000b6bcd 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.H @@ -66,6 +66,14 @@ class CenMbaCeTable public: // functions /** + * @brief Constructor + * @param i_mbaTrgt An MBA target. + */ + explicit CenMbaCeTable( TARGETING::TargetHandle_t i_mbaTrgt ) : + iv_mbaTrgt( i_mbaTrgt ) + {} + + /** * @brief Will attempt to add a new entry to the table. * * If an entry already exists, the entry's count is incremented. Otherwise, @@ -110,29 +118,31 @@ class CenMbaCeTable /** * @brief Gathers all table data to be stored in capture data. - * @param i_mbaTrgt An MBA target. * @param io_cd Capture data struct. */ - void addCapData( TARGETING::TargetHandle_t i_mbaTrgt, CaptureData & io_cd ); + void addCapData( CaptureData & io_cd ); private: // structs, typedefs /** @brief Individual entries of iv_table. */ struct TableData { - bool active; ///< TRUE if this entry is active - uint8_t count; ///< Number of times this entry is detected - CenAddr addr; ///< Physical address of this entry - uint8_t dram; ///< The DRAM in which the CE was detected - uint8_t dramPins; ///< The failing pins of the DRAM - uint8_t portSlct; ///< The port select of the DRAM + bool active; ///< TRUE if this entry is active + uint8_t count; ///< Number of times this entry is detected + CenAddr addr; ///< Physical address of this entry + uint8_t dram; ///< The DRAM in which the CE was detected + uint8_t dramPins; ///< The failing pins of the DRAM + uint8_t portSlct; ///< The port select of the DRAM CEN_SYMBOL::WiringType type; ///< The wiring type - bool isHard; ///< TRUE if a hard CE was detected + bool isHard; ///< TRUE if a hard CE was detected + bool isDramSpared; ///< TRUE if on spare DRAM + bool isEccSpared; ///< TRUE if on ECC spare /** @brief Default constructor. */ TableData() : active(false), count(0), addr(), dram(0), dramPins(0), portSlct(0), - type(CEN_SYMBOL::WIRING_INVALID), isHard(false) + type(CEN_SYMBOL::WIRING_INVALID), isHard(false), + isDramSpared(false), isEccSpared(false) {} /** @@ -144,10 +154,11 @@ class CenMbaCeTable */ TableData( const CenAddr & i_addr, uint8_t i_dram, uint8_t i_dramPins, uint8_t i_portSlct, CEN_SYMBOL::WiringType i_type, - bool i_isHard ) : + bool i_isHard, bool i_isDramSpared, bool i_isEccSpared ) : active(true), count(1), addr(i_addr), dram(i_dram), dramPins(i_dramPins), portSlct(i_portSlct), type(i_type), - isHard(i_isHard) + isHard(i_isHard), isDramSpared(i_isDramSpared), + isEccSpared(i_isEccSpared) {} /** An entry is equivalent if the address and DRAM match. */ @@ -161,6 +172,9 @@ class CenMbaCeTable private: // instance variables + /** MBA associated with this table. */ + TARGETING::TargetHandle_t iv_mbaTrgt; + /** A storage container for memory fetch CE errors. */ CeTable iv_table; diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaDataBundle_common.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaDataBundle_common.H index 7c5e6cf93..29b665361 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaDataBundle_common.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaDataBundle_common.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -56,7 +56,9 @@ class CenMbaDataBundleCommon : public DataBundle */ explicit CenMbaDataBundleCommon( ExtensibleChip * i_mbaChip ) : iv_mbaChip(i_mbaChip), iv_membChip(NULL), iv_tdCtlr(i_mbaChip), - iv_ueTable() + iv_ueTable( i_mbaChip->GetChipHandle()), + iv_ceTable( i_mbaChip->GetChipHandle()), + iv_rceTable(i_mbaChip->GetChipHandle()) {} /** @@ -97,9 +99,9 @@ class CenMbaDataBundleCommon : public DataBundle public: // instance variables - CenMbaTdCtlr iv_tdCtlr; ///< Targeted Diagnostics Controller - CenMbaUeTable iv_ueTable; ///< UE table for FFDC - CenMbaCeTable iv_ceTable; ///< CE table for FFDC + CenMbaTdCtlr iv_tdCtlr; ///< Targeted Diagnostics Controller + CenMbaUeTable iv_ueTable; ///< UE table for FFDC + CenMbaCeTable iv_ceTable; ///< CE table for FFDC CenMbaRceTable iv_rceTable; ///< RCE table for FFDC }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.C index 8585de592..0f02d466c 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.C @@ -79,7 +79,7 @@ void CenMbaRceTable::flushEntry( const CenRank & i_rank ) } //------------------------------------------------------------------------------ -void CenMbaRceTable::addCapData( TargetHandle_t i_mbaTrgt, CaptureData & io_cd ) +void CenMbaRceTable::addCapData( CaptureData & io_cd ) { static const size_t sz_word = sizeof(CPU_WORD); static const size_t sz_entryCnt = sizeof( uint8_t ); // entry count @@ -122,7 +122,7 @@ void CenMbaRceTable::addCapData( TargetHandle_t i_mbaTrgt, CaptureData & io_cd ) // Add data to capture data. BIT_STRING_ADDRESS_CLASS bs ( 0, sz_actData*8, (CPU_WORD *) &data ); - io_cd.Add( i_mbaTrgt, Util::hashString("MEM_RCE_TABLE"), bs ); + io_cd.Add( iv_mbaTrgt, Util::hashString("MEM_RCE_TABLE"), bs ); } } diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.H index 88aae6df0..3c030ba15 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013 */ +/* COPYRIGHT International Business Machines Corp. 2013,2014 */ /* */ /* p1 */ /* */ @@ -49,6 +49,14 @@ class CenMbaRceTable public: // functions /** + * @brief Constructor + * @param i_mbaTrgt An MBA target. + */ + explicit CenMbaRceTable( TARGETING::TargetHandle_t i_mbaTrgt ) : + iv_mbaTrgt( i_mbaTrgt ) + {} + + /** * @brief Will attempt to add a new entry to the table. * * If an entry already exists, the entry's count is incremented. Otherwise, @@ -71,10 +79,9 @@ class CenMbaRceTable /** * @brief Gathers all table data to be stored in capture data. - * @param i_mbaTrgt An MBA target. * @param io_cd Capture data struct. */ - void addCapData( TARGETING::TargetHandle_t i_mbaTrgt, CaptureData & io_cd ); + void addCapData( CaptureData & io_cd ); /** Default Constructor */ CenMbaRceTable():iv_table(){} @@ -85,6 +92,9 @@ class CenMbaRceTable private: // instance variables + /** MBA associated with this table. */ + TARGETING::TargetHandle_t iv_mbaTrgt; + /** A storage container for memory RCE errors. */ RceTable iv_table; }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.C index 0f450d9de..dd61c836f 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013 */ +/* COPYRIGHT International Business Machines Corp. 2013,2014 */ /* */ /* p1 */ /* */ @@ -67,8 +67,7 @@ void CenMbaUeTable::addEntry( UE_TABLE::Type i_type, const CenAddr & i_addr ) //------------------------------------------------------------------------------ -void CenMbaUeTable::addCapData( TargetHandle_t i_mbaTrgt, - CaptureData & io_cd ) +void CenMbaUeTable::addCapData( CaptureData & io_cd ) { static const size_t sz_word = sizeof(CPU_WORD); @@ -117,7 +116,7 @@ void CenMbaUeTable::addCapData( TargetHandle_t i_mbaTrgt, // Add data to capture data. BIT_STRING_ADDRESS_CLASS bs ( 0, sz_actData*8, (CPU_WORD *) &data ); - io_cd.Add( i_mbaTrgt, Util::hashString("MEM_UE_TABLE"), bs ); + io_cd.Add( iv_mbaTrgt, Util::hashString("MEM_UE_TABLE"), bs ); } } diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.H index 148b28fcf..fcf80c52a 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013 */ +/* COPYRIGHT International Business Machines Corp. 2013,2014 */ /* */ /* p1 */ /* */ @@ -59,6 +59,14 @@ class CenMbaUeTable public: // functions /** + * @brief Constructor + * @param i_mbaTrgt An MBA target. + */ + explicit CenMbaUeTable( TARGETING::TargetHandle_t i_mbaTrgt ) : + iv_mbaTrgt( i_mbaTrgt ) + {} + + /** * @brief Will attempt to add a new entry to the table. * @note If an entry already exists, the entry's count is incremented and * moved to the end of the queue. @@ -69,10 +77,9 @@ class CenMbaUeTable /** * @brief Gathers all table data to be stored in capture data. - * @param i_mbaTrgt An MBA target. * @param io_cd Capture data struct. */ - void addCapData( TARGETING::TargetHandle_t i_mbaTrgt, CaptureData & io_cd ); + void addCapData( CaptureData & io_cd ); private: // structs, typedefs @@ -106,6 +113,9 @@ class CenMbaUeTable private: // instance variables + /** MBA associated with this table. */ + TARGETING::TargetHandle_t iv_mbaTrgt; + /** A FIFO that stores the latest memory UE addresses and their types. This * is not a pure FIFO, because if a new entry matches an existing entry, * the existing entries count is incremented and it is moved to the end of |