diff options
author | Chris Phan <cphan@us.ibm.com> | 2014-02-24 14:32:05 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-03-13 22:33:08 -0500 |
commit | 2bf84ac57e2129aea67a37e6415d4b489ae6fb7f (patch) | |
tree | c6c34a699719df5e5948d057f2eebb24f7b787d0 | |
parent | 570d4a93f4fb34adce50898415a0f4da6e63fa8c (diff) | |
download | talos-hostboot-2bf84ac57e2129aea67a37e6415d4b489ae6fb7f.tar.gz talos-hostboot-2bf84ac57e2129aea67a37e6415d4b489ae6fb7f.zip |
PRD: Add scom register capture from secondary analysis to elog
Change-Id: I2203a0bfe1611030cfca5e2d4ebe2c77d710cb08
RTC: 95887
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9115
Tested-by: Jenkins Server
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com>
Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9618
3 files changed, 65 insertions, 2 deletions
diff --git a/src/usr/diag/prdf/common/framework/config/iipSystem.C b/src/usr/diag/prdf/common/framework/config/iipSystem.C index 9a9379008..68484a81d 100755 --- a/src/usr/diag/prdf/common/framework/config/iipSystem.C +++ b/src/usr/diag/prdf/common/framework/config/iipSystem.C @@ -376,6 +376,11 @@ int32_t System::Analyze(STEP_CODE_DATA_STRUCT & serviceData, l_temp_sdc->AddSignatureList( *( serviceData.service_data->GetErrorSignature() )); + + // merge debug scom data from the two analysis + l_temp_sdc->GetCaptureData().mergeData( + serviceData.service_data->GetCaptureData()); + *serviceData.service_data = *l_temp_sdc; delete l_temp_sdc; diff --git a/src/usr/diag/prdf/common/framework/register/iipCaptureData.h b/src/usr/diag/prdf/common/framework/register/iipCaptureData.h index 5f9316fac..3d5bae23c 100755 --- a/src/usr/diag/prdf/common/framework/register/iipCaptureData.h +++ b/src/usr/diag/prdf/common/framework/register/iipCaptureData.h @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 1996,2013 */ +/* COPYRIGHT International Business Machines Corp. 1996,2014 */ /* */ /* p1 */ /* */ @@ -358,6 +358,45 @@ private: RegType __private_storage; //Constructor allows a value to be passed in to compare against. }; + + // Predicate for deciding whether to delete an + // element of data from a Capture Data list. + class prdfCompareCaptureDataEntry : + public std::unary_function<Data &, bool> + { + public: + prdfCompareCaptureDataEntry( + TARGETING::TargetHandle_t chipHandle, + uint16_t address) : + __chipHandle(chipHandle), + __address(address) {}; + bool operator() (Data &i) + { + return ((i.chipHandle == __chipHandle) && + (i.address == __address)); + }; + + private: + TARGETING::TargetHandle_t __chipHandle; + uint16_t __address; + }; + +public: + + /** + * @brief Merge scom register data from two captures + * @param i_cd secondary capture data to merge + */ + void mergeData(CaptureData & i_cd); + + /** + * @brief Get the Scom data pointer + * @return the Scom data pointer + */ + DataContainerType * getData() { return &data; } + + + }; } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C b/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C index 0431cf87e..67eab58cc 100755 --- a/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C +++ b/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2003,2013 */ +/* COPYRIGHT International Business Machines Corp. 2003,2014 */ /* */ /* p1 */ /* */ @@ -365,6 +365,25 @@ CaptureData & CaptureData::operator=(const uint8_t *i_flatdata) // <-- dg08a +void CaptureData::mergeData(CaptureData & i_cd) +{ + DataContainerType l_data = *(i_cd.getData()); + + // Remove duplicate entries from secondary capture data + for (ConstDataIterator i = data.begin(); i != data.end(); i++) + { + l_data.remove_if( + prdfCompareCaptureDataEntry(i->chipHandle, + i->address) ); + } + + // Add secondary capture data to primary one + data.insert( data.end(), + l_data.begin(), + l_data.end() ); +} + + // copy ctor for Data class CaptureData::Data::Data(const Data & d): chipHandle(d.chipHandle), address(d.address), |