diff options
| author | Zane Shelley <zshelle@us.ibm.com> | 2016-12-01 17:16:19 -0600 |
|---|---|---|
| committer | Zane C. Shelley <zshelle@us.ibm.com> | 2016-12-09 16:39:54 -0500 |
| commit | fef05cc4d87de8f87cce7c85c19cf73917d20a8e (patch) | |
| tree | 0e0e1d9968bc56bac95c5a6e12bc9bbdec07510d | |
| parent | 2fc2cd43aef84122eae4071516fb37c87b06631b (diff) | |
| download | talos-hostboot-fef05cc4d87de8f87cce7c85c19cf73917d20a8e.tar.gz talos-hostboot-fef05cc4d87de8f87cce7c85c19cf73917d20a8e.zip | |
PRD: Updates to memory error log parser
Change-Id: I01b99195666d8f276180fa1d24d34e03d2e4450b
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33282
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33648
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
5 files changed, 66 insertions, 46 deletions
diff --git a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C index 2f036b36c..ef22338f1 100644 --- a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C +++ b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C @@ -671,8 +671,6 @@ bool parsePfaData( void * i_buffer, uint32_t i_buflen, snprintf( data, 50, "0x%08x ", pfa.mruList[i].callout ); tmpStr = gardTypeToStr( pfa.mruList[i].gardState ); - MemoryMruData::ExtendedData - extMemMru( pfa.mruList[i].callout ); switch ( pfa.mruList[i].type ) { @@ -680,7 +678,7 @@ bool parsePfaData( void * i_buffer, uint32_t i_buflen, strcat( data, "(MemoryMru) " ); strcat( data, tmpStr ); i_parser.PrintString( header, data ); - parseMemMruData( i_parser, extMemMru ); + parseMemMruData( i_parser, pfa.mruList[i].callout ); break; case PRDcalloutData::TYPE_SYMFRU: diff --git a/src/usr/diag/prdf/common/plugins/prdfMemLogParse.C b/src/usr/diag/prdf/common/plugins/prdfMemLogParse.C index 7f80c32cc..f70a55d9c 100644 --- a/src/usr/diag/prdf/common/plugins/prdfMemLogParse.C +++ b/src/usr/diag/prdf/common/plugins/prdfMemLogParse.C @@ -28,6 +28,7 @@ */ #include <prdfMemLogParse.H> + #include <errlusrparser.H> #include <cstring> #include <UtilHash.H> @@ -36,7 +37,7 @@ #include <prdfDramRepairUsrData.H> #include <prdfParserEnums.H> #include <prdfParserUtils.H> -#include <targeting/common/target.H> +#include <attributeenums.H> // For TARGETING::TYPE enum namespace PRDF { @@ -2771,6 +2772,7 @@ uint8_t dqSiteIdx2DramSiteIdx( uint8_t i_dqSiteIdx, bool i_isX4Dram ) // Helper functions //------------------------------------------------------------------------------ +/* TODO RTC 136126 // Displays symbol value. If symbol is not valid, will display '--' in output. void getDramRepairSymbolStr( uint8_t i_value, char * o_str, uint32_t i_strSize ) { @@ -2785,7 +2787,6 @@ void getDramRepairSymbolStr( uint8_t i_value, char * o_str, uint32_t i_strSize ) } // Gets the string representation for a single bad DQ bitmap entry. -/* TODO RTC 136126 void getBadDqBitmapEntry( uint8_t * i_buffer, char * o_str ) { UtilMem membuf( i_buffer, DQ_BITMAP::ENTRY_SIZE ); @@ -2808,6 +2809,7 @@ void getBadDqBitmapEntry( uint8_t * i_buffer, char * o_str ) } } */ + //------------------------------------------------------------------------------ // Function definitions //------------------------------------------------------------------------------ @@ -2820,35 +2822,22 @@ void initMemMruStrings( MemoryMruData::MemMruMeld i_mm, bool & o_addDramSite, memset( o_header, '\0', HEADER_SIZE ); memset( o_data, '\0', DATA_SIZE ); - // Get the slave rank info. - char tmp[HEADER_SIZE] = { '\0' }; - snprintf( tmp, HEADER_SIZE, "S%d", i_mm.s.srank ); - - uint8_t nodePos = i_mm.s.nodePos; + // Get the position info (default MCA). + const char * compStr = "mca"; + uint8_t nodePos = i_mm.s.nodePos; + uint8_t chipPos = i_mm.s.procPos; + uint8_t compPos = i_mm.s.chnlPos; - // if we are using MBA - if ( !i_mm.s.isMca ) + if ( !i_mm.s.isMca ) // MBA { - // Get the position info. - uint8_t chnlPos = (i_mm.s.procPos << 3) | i_mm.s.chnlPos; - uint8_t mbaPos = i_mm.s.mbaPos; - - // Build the header string. - snprintf( o_header, HEADER_SIZE, " mba(n%dp%dc%d)%s Rank:M%d%s", - nodePos, chnlPos, mbaPos, (chnlPos < 10) ? " " : "", - i_mm.s.mrank, tmp ); + compStr = "mba"; + chipPos = (i_mm.s.procPos << 3) | i_mm.s.chnlPos; + compPos = i_mm.s.mbaPos; } - else - { - // Get the position info. - uint8_t procPos = i_mm.s.procPos; - uint8_t mcaPos = i_mm.s.chnlPos; - // Build the header string. - snprintf( o_header, HEADER_SIZE, " mca(n%dp%dc%d)%s Rank:M%d%s", - nodePos, procPos, mcaPos, (procPos < 10) ? " " : "", - i_mm.s.mrank, tmp ); - } + // Build the header string. + snprintf( o_header, HEADER_SIZE, " %s(n%dp%dc%d) Rank:m%ds%d", + compStr, nodePos, chipPos, compPos, i_mm.s.mrank, i_mm.s.srank ); // Build the generic data string (no DRAM site info). switch ( i_mm.s.symbol ) @@ -2894,31 +2883,22 @@ void addDramSiteString( const MemoryMruData::ExtendedData & i_extMemMru, // Get the DQ indexes for site location tables, adjusting for spare DRAM, if // needed. - uint8_t dqIdx; - if (mm.s.isMca) - { - dqIdx = transDramSpare( symbol2Dq<TYPE_MCA>(symbol), - mm.s.dramSpared ); - } - else - { - dqIdx = transDramSpare( symbol2Dq<TYPE_MBA>(symbol), - mm.s.dramSpared ); - } + uint8_t dqIdx = mm.s.isMca ? symbol2Dq<TYPE_MCA>(symbol) + : symbol2Dq<TYPE_MBA>(symbol); + dqIdx = transDramSpare( dqIdx, mm.s.dramSpared ); // Add the DRAM site info to the current data. - // MCAs always uses IS DIMMs - if ( i_extMemMru.isBufDimm && !mm.s.isMca ) // Buffered DIMMs + if ( i_extMemMru.isBufDimm ) // Centaur DIMMs only { // Get the DRAM site location information. const char * cardName; const char ** dramMap; const char ** dqMap; - uint8_t ps = symbol2PortSlct( symbol ); + uint8_t ps = symbol2PortSlct<TYPE_MBA>( symbol ); if ( SUCCESS == getDramSiteInfo(i_extMemMru.cardType, mm.s.mbaPos, ps, - mm.s.mrank, cardName, dqMap, dramMap) ) + mm.s.mrank, cardName, dqMap, dramMap) ) { // Add raw card name. strcat( io_data, "RC:" ); @@ -2978,6 +2958,21 @@ void addDramSiteString( const MemoryMruData::ExtendedData & i_extMemMru, //------------------------------------------------------------------------------ +void parseMemMruData( ErrlUsrParser & i_parser, uint32_t i_memMru ) +{ + MemoryMruData::MemMruMeld mm; mm.u = i_memMru; + + bool addDramSite; + char header[HEADER_SIZE]; char data[DATA_SIZE]; + initMemMruStrings( mm, addDramSite, header, data ); + + // No DRAM site location data available. + + i_parser.PrintString( header, data ); +} + +//------------------------------------------------------------------------------ + void parseMemMruData( ErrlUsrParser & i_parser, const MemoryMruData::ExtendedData & i_extMemMru ) { @@ -2996,6 +2991,7 @@ void parseMemMruData( ErrlUsrParser & i_parser, //------------------------------------------------------------------------------ +/* TODO RTC 136126 bool parseMemUeTable( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { @@ -3069,8 +3065,10 @@ bool parseMemUeTable( uint8_t * i_buffer, uint32_t i_buflen, return rc; } +*/ //------------------------------------------------------------------------------ + /* TODO RTC 136126 bool parseMemCeTable( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) @@ -3192,6 +3190,7 @@ bool parseMemCeTable( uint8_t * i_buffer, uint32_t i_buflen, //------------------------------------------------------------------------------ +/* TODO RTC 136126 bool parseMemRceTable( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { @@ -3235,9 +3234,11 @@ bool parseMemRceTable( uint8_t * i_buffer, uint32_t i_buflen, return rc; } +*/ //------------------------------------------------------------------------------ +/* TODO RTC 136126 bool parseDramRepairsData( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { @@ -3303,8 +3304,10 @@ bool parseDramRepairsData( uint8_t * i_buffer, uint32_t i_buflen, return rc; } +*/ //------------------------------------------------------------------------------ + /* TODO RTC 136126 bool parseDramRepairsVpd( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) @@ -3328,7 +3331,9 @@ bool parseDramRepairsVpd( uint8_t * i_buffer, uint32_t i_buflen, return rc; } */ + //------------------------------------------------------------------------------ + /* TODO RTC 136126 bool parseBadDqBitmap( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) @@ -3353,8 +3358,10 @@ bool parseBadDqBitmap( uint8_t * i_buffer, uint32_t i_buflen, return rc; } */ + //------------------------------------------------------------------------------ +/* TODO RTC 136126 bool parseTdCtlrStateData( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser, uint32_t i_sigId ) { @@ -3535,6 +3542,7 @@ bool parseTdCtlrStateData( uint8_t * i_buffer, uint32_t i_buflen, return o_rc; } +*/ //------------------------------------------------------------------------------ diff --git a/src/usr/diag/prdf/common/plugins/prdfMemLogParse.H b/src/usr/diag/prdf/common/plugins/prdfMemLogParse.H index ac3551306..938731171 100755 --- a/src/usr/diag/prdf/common/plugins/prdfMemLogParse.H +++ b/src/usr/diag/prdf/common/plugins/prdfMemLogParse.H @@ -45,6 +45,17 @@ namespace FSP { /** + * @brief Parses MemoryMru data. + * @note Since this will be used in several different sections, this function + * simply parses the data. It does not print header information (i.e. + * "MemoryMru") or print out the uint32_t value of the MemoryMru. It is + * up to the caller to add that data. + * @param i_parser The error log parser. + * @param i_memMru A MemoryMru. + */ +void parseMemMruData( ErrlUsrParser & i_parser, uint32_t i_memMru ); + +/** * @brief Parses extended MemoryMru data. * @note Since this will be used in several different sections, this function * simply parses the data. It does not print header information (i.e. diff --git a/src/usr/diag/prdf/common/plugins/prdfParserUtils.C b/src/usr/diag/prdf/common/plugins/prdfParserUtils.C index e181fce3f..2e912bfa5 100644 --- a/src/usr/diag/prdf/common/plugins/prdfParserUtils.C +++ b/src/usr/diag/prdf/common/plugins/prdfParserUtils.C @@ -88,7 +88,8 @@ uint8_t symbol2Dq<TARGETING::TYPE_MCA>( uint8_t i_symbol ) //------------------------------------------------------------------------------ -uint8_t symbol2PortSlct( uint8_t i_symbol ) +template<> +uint8_t symbol2PortSlct<TARGETING::TYPE_MBA>( uint8_t i_symbol ) { uint8_t portSlct = MBA_DIMMS_PER_RANK; @@ -102,6 +103,7 @@ uint8_t symbol2PortSlct( uint8_t i_symbol ) } //------------------------------------------------------------------------------ + /* TODO: RTC 136126 uint8_t dram2Symbol( uint8_t i_dram, bool i_isX4Dram ) { diff --git a/src/usr/diag/prdf/common/plugins/prdfParserUtils.H b/src/usr/diag/prdf/common/plugins/prdfParserUtils.H index 56c54e1fe..a3f6df344 100644 --- a/src/usr/diag/prdf/common/plugins/prdfParserUtils.H +++ b/src/usr/diag/prdf/common/plugins/prdfParserUtils.H @@ -68,6 +68,7 @@ uint8_t symbol2Dq( uint8_t i_symbol ); * @param i_symbol The Symbol * @return The Port Select */ +template<TARGETING::TYPE T> uint8_t symbol2PortSlct( uint8_t i_symbol ); /** |

