summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2017-11-20 09:12:11 -0600
committerZane C. Shelley <zshelle@us.ibm.com>2017-12-11 17:21:20 -0500
commit8c8e212108f6c1d3fa5658fb5448341c3085c12d (patch)
tree074f0e906f6ba662c9c4587c70550e346bd522d2 /src/usr/diag
parent010d6a9a091bfd2eb29e34e381134df4d19b46cc (diff)
downloadtalos-hostboot-8c8e212108f6c1d3fa5658fb5448341c3085c12d.tar.gz
talos-hostboot-8c8e212108f6c1d3fa5658fb5448341c3085c12d.zip
PRD: Capture IUE Counts for FFDC
Change-Id: I75beda1b85e516803d592ad2ff2cec560629ea0a RTC: 174727 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/49918 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/50460 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/diag')
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C30
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H11
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfLogParse_common.C4
-rw-r--r--src/usr/diag/prdf/common/plugins/prdfMemLogParse.C37
-rwxr-xr-xsrc/usr/diag/prdf/common/plugins/prdfMemLogParse.H9
5 files changed, 91 insertions, 0 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C
index cdd276171..ceab917c4 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C
@@ -509,6 +509,33 @@ void captureDramRepairsVpd<TYPE_MBA>(TargetHandle_t i_trgt, CaptureData & io_cd)
//------------------------------------------------------------------------------
template<>
+void captureIueCounts<McaDataBundle*>( TARGETING::TargetHandle_t i_trgt,
+ McaDataBundle * i_db,
+ CaptureData & io_cd )
+{
+ #ifdef __HOSTBOOT_MODULE
+
+ uint8_t sz_capData = i_db->iv_iueTh.size()*2;
+ uint8_t capData[sz_capData] = {};
+ uint8_t idx = 0;
+
+ for ( auto & th_pair : i_db->iv_iueTh )
+ {
+ capData[idx] = th_pair.first;
+ capData[idx+1] = th_pair.second.getCount();
+ idx += 2;
+ }
+
+ // Add data to capture data.
+ BitString bs ( sz_capData*8, (CPU_WORD *) &capData );
+ io_cd.Add( i_trgt, Util::hashString("IUE_COUNTS"), bs );
+
+ #endif
+}
+
+//------------------------------------------------------------------------------
+
+template<>
void addEccData<TYPE_MCA>( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
@@ -525,6 +552,9 @@ void addEccData<TYPE_MCA>( ExtensibleChip * i_chip,
// Add DRAM repairs data from VPD.
captureDramRepairsVpd<TYPE_MCA>( trgt, cd );
+ // Add IUE counts to capture data.
+ captureIueCounts<McaDataBundle*>( trgt, db, cd );
+
// Add CE table to capture data.
db->iv_ceTable.addCapData( cd );
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H
index 029665aa7..423a29de7 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H
@@ -90,6 +90,17 @@ template<TARGETING::TYPE T>
void captureDramRepairsVpd( TARGETING::TargetHandle_t i_trgt,
CaptureData & io_cd );
+/**
+ * @brief Queries the IUE threshold variable for the IUE counts and adds them
+ * to the capture data.
+ * @param i_trgt An MBA or MCA target.
+ * @param i_db The MCA or MBA data bundle.
+ * @param io_cd Capture data struct.
+ */
+template<typename D>
+void captureIueCounts( TARGETING::TargetHandle_t i_trgt, D i_db,
+ CaptureData & io_cd );
+
} // end namespace MemCaptureData
} // end namespace PRDF
diff --git a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
index 6e06be5f3..725b126cf 100644
--- a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
+++ b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C
@@ -449,6 +449,10 @@ bool parseCaptureData( void * i_buffer, uint32_t i_buflen,
{
parseMemCeTable( sigData, sigDataSize, i_parser );
}
+ else if ( Util::hashString("IUE_COUNTS") == sigId )
+ {
+ parseIueCounts( sigData, sigDataSize, i_parser );
+ }
/* TODO: RTC 157888
else if ( Util::hashString("MEM_RCE_TABLE") == sigId )
{
diff --git a/src/usr/diag/prdf/common/plugins/prdfMemLogParse.C b/src/usr/diag/prdf/common/plugins/prdfMemLogParse.C
index a6fe193ac..8f71d5111 100644
--- a/src/usr/diag/prdf/common/plugins/prdfMemLogParse.C
+++ b/src/usr/diag/prdf/common/plugins/prdfMemLogParse.C
@@ -3192,6 +3192,43 @@ bool parseMemCeTable( uint8_t * i_buffer, uint32_t i_buflen,
//------------------------------------------------------------------------------
+bool parseIueCounts( uint8_t * i_buffer, uint32_t i_buflen,
+ ErrlUsrParser & i_parser )
+{
+ bool rc = true;
+ // 2 bytes per entry
+ const uint32_t entries = i_buflen / 2;
+
+ i_parser.PrintNumber( " IUE COUNTS", "%d", entries );
+
+ const char * hh = "Rank ";
+ const char * hd = "Count";
+ i_parser.PrintString( hh, hd );
+ hh = "---- ";
+ hd = "-----";
+ i_parser.PrintString( hh, hd );
+
+ for ( uint32_t i = 0; i < entries; i++ )
+ {
+ uint8_t idx = i*2;
+
+ uint8_t rank = i_buffer[idx];
+ uint8_t count = i_buffer[idx+1];
+
+ char header[HEADER_SIZE] = { '\0' };
+ snprintf( header, DATA_SIZE, "%d ", rank );
+
+ char data[DATA_SIZE] = { '\0' };
+ snprintf( header, DATA_SIZE, "%d", count );
+
+ i_parser.PrintString( header, data );
+ }
+
+ return rc;
+}
+
+//------------------------------------------------------------------------------
+
/* TODO RTC 157888
bool parseMemRceTable( uint8_t * i_buffer, uint32_t i_buflen,
ErrlUsrParser & i_parser )
diff --git a/src/usr/diag/prdf/common/plugins/prdfMemLogParse.H b/src/usr/diag/prdf/common/plugins/prdfMemLogParse.H
index 5b2e52897..fbbe0b650 100755
--- a/src/usr/diag/prdf/common/plugins/prdfMemLogParse.H
+++ b/src/usr/diag/prdf/common/plugins/prdfMemLogParse.H
@@ -88,6 +88,15 @@ bool parseMemCeTable( uint8_t * i_buffer, uint32_t i_buflen,
ErrlUsrParser & i_parser );
/**
+ * @brief Parses IUE threshold counts.
+ * @param i_buffer The data buffer.
+ * @param i_buflen The buffer length.
+ * @param i_parser The error log parser.
+ */
+bool parseIueCounts( uint8_t * i_buffer, uint32_t i_buflen,
+ ErrlUsrParser & i_parser );
+
+/**
* @brief Parses Memory RCE table.
* @param i_buffer The data buffer.
* @param i_buflen The buffer length.
OpenPOWER on IntegriCloud