diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2016-12-02 16:19:05 -0600 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2016-12-09 18:17:37 -0500 |
commit | 7791bc24b3d83bcb14572aaba69d8d32f0c917b1 (patch) | |
tree | 696c99246317b2961a443b02f5a7a523ec5ce631 | |
parent | 074d8aa2d032263ca5d65f187e59b01223bde97b (diff) | |
download | talos-hostboot-7791bc24b3d83bcb14572aaba69d8d32f0c917b1.tar.gz talos-hostboot-7791bc24b3d83bcb14572aaba69d8d32f0c917b1.zip |
PRD: add default capture data support for ECC attentions
Change-Id: I87a8b7afc399633f42fbccf53896a6a10a7d327c
RTC: 165374
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33357
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33685
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
9 files changed, 173 insertions, 42 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C new file mode 100644 index 000000000..033aca09b --- /dev/null +++ b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C @@ -0,0 +1,103 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2016 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#include <prdfMemCaptureData.H> + +// Framework includes +#include <iipCaptureData.h> + +// Platform includes +#include <prdfPlatServices.H> +#include <prdfP9McaDataBundle.H> + +using namespace TARGETING; + +namespace PRDF +{ + +using namespace PlatServices; + +namespace MemCaptureData +{ + +//------------------------------------------------------------------------------ + +template<> +void addEccData<TYPE_MCA>( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + PRDF_ASSERT( TYPE_MCA == i_chip->getType() ); + + CaptureData & cd = io_sc.service_data->GetCaptureData(); + McaDataBundle * db = getMcaDataBundle( i_chip ); + + // Add UE table to capture data. + db->iv_ueTable.addCapData( i_chip, cd ); +} + +template<> +void addEccData<TYPE_MCBIST>( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + PRDF_ASSERT( TYPE_MCBIST == i_chip->getType() ); + + // Add data for each connected MCA. + ExtensibleChipList list = getConnected( i_chip, TYPE_MCA ); + for ( auto & mcaChip : list ) { addEccData<TYPE_MCA>(mcaChip, io_sc); } +} + +template<> +void addEccData<TYPE_MBA>( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & io_sc ) +{ + PRDF_ASSERT( TYPE_MBA == i_chip->getType() ); + +/* TODO: RTC 157888 + CaptureData & cd = io_sc.service_data->GetCaptureData(); + CenMbaDataBundle * db = getMbaDataBundle( i_chip ); + + // Add UE table to capture data. + db->iv_ueTable.addCapData( i_chip, cd ); + + // Add CE table to capture data. + db->iv_ceTable.addCapData( cd ); + + // Add RCE table to capture data. + db->iv_rceTable.addCapData( cd ); + + // Add DRAM repairs data from hardware. + captureDramRepairsData( i_chip->getTrgt(), cd ); + + // Add DRAM repairs data from VPD. + captureDramRepairsVpd( i_chip->getTrgt(), cd ); +*/ +} + +//------------------------------------------------------------------------------ + +} //end namespace MemCaptureData + +} // end namespace PRDF + diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H new file mode 100644 index 000000000..2bd27327d --- /dev/null +++ b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H @@ -0,0 +1,51 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2016 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef __prdfMemCaptureData_H +#define __prdfMemCaptureData_H + +#include <iipServiceDataCollector.h> +#include <prdfExtensibleChip.H> + +namespace PRDF +{ + +namespace MemCaptureData +{ + +/** + * @brief Adds memory ECC FFDC to an SDC. + * @param i_mbaChip MCBIST, MCA, or MBA. + * @param io_sc Step code data struct. + */ +template<TARGETING::TYPE T> +void addEccData( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc ); + +} // end namespace MemCaptureData + +} // end namespace PRDF + +#endif // __prdfMemCaptureData_H + diff --git a/src/usr/diag/prdf/common/plat/mem/prdf_plat_mem.mk b/src/usr/diag/prdf/common/plat/mem/prdf_plat_mem.mk index d689ea63c..d9d332878 100644 --- a/src/usr/diag/prdf/common/plat/mem/prdf_plat_mem.mk +++ b/src/usr/diag/prdf/common/plat/mem/prdf_plat_mem.mk @@ -39,6 +39,7 @@ prd_incpath += ${PRD_SRC_PATH}/common/plat/mem # non-rule plugin related prd_obj += prdfMemAddress.o +prd_obj += prdfMemCaptureData.o prd_obj += prdfMemSymbol.o prd_obj += prdfMemoryMru.o prd_obj += prdfMemUeTable.o diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C index 569639c23..49145327c 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2015 */ +/* Contributors Listed Below - COPYRIGHT 2012,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -104,7 +104,7 @@ int32_t MaintCmdComplete( ExtensibleChip * i_mbaChip, // successful with no errors because the error log will not be // committed. if ( !i_sc.service_data->queryDontCommitErrl() ) - CenMbaCaptureData::addMemEccData( i_mbaChip, i_sc ); + MemCaptureData::addEccData<TYPE_MBA>( i_mbaChip, i_sc ); return PRD_NO_CLEAR_FIR_BITS; // FIR bits are cleared by this plugin diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C index 32ccfe38d..37b3759c9 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C @@ -125,7 +125,7 @@ void addMemChipletFirRegs( ExtensibleChip * i_membChip, CaptureData & io_cd ) //------------------------------------------------------------------------------ -void addMemEccData( TargetHandle_t i_mbaTrgt, errlHndl_t io_errl ) +void addEccData( TargetHandle_t i_mbaTrgt, errlHndl_t io_errl ) { CaptureData cd; @@ -140,31 +140,6 @@ void addMemEccData( TargetHandle_t i_mbaTrgt, errlHndl_t io_errl ) //------------------------------------------------------------------------------ -void addMemEccData( ExtensibleChip * i_mbaChip, STEP_CODE_DATA_STRUCT & io_sc ) -{ - CaptureData & cd = io_sc.service_data->GetCaptureData(); - - CenMbaDataBundle * mbadb = getMbaDataBundle( i_mbaChip ); - TargetHandle_t mbaTarget = i_mbaChip->GetChipHandle(); - - // Add UE table to capture data. - mbadb->iv_ueTable.addCapData( cd ); - - // Add CE table to capture data. - mbadb->iv_ceTable.addCapData( cd ); - - // Add RCE table to capture data. - mbadb->iv_rceTable.addCapData( cd ); - - // Add DRAM repairs data from hardware. - captureDramRepairsData( mbaTarget, cd ); - - // Add DRAM repairs data from VPD. - captureDramRepairsVpd( mbaTarget, cd ); -} - -//------------------------------------------------------------------------------ - void captureDramRepairsData( TARGETING::TargetHandle_t i_mbaTrgt, CaptureData & io_cd ) { diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H index 4fa52c783..daff6e42f 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2015 */ +/* Contributors Listed Below - COPYRIGHT 2013,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -68,14 +68,7 @@ void addMemChipletFirRegs( ExtensibleChip * i_membChip, CaptureData & io_cd ); * @param i_mbaTrgt An MBA target * @param o_errl Error log. */ -void addMemEccData( TARGETING::TargetHandle_t i_mbaTrgt, errlHndl_t io_errl ); - -/** - * @brief Adds Memory ECC FFDC to an SDC. - * @param i_mbaChip An MBA chip. - * @param io_sc Step code data struct. - */ -void addMemEccData( ExtensibleChip * i_mbaChip, STEP_CODE_DATA_STRUCT & io_sc ); +void addEccData( TARGETING::TargetHandle_t i_mbaTrgt, errlHndl_t io_errl ); /** * @brief Queries hardware for all DRAM repairs data (chip/symbol marks, DRAM diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C index cfc7a5cfa..0013e3d2d 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C @@ -457,7 +457,7 @@ int32_t AnalyzeFetchMpe( ExtensibleChip * i_membChip, // Add ECC capture data for FFDC. if ( NULL != mbaChip ) - CenMbaCaptureData::addMemEccData( mbaChip, i_sc ); + MemCaptureData::addEccData<TYPE_MBA>( mbaChip, i_sc ); if ( SUCCESS != l_rc ) { @@ -670,7 +670,7 @@ int32_t AnalyzeFetchNce( ExtensibleChip * i_membChip, // Add ECC capture data for FFDC. if ( NULL != mbaChip ) - CenMbaCaptureData::addMemEccData( mbaChip, i_sc ); + MemCaptureData::addEccData<TYPE_MBA>( mbaChip, i_sc ); if ( SUCCESS != l_rc ) { @@ -753,7 +753,7 @@ int32_t AnalyzeFetchRcePue( ExtensibleChip * i_membChip, // Add ECC capture data for FFDC. if ( NULL != mbaChip ) - CenMbaCaptureData::addMemEccData( mbaChip, i_sc ); + MemCaptureData::addEccData<TYPE_MBA>( mbaChip, i_sc ); if ( SUCCESS != l_rc ) { @@ -850,7 +850,7 @@ int32_t AnalyzeFetchUe( ExtensibleChip * i_membChip, // Add ECC capture data for FFDC. if ( NULL != mbaChip ) - CenMbaCaptureData::addMemEccData( mbaChip, i_sc ); + MemCaptureData::addEccData<TYPE_MBA>( mbaChip, i_sc ); if ( SUCCESS != l_rc ) { diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C index 6823e8254..156c6d99a 100644 --- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C +++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C @@ -26,6 +26,7 @@ #include <prdfMemTdCtlr.H> #include <prdfMemAddress.H> +#include <prdfMemCaptureData.H> #include <prdfP9McbistExtraSig.H> using namespace TARGETING; @@ -110,6 +111,13 @@ uint32_t MemTdCtlr<T>::handleCmdComplete( STEP_CODE_DATA_STRUCT & io_sc ) } while (0); + // Gather capture data even if something failed above. + // NOTE: There is no need to capture the data if the command completed + // successfully with no errors because the error log will not be + // committed. + if ( !io_sc.service_data->queryDontCommitErrl() ) + MemCaptureData::addEccData<T>( iv_chip, io_sc ); + if ( SUCCESS != o_rc ) { PRDF_ERR( PRDF_FUNC "Failed on 0x%08x", iv_chip->getHuid() ); diff --git a/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C b/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C index b5ab1aaa5..81a03f635 100644 --- a/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C +++ b/src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C @@ -81,7 +81,7 @@ void commitErrl( errlHndl_t i_errl, TargetHandle_t i_mba ) if ( NULL != i_errl ) { // Add capture data - CenMbaCaptureData::addMemEccData( i_mba, i_errl ); + CenMbaCaptureData::addEccData( i_mba, i_errl ); // Add traces i_errl->collectTrace( PRDF_COMP_NAME, 512 ); |