diff options
| author | Caleb Palmer <cnpalmer@us.ibm.com> | 2019-05-22 13:26:03 -0500 |
|---|---|---|
| committer | Zane C. Shelley <zshelle@us.ibm.com> | 2019-06-28 14:08:14 -0500 |
| commit | 6060c1c88907e5ae512089cc2a110e7934a94a2c (patch) | |
| tree | bc1f0b5d7530a6142d20d8224478e2309ca31a9d /src/usr | |
| parent | 56b1b58b93484eae879914de424f6c893deb85eb (diff) | |
| download | talos-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')
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 |

