summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/plat
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2014-03-13 11:23:36 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-04-02 15:59:56 -0500
commit1afe8d7e76c8b3b00524b8e9c7b47a27183fe00b (patch)
treebdf0b7cd3d26512c2b36ac9bcb195fc2fcaf88cd /src/usr/diag/prdf/common/plat
parentdbe68e2e6ee4610d43b6a643e0e9bb703f6b3b7c (diff)
downloadtalos-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')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule4
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H5
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C6
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C17
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.H38
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaDataBundle_common.H12
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.C4
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaRceTable.H16
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.C7
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMbaUeTable.H16
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
OpenPOWER on IntegriCloud