summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2016-12-01 17:16:19 -0600
committerZane C. Shelley <zshelle@us.ibm.com>2016-12-09 16:39:54 -0500
commitfef05cc4d87de8f87cce7c85c19cf73917d20a8e (patch)
tree0e0e1d9968bc56bac95c5a6e12bc9bbdec07510d
parent2fc2cd43aef84122eae4071516fb37c87b06631b (diff)
downloadtalos-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>
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfLogParse_common.C4
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfMemLogParse.C92
-rwxr-xr-xsrc/usr/diag/prdf/common/plugins/prdfMemLogParse.H11
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfParserUtils.C4
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfParserUtils.H1
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 );
/**
OpenPOWER on IntegriCloud