summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2014-07-30 11:01:12 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-08-06 21:30:10 -0500
commitbb5adb129e41a6a9aefeb3aeb2b936a74e027637 (patch)
tree6f1061df1262ea5687ef43894ca10891d205e765
parent8c18a90bb91ea6775b92ad743fd6929f22fc91dd (diff)
downloadtalos-hostboot-bb5adb129e41a6a9aefeb3aeb2b936a74e027637.tar.gz
talos-hostboot-bb5adb129e41a6a9aefeb3aeb2b936a74e027637.zip
SW258810: STC810:Tuleta:VIFP1 - Cold IPL attempts for SW258601 lead to SRC BC100
CQ:SW258810 Change-Id: I1d7338e0815b7c1aa11580b3a43b78a835bc30ef Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/12510 Reviewed-by: Thi N. Tran <thi@us.ibm.com> Tested-by: Thi N. Tran <thi@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/12512 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/makefile9
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C5
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml17
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.C354
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.H79
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.xml58
-rw-r--r--src/usr/hwpf/makefile1
7 files changed, 516 insertions, 7 deletions
diff --git a/src/usr/hwpf/hwp/slave_sbe/makefile b/src/usr/hwpf/hwp/slave_sbe/makefile
index c835a16cd..9e8c71cf4 100644
--- a/src/usr/hwpf/hwp/slave_sbe/makefile
+++ b/src/usr/hwpf/hwp/slave_sbe/makefile
@@ -5,7 +5,9 @@
#
# OpenPOWER HostBoot Project
#
-# COPYRIGHT International Business Machines Corp. 2012,2014
+# Contributors Listed Below - COPYRIGHT 2012,2014
+# [+] 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.
@@ -42,7 +44,7 @@ EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_getecid
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_cen_ref_clk_enable
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_spless_sbe_startWA
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/build_winkle_images/proc_mailbox_utils
-
+EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data
## NOTE: add new object files when you add a new HWP
OBJS += slave_sbe.o
@@ -55,6 +57,7 @@ OBJS += proc_cen_ref_clk_enable.o
OBJS += proc_spless_sbe_startWA.o
OBJS += proc_reset_i2cm_bus_fence.o
OBJS += proc_check_master_sbe_seeprom.o
+OBJS += proc_tp_collect_dbg_data.o
## NOTE: add a new directory onto the vpaths when you add a new HWP
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_cen_ref_clk_enable
@@ -62,7 +65,7 @@ VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_revert_sbe_mcs_setup
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_getecid
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_spless_sbe_startWA
-
+VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data
include ${ROOTPATH}/config.mk
diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C
index 8210b9900..d4151fa40 100644
--- a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C
+++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C
@@ -23,13 +23,13 @@
/* */
/* IBM_PROLOG_END_TAG */
// -*- mode: C++; c-file-style: "linux"; -*-
-// $Id: proc_extract_sbe_rc.C,v 1.17 2014/03/24 20:34:44 jmcgill Exp $
+// $Id: proc_extract_sbe_rc.C,v 1.18 2014/06/30 14:32:05 bgeukes Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_sbe_rc.C,v $
//------------------------------------------------------------------------------
// *|
// *! (C) Copyright International Business Machines Corp. 2012
// *! All Rights Reserved -- Property of IBM
-// *! *** ***
+// *! *** IBM Confidential ***
// *|
// *! TITLE : proc_extract_sbe_rc.C
// *! DESCRIPTION : Create a return code for an SBE/SLW error
@@ -54,6 +54,7 @@
#include <proc_extract_sbe_rc.H>
#include <proc_reset_i2cm_bus_fence.H>
#include <p8_scom_addresses.H>
+#include <proc_tp_collect_dbg_data.H>
//------------------------------------------------------------------------------
diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml
index f47de1461..a51a4a61f 100644
--- a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml
+++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml
@@ -5,7 +5,9 @@
<!-- -->
<!-- OpenPOWER HostBoot Project -->
<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2012,2014 -->
+<!-- Contributors Listed Below - COPYRIGHT 2012,2014 -->
+<!-- [+] 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. -->
@@ -20,7 +22,7 @@
<!-- permissions and limitations under the License. -->
<!-- -->
<!-- IBM_PROLOG_END_TAG -->
-<!-- $Id: proc_extract_sbe_rc_errors.xml,v 1.14 2014/03/24 20:34:12 jmcgill Exp $ -->
+<!-- $Id: proc_extract_sbe_rc_errors.xml,v 1.15 2014/06/30 14:33:53 bgeukes Exp $ -->
<!-- Error definitions for proc_extract_sbe_rc procedure -->
<hwpErrors>
<!-- *********************************************************************** -->
@@ -285,6 +287,7 @@
<id>REG_FFDC_PROC_MBOX_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -314,6 +317,7 @@
<id>REG_FFDC_PROC_MBOX_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -337,6 +341,7 @@
<id>REG_FFDC_PROC_MBOX_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -360,6 +365,7 @@
<id>REG_FFDC_PROC_MBOX_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -416,6 +422,7 @@
<id>REG_FFDC_PROC_MBOX_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -443,6 +450,7 @@
<id>REG_FFDC_PROC_SLW_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -469,6 +477,7 @@
<id>REG_FFDC_PROC_SLW_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -498,6 +507,7 @@
<id>REG_FFDC_PROC_MBOX_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -524,6 +534,7 @@
<id>REG_FFDC_PROC_SLW_REGISTERS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -647,6 +658,7 @@
<id>REG_FFDC_PROC_FIRST_OTPROM_INSTRUCTIONS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
@@ -730,6 +742,7 @@
<id>REG_FFDC_PROC_FIRST_OTPROM_INSTRUCTIONS</id>
<target>CHIP_IN_ERROR</target>
</collectRegisterFfdc>
+ <collectFfdc>proc_tp_collect_dbg_data,CHIP_IN_ERROR</collectFfdc>
<callout>
<target>CHIP_IN_ERROR</target>
<priority>HIGH</priority>
diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.C b/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.C
new file mode 100644
index 000000000..dcaf271f9
--- /dev/null
+++ b/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.C
@@ -0,0 +1,354 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2014 */
+/* [+] 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 */
+// $Id: proc_tp_collect_dbg_data.C,v 1.6 2014/08/04 16:00:49 thi Exp $
+// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_tp_collect_dbg_data.C,v $
+//------------------------------------------------------------------------------
+// *! (C) Copyright International Business Machines Corp. 2012
+// *! All Rights Reserved -- Property of IBM
+// *! *** IBM Confidential ***
+//------------------------------------------------------------------------------
+// *! TITLE : proc_tp_collect_dbg_data.C
+// *! DESCRIPTION : Procedure to collect TP debug data
+// *!
+// *! OWNER NAME : Benedikt Geukes Email: bgeukes@de.ibm.com
+// *!
+// *! ADDITIONAL COMMENTS :
+// *!
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// Includes
+//------------------------------------------------------------------------------
+#include <proc_tp_collect_dbg_data.H>
+#include <utility>
+//------------------------------------------------------------------------------
+// Constant definitions
+//------------------------------------------------------------------------------
+
+const uint32_t PROC_TP_COLLECT_DBG_DATA_FSI_SHIFT_CTRL = 0x00000043;
+
+const uint32_t PERV_VITL_CHAIN_RING_ADDRESS = 0x0103800C;
+
+// Murano DD1.x
+const uint32_t PERV_VITL_CHAIN_LENGTH_MDD1 = 2310;
+const uint32_t TP_VITL_SPY_LENGTH_MDD1 = 576;
+const std::pair<uint32_t,uint32_t> TP_VITL_SPY_OFFSETS_MDD1[] =
+{
+ std::make_pair(1197, 1260),
+ std::make_pair(1342, 1392),
+ std::make_pair(1401, 1403),
+ std::make_pair(1641, 1641),
+ std::make_pair(1644, 1665),
+ std::make_pair(1667, 1679),
+ std::make_pair(1688, 1943),
+ std::make_pair(1963, 2005),
+ std::make_pair(1503, 1520),
+ std::make_pair( 849, 889),
+ std::make_pair( 744, 807)
+};
+
+// Murano DD2.x
+const uint32_t PERV_VITL_CHAIN_LENGTH_MDD2 = 2288;
+const uint32_t TP_VITL_SPY_LENGTH_MDD2 = 590;
+const std::pair<uint32_t,uint32_t> TP_VITL_SPY_OFFSETS_MDD2[] =
+{
+ std::make_pair(1176, 1239),
+ std::make_pair(1321, 1344),
+ std::make_pair(1365, 1371),
+ std::make_pair(1430, 1456),
+ std::make_pair(1465, 1467),
+ std::make_pair(1479, 1479),
+ std::make_pair(1482, 1503),
+ std::make_pair(1505, 1524),
+ std::make_pair(1533, 1788),
+ std::make_pair(1808, 1850),
+ std::make_pair(1893, 1910),
+ std::make_pair( 849, 889),
+ std::make_pair( 744, 807)
+};
+
+// Venice / Naples DD1.x
+const uint32_t PERV_VITL_CHAIN_LENGTH_VN = 2773;
+const uint32_t TP_VITL_SPY_LENGTH_VN = 590;
+const std::pair<uint32_t,uint32_t> TP_VITL_SPY_OFFSETS_VN[] =
+{
+ std::make_pair( 209, 272),
+ std::make_pair( 354, 377),
+ std::make_pair( 398, 404),
+ std::make_pair( 463, 489),
+ std::make_pair( 498, 500),
+ std::make_pair( 512, 512),
+ std::make_pair( 515, 536),
+ std::make_pair( 538, 557),
+ std::make_pair( 566, 821),
+ std::make_pair( 841, 883),
+ std::make_pair( 926, 943),
+ std::make_pair(2608, 2648),
+ std::make_pair(2503, 2566)
+};
+
+
+//------------------------------------------------------------------------------
+// Function definitions
+//------------------------------------------------------------------------------
+
+extern "C" {
+
+// HWP entry point, comments in header
+fapi::ReturnCode proc_tp_collect_dbg_data(const fapi::Target & i_target,
+ fapi::ReturnCode & o_rc)
+{
+ fapi::ReturnCode rc;
+ uint32_t rc_ecmd = 0;
+
+ uint8_t chip_type;
+ uint8_t dd_level;
+ ecmdDataBufferBase ring_data;
+ ecmdDataBufferBase spy_data;
+ std::vector<std::pair<uint32_t, uint32_t> > spy_offsets;
+ ecmdDataBufferBase fsi_data(32);
+ ecmdDataBufferBase scom_data(64);
+
+ // mark HWP entry
+ FAPI_INF("proc_tp_collect_dbg_data: Start");
+
+ do
+ {
+ // Setting Prevent AutoStart Bit to avoid scan chain corruption
+ rc = fapiGetCfamRegister(i_target, CFAM_FSI_SBE_VITAL_0x0000281C, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiGetCfamRegister error (CFAM_FSI_SBE_VITAL_0x0000281c)");
+ break;
+ }
+
+ rc_ecmd |= fsi_data.setBit(1);
+ rc_ecmd |= fsi_data.setBit(3);
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error 0x%x setting up FSI SBE Vital Register",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ rc = fapiPutCfamRegister(i_target, CFAM_FSI_SBE_VITAL_0x0000281C, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiPutCfamRegister error (CFAM_FSI_SBE_VITAL_0x0000281C)");
+ break;
+ }
+
+
+ // Setting FSI Shift Speed
+ rc = fapiGetCfamRegister(i_target, CFAM_FSI_SHIFT_CTRL_0x00000C10, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiGetCfamRegister error (CFAM_FSI_SHIFT_CTRL_0x00000C10)");
+ break;
+ }
+
+ rc_ecmd |= fsi_data.setWord(0,PROC_TP_COLLECT_DBG_DATA_FSI_SHIFT_CTRL);
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error 0x%x setting up FSI SHIFT CTRL register data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ rc = fapiPutCfamRegister(i_target, CFAM_FSI_SHIFT_CTRL_0x00000C10, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiPutCfamRegister error (CFAM_FSI_SHIFT_CTRL_0x00000C10)");
+ break;
+ }
+
+ // Changing Fences for Vital scan
+ rc = fapiGetCfamRegister(i_target, CFAM_FSI_GP3_0x00002812, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiGetCfamRegister error (CFAM_FSI_GP3_0x00002812)");
+ break;
+ }
+
+ rc_ecmd |= fsi_data.clearBit(23);
+ rc_ecmd |= fsi_data.setBit(24);
+ rc_ecmd |= fsi_data.setBit(25);
+ rc_ecmd |= fsi_data.setBit(26);
+ rc_ecmd |= fsi_data.clearBit(27);
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error 0x%x setting up FSI GP3 data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ rc = fapiPutCfamRegister(i_target, CFAM_FSI_GP3_0x00002812, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiPutCfamRegister error (CFAM_FSI_GP3_0x00002812)");
+ break;
+ }
+
+ rc = fapiGetCfamRegister(i_target, CFAM_FSI_GP3_MIRROR_0x0000281B, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiGetCfamRegister error (CFAM_FSI_GP3_MIRROR_0x0000281B)");
+ break;
+ }
+
+ rc_ecmd |= fsi_data.setBit(16);
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error 0x%x setting up FSI GP3 MIRROR data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ rc = fapiPutCfamRegister(i_target, CFAM_FSI_GP3_MIRROR_0x0000281B, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiPutCfamRegister error (CFAM_FSI_GP3_MIRROR_0x0000281B)");
+ break;
+ }
+
+ rc = fapiGetCfamRegister(i_target, CFAM_FSI_GP3_MIRROR_0x0000281B, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiGetCfamRegister error (CFAM_FSI_GP3_MIRROR_0x0000281B)");
+ break;
+ }
+
+ rc_ecmd |= fsi_data.setBit(26);
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error 0x%x setting up FSI GP3 MIRROR data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ rc = fapiPutCfamRegister(i_target, CFAM_FSI_GP3_MIRROR_0x0000281B, fsi_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: fapiPutCfamRegister error (CFAM_FSI_GP3_MIRROR_0x0000281B)");
+ break;
+ }
+
+ // obtain chip type/EC
+ rc = FAPI_ATTR_GET_PRIVILEGED(ATTR_NAME, &i_target, chip_type);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error from FAPI_ATTR_GET_PRIVILEGED (ATTR_NAME)");
+ break;
+ }
+
+ rc = FAPI_ATTR_GET_PRIVILEGED(ATTR_EC, &i_target, dd_level);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error from FAPI_ATTR_GET_PRIVILEGED (ATTR_EC)");
+ break;
+ }
+ // configure ring/spy data buffers & spy extraction offsets based on CT/EC
+ if ((chip_type == fapi::ENUM_ATTR_NAME_MURANO) && (dd_level < 0x20))
+ {
+ rc_ecmd |= ring_data.setBitLength(PERV_VITL_CHAIN_LENGTH_MDD1);
+ rc_ecmd |= spy_data.setBitLength(TP_VITL_SPY_LENGTH_MDD1);
+ spy_offsets.assign(TP_VITL_SPY_OFFSETS_MDD1, TP_VITL_SPY_OFFSETS_MDD1 + (sizeof(TP_VITL_SPY_OFFSETS_MDD1) / sizeof(TP_VITL_SPY_OFFSETS_MDD1[0])));
+ }
+ else if ((chip_type == fapi::ENUM_ATTR_NAME_MURANO) && (dd_level >= 0x20))
+ {
+ rc_ecmd |= ring_data.setBitLength(PERV_VITL_CHAIN_LENGTH_MDD2);
+ rc_ecmd |= spy_data.setBitLength(TP_VITL_SPY_LENGTH_MDD2);
+ spy_offsets.assign(TP_VITL_SPY_OFFSETS_MDD2, TP_VITL_SPY_OFFSETS_MDD2 + (sizeof(TP_VITL_SPY_OFFSETS_MDD2) / sizeof(TP_VITL_SPY_OFFSETS_MDD2[0])));
+ }
+ else if ((chip_type == fapi::ENUM_ATTR_NAME_VENICE) ||
+ (chip_type == fapi::ENUM_ATTR_NAME_NAPLES))
+ {
+ rc_ecmd |= ring_data.setBitLength(PERV_VITL_CHAIN_LENGTH_VN);
+ rc_ecmd |= spy_data.setBitLength(TP_VITL_SPY_LENGTH_VN);
+ spy_offsets.assign(TP_VITL_SPY_OFFSETS_VN, TP_VITL_SPY_OFFSETS_VN + (sizeof(TP_VITL_SPY_OFFSETS_VN) / sizeof(TP_VITL_SPY_OFFSETS_VN[0])));
+ }
+ else
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Unsupported CT/EC combination!");
+ const uint8_t CT = chip_type;
+ const uint8_t EC = dd_level;
+ FAPI_SET_HWP_ERROR(rc, RC_TP_COLLECT_DBG_DATA_UNSUPPORTED_CHIP);
+ break;
+ }
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error 0x%x sizing FFDC data buffers",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ // collect data from ring
+ rc = fapiGetRing(i_target, PERV_VITL_CHAIN_RING_ADDRESS, ring_data);
+ if (rc)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error from fapiGetRing (PERV_VITL_CHAIN)");
+ break;
+ }
+
+ // extract spy data from ring image
+ uint32_t spy_offset_curr = 0;
+ for (std::vector<std::pair<uint32_t, uint32_t> >::const_iterator offset = spy_offsets.begin();
+ offset != spy_offsets.end();
+ offset++)
+ {
+ uint32_t chunk_size = (offset->second - offset->first + 1);
+ rc_ecmd |= spy_data.insert(ring_data,
+ spy_offset_curr,
+ chunk_size,
+ offset->first);
+ spy_offset_curr += chunk_size;
+ }
+
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_tp_collect_dbg_data: Error 0x%x forming FFDC spy data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ ecmdDataBufferBase & VITL_DATA = spy_data;
+ FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_TP_COLLECT_DBG_DATA);
+
+ } while(0);
+
+ // mark HWP exit
+ FAPI_INF("proc_tp_collect_dbg_data: End");
+ return rc;
+}
+
+
+} // extern "C"
diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.H b/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.H
new file mode 100644
index 000000000..04ef54421
--- /dev/null
+++ b/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.H
@@ -0,0 +1,79 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2014 */
+/* [+] 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 */
+// $Id: proc_tp_collect_dbg_data.H,v 1.3 2014/03/10 16:09:15 jmcgill Exp $
+// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_tp_collect_dbg_data.H,v $
+///------------------------------------------------------------------------------
+// *! (C) Copyright International Business Machines Corp. 2012
+// *! All Rights Reserved -- Property of IBM
+// *! *** IBM Confidential ***
+//------------------------------------------------------------------------------
+// *! TITLE : proc_tp_collect_dbg_data.C
+// *! DESCRIPTION : Header file for procedure to collect TP debug data
+// *!
+// *! OWNER NAME : Benedikt Geukes Email: bgeukes@de.ibm.com
+// *!
+// *! ADDITIONAL COMMENTS :
+// *!
+//------------------------------------------------------------------------------
+
+#ifndef PROC_TP_COLLECT_DBG_DATA_H_
+#define PROC_TP_COLLECT_DBG_DATA_H_
+
+//------------------------------------------------------------------------------
+// Includes
+//------------------------------------------------------------------------------
+#include <fapi.H>
+#include <p8_scom_addresses.H>
+#include <common_scom_addresses.H>
+
+//------------------------------------------------------------------------------
+// Structure definitions
+//------------------------------------------------------------------------------
+
+// function pointer typedef definition for HWP call support
+typedef fapi::ReturnCode
+(*proc_tp_collect_dbg_data_FP_t)(const fapi::Target &, fapi::ReturnCode &);
+
+extern "C" {
+
+//------------------------------------------------------------------------------
+// Function prototypes
+//------------------------------------------------------------------------------
+
+/**
+ * @brief HWP to collect TP debug data for fails during various IPL steps
+ *
+ *
+ * @param[in] i_target Reference to processor chip target
+ * @param[out] o_rc Reference to return code (for appending of FFDC)
+ *
+ * @return ReturnCode
+ */
+fapi::ReturnCode proc_tp_collect_dbg_data(const fapi::Target & i_target, fapi::ReturnCode & o_rc);
+
+
+} // extern "C"
+
+#endif // PROC_TP_COLLECT_DBG_DATA_H_
diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.xml b/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.xml
new file mode 100644
index 000000000..7f7565438
--- /dev/null
+++ b/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.xml
@@ -0,0 +1,58 @@
+<!-- IBM_PROLOG_BEGIN_TAG -->
+<!-- This is an automatically generated prolog. -->
+<!-- -->
+<!-- $Source: src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.xml $ -->
+<!-- -->
+<!-- OpenPOWER HostBoot Project -->
+<!-- -->
+<!-- Contributors Listed Below - COPYRIGHT 2014 -->
+<!-- [+] 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 -->
+<!-- $Id: proc_tp_collect_dbg_data.xml,v 1.4 2014/08/03 21:12:47 jmcgill Exp $ -->
+<!-- Error definitions for proc_tp_collect_dbg_data procedure -->
+<hwpErrors>
+ <!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_TP_COLLECT_DBG_DATA</rc>
+ <description>
+ Procedure: proc_tp_collect_dbg_data
+ </description>
+ <ffdc>VITL_DATA</ffdc>
+ <collectTrace>FSI</collectTrace>
+ <collectTrace>SCOM</collectTrace>
+ <collectTrace>SCAN</collectTrace>
+ <collectTrace>MBOX</collectTrace>
+ </hwpError>
+ <!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_TP_COLLECT_DBG_DATA_UNSUPPORTED_CHIP</rc>
+ <description>
+ Procedure: proc_tp_collect_dbg_data
+ </description>
+ <ffdc>CT</ffdc>
+ <ffdc>EC</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ <collectTrace>FSI</collectTrace>
+ <collectTrace>SCOM</collectTrace>
+ <collectTrace>SCAN</collectTrace>
+ <collectTrace>MBOX</collectTrace>
+ </hwpError>
+ <!-- *********************************************************************** -->
+</hwpErrors>
diff --git a/src/usr/hwpf/makefile b/src/usr/hwpf/makefile
index ae437a1b6..7466ffba6 100644
--- a/src/usr/hwpf/makefile
+++ b/src/usr/hwpf/makefile
@@ -209,6 +209,7 @@ HWP_ATTR_XML_FILES += hwp/dram_training/mem_pll_setup/memb_pll_ring_attributes.x
HWP_ATTR_XML_FILES += hwp/proc_chip_ec_feature.xml
HWP_ATTR_XML_FILES += hwp/proc_abus_dmi_xbus_scominit_attributes.xml
HWP_ATTR_XML_FILES += hwp/runtime_attributes/memory_occ_attributes.xml
+HWP_ERROR_XML_FILES += hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.xml
#------------------------------------------------------------------------------
# PLL Ring Data files
OpenPOWER on IntegriCloud