diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2017-06-16 17:26:22 -0500 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2017-06-22 09:59:55 -0400 |
commit | 676eae6662bdde6195aeba1711bb2a8443ef087b (patch) | |
tree | 9cc35f6cdc154db4fa707882f56101e4511fd85a /src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C | |
parent | f1b00fd6b8361e9525d6627f5fc554028990a39f (diff) | |
download | talos-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-x | src/usr/diag/prdf/common/plat/mem/prdfMemSymbol.C | 51 |
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. |