summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2016-12-02 16:19:05 -0600
committerZane C. Shelley <zshelle@us.ibm.com>2016-12-09 18:17:37 -0500
commit7791bc24b3d83bcb14572aaba69d8d32f0c917b1 (patch)
tree696c99246317b2961a443b02f5a7a523ec5ce631 /src/usr/diag
parent074d8aa2d032263ca5d65f187e59b01223bde97b (diff)
downloadtalos-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>
Diffstat (limited to 'src/usr/diag')
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C103
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.H51
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdf_plat_mem.mk1
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C4
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C27
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H11
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C8
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C8
-rw-r--r--src/usr/diag/prdf/plat/pegasus/prdfDramRepairs.C2
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 );
OpenPOWER on IntegriCloud