summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2019-05-22 13:26:03 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2019-06-28 14:08:14 -0500
commit6060c1c88907e5ae512089cc2a110e7934a94a2c (patch)
treebc1f0b5d7530a6142d20d8224478e2309ca31a9d /src/usr
parent56b1b58b93484eae879914de424f6c893deb85eb (diff)
downloadtalos-hostboot-6060c1c88907e5ae512089cc2a110e7934a94a2c.tar.gz
talos-hostboot-6060c1c88907e5ae512089cc2a110e7934a94a2c.zip
PRD: Axone MemAddress Updates
Change-Id: I003f418df8f0cb9410ad89d3dfb858742b480b20 RTC: 208346 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/77747 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Benjamen G. Tyner <ben.tyner@ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/79672 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule40
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C134
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H10
-rw-r--r--src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C3
4 files changed, 81 insertions, 106 deletions
diff --git a/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule b/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule
index ad704f83d..2a36dd1e5 100644
--- a/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule
+++ b/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule
@@ -390,3 +390,43 @@
scomaddr 0x08012415;
capture group default;
};
+
+ ############################################################################
+ # Explorer ECC Address Registers
+ ############################################################################
+
+ register MBNCER
+ {
+ name "Explorer Mainline NCE Address Trap Register";
+ scomaddr 0x0801186A;
+ capture group default;
+ };
+
+ register MBRCER
+ {
+ name "Explorer Mainline RCE Address Trap Register";
+ scomaddr 0x0801186B;
+ capture group default;
+ };
+
+ register MBMPER
+ {
+ name "Explorer Mainline MPE Address Trap Register";
+ scomaddr 0x0801186C;
+ capture group default;
+ };
+
+ register MBUER
+ {
+ name "Explorer Mainline UE Address Trap Register";
+ scomaddr 0x0801186D;
+ capture group default;
+ };
+
+ register MBAUER
+ {
+ name "Explorer Mainline AUE Address Trap Register";
+ scomaddr 0x0801186E;
+ capture group default;
+ };
+
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C b/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C
index b913b6c18..654b39ba0 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C
@@ -46,8 +46,8 @@ using namespace PlatServices;
// Class MemAddr
//------------------------------------------------------------------------------
-template<>
-MemAddr MemAddr::fromReadAddr<TYPE_MCBIST>( uint64_t i_addr )
+template<TARGETING::TYPE T>
+MemAddr MemAddr::fromReadAddr( uint64_t i_addr )
{
uint64_t mrnk = (i_addr >> 59) & 0x7; // 2: 4
uint64_t srnk = (i_addr >> 56) & 0x7; // 5: 7
@@ -58,17 +58,10 @@ MemAddr MemAddr::fromReadAddr<TYPE_MCBIST>( uint64_t i_addr )
return MemAddr( MemRank(mrnk, srnk), bnk, row, col );
}
-template<>
-MemAddr MemAddr::fromReadAddr<TYPE_OCMB_CHIP>( uint64_t i_addr )
-{
- uint64_t mrnk = (i_addr >> 59) & 0x7; // 2: 4
- uint64_t srnk = (i_addr >> 56) & 0x7; // 5: 7
- uint64_t row = (i_addr >> 38) & 0x3ffff; // 8:25
- uint64_t col = (i_addr >> 31) & 0x7f; // 26:32
- uint64_t bnk = (i_addr >> 26) & 0x1f; // 33:37
-
- return MemAddr( MemRank(mrnk, srnk), bnk, row, col );
-}
+template
+MemAddr MemAddr::fromReadAddr<TYPE_MCBIST>( uint64_t i_addr );
+template
+MemAddr MemAddr::fromReadAddr<TYPE_OCMB_CHIP>( uint64_t i_addr );
template<>
@@ -86,8 +79,8 @@ MemAddr MemAddr::fromReadAddr<TYPE_MEMBUF>( uint64_t i_addr )
return MemAddr( MemRank(mrnk, srnk), bnk, row, col );
}
-template<>
-MemAddr MemAddr::fromMaintAddr<TYPE_MCBIST>( uint64_t i_addr )
+template<TARGETING::TYPE T>
+MemAddr MemAddr::fromMaintAddr( uint64_t i_addr )
{
uint64_t rslct = (i_addr >> 59) & 0x3; // 3: 4
uint64_t srnk = (i_addr >> 56) & 0x7; // 5: 7
@@ -101,20 +94,11 @@ MemAddr MemAddr::fromMaintAddr<TYPE_MCBIST>( uint64_t i_addr )
return MemAddr( MemRank(mrnk, srnk), bnk, row, col );
}
-template<>
-MemAddr MemAddr::fromMaintAddr<TYPE_OCMB_CHIP>( uint64_t i_addr )
-{
- uint64_t rslct = (i_addr >> 59) & 0x3; // 3: 4
- uint64_t srnk = (i_addr >> 56) & 0x7; // 5: 7
- uint64_t row = (i_addr >> 38) & 0x3ffff; // 8:25
- uint64_t col = (i_addr >> 31) & 0x7f; // 26:32
- uint64_t bnk = (i_addr >> 26) & 0x1f; // 33:37
- uint64_t dslct = (i_addr >> 23) & 0x1; // 40
-
- uint64_t mrnk = (dslct << 2) | rslct;
+template
+MemAddr MemAddr::fromMaintAddr<TYPE_MCBIST>( uint64_t i_addr );
+template
+MemAddr MemAddr::fromMaintAddr<TYPE_OCMB_CHIP>( uint64_t i_addr );
- return MemAddr( MemRank(mrnk, srnk), bnk, row, col );
-}
template<>
MemAddr MemAddr::fromMaintAddr<TYPE_MBA>( uint64_t i_addr )
@@ -205,31 +189,25 @@ uint32_t getMemReadAddr<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip,
uint32_t o_rc = SUCCESS;
- PRDF_ERR( PRDF_FUNC "Function not supported yet" );
- /* TODO RTC 208346
// Check parameters
PRDF_ASSERT( nullptr != i_chip );
- PRDF_ASSERT( TYPE_MCBIST == i_chip->getType() );
- PRDF_ASSERT( i_pos < MAX_MCA_PER_MCBIST );
+ PRDF_ASSERT( TYPE_OCMB_CHIP == i_chip->getType() );
// Get the register string.
- const char * tmp = "";
+ const char * reg_str = "";
switch ( i_reg )
{
- case MemAddr::READ_NCE_ADDR: tmp = "MBNCER"; break;
- case MemAddr::READ_RCE_ADDR: tmp = "MBRCER"; break;
- case MemAddr::READ_MPE_ADDR: tmp = "MBMPER"; break;
- case MemAddr::READ_UE_ADDR : tmp = "MBUER" ; break;
- case MemAddr::READ_AUE_ADDR: tmp = "MBAUER"; break;
+ case MemAddr::READ_NCE_ADDR: reg_str = "MBNCER"; break;
+ case MemAddr::READ_RCE_ADDR: reg_str = "MBRCER"; break;
+ case MemAddr::READ_MPE_ADDR: reg_str = "MBMPER"; break;
+ case MemAddr::READ_UE_ADDR : reg_str = "MBUER" ; break;
+ case MemAddr::READ_AUE_ADDR: reg_str = "MBAUER"; break;
default: PRDF_ASSERT( false );
}
- char reg_str[64];
- sprintf( reg_str, "MCB%d_%s", i_pos, tmp );
-
// Read the address register
SCAN_COMM_REGISTER_CLASS * reg = i_chip->getRegister( reg_str );
- uint32_t o_rc = reg->Read();
+ o_rc = reg->Read();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Read() failed on %s: i_chip=0x%08x",
@@ -239,9 +217,8 @@ uint32_t getMemReadAddr<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip,
{
// Get the address object.
uint64_t addr = reg->GetBitFieldJustified( 0, 64 );
- o_addr = MemAddr::fromReadAddr<TYPE_MCBIST>( addr );
+ o_addr = MemAddr::fromReadAddr<TYPE_OCMB_CHIP>( addr );
}
- */
return o_rc;
@@ -329,15 +306,14 @@ uint32_t getMemReadAddr<TYPE_MBA>( ExtensibleChip * i_chip,
//------------------------------------------------------------------------------
-template<>
-uint32_t getMemMaintAddr<TYPE_MCBIST>( ExtensibleChip * i_chip,
- MemAddr & o_addr )
+template<TARGETING::TYPE T>
+uint32_t getMemMaintAddr( ExtensibleChip * i_chip, MemAddr & o_addr )
{
- #define PRDF_FUNC "[getMemMaintAddr<TYPE_MCBIST>] "
+ #define PRDF_FUNC "[getMemMaintAddr<T>] "
// Check parameters
PRDF_ASSERT( nullptr != i_chip );
- PRDF_ASSERT( TYPE_MCBIST == i_chip->getType() );
+ PRDF_ASSERT( T == i_chip->getType() );
// Read the address register
SCAN_COMM_REGISTER_CLASS * reg = i_chip->getRegister( "MCBMCAT" );
@@ -351,7 +327,7 @@ uint32_t getMemMaintAddr<TYPE_MCBIST>( ExtensibleChip * i_chip,
{
// Get the address object.
uint64_t addr = reg->GetBitFieldJustified( 0, 64 );
- o_addr = MemAddr::fromMaintAddr<TYPE_MCBIST>( addr );
+ o_addr = MemAddr::fromMaintAddr<T>( addr );
}
return o_rc;
@@ -359,6 +335,13 @@ uint32_t getMemMaintAddr<TYPE_MCBIST>( ExtensibleChip * i_chip,
#undef PRDF_FUNC
}
+template
+uint32_t getMemMaintAddr<TYPE_MCBIST>( ExtensibleChip * i_chip,
+ MemAddr & o_addr );
+template
+uint32_t getMemMaintAddr<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip,
+ MemAddr & o_addr );
+
//------------------------------------------------------------------------------
template<>
@@ -380,57 +363,6 @@ uint32_t getMemMaintAddr<TYPE_MCA>( ExtensibleChip * i_chip, MemAddr & o_addr )
//------------------------------------------------------------------------------
template<>
-uint32_t getMemMaintAddr<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip,
- MemAddr & o_addr )
-{
- #define PRDF_FUNC "[getMemMaintAddr<TYPE_OCMB_CHIP>] "
-
- // Check parameters
- PRDF_ASSERT( nullptr != i_chip );
- PRDF_ASSERT( TYPE_OCMB_CHIP == i_chip->getType() );
-
- // Read the address register
- SCAN_COMM_REGISTER_CLASS * reg = i_chip->getRegister( "MCBMCAT" );
- uint32_t o_rc = reg->Read();
- if ( SUCCESS != o_rc )
- {
- PRDF_ERR( PRDF_FUNC "Read() failed on MCBMCAT: i_chip=0x%08x",
- i_chip->getHuid() );
- }
- else
- {
- // Get the address object.
- uint64_t addr = reg->GetBitFieldJustified( 0, 64 );
- o_addr = MemAddr::fromMaintAddr<TYPE_OCMB_CHIP>( addr );
- }
-
- return o_rc;
-
- #undef PRDF_FUNC
-}
-
-//------------------------------------------------------------------------------
-
-template<>
-uint32_t getMemMaintAddr<TYPE_MEM_PORT>( ExtensibleChip * i_chip,
- MemAddr & o_addr )
-{
- #define PRDF_FUNC "[getMemMaintAddr<TYPE_MEM_PORT>] "
-
- // Check parameters
- PRDF_ASSERT( nullptr != i_chip );
- PRDF_ASSERT( TYPE_MEM_PORT == i_chip->getType() );
-
- ExtensibleChip * ocmbChip = getConnectedParent( i_chip, TYPE_OCMB_CHIP );
-
- return getMemMaintAddr<TYPE_OCMB_CHIP>( ocmbChip, o_addr );
-
- #undef PRDF_FUNC
-}
-
-//------------------------------------------------------------------------------
-
-template<>
uint32_t getMemMaintAddr<TYPE_MBA>( ExtensibleChip * i_chip, MemAddr & o_addr )
{
#define PRDF_FUNC "[getMemMaintAddr<TYPE_MBA>] "
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H b/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H
index 527eab86f..f5120b3b5 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H
@@ -167,7 +167,7 @@ uint32_t getMemReadAddr( ExtensibleChip * i_chip, uint32_t i_pos,
/**
* @brief Reads the specified mainline memory read address from hardware.
- * @param i_chip MCA or MBA.
+ * @param i_chip MCA, MBA, or OCMB.
* @param i_reg The target address register.
* @param o_addr The returned address from hardware.
* @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
@@ -189,7 +189,7 @@ uint32_t getMemReadAddr( ExtensibleChip * i_chip, MemAddr::ReadReg i_reg,
* mode or not. Therefore, users must call getMcbistMaintPort() to get the port
* information.
*
- * @param i_chip An MBA or MCBIST chip.
+ * @param i_chip An MBA, MCBIST, or OCMB chip.
* @param o_addr The returned address from hardware.
* @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
*/
@@ -226,9 +226,9 @@ uint32_t getMemMaintEndAddr( ExtensibleChip * i_chip, MemAddr & o_addr );
* - if there are more than one configured ports behind the MCBIST.
* - if all configured ports have the same geometry.
*
- * @note Only supported for MCBIST/OCMB.
- * @param i_mcbChip An MCBIST/OCMB chip.
- * @param o_portList A list of all MCAs/MEM_PORTs targeted by the command.
+ * @note Only supported for MCBIST.
+ * @param i_mcbChip An MCBIST chip.
+ * @param o_portList A list of all MCAs targeted by the command.
* @return Non-SUCCESS if an internal function fails, SUCCESS otherwise.
*/
template<TARGETING::TYPE T>
diff --git a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
index 0001b9dbd..41602a80e 100644
--- a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
+++ b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
@@ -656,6 +656,9 @@ void getAddresses( TrgtMap_t & io_targMap )
// AUE/IAUE analysis
0x080118D7, // MCBMCAT
+ // AUE/IAUE analysis
+ 0x0801186D, // MBUER
+ 0x0801186E, // MBAUER
};
// EC level handling will be done with a
OpenPOWER on IntegriCloud