diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2017-11-20 09:12:11 -0600 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2017-12-11 17:21:20 -0500 |
commit | 8c8e212108f6c1d3fa5658fb5448341c3085c12d (patch) | |
tree | 074f0e906f6ba662c9c4587c70550e346bd522d2 /src/usr/diag | |
parent | 010d6a9a091bfd2eb29e34e381134df4d19b46cc (diff) | |
download | talos-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')
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. |