summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2013-08-22 15:20:14 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-09-18 13:55:30 -0500
commit61bd30cddc44108ea1f1cc72527f2ea52fd3f7e5 (patch)
tree5313bcd91b5209948808ea08bc008c5a98c69023 /src
parentd62e12b822f62d13127aa83f7f319eafa70c89d7 (diff)
downloadblackbird-hostboot-61bd30cddc44108ea1f1cc72527f2ea52fd3f7e5.tar.gz
blackbird-hostboot-61bd30cddc44108ea1f1cc72527f2ea52fd3f7e5.zip
PRD: support for slave ranks in memory
Change-Id: Ica91679b5ce688f2ccfab07137174696871aea60 RTC: 77146 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5975 Tested-by: Jenkins Server Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6229
Diffstat (limited to 'src')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C199
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H10
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H108
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H11
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C2
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMarkstore.H9
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C8
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.C6
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.H2
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.C25
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfCenLogParse.C12
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfLogParse_common.C2
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H25
-rw-r--r--src/usr/diag/prdf/framework/service/prdfPlatServices.C4
-rwxr-xr-xsrc/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.C2
-rwxr-xr-xsrc/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.H5
-rw-r--r--src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C20
-rw-r--r--src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C12
18 files changed, 284 insertions, 178 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
index fed697795..f2dc9753a 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
@@ -60,14 +60,6 @@ namespace PlatServices
{
//##############################################################################
-//## Forward references
-//##############################################################################
-
-int32_t getMemAddrRange( TargetHandle_t i_mba, uint8_t i_rank,
- ecmdDataBufferBase & o_startAddr,
- ecmdDataBufferBase & o_endAddr );
-
-//##############################################################################
//## Utility Functions (for this file only)
//##############################################################################
@@ -128,7 +120,7 @@ int32_t readErepair(TargetHandle_t i_rxBusTgt,
getFapiTarget(i_rxBusTgt),
o_rxFailLanes);
- if(NULL != err)
+ if(NULL != err)
{
PRDF_ERR( "[PlatServices::readErepair] HUID: 0x%08x io_read_erepair "
"failed", getHuid(i_rxBusTgt) );
@@ -234,25 +226,104 @@ int32_t setVpdFailedLanes(TargetHandle_t i_rxBusTgt,
int32_t erepairFirIsolation(TargetHandle_t i_rxBusTgt)
{
+ #define PRDF_FUNC "[PlatServices::erepairFirIsolation] "
+
errlHndl_t err = NULL;
PRD_FAPI_TO_ERRL(err, io_fir_isolation, getFapiTarget(i_rxBusTgt));
if(NULL != err)
{
- PRDF_TRAC( "[PlatServices::setVpdFailedLanes] rxHUID: 0x%08x "
- "committing io_fir_isolation log",
+ PRDF_ERR( PRDF_FUNC"rxHUID: 0x%08x committing io_fir_isolation log",
getHuid(i_rxBusTgt));
PRDF_COMMIT_ERRL( err, ERRL_ACTION_REPORT );
}
// Return SUCCESS since we expect this procedure to generate an error
return SUCCESS;
+
+ #undef PRDF_FUNC
}
+
//##############################################################################
//## Memory specific functions
//##############################################################################
+// Helper function for the for several other memory functions.
+int32_t getMemAddrRange( TargetHandle_t i_mba, uint8_t i_mrank,
+ ecmdDataBufferBase & o_startAddr,
+ ecmdDataBufferBase & o_endAddr,
+ uint8_t i_srank = 0, bool i_slaveOnly = false )
+{
+ #define PRDF_FUNC "[PlatServices::getMemAddrRange] "
+
+ int32_t o_rc = SUCCESS;
+
+ do
+ {
+ // Check parameters.
+ if ( TYPE_MBA != getTargetType(i_mba) )
+ {
+ PRDF_ERR( PRDF_FUNC"The given target is not TYPE_MBA" );
+ o_rc = FAIL; break;
+ }
+
+ if ( (MSS_ALL_RANKS != i_mrank && MASTER_RANKS_PER_MBA <= i_mrank) ||
+ (SLAVE_RANKS_PER_MASTER_RANK <= i_srank) )
+ {
+ PRDF_ERR( PRDF_FUNC"The given rank is not valid" );
+ o_rc = FAIL; break;
+ }
+
+ errlHndl_t errl = NULL;
+
+ if ( i_slaveOnly )
+ {
+ // TODO: RTC 82157 Use new interface when available, for now use
+ // current interface.
+// PRD_FAPI_TO_ERRL( errl, mss_get_address_range, getFapiTarget(i_mba),
+// i_mrank, i_srank, o_startAddr, o_endAddr );
+ PRD_FAPI_TO_ERRL( errl, mss_get_address_range, getFapiTarget(i_mba),
+ i_mrank, o_startAddr, o_endAddr );
+ }
+ else
+ {
+ PRD_FAPI_TO_ERRL( errl, mss_get_address_range, getFapiTarget(i_mba),
+ i_mrank, o_startAddr, o_endAddr );
+ }
+
+ if ( NULL != errl )
+ {
+ PRDF_ERR( PRDF_FUNC"mss_get_address_range() failed" );
+ PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
+ o_rc = FAIL; break;
+ }
+
+ // Verify addresses are of the valid register size.
+ if ( 64 != o_startAddr.getBitLength() ||
+ 64 != o_endAddr.getBitLength() )
+ {
+ PRDF_ERR( PRDF_FUNC"Addresses returned from "
+ "mss_get_address_range() are not 64-bit" );
+ o_rc = FAIL; break;
+ }
+
+ } while (0);
+
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC"Failed: i_mba=0x%08x i_mrank=%d i_srank=%d "
+ "i_slaveOnly=%s", getHuid(i_mba), i_mrank, i_srank,
+ i_slaveOnly ? "true" : "false" );
+ }
+
+ return o_rc;
+
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
int32_t getBadDqBitmap( TargetHandle_t i_mba, const CenRank & i_rank,
CenDqBitmap & o_bitmap, bool i_allowNoDimm )
{
@@ -338,19 +409,20 @@ int32_t setBadDqBitmap( TargetHandle_t i_mba, const CenRank & i_rank,
int32_t mssGetMarkStore( TargetHandle_t i_mba, const CenRank & i_rank,
CenMark & o_mark )
{
+ #define PRDF_FUNC "[PlatServices::mssGetMarkStore] "
+
int32_t o_rc = SUCCESS;
errlHndl_t errl = NULL;
uint8_t symbolMark, chipMark;
PRD_FAPI_TO_ERRL( errl, mss_get_mark_store, getFapiTarget(i_mba),
- i_rank.flatten(), symbolMark, chipMark );
+ i_rank.getMaster(), symbolMark, chipMark );
if ( NULL != errl )
{
- PRDF_ERR( "[PlatServices::mssGetMarkStore] mss_get_mark_store() "
- "failed. HUID: 0x%08x rank: %d",
- getHuid(i_mba), i_rank.flatten() );
+ PRDF_ERR( PRDF_FUNC"mss_get_mark_store() failed. HUID: 0x%08x rank: %d",
+ getHuid(i_mba), i_rank.getMaster() );
PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
o_rc = FAIL;
}
@@ -360,6 +432,8 @@ int32_t mssGetMarkStore( TargetHandle_t i_mba, const CenRank & i_rank,
}
return o_rc;
+
+ #undef PRDF_FUNC
}
//------------------------------------------------------------------------------
@@ -380,7 +454,7 @@ int32_t mssSetMarkStore( TargetHandle_t i_mba, const CenRank & i_rank,
: MSS_INVALID_SYMBOL;
fapi::ReturnCode l_rc = mss_put_mark_store( getFapiTarget(i_mba),
- i_rank.flatten(), symbolMark,
+ i_rank.getMaster(), symbolMark,
chipMark );
if ( i_allowWriteBlocked &&
@@ -395,7 +469,7 @@ int32_t mssSetMarkStore( TargetHandle_t i_mba, const CenRank & i_rank,
{
PRDF_ERR( PRDF_FUNC"mss_put_mark_store() failed. HUID: 0x%08x "
"rank: %d sm: %d cm: %d", getHuid(i_mba),
- i_rank.flatten(), symbolMark, chipMark );
+ i_rank.getMaster(), symbolMark, chipMark );
PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
o_rc = FAIL;
}
@@ -418,13 +492,13 @@ int32_t mssGetSteerMux( TargetHandle_t i_mba, const CenRank & i_rank,
uint8_t port0Spare, port1Spare, eccSpare;
PRD_FAPI_TO_ERRL( errl, mss_check_steering, getFapiTarget(i_mba),
- i_rank.flatten(), port0Spare, port1Spare, eccSpare );
+ i_rank.getMaster(), port0Spare, port1Spare, eccSpare );
if ( NULL != errl )
{
PRDF_ERR( "[PlatServices::mssGetSteerMux] mss_check_steering() "
"failed. HUID: 0x%08x rank: %d",
- getHuid(i_mba), i_rank.flatten() );
+ getHuid(i_mba), i_rank.getMaster() );
PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
o_rc = FAIL;
}
@@ -448,13 +522,13 @@ int32_t mssSetSteerMux( TargetHandle_t i_mba, const CenRank & i_rank,
errlHndl_t errl = NULL;
PRD_FAPI_TO_ERRL( errl, mss_do_steering, getFapiTarget(i_mba),
- i_rank.flatten(), i_symbol.getSymbol(), i_x4EccSpare );
+ i_rank.getMaster(), i_symbol.getSymbol(), i_x4EccSpare );
if ( NULL != errl )
{
PRDF_ERR( "[PlatServices::mssSetSteerMux] mss_do_steering "
"failed. HUID: 0x%08x rank: %d symbol: %d eccSpare: %c",
- getHuid(i_mba), i_rank.flatten(), i_symbol.getSymbol(),
+ getHuid(i_mba), i_rank.getMaster(), i_symbol.getSymbol(),
i_x4EccSpare ? 'T' : 'F' );
PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
o_rc = FAIL;
@@ -468,12 +542,13 @@ int32_t mssSetSteerMux( TargetHandle_t i_mba, const CenRank & i_rank,
int32_t getMemAddrRange( TargetHandle_t i_mba, CenAddr & o_startAddr,
CenAddr & o_endAddr )
{
+ #define PRDF_FUNC "[PlatServices::getMemAddrRange] "
+
ecmdDataBufferBase startAddr(64), endAddr(64);
int32_t o_rc = getMemAddrRange( i_mba, MSS_ALL_RANKS, startAddr, endAddr );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( "[PlatServices::getMemAddrRange] failed: i_mba=0x%08x",
- getHuid(i_mba) );
+ PRDF_ERR( PRDF_FUNC"Failed: i_mba=0x%08x", getHuid(i_mba) );
}
else
{
@@ -482,19 +557,27 @@ int32_t getMemAddrRange( TargetHandle_t i_mba, CenAddr & o_startAddr,
}
return o_rc;
+
+ #undef PRDF_FUNC
}
//------------------------------------------------------------------------------
int32_t getMemAddrRange( TargetHandle_t i_mba, const CenRank & i_rank,
- CenAddr & o_startAddr, CenAddr & o_endAddr )
+ CenAddr & o_startAddr, CenAddr & o_endAddr,
+ bool i_slaveOnly )
{
+ #define PRDF_FUNC "[PlatServices::getMemAddrRange] "
+
ecmdDataBufferBase startAddr(64), endAddr(64);
- int32_t o_rc = getMemAddrRange(i_mba, i_rank.flatten(), startAddr, endAddr);
+ int32_t o_rc = getMemAddrRange( i_mba, i_rank.getMaster(),
+ startAddr, endAddr,
+ i_rank.getSlave(), i_slaveOnly );
if ( SUCCESS != o_rc )
{
- PRDF_ERR( "[PlatServices::getMemAddrRange] failed: i_mba=0x%08x "
- "i_rank=%d", getHuid(i_mba), i_rank.flatten() );
+ PRDF_ERR( PRDF_FUNC"Failed: i_mba=0x%08x i_rank=M%dS%d i_slaveOnly=%s",
+ getHuid(i_mba), i_rank.getMaster(), i_rank.getSlave(),
+ i_slaveOnly ? "true" : "false" );
}
else
{
@@ -503,6 +586,8 @@ int32_t getMemAddrRange( TargetHandle_t i_mba, const CenRank & i_rank,
}
return o_rc;
+
+ #undef PRDF_FUNC
}
//------------------------------------------------------------------------------
@@ -611,61 +696,6 @@ int32_t mss_MaintCmdWrapper::cleanupCmd()
//------------------------------------------------------------------------------
-// Helper function for the createMssCmd() functions.
-int32_t getMemAddrRange( TargetHandle_t i_mba, uint8_t i_rank,
- ecmdDataBufferBase & o_startAddr,
- ecmdDataBufferBase & o_endAddr )
-{
- #define PRDF_FUNC "[PlatServices::getMemAddrRange] "
-
- int32_t o_rc = SUCCESS;
-
- do
- {
- // Check parameters.
- if ( TYPE_MBA != getTargetType(i_mba) )
- {
- PRDF_ERR( PRDF_FUNC"The given target is not TYPE_MBA" );
- o_rc = FAIL; break;
- }
-
- if ( MSS_ALL_RANKS != i_rank && MAX_RANKS_PER_MBA <= i_rank )
- {
- PRDF_ERR( PRDF_FUNC"The given rank is not valid" );
- o_rc = FAIL; break;
- }
-
- errlHndl_t errl = NULL;
- PRD_FAPI_TO_ERRL( errl, mss_get_address_range, getFapiTarget(i_mba),
- i_rank, o_startAddr, o_endAddr );
- if ( NULL != errl )
- {
- PRDF_ERR( PRDF_FUNC"mss_get_address_range() failed" );
- PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
- o_rc = FAIL; break;
- }
-
- // Verify addresses are of the valid register size.
- if ( 64 != o_startAddr.getBitLength() ||
- 64 != o_endAddr.getBitLength() )
- {
- PRDF_ERR( PRDF_FUNC"Addresses returned from "
- "mss_get_address_range() are not 64-bit" );
- o_rc = FAIL; break;
- }
-
- } while (0);
-
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC"Failed: 0x%08x 0x%02x", getHuid(i_mba), i_rank );
- }
-
- return o_rc;
-
- #undef PRDF_FUNC
-}
-
//------------------------------------------------------------------------------
// Helper function for the other createMssCmd() functions.
@@ -737,12 +767,13 @@ mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType,
mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType,
TargetHandle_t i_mba,
const CenRank & i_rank, uint32_t i_stopCond,
- bool i_isFastSpeed )
+ bool i_isFastSpeed, bool i_slaveOnly )
{
mss_MaintCmdWrapper * o_cmd = NULL;
ecmdDataBufferBase sAddr(64), eAddr(64);
- int32_t l_rc = getMemAddrRange( i_mba, i_rank.flatten(), sAddr, eAddr );
+ int32_t l_rc = getMemAddrRange( i_mba, i_rank.getMaster(), sAddr, eAddr,
+ i_rank.getSlave(), i_slaveOnly );
if ( SUCCESS == l_rc )
{
o_cmd = createMssCmd( i_cmdType, i_mba, i_stopCond, i_isFastSpeed,
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
index be23be1f4..fee317cca 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
@@ -288,16 +288,18 @@ int32_t getMemAddrRange( TARGETING::TargetHandle_t i_mba, CenAddr & o_startAddr,
CenAddr & o_endAddr );
/**
- * @brief Returns the start and end maintenance address of the given rank.
+ * @brief Returns the start and end maintenance address of the given rank. By
+ * default, will return the address range of the master rank.
* @param i_mba Target MBA.
* @param i_rank Target rank.
* @param o_startAddr The return start address.
* @param o_endAddr The return end address.
+ * @param i_slaveOnly true = slave rank only, false = master rank (default).
* @return Non-SUCCESS in internal function fails, SUCCESS otherwise.
*/
int32_t getMemAddrRange( TARGETING::TargetHandle_t i_mba,
const CenRank & i_rank, CenAddr & o_startAddr,
- CenAddr & o_endAddr );
+ CenAddr & o_endAddr, bool i_slaveOnly = false );
/**
* @brief Returns the memory buffer raw card type (i.e. R/C A).
@@ -410,6 +412,7 @@ mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType,
* @param i_mba An MBA target.
* @param i_stopCond Bit mask for conditions in which to stop command.
* @param i_isFastSpeed false = slow (12 H), true = fast (default).
+ * @param i_slaveOnly true = slave rank only, false = master rank (default).
* @return A mss_MaintCmdWrapper object, NULL if an internal function failed.
* @note This function allocates memory on heap for mss_MaintCmdWrapper
* object. It is the caller's responsibilty to delete this object.
@@ -418,7 +421,8 @@ mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType,
mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType,
TARGETING::TargetHandle_t i_mba,
const CenRank & i_rank, uint32_t i_stopCond,
- bool i_isFastSpeed = true );
+ bool i_isFastSpeed = true,
+ bool i_slaveOnly = false );
} // end namespace PlatServices
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H
index 9e616dfe6..e5a27d6e2 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H
@@ -48,54 +48,95 @@ class CenRank
public: // constructor
/** @brief Default constructor */
- CenRank() { iv_rank.u = 0; }
+ CenRank() :
+ iv_slaveValid(false)
+ {
+ iv_rank.master.u = 0;
+ iv_rank.slave = 0;
+ }
/**
* @brief Constructor from flattened rank.
- * @param i_rank The 3-bit rank.
- * @note The rank format should be 0bDRR (D=DIMM select, R=rank select).
+ * @param i_mrank The 3-bit master rank.
+ * @note The master rank format should be 0bDRR (D=DIMM select,
+ * R=rank select).
*/
- explicit CenRank( uint8_t i_rank ) { iv_rank.u = i_rank; }
+ explicit CenRank( uint8_t i_mrank ) :
+ iv_slaveValid(false)
+ {
+ iv_rank.master.u = i_mrank;
+ iv_rank.slave = 0;
+ }
/**
- * @brief Constructor from components.
- * @param i_dimmSlct The 1-bit DIMM select.
- * @param i_rankSlct The 2-bit rank select.
+ * @brief Constructor from flattened rank.
+ * @param i_mrank The 3-bit master rank.
+ * @param i_srank The 3-bit slave rank.
+ * @note The master rank format should be 0bDRR (D=DIMM select,
+ * R=rank select).
*/
- CenRank( uint8_t i_dimmSlct, uint8_t i_rankSlct )
+ explicit CenRank( uint8_t i_mrank, uint8_t i_srank ) :
+ iv_slaveValid(true)
{
- iv_rank.s.ds = i_dimmSlct;
- iv_rank.s.rs = i_rankSlct;
+ iv_rank.master.u = i_mrank;
+ iv_rank.slave = i_srank;
}
/** @return The 1-bit DIMM select. */
- uint8_t getDimmSlct() const { return iv_rank.s.ds; }
+ uint8_t getDimmSlct() const { return iv_rank.master.s.ds; }
/** @return The 2-bit rank select. */
- uint8_t getRankSlct() const { return iv_rank.s.rs; }
+ uint8_t getRankSlct() const { return iv_rank.master.s.rs; }
/**
- * @brief Converts internal data structure to a uint8_t.
+ * @return The 3-bit master rank.
* @note The format will be 0bDRR (D=DIMM select, R=rank select).
- * @return A uint8_t version of the rank.
*/
- uint8_t flatten() const { return iv_rank.u; }
+ uint8_t getMaster() const { return iv_rank.master.u; }
+
+ /** @return The 3-bit slave rank. */
+ uint8_t getSlave() const { return iv_rank.slave; }
+
+ /**
+ * There are a lot of cases where we only need to know the master rank,
+ * however, this object stores both the master and slave rank. This function
+ * will indicate whether it is intended to only be used for a master rank or
+ * both a master and slave rank.
+ *
+ * @return TRUE if slave rank is trusted to be valid, FALSE otherwise.
+ */
+ bool isSlaveValid() const { return iv_slaveValid; }
/** @brief '==' operator */
bool operator==( const CenRank & i_rank ) const
- { return ( this->flatten() == i_rank.flatten() ); }
+ {
+ return ( (this->getMaster() == i_rank.getMaster()) &&
+ (this->getSlave() == i_rank.getSlave() ) );
+ }
/** @brief '<' operator */
bool operator<( const CenRank & i_rank ) const
- { return ( this->flatten() < i_rank.flatten() ); }
+ {
+ return ( (this->getMaster() < i_rank.getMaster()) ||
+ ( (this->getMaster() == i_rank.getMaster()) &&
+ (this->getSlave() < i_rank.getSlave() ) ) );
+ }
private: // data
- union
+ struct
{
- struct { uint8_t unused : 5; uint8_t ds : 1; uint8_t rs : 2; } s;
- uint8_t u;
+ union
+ {
+ struct { uint8_t unused : 5; uint8_t ds : 1; uint8_t rs : 2; } s;
+ uint8_t u;
+ } master;
+
+ uint8_t slave : 3;
+
} iv_rank;
+
+ bool iv_slaveValid;
};
//------------------------------------------------------------------------------
@@ -147,16 +188,17 @@ class CenAddr
/**
* @brief Constructor from components.
- * @param i_rank The 3-bit master rank.
+ * @param i_mrank The 3-bit master rank.
+ * @param i_srank The 3-bit slave rank.
* @param i_bank The 4-bit bank.
* @param i_row The 17-bit row.
* @param i_col The 12-bit column.
* @param i_types An OR of all error types associated with this address (see
* enum ErrorType).
*/
- CenAddr( uint32_t i_rank, uint32_t i_bank, uint32_t i_row,
- uint32_t i_col, uint32_t i_types = NONE ) :
- iv_rank(i_rank), iv_types(i_types)
+ CenAddr( uint32_t i_mrank, uint32_t i_srank, uint32_t i_bank,
+ uint32_t i_row, uint32_t i_col, uint32_t i_types = NONE ) :
+ iv_rank(i_mrank, i_srank), iv_types(i_types)
{
iv_bankRowCol.bank = i_bank;
iv_bankRowCol.row = i_row;
@@ -171,7 +213,8 @@ class CenAddr
static CenAddr fromReadAddr( uint64_t i_addr, uint32_t i_type )
{
return CenAddr(
- (i_addr >> 60) & 0x7, // rank
+ (i_addr >> 60) & 0x7, // master rank
+ (i_addr >> 57) & 0x7, // slave rank
(i_addr >> 53) & 0xf, // bank
((i_addr >> 5) & 0x20000) | ((i_addr >> 36) & 0x1ffff), // row
(i_addr >> 24) & 0xfff, // column
@@ -188,7 +231,8 @@ class CenAddr
*/
uint64_t toReadAddr() const
{
- return ( ((uint64_t) iv_rank.flatten() << 60) |
+ return ( ((uint64_t) iv_rank.getMaster() << 60) |
+ ((uint64_t) iv_rank.getSlave() << 57) |
((uint64_t) iv_bankRowCol.bank << 53) |
((uint64_t)(iv_bankRowCol.row & 0x1ffff) << 36) | // r16-r0
((uint64_t) iv_bankRowCol.col << 24) |
@@ -202,7 +246,8 @@ class CenAddr
static CenAddr fromMaintStartAddr( uint64_t i_addr )
{
return CenAddr(
- (i_addr >> 60) & 0x7, // rank
+ (i_addr >> 60) & 0x7, // master rank
+ (i_addr >> 57) & 0x7, // slave rank
(i_addr >> 53) & 0xf, // bank
((i_addr << 13) & 0x20000) | ((i_addr >> 36) & 0x1ffff), // row
(i_addr >> 24) & 0xfff, // column
@@ -218,7 +263,8 @@ class CenAddr
*/
uint64_t toMaintStartAddr() const
{
- return ( ((uint64_t) iv_rank.flatten() << 60) |
+ return ( ((uint64_t) iv_rank.getMaster() << 60) |
+ ((uint64_t) iv_rank.getSlave() << 57) |
((uint64_t) iv_bankRowCol.bank << 53) |
((uint64_t)(iv_bankRowCol.row & 0x1ffff) << 36) | // r16-r0
((uint64_t) iv_bankRowCol.col << 24) |
@@ -232,7 +278,8 @@ class CenAddr
static CenAddr fromMaintEndAddr( uint64_t i_addr )
{
return CenAddr(
- (i_addr >> 60) & 0x7, // rank
+ (i_addr >> 60) & 0x7, // master rank
+ (i_addr >> 57) & 0x7, // slave rank
(i_addr >> 53) & 0xf, // bank
((i_addr >> 6) & 0x20000) | ((i_addr >> 36) & 0x1ffff), // row
(i_addr >> 24) & 0xfff ); // column
@@ -247,7 +294,8 @@ class CenAddr
*/
uint64_t toMaintEndAddr() const
{
- return ( ((uint64_t) iv_rank.flatten() << 60) |
+ return ( ((uint64_t) iv_rank.getMaster() << 60) |
+ ((uint64_t) iv_rank.getSlave() << 57) |
((uint64_t) iv_bankRowCol.bank << 53) |
((uint64_t)(iv_bankRowCol.row & 0x1ffff) << 36) | // r16-r0
((uint64_t) iv_bankRowCol.col << 24) |
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H
index 4360da5b2..133a852ab 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenConst.H
@@ -37,10 +37,13 @@ namespace PRDF
enum
{
- PORT_SLCT_PER_MBA = 2,
- MAX_DIMM_SLCT_PER_MBA = 2,
- MAX_RANKS_PER_DIMM_SLCT = 4,
- MAX_RANKS_PER_MBA = MAX_DIMM_SLCT_PER_MBA * MAX_RANKS_PER_DIMM_SLCT,
+ PORT_SLCT_PER_MBA = 2,
+ DIMM_SLCT_PER_MBA = 2,
+
+ MASTER_RANKS_PER_DIMM_SLCT = 4,
+ SLAVE_RANKS_PER_MASTER_RANK = 8,
+
+ MASTER_RANKS_PER_MBA = DIMM_SLCT_PER_MBA * MASTER_RANKS_PER_DIMM_SLCT,
SYMBOLS_PER_RANK = 72,
DQS_PER_DIMM = 72,
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C
index 82d3ef9cd..28a1400cc 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenDqBitmap.C
@@ -329,7 +329,7 @@ int32_t CenDqBitmap::isDramSpareAvailable( uint8_t i_portSlct,
void CenDqBitmap::getCaptureData( CaptureData & o_cd ) const
{
- uint8_t rank = iv_rank.flatten();
+ uint8_t rank = iv_rank.getMaster();
size_t sz_rank = sizeof(rank);
size_t sz_capData = sz_rank + sizeof(iv_data);
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMarkstore.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMarkstore.H
index 38bf32245..e015ceb5b 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMarkstore.H
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMarkstore.H
@@ -54,12 +54,12 @@ class CenMark
{}
/** @brief Constructor from components */
- CenMark( CenSymbol i_symbolMark, CenSymbol i_chipMark ) :
+ CenMark( const CenSymbol & i_symbolMark, const CenSymbol & i_chipMark ) :
iv_symbolMark(i_symbolMark), iv_chipMark(i_chipMark)
{}
/** @brief Constructor from components */
- CenMark( TARGETING::TargetHandle_t i_mba, CenRank i_rank,
+ CenMark( TARGETING::TargetHandle_t i_mba, const CenRank & i_rank,
uint8_t i_symbolMark, uint8_t i_chipMark )
{
iv_symbolMark = CenSymbol::fromSymbol( i_mba, i_rank, i_symbolMark );
@@ -75,10 +75,11 @@ class CenMark
CenSymbol getCM() const { return iv_chipMark; }
/** @brief Sets the symbol mark to the given symbol. */
- void setSM( CenSymbol i_symbolMark ) { iv_symbolMark = i_symbolMark; }
+ void setSM( const CenSymbol & i_symbolMark )
+ { iv_symbolMark = i_symbolMark; }
/** @brief Sets the chip mark to the given symbol. */
- void setCM( CenSymbol i_chipMark ) { iv_chipMark = i_chipMark; }
+ void setCM( const CenSymbol & i_chipMark ) { iv_chipMark = i_chipMark; }
/** @brief Sets the symbol mark to an invalid symbol. */
void clearSM() { iv_symbolMark = CenSymbol(); }
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C
index 343979ebd..9a081ea18 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C
@@ -86,7 +86,7 @@ void captureDramRepairsData( TARGETING::TargetHandle_t i_mbaTarget,
DramRepairMbaData mbaData;
// Iterate all ranks to get DRAM repair data
- for ( uint32_t r = 0; r < MAX_RANKS_PER_MBA; r++ )
+ for ( uint32_t r = 0; r < MASTER_RANKS_PER_MBA; r++ )
{
CenRank rank ( r );
@@ -109,7 +109,7 @@ void captureDramRepairsData( TARGETING::TargetHandle_t i_mbaTarget,
}
// Add data
- DramRepairRankData rankData = { rank.flatten(),
+ DramRepairRankData rankData = { rank.getMaster(),
mark.getCM().getSymbol(),
mark.getSM().getSymbol(),
sp0.getSymbol(),
@@ -170,7 +170,7 @@ void captureDramRepairsVpd( TargetHandle_t i_mba, CaptureData & io_cd )
static const size_t sz_word = sizeof(CPU_WORD);
// Get the maximum capture data size.
- size_t sz_maxData = MAX_RANKS_PER_MBA * (sz_rank + sz_entry);
+ size_t sz_maxData = MASTER_RANKS_PER_MBA * (sz_rank + sz_entry);
// Adjust the size for endianess.
sz_maxData = ((sz_maxData + sz_word-1) / sz_word) * sz_word;
@@ -181,7 +181,7 @@ void captureDramRepairsVpd( TargetHandle_t i_mba, CaptureData & io_cd )
// Get the data for each rank.
uint32_t idx = 0;
- for ( uint8_t r = 0; r < MAX_RANKS_PER_MBA; r++ )
+ for ( uint8_t r = 0; r < MASTER_RANKS_PER_MBA; r++ )
{
CenRank rank ( r );
CenDqBitmap bitmap;
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.C
index 5b1e0444b..04a4aea3d 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.C
@@ -235,9 +235,9 @@ int32_t CenSymbol::getSymbol( const CenRank & i_rank, WiringType i_wiringType,
if ( SUCCESS != o_rc )
{
- PRDF_ERR( PRDF_FUNC"Failed: i_rank=%d i_wiringType=%d i_dimmDq=%d "
- "i_portSlct=%d", i_rank.flatten(), i_wiringType, i_dimmDq,
- i_portSlct );
+ PRDF_ERR( PRDF_FUNC"Failed: i_rank=M%dS%d i_wiringType=%d i_dimmDq=%d "
+ "i_portSlct=%d", i_rank.getMaster(), i_rank.getSlave(),
+ i_wiringType, i_dimmDq, i_portSlct );
}
return o_rc;
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.H
index 681bff7ee..e0d3e4659 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.H
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenSymbol.H
@@ -81,7 +81,7 @@ class CenSymbol
/**
* @brief Constructor from components
*/
- CenSymbol( TARGETING::TargetHandle_t i_mba, CenRank i_rank,
+ CenSymbol( TARGETING::TargetHandle_t i_mba, const CenRank & i_rank,
WiringType i_wiringType, uint8_t i_symbol, uint8_t i_pins,
bool i_x4Dram ) :
iv_mbaTarget(i_mba), iv_rank(i_rank), iv_wiringType(i_wiringType),
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.C b/src/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.C
index 6c4e7a736..fff1d3146 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.C
@@ -105,7 +105,9 @@ MemoryMru::MemoryMru( uint32_t i_memMru ) :
// Get the rank
- iv_rank = CenRank( iv_memMruMeld.s.rank );
+ iv_rank = (0 == iv_memMruMeld.s.srankValid)
+ ? CenRank( iv_memMruMeld.s.mrank )
+ : CenRank( iv_memMruMeld.s.mrank, iv_memMruMeld.s.srank );
// Get the symbol or special callout
if ( (FIRST_SPECIAL_CALLOUT <= iv_memMruMeld.s.symbol) &&
@@ -115,24 +117,19 @@ MemoryMru::MemoryMru( uint32_t i_memMru ) :
}
else
{
- if ( SYMBOLS_PER_RANK <= iv_memMruMeld.s.symbol)
+ if ( SYMBOLS_PER_RANK <= iv_memMruMeld.s.symbol )
{
PRDF_ERR( PRDF_FUNC"Invalid symbol value :%u",
- iv_memMruMeld.s.symbol);
+ iv_memMruMeld.s.symbol );
break;
}
iv_symbol = CenSymbol::fromSymbol( iv_mbaTarget, iv_rank,
iv_memMruMeld.s.symbol,
iv_memMruMeld.s.pins );
-
if ( !iv_symbol.isValid() )
{
- PRDF_ERR( PRDF_FUNC"Can not create symbol from symbol value"
- " :%u, pins:%u, rank:%u",
- iv_memMruMeld.s.symbol,
- iv_memMruMeld.s.pins,
- iv_memMruMeld.s.rank );
+ PRDF_ERR( PRDF_FUNC"fromSymbol() failed" );
break;
}
@@ -195,12 +192,13 @@ MemoryMru::MemoryMru( TARGETING::TargetHandle_t i_mbaTarget,
break;
}
-
iv_memMruMeld.s.nodePos = getTargetPosition( node );
iv_memMruMeld.s.procPos = getTargetPosition( proc );
iv_memMruMeld.s.cenPos = getTargetPosition( memBuff );
iv_memMruMeld.s.mbaPos = getTargetPosition( iv_mbaTarget );
- iv_memMruMeld.s.rank = iv_rank.flatten();
+ iv_memMruMeld.s.mrank = iv_rank.getMaster();
+ iv_memMruMeld.s.srank = iv_rank.getSlave();
+ iv_memMruMeld.s.srankValid = iv_rank.isSlaveValid();
iv_memMruMeld.s.symbol = iv_symbol.getSymbol();
iv_memMruMeld.s.pins = iv_symbol.getPins();
iv_memMruMeld.s.dramSpared = 0; // manually set by setDramSpared()
@@ -252,12 +250,13 @@ MemoryMru::MemoryMru( TARGETING::TargetHandle_t i_mbaTarget,
break;
}
-
iv_memMruMeld.s.nodePos = getTargetPosition( node );
iv_memMruMeld.s.procPos = getTargetPosition( proc );
iv_memMruMeld.s.cenPos = getTargetPosition( memBuff );
iv_memMruMeld.s.mbaPos = getTargetPosition( iv_mbaTarget );
- iv_memMruMeld.s.rank = iv_rank.flatten();
+ iv_memMruMeld.s.mrank = iv_rank.getMaster();
+ iv_memMruMeld.s.srank = iv_rank.getSlave();
+ iv_memMruMeld.s.srankValid = iv_rank.isSlaveValid();
iv_memMruMeld.s.symbol = iv_special;
// If the code gets to this point the MemoryMru is valid.
diff --git a/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C b/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C
index 1d42d5def..85b002b2d 100644
--- a/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C
+++ b/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C
@@ -114,10 +114,14 @@ bool parseMemMruData( ErrlUsrParser & i_parser, uint32_t i_memMru )
uint8_t cenPos = (mm.s.procPos << 3) | mm.s.cenPos;
uint8_t mbaPos = mm.s.mbaPos;
+ char tmp[PARSER_HEADER_SIZE] = { '\0' };
+ if ( 1 == mm.s.srankValid )
+ snprintf( tmp, PARSER_HEADER_SIZE, "S%d", mm.s.srank );
+
char header[PARSER_HEADER_SIZE];
- snprintf( header, PARSER_HEADER_SIZE, " mba(n%dp%dc%d)%s Rank: %d",
+ snprintf( header, PARSER_HEADER_SIZE, " mba(n%dp%dc%d)%s Rank:M%d%s",
nodePos, cenPos, mbaPos, (cenPos < 10) ? " " : "",
- mm.s.rank );
+ mm.s.mrank, tmp );
char data[PARSER_DATA_SIZE];
@@ -141,8 +145,8 @@ bool parseMemMruData( ErrlUsrParser & i_parser, uint32_t i_memMru )
}
// Ouptut should look like:
- // | mba(n0p0c0) Rank: 0 : Special: CALLOUT_RANK |
- // | mba(n7p63c1) Rank: 7 : Symbol: 71 Pins: 3 Spared: false |
+ // | mba(n0p0c0) Rank:M7 : Special: CALLOUT_RANK |
+ // | mba(n7p63c1) Rank:M0S7 : Symbol: 71 Pins: 3 Spared: false |
i_parser.PrintString( header, data );
diff --git a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
index 547ae41db..9e02af728 100644
--- a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
+++ b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
@@ -469,7 +469,7 @@ bool parsePfaData( void * i_buffer, uint32_t i_buflen,
case SRCI_PRIORITY_MED: tmpStr = "MED"; break;
case SRCI_PRIORITY_HIGH: tmpStr = "HIGH"; break;
}
- snprintf( header, 25, " #%d %s", i+1, tmpStr );
+ snprintf( header, 25, " #%d %s", i+1, tmpStr );
snprintf( data, 50, "0x%08x ", pfa.mruList[i].callout );
diff --git a/src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H b/src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H
index 49dc16dd6..8fe4951db 100644
--- a/src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H
+++ b/src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H
@@ -76,6 +76,7 @@ union MemMruMeld
// version field so that the error log parser know which format to
// used.
+#ifndef ESW_SIM_COMPILE
uint32_t valid : 1; ///< Used to indicate nothing failed while
///< building the object (1=valid, 0=not valid)
uint32_t procPos : 3; ///< Proc position within node (0-7)
@@ -84,15 +85,31 @@ union MemMruMeld
uint32_t pins : 2; ///< Even and/or Odd symbol pins
uint32_t nodePos : 3; ///< Node position (0-7)
- uint32_t rank : 3; ///< Rank (0-7)
+ uint32_t mrank : 3; ///< Master rank (0-7)
uint32_t dramSpared : 1; ///< True if symbol is on spared DRAM
uint32_t symbol : 7; ///< Symbol or SpecialCallout
// TODO: RTC 67376 Check if width for wiring type is enough
- uint32_t wiringType : 5; ///< Wiring type
-
- uint32_t unused : 3; ///< Reserved for future use
+ uint32_t wiringType : 4; ///< Wiring type
+ uint32_t srankValid : 1; ///< TRUE if slave rank is valid
+ uint32_t srank : 3; ///< Slave rank (0-7)
+#else
+ // Need to reverse this to make the uint32_t look right in the
+ // simulator.
+ uint32_t srank : 3;
+ uint32_t srankValid : 1;
+ uint32_t wiringType : 4;
+ uint32_t symbol : 7;
+ uint32_t dramSpared : 1;
+ uint32_t mrank : 3;
+ uint32_t nodePos : 3;
+ uint32_t pins : 2;
+ uint32_t mbaPos : 1;
+ uint32_t cenPos : 3;
+ uint32_t procPos : 3;
+ uint32_t valid : 1;
+#endif
} s; ///< A struct defining the 32-bit version of the MemoryMru
};
diff --git a/src/usr/diag/prdf/framework/service/prdfPlatServices.C b/src/usr/diag/prdf/framework/service/prdfPlatServices.C
index 48f356528..8bf195dd5 100644
--- a/src/usr/diag/prdf/framework/service/prdfPlatServices.C
+++ b/src/usr/diag/prdf/framework/service/prdfPlatServices.C
@@ -199,11 +199,11 @@ int32_t mssIplUeIsolation( TargetHandle_t i_mba, const CenRank & i_rank,
errlHndl_t errl = NULL;
PRD_FAPI_TO_ERRL( errl, mss_IPL_UE_isolation, getFapiTarget(i_mba),
- i_rank.flatten(), data );
+ i_rank.getMaster(), data );
if ( NULL != errl )
{
PRDF_ERR( PRDF_FUNC"mss_IPL_UE_isolation() failed: MBA=0x%08x "
- "rank=%d", getHuid(i_mba), i_rank.flatten() );
+ "rank=%d", getHuid(i_mba), i_rank.getMaster() );
PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT );
o_rc = FAIL;
}
diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.C b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.C
index 1b3541865..84708ee99 100755
--- a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.C
+++ b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.C
@@ -132,7 +132,7 @@ int32_t CenMbaIplCeStats::collectStats( const CenRank & i_stopRank )
iv_rankMap[rankKey]++;
// In case of dimm Slct , rank select does not matter
- CenRank dimmRank( dimmSlct, 0);
+ CenRank dimmRank( dimmSlct << DIMM_SLCT_PER_MBA );
// Increment the soft CEs per half dimm select.
HalfRankKey dsKey = { dimmRank, portSlct };
iv_dsMap[dsKey]++;
diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.H b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.H
index af358dd6b..456024257 100755
--- a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.H
+++ b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaIplCeStats.H
@@ -123,7 +123,7 @@ class CenMbaIplCeStats
*/
struct HalfRankKey
{
- CenRank rank; ///< The rank
+ CenRank rank; ///< The rank
uint8_t portSlct; ///< The port select
/** @brief Overrides the '==' operator. */
@@ -206,9 +206,6 @@ class CenMbaIplCeStats
/** The MBA chip. */
ExtensibleChip * iv_mbaChip;
- /** The rank that this object is expecting to collect for. */
- CenRank iv_rankToAnalyze;
-
/** A map to keep track of which half ranks have all ready been called out.
* This helps reduce excessive callouts for the same hardware. */
BannedAnalysisMap iv_bannedAnalysis;
diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C
index 6fa4088ae..959434608 100644
--- a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C
+++ b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C
@@ -145,9 +145,10 @@ int32_t CenMbaTdCtlr::handleCmdCompleteEvent( STEP_CODE_DATA_STRUCT & io_sc )
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC"iv_mbaChip:0x%08x iv_initialized:%c iv_tdState:%d "
- "iv_rank:%d iv_mark:%2d %2d", getHuid(mba),
- iv_initialized ? 'T' : 'F', iv_tdState, iv_rank.flatten(),
- iv_mark.getCM().getSymbol(), iv_mark.getSM().getSymbol() );
+ "iv_rank:M%dS%d iv_mark:%2d %2d", getHuid(mba),
+ iv_initialized ? 'T' : 'F', iv_tdState, iv_rank.getMaster(),
+ iv_rank.getSlave(), iv_mark.getCM().getSymbol(),
+ iv_mark.getSM().getSymbol() );
int32_t l_rc = cleanupPrevCmd(); // Just in case.
if ( SUCCESS != l_rc )
@@ -203,8 +204,9 @@ int32_t CenMbaTdCtlr::handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc,
// This is a no-op in Hostboot. Instead, print a trace statement
// indicating the intended request.
PRDF_INF( PRDF_FUNC"TD request found during Hostboot: "
- "iv_mbaChip=0x%08x i_rank=%d i_event=%d",
- getHuid(mba), i_rank.flatten(), i_event );
+ "iv_mbaChip=0x%08x i_rank=M%dS%d i_event=%d",
+ getHuid(mba), i_rank.getMaster(), i_rank.getSlave(),
+ i_event );
} while(0);
@@ -983,7 +985,7 @@ int32_t CenMbaTdCtlr::startTpsPhase1()
mss_MaintCmd::ENABLE_CMD_COMPLETE_ATTENTION );
iv_mssCmd = createMssCmd( mss_MaintCmdWrapper::TIMEBASE_SCRUB,
- mba, iv_rank, stopCond );
+ mba, iv_rank, stopCond, true, true );
if ( NULL == iv_mssCmd )
{
PRDF_ERR( PRDF_FUNC"createMssCmd() failed");
@@ -1039,7 +1041,7 @@ int32_t CenMbaTdCtlr::startTpsPhase2()
mss_MaintCmd::ENABLE_CMD_COMPLETE_ATTENTION );
iv_mssCmd = createMssCmd( mss_MaintCmdWrapper::TIMEBASE_SCRUB,
- mba, iv_rank, stopCond );
+ mba, iv_rank, stopCond, true, true );
if ( NULL == iv_mssCmd )
{
PRDF_ERR( PRDF_FUNC"createMssCmd() failed");
@@ -1094,7 +1096,7 @@ int32_t CenMbaTdCtlr::checkEccErrors( uint16_t & o_eccErrorMask )
break;
}
- if ( mbsEccFir->IsBitSet(20 + iv_rank.flatten()) )
+ if ( mbsEccFir->IsBitSet(20 + iv_rank.getMaster()) )
{
o_eccErrorMask |= MPE;
@@ -1633,7 +1635,7 @@ int32_t CenMbaTdCtlr::prepareNextCmd()
firand->setAllBits();
// Clear MPE bit for this rank.
- firand->ClearBit( 20 + iv_rank.flatten() );
+ firand->ClearBit( 20 + iv_rank.getMaster() );
// Clear NCE, SCE, MCE, RCE, SUE, UE bits (36-41)
firand->SetBitFieldJustified( 36, 6, 0 );
diff --git a/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C b/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C
index 518a965da..13ccf84e5 100644
--- a/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C
+++ b/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C
@@ -118,7 +118,7 @@ bool processRepairedRanks( TargetHandle_t i_mba, uint8_t i_repairedRankMask )
errlHndl_t errl = NULL; // Initially NULL, will create if needed.
- for ( uint8_t r = 0; r < MAX_RANKS_PER_MBA; ++r )
+ for ( uint8_t r = 0; r < MASTER_RANKS_PER_MBA; ++r )
{
if ( 0 == (i_repairedRankMask & (1 << r)) )
{
@@ -131,7 +131,7 @@ bool processRepairedRanks( TargetHandle_t i_mba, uint8_t i_repairedRankMask )
if ( SUCCESS != mssGetMarkStore(i_mba, rank, mark) )
{
PRDF_ERR( PRDF_FUNC"mssGetMarkStore() failed: MBA=0x%08x rank=%d",
- getHuid(i_mba), rank.flatten() );
+ getHuid(i_mba), rank.getMaster() );
analysisErrors = true;
continue; // skip this rank
}
@@ -141,7 +141,7 @@ bool processRepairedRanks( TargetHandle_t i_mba, uint8_t i_repairedRankMask )
if ( SUCCESS != mssGetSteerMux(i_mba, rank, sp0, sp1, sp))
{
PRDF_ERR( PRDF_FUNC"mssGetSteerMux() failed: MBA=0x%08x rank=%d",
- getHuid(i_mba), rank.flatten() );
+ getHuid(i_mba), rank.getMaster() );
analysisErrors = true;
continue; // skip this rank
}
@@ -257,7 +257,7 @@ bool screenBadDqs( TargetHandle_t i_mba )
errlHndl_t errl = NULL; // Initially NULL, will create if needed.
- for ( uint32_t r = 0; r < MAX_RANKS_PER_MBA; r++ )
+ for ( uint32_t r = 0; r < MASTER_RANKS_PER_MBA; r++ )
{
CenRank rank ( r );
CenDqBitmap bitmap;
@@ -270,7 +270,7 @@ bool screenBadDqs( TargetHandle_t i_mba )
if ( SUCCESS != getBadDqBitmap(i_mba, rank, bitmap, true) )
{
PRDF_ERR( PRDF_FUNC"getBadDqBitmap() failed: MBA=0x%08x rank=%d",
- getHuid(i_mba), rank.flatten() );
+ getHuid(i_mba), rank.getMaster() );
analysisErrors = true;
continue; // skip this rank
}
@@ -295,7 +295,7 @@ void deployDramSpares( TargetHandle_t i_mba )
{
bool x4 = isDramWidthX4(i_mba);
- for ( uint32_t r = 0; r < MAX_RANKS_PER_MBA; r++ )
+ for ( uint32_t r = 0; r < MASTER_RANKS_PER_MBA; r++ )
{
CenRank rank ( r );
OpenPOWER on IntegriCloud