summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2017-06-16 17:26:22 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2017-06-22 09:59:55 -0400
commit676eae6662bdde6195aeba1711bb2a8443ef087b (patch)
tree9cc35f6cdc154db4fa707882f56101e4511fd85a /src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C
parentf1b00fd6b8361e9525d6627f5fc554028990a39f (diff)
downloadtalos-hostboot-676eae6662bdde6195aeba1711bb2a8443ef087b.tar.gz
talos-hostboot-676eae6662bdde6195aeba1711bb2a8443ef087b.zip
PRD: Fetch NCE/TCE redesign
NCEs and TCEs use the same error vector register, which stores the latest NCE/TCE. So it is possible that PRD could be handling one attention and the vector could be overwritten by a subsequent attention. Change-Id: Ia6955bc1f0a258e1450c426cec8c466a56b43432 CQ: SW392312 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42013 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42210 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C51
1 files changed, 18 insertions, 33 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C b/src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C
index 3f5c51851..48118828b 100755
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C
@@ -64,10 +64,10 @@ MemSymbol::MemSymbol( TARGETING::TargetHandle_t i_trgt, const MemRank & i_rank,
iv_trgt(i_trgt), iv_rank(i_rank), iv_symbol(i_symbol),
iv_pins(i_pins), iv_isDramSpared(false), iv_isEccSpared(false)
{
- PRDF_ASSERT( NULL != i_trgt );
+ PRDF_ASSERT( nullptr != i_trgt );
PRDF_ASSERT( TYPE_MBA == getTargetType(i_trgt) ||
TYPE_MCA == getTargetType(i_trgt) );
- PRDF_ASSERT( i_symbol < SYMBOLS_PER_RANK );
+ // Allowing an invalid symbol. Use isValid() to check validity.
PRDF_ASSERT( i_pins <= CEN_SYMBOL::BOTH_SYMBOL_DQS );
}
@@ -87,8 +87,6 @@ MemSymbol MemSymbol::fromGalois( TargetHandle_t i_trgt, const MemRank & i_rank,
}
}
- PRDF_ASSERT( symbol < SYMBOLS_PER_RANK );
-
// Get pins from mask.
uint8_t pins = NO_SYMBOL_DQS;
if ( TYPE_MBA == getTargetType(i_trgt) )
@@ -160,7 +158,7 @@ uint8_t MemSymbol::getDramPins() const
template<>
uint32_t getMemReadSymbol<TYPE_MCA>( ExtensibleChip * i_chip,
const MemRank & i_rank,
- MemSymbol & o_symbol, bool i_isTce )
+ MemSymbol & o_sym1, MemSymbol & o_sym2 )
{
#define PRDF_FUNC "[getMemReadSymbol<TYPE_MBA>] "
@@ -170,6 +168,8 @@ uint32_t getMemReadSymbol<TYPE_MCA>( ExtensibleChip * i_chip,
uint32_t o_rc = SUCCESS;
+ o_sym1 = o_sym2 = MemSymbol(); // both initially invalid
+
do
{
// Get the NCE/TCE galois and mask from hardware.
@@ -190,22 +190,15 @@ uint32_t getMemReadSymbol<TYPE_MCA>( ExtensibleChip * i_chip,
break;
}
- uint32_t bitPos = (mcaRelMcs * 32) + (i_isTce ? 16 : 0);
-
- uint8_t galois = reg->GetBitFieldJustified( bitPos, 8 );
- uint8_t mask = reg->GetBitFieldJustified( bitPos + 8, 8 );
+ uint32_t bitPos = mcaRelMcs * 32;
+ uint8_t g1 = reg->GetBitFieldJustified( bitPos, 8 );
+ uint8_t m1 = reg->GetBitFieldJustified( bitPos + 8, 8 );
+ uint8_t g2 = reg->GetBitFieldJustified( bitPos + 16, 8 );
+ uint8_t m2 = reg->GetBitFieldJustified( bitPos + 24, 8 );
// Get the NCE/TCE symbol.
- o_symbol = MemSymbol::fromGalois( i_chip->getTrgt(), i_rank, galois,
- mask );
- if ( !o_symbol.isValid() )
- {
- PRDF_ERR( PRDF_FUNC "fromGalois(0x%08x,m%ds%d,0x%02x,0x%02x) "
- "failed", i_chip->getHuid(), i_rank.getMaster(),
- i_rank.getSlave(), galois, mask );
- o_rc = FAIL;
- break;
- }
+ o_sym1 = MemSymbol::fromGalois( i_chip->getTrgt(), i_rank, g1, m1 );
+ o_sym2 = MemSymbol::fromGalois( i_chip->getTrgt(), i_rank, g2, m2 );
// TODO: RTC 157888 Check if the symbol is on a spare DRAM.
@@ -221,17 +214,18 @@ uint32_t getMemReadSymbol<TYPE_MCA>( ExtensibleChip * i_chip,
template<>
uint32_t getMemReadSymbol<TYPE_MBA>( ExtensibleChip * i_chip,
const MemRank & i_rank,
- MemSymbol & o_symbol, bool i_isTce )
+ MemSymbol & o_sym1, MemSymbol & o_sym2 )
{
#define PRDF_FUNC "[getMemReadSymbol<TYPE_MBA>] "
// Check parameters
PRDF_ASSERT( nullptr != i_chip );
PRDF_ASSERT( TYPE_MBA == i_chip->getType() );
- PRDF_ASSERT( !i_isTce ); // TCEs do not exist on Centaur
uint32_t o_rc = SUCCESS;
+ o_sym1 = o_sym2 = MemSymbol(); // both initially invalid
+
do
{
// Get the NCE galois and mask from hardware.
@@ -249,20 +243,11 @@ uint32_t getMemReadSymbol<TYPE_MBA>( ExtensibleChip * i_chip,
break;
}
- uint8_t galois = reg->GetBitFieldJustified( 40, 8 );
- uint8_t mask = reg->GetBitFieldJustified( 32, 8 );
+ uint8_t g1 = reg->GetBitFieldJustified( 40, 8 );
+ uint8_t m1 = reg->GetBitFieldJustified( 32, 8 );
// Get the NCE symbol.
- o_symbol = MemSymbol::fromGalois( i_chip->getTrgt(), i_rank, galois,
- mask );
- if ( !o_symbol.isValid() )
- {
- PRDF_ERR( PRDF_FUNC "fromGalois(0x%08x,m%ds%d,0x%02x,0x%02x) "
- "failed", i_chip->getHuid(), i_rank.getMaster(),
- i_rank.getSlave(), galois, mask );
- o_rc = FAIL;
- break;
- }
+ o_sym1 = MemSymbol::fromGalois( i_chip->getTrgt(), i_rank, g1, m1 );
// TODO: RTC 157888 Check if the symbol is on a spare DRAM.
OpenPOWER on IntegriCloud