summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatt Ploetz <maploetz@us.ibm.com>2013-07-29 11:27:07 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-09-12 14:17:20 -0500
commit7ac1d851fdfe0b247fea4c1e3943811d08221f0a (patch)
tree6cea60f5904cd2a88c84b3e1e11725258a02f1b2 /src
parent24f7b770b42f2889e8970e75f1ecd8bc1bdb77d5 (diff)
downloadtalos-hostboot-7ac1d851fdfe0b247fea4c1e3943811d08221f0a.tar.gz
talos-hostboot-7ac1d851fdfe0b247fea4c1e3943811d08221f0a.zip
Integrate HWP io_pre_trainadv and io_post_trainadv
Change-Id: Iea6f4fee71070d8dce1f5af74006f9f12005c7c3 RTC: 71685 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5624 Tested-by: Jenkins Server Reviewed-by: Brian H. Horton <brianh@linux.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/hwpf/istepreasoncodes.H12
-rw-r--r--src/usr/hwpf/hwp/bus_training/io_post_trainadv.C115
-rw-r--r--src/usr/hwpf/hwp/bus_training/io_post_trainadv.H53
-rw-r--r--src/usr/hwpf/hwp/bus_training/io_pre_trainadv.C115
-rw-r--r--src/usr/hwpf/hwp/bus_training/io_pre_trainadv.H54
-rw-r--r--src/usr/hwpf/hwp/bus_training/makefile2
-rw-r--r--src/usr/hwpf/hwp/dmi_training/dmi_training.C219
-rw-r--r--src/usr/hwpf/hwp/dmi_training/makefile4
-rw-r--r--src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C256
-rw-r--r--src/usr/hwpf/hwp/edi_ei_initialization/makefile5
10 files changed, 765 insertions, 70 deletions
diff --git a/src/include/usr/hwpf/istepreasoncodes.H b/src/include/usr/hwpf/istepreasoncodes.H
index e84739b45..03de0fb9f 100644
--- a/src/include/usr/hwpf/istepreasoncodes.H
+++ b/src/include/usr/hwpf/istepreasoncodes.H
@@ -120,6 +120,10 @@ enum istepModuleId
ISTEP_INITSVC_MOD_ID = 0x48,
ISTEP_MSS_DIMM_POWER_TEST = 0x49,
ISTEP_PROC_CEN_REF_CLK_ENABLE = 0x4A,
+ ISTEP_DMI_PRE_TRAINADV = 0x4B,
+ ISTEP_DMI_POST_TRAINADV = 0x4C,
+ ISTEP_FABRIC_PRE_TRAINADV = 0x4D,
+ ISTEP_FABRIC_POST_TRAINADV = 0x4E,
};
/**
@@ -183,6 +187,14 @@ enum istepReasonCode
ISTEP_DECONFIGURE_L4_FAILED = ISTEP_COMP_ID | 0x32,
ISTEP_REPAIR_LOADER_RETRY_OCCURED = ISTEP_COMP_ID | 0x33,
ISTEP_PROC_POST_WINKLE_FAILED = ISTEP_COMP_ID | 0x34,
+ ISTEP_DMI_PRE_TRAINADV_MCS_FAILED = ISTEP_COMP_ID | 0x35,
+ ISTEP_DMI_PRE_TRAINADV_MEMBUF_FAILED = ISTEP_COMP_ID | 0x36,
+ ISTEP_DMI_POST_TRAINADV_MCS_FAILED = ISTEP_COMP_ID | 0x37,
+ ISTEP_DMI_POST_TRAINADV_MEMBUF_FAILED = ISTEP_COMP_ID | 0x38,
+ ISTEP_FABRIC_PRE_TRAINADV_ENDPOINT1_FAILED = ISTEP_COMP_ID | 0x39,
+ ISTEP_FABRIC_PRE_TRAINADV_ENDPOINT2_FAILED = ISTEP_COMP_ID | 0x3A,
+ ISTEP_FABRIC_POST_TRAINADV_ENDPOINT1_FAILED = ISTEP_COMP_ID | 0x3B,
+ ISTEP_FABRIC_POST_TRAINADV_ENDPOINT2_FAILED = ISTEP_COMP_ID | 0x3C,
}; // end ISTEP
}
diff --git a/src/usr/hwpf/hwp/bus_training/io_post_trainadv.C b/src/usr/hwpf/hwp/bus_training/io_post_trainadv.C
new file mode 100644
index 000000000..7a6314cef
--- /dev/null
+++ b/src/usr/hwpf/hwp/bus_training/io_post_trainadv.C
@@ -0,0 +1,115 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/bus_training/io_post_trainadv.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+// $Id: io_post_trainadv.C,v 1.1 2013/05/10 20:06:00 thomsen Exp $
+//*!***************************************************************************
+// *! (C) Copyright International Business Machines Corp. 1997, 1998
+// *! All Rights Reserved -- Property of IBM
+// *! *** IBM Confidential ***
+//*!***************************************************************************
+// *! FILENAME : io_post_trainadv.C
+// *! TITLE :
+// *! DESCRIPTION : The purpose of this code is to allow for future post-training activity such as Host-based characterization
+// *! CONTEXT :
+// *!
+// *! OWNER NAME : Varghese, Varkey Email: varkey.kv@in.ibm.com
+// *! BACKUP NAME : Swaminathan, Janani Email: jaswamin@in.ibm.com
+// *!
+//*!***************************************************************************
+// CHANGE HISTORY:
+//-----------------------------------------------------------------------------
+// Version:|Author: | Date: | Comment:
+// --------|--------|--------|-------------------------------------------------
+// 1.1 |thomsen |05/10/13| Initial empty shell
+//-----------------------------------------------------------------------------
+
+#include <fapi.H>
+#include "io_post_trainadv.H"
+#include "gcr_funcs.H"
+
+extern "C" {
+
+
+using namespace fapi;
+//================================================================================================================================
+// These functions work on a pair of targets. One is the master side of the bus interface, the other the slave side. For eg; in EDI(DMI2)PU is the master and Centaur is the slave
+// In EI4 both sides have pu targets
+ReturnCode io_post_trainadv(const Target& target){
+ ReturnCode rc;
+ //uint32_t master_group=0;
+ FAPI_DBG("Running IO POST TRAINING ADVANCED PROCEDURE");
+ // ____ __ _______
+ // / __ \/ |/ / _/
+ // / / / / /|_/ // /
+ // / /_/ / / / // /
+ // /_____/_/ /_/___/
+ if( (target.getType() == fapi::TARGET_TYPE_MCS_CHIPLET )){
+ FAPI_DBG("This is a Processor DMI bus post training invocation using base DMI scom address");
+ //master_interface=CP_IOMC0_P0; // base scom for MC bus
+ //master_group=3; // Design requires us to do this as per scom map and layout
+ // USER CODE HERE: ex. rc=run_offset_cal(target,master_interface,master_group);if (rc) {return(rc);};
+ }
+ else if( (target.getType() == fapi::TARGET_TYPE_MEMBUF_CHIP)){
+ FAPI_DBG("This is a Centaur DMI bus post training invocation using base DMI scom address");
+ //master_interface=CEN_DMI; // base scom for CEN
+ //master_group=0;
+ // USER CODE HERE: ex. rc=run_offset_cal(target,master_interface,master_group);if (rc) {return(rc);};
+ }
+ //
+ // | |/ // /
+ // | // __ \/ / / / ___/
+ // / |/ /_/ / /_/ (__ )
+ // /_/|_/_.___/\__,_/____/
+ else if( (target.getType() == fapi::TARGET_TYPE_XBUS_ENDPOINT )){
+ FAPI_DBG("This is a X Bus post training invocation");
+ //master_interface=CP_FABRIC_X0; // base scom for X bus
+ //master_group=0; // Design requires us to do this as per scom map and layout
+ if(rc.ok()){
+ // No Z cal in EI4/X bus design
+ for(int i=0;i<5;++i){
+ //master_group=i;
+ // USER CODE HERE: ex. rc=run_offset_cal(target,master_interface,master_group);if (rc) {return(rc);};
+ }
+ }
+ }
+ // ___ __
+ // / | / /_ __ _______
+ // / /| | / __ \/ / / / ___/
+ // / ___ |/ /_/ / /_/ (__ )
+ // /_/ |_/_.___/\__,_/____/
+ else if( (target.getType() == fapi::TARGET_TYPE_ABUS_ENDPOINT )){
+ FAPI_DBG("This is an A Bus post training invocation");
+ //master_interface=CP_FABRIC_A0; // base scom for A bus , assume translation to A1 by PLAT
+ //master_group=0; // Design requires us to do this as per scom map and layout
+ // EDI-A bus needs both impedance cal and offset cal
+ // USER CODE HERE: ex. rc=run_offset_cal(target,master_interface,master_group);if (rc) {return(rc);}
+ }
+ else{
+ FAPI_ERR("Invalid io_post_trainadv HWP invocation . Target doesnt belong to DMI/X/A instances");
+ // ADD THIS WHEN IMPLEMENTING FUNCTION: FAPI_SET_HWP_ERROR(rc, IO_post_TRAINADV_INVALID_INVOCATION_RC);
+ }
+ return rc;
+}
+//================================================================================================================================
+
+
+} //end extern C
diff --git a/src/usr/hwpf/hwp/bus_training/io_post_trainadv.H b/src/usr/hwpf/hwp/bus_training/io_post_trainadv.H
new file mode 100644
index 000000000..18e07a896
--- /dev/null
+++ b/src/usr/hwpf/hwp/bus_training/io_post_trainadv.H
@@ -0,0 +1,53 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/bus_training/io_post_trainadv.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+// $Id: io_post_trainadv.H,v 1.1 2013/05/10 20:05:59 thomsen Exp $
+#ifndef IO_POST_TRAINADV_H_
+#define IO_POST_TRAINADV_H_
+
+#include <fapi.H>
+
+using namespace fapi;
+
+/**
+ * io_post_trainadv HWP func pointer typedef
+ *
+ */
+typedef fapi::ReturnCode (*io_post_trainadv_FP_t)(const fapi::Target &target);
+
+extern "C"
+{
+
+/**
+ * io_post_trainadv HWP
+ *
+ * master_target is any IO target P8 MCS,XBUS,Abus or centaur
+ *
+ *
+ *
+ *
+ */
+
+fapi::ReturnCode io_post_trainadv(const fapi::Target &target);
+
+} // extern "C"
+#endif // io_post_trainadv_H_
diff --git a/src/usr/hwpf/hwp/bus_training/io_pre_trainadv.C b/src/usr/hwpf/hwp/bus_training/io_pre_trainadv.C
new file mode 100644
index 000000000..e0911e90a
--- /dev/null
+++ b/src/usr/hwpf/hwp/bus_training/io_pre_trainadv.C
@@ -0,0 +1,115 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/bus_training/io_pre_trainadv.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+// $Id: io_pre_trainadv.C,v 1.1 2013/05/10 20:05:59 thomsen Exp $
+// *!***************************************************************************
+// *! (C) Copyright International Business Machines Corp. 1997, 1998
+// *! All Rights Reserved -- Property of IBM
+// *! *** IBM Confidential ***
+// *!***************************************************************************
+// *! FILENAME : io_pre_trainadv.C
+// *! TITLE :
+// *! DESCRIPTION : The purpose of this code is to allow for future pre-training activity such as Host-based characterization
+// *! CONTEXT :
+// *!
+// *! OWNER NAME : Varghese, Varkey Email: varkey.kv@in.ibm.com
+// *! BACKUP NAME : Swaminathan, Janani Email: jaswamin@in.ibm.com
+// *!
+// *!***************************************************************************
+// CHANGE HISTORY:
+//------------------------------------------------------------------------------
+// Version:|Author: | Date: | Comment:
+// --------|--------|--------|--------------------------------------------------
+// 1.1 |thomsen |05/10/13| Initial empty shell
+//------------------------------------------------------------------------------
+
+#include <fapi.H>
+#include "io_pre_trainadv.H"
+#include "gcr_funcs.H"
+
+extern "C" {
+
+
+using namespace fapi;
+//================================================================================================================================
+// These functions work on a pair of targets. One is the master side of the bus interface, the other the slave side. For eg; in EDI(DMI2)PU is the master and Centaur is the slave
+// In EI4 both sides have pu targets
+ReturnCode io_pre_trainadv(const Target& target){
+ ReturnCode rc;
+ //uint32_t master_group=0;
+ FAPI_DBG("Running IO PRE TRAINING ADVANCED PROCEDURE");
+ // ____ __ _______
+ // / __ \/ |/ / _/
+ // / / / / /|_/ // /
+ // / /_/ / / / // /
+ // /_____/_/ /_/___/
+ if( (target.getType() == fapi::TARGET_TYPE_MCS_CHIPLET )){
+ FAPI_DBG("This is a Processor DMI bus pre training invocation using base DMI scom address");
+ //master_interface=CP_IOMC0_P0; // base scom for MC bus
+ //master_group=3; // Design requires us to do this as per scom map and layout
+ // USER CODE HERE: ex. rc=run_offset_cal(target,master_interface,master_group);if (rc) {return(rc);};
+ }
+ else if( (target.getType() == fapi::TARGET_TYPE_MEMBUF_CHIP)){
+ FAPI_DBG("This is a Centaur DMI bus pre training invocation using base DMI scom address");
+ //master_interface=CEN_DMI; // base scom for CEN
+ //master_group=0;
+ // USER CODE HERE: ex. rc=run_offset_cal(target,master_interface,master_group);if (rc) {return(rc);};
+ }
+ // _ __ __
+ // | |/ // /_ __ _______
+ // | // __ \/ / / / ___/
+ // / |/ /_/ / /_/ (__ )
+ // /_/|_/_.___/\__,_/____/
+ else if( (target.getType() == fapi::TARGET_TYPE_XBUS_ENDPOINT )){
+ FAPI_DBG("This is a X Bus pre training invocation");
+ //master_interface=CP_FABRIC_X0; // base scom for X bus
+ //master_group=0; // Design requires us to do this as per scom map and layout
+ if(rc.ok()){
+ // No Z cal in EI4/X bus design
+ for(int i=0;i<5;++i){
+ //master_group=i;
+ // USER CODE HERE: ex. rc=run_offset_cal(target,master_interface,master_group);if (rc) {return(rc);};
+ }
+ }
+ }
+ // ___ __
+ // / | / /_ __ _______
+ // / /| | / __ \/ / / / ___/
+ // / ___ |/ /_/ / /_/ (__ )
+ // /_/ |_/_.___/\__,_/____/
+ else if( (target.getType() == fapi::TARGET_TYPE_ABUS_ENDPOINT )){
+ FAPI_DBG("This is an A Bus pre training invocation");
+ //master_interface=CP_FABRIC_A0; // base scom for A bus , assume translation to A1 by PLAT
+ //master_group=0; // Design requires us to do this as per scom map and layout
+ // EDI-A bus needs both impedance cal and offset cal
+ // USER CODE HERE: ex. rc=run_offset_cal(target,master_interface,master_group);if (rc) {return(rc);};
+ }
+ else{
+ FAPI_ERR("Invalid io_pre_trainadv HWP invocation . Target doesnt belong to DMI/X/A instances");
+ // ADD THIS WHEN IMPLEMENTING FUNCTION: FAPI_SET_HWP_ERROR(rc, IO_PRE_TRAINADV_INVALID_INVOCATION_RC);
+ }
+ return rc;
+}
+//================================================================================================================================
+
+
+} //end extern C
diff --git a/src/usr/hwpf/hwp/bus_training/io_pre_trainadv.H b/src/usr/hwpf/hwp/bus_training/io_pre_trainadv.H
new file mode 100644
index 000000000..3f49fc2e6
--- /dev/null
+++ b/src/usr/hwpf/hwp/bus_training/io_pre_trainadv.H
@@ -0,0 +1,54 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/bus_training/io_pre_trainadv.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+// $Id: io_pre_trainadv.H,v 1.1 2013/05/10 20:05:59 thomsen Exp $
+#ifndef IO_PRE_TRAINADV_H_
+#define IO_PRE_TRAINADV_H_
+
+#include <fapi.H>
+
+using namespace fapi;
+
+/**
+ * io_pre_trainadv HWP func pointer typedef
+ *
+ */
+typedef fapi::ReturnCode (*io_pre_trainadv_FP_t)(const fapi::Target &target);
+
+extern "C"
+{
+
+/**
+ * io_pre_trainadv HWP
+ *
+ * master_target is any IO target P8 MCS,XBUS,Abus or centaur
+ *
+ *
+ *
+ *
+ */
+
+fapi::ReturnCode io_pre_trainadv(const fapi::Target &target);
+
+} // extern "C"
+#endif // io_pre_trainadv_H_
+
diff --git a/src/usr/hwpf/hwp/bus_training/makefile b/src/usr/hwpf/hwp/bus_training/makefile
index da43662fc..20fa0afbb 100644
--- a/src/usr/hwpf/hwp/bus_training/makefile
+++ b/src/usr/hwpf/hwp/bus_training/makefile
@@ -44,6 +44,8 @@ OBJS = gcr_funcs.o io_funcs.o io_run_training.o pbusLinkSvc.o proc_fab_smp.o \
erepairAccessorHwpFuncs.o \
erepairGetFailedLanesHwp.o \
erepairSetFailedLanesHwp.o \
+ io_post_trainadv.o \
+ io_pre_trainadv.o
## NOTE: add a new directory onto the vpaths when you add a new HWP
diff --git a/src/usr/hwpf/hwp/dmi_training/dmi_training.C b/src/usr/hwpf/hwp/dmi_training/dmi_training.C
index d430e5b5c..0a8843aaa 100644
--- a/src/usr/hwpf/hwp/dmi_training/dmi_training.C
+++ b/src/usr/hwpf/hwp/dmi_training/dmi_training.C
@@ -67,6 +67,8 @@
#include "dmi_io_run_training.H"
#include "proc_dmi_scominit.H"
#include "cen_dmi_scominit.H"
+#include "io_post_trainadv.H"
+#include "io_pre_trainadv.H"
#include "proc_cen_set_inband_addr.H"
#include "mss_get_cen_ecid.H"
#include "io_restore_erepair.H"
@@ -89,7 +91,6 @@ using namespace EDI_EI_INITIALIZATION;
//*****************************************************************
void get_dmi_io_targets(TargetPairs_t& o_dmi_io_targets);
-
//
// Wrapper function to call mss_getecid
//
@@ -886,14 +887,114 @@ void* call_dmi_io_dccal( void *io_pArgs )
//
void* call_dmi_pre_trainadv( void *io_pArgs )
{
- errlHndl_t l_err = NULL;
+ errlHndl_t l_errl = NULL;
+ ISTEP_ERROR::IStepError l_StepError;
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_pre_trainadv entry" );
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_pre_trainadv entry" );
+ TargetPairs_t l_dmi_pre_trainadv_targets;
+ get_dmi_io_targets(l_dmi_pre_trainadv_targets);
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_pre_trainadv exit" );
+ TARGETING::TargetHandleList l_cpuTargetList;
+ getAllChips(l_cpuTargetList, TYPE_PROC);
- return l_err;
+
+ // Note:
+ // Due to lab tester board environment, HW procedure writer (Varkey) has
+ // requested to send in one target of a time (we used to send in
+ // the MCS and MEMBUF pair in one call). Even though they don't have to be
+ // in order, we should keep the pair concept here in case we need to send
+ // in a pair in the future again.
+ for (TargetPairs_t::const_iterator
+ l_itr = l_dmi_pre_trainadv_targets.begin();
+ l_itr != l_dmi_pre_trainadv_targets.end();
+ ++l_itr)
+ {
+ const fapi::Target l_fapi_mcs_target( TARGET_TYPE_MCS_CHIPLET,
+ (const_cast<TARGETING::Target*>(l_itr->first)));
+
+ const fapi::Target l_fapi_membuf_target( TARGET_TYPE_MEMBUF_CHIP,
+ (const_cast<TARGETING::Target*>(l_itr->second)));
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== Call dmi_pre_trainadv HWP( mcs 0x%.8X, mem 0x%.8X) : ",
+ TARGETING::get_huid(l_itr->first),
+ TARGETING::get_huid(l_itr->second));
+
+ // Call on the MCS
+ FAPI_INVOKE_HWP(l_errl, io_pre_trainadv, l_fapi_mcs_target);
+
+ if (l_errl)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X : dmi_pre_trainadv HWP Target MCS 0x%.8X",
+ l_errl->reasonCode(), TARGETING::get_huid(l_itr->first));
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DMI_PRE_TRAINADV_MCS_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_DMI_PRE_TRAINADV
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to dmi_pre_trainadv on MCS has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_DMI_PRE_TRAINADV_MCS_FAILED,
+ ISTEP_DMI_PRE_TRAINADV,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ // We want to continue the training despite the error, so
+ // no break
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : call_dmi_pre_trainadv HWP - Target 0x%.8X",
+ TARGETING::get_huid(l_itr->first));
+ }
+
+ // Call on the MEMBUF
+ FAPI_INVOKE_HWP(l_errl, io_pre_trainadv, l_fapi_membuf_target);
+ if (l_errl)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X : dmi_pre_trainadv HWP Target Membuf 0x%.8X",
+ l_errl->reasonCode(), TARGETING::get_huid(l_itr->second));
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DMI_PRE_TRAINADV_MEMBUF_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_DMI_PRE_TRAINADV
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to dmi_pre_trainadv on MEMBUF has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_DMI_PRE_TRAINADV_MEMBUF_FAILED,
+ ISTEP_DMI_PRE_TRAINADV,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ // We want to continue the training despite the error, so
+ // no break
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : call_dmi_pre_trainadv HWP - Target 0x%.8X",
+ TARGETING::get_huid(l_itr->second));
+ }
+
+ }
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_dmi_pre_trainadv exit" );
+
+ // end task, returning any errorlogs to IStepDisp
+ return l_StepError.getErrorHandle();
}
@@ -975,14 +1076,114 @@ void* call_dmi_io_run_training( void *io_pArgs )
//
void* call_dmi_post_trainadv( void *io_pArgs )
{
- errlHndl_t l_err = NULL;
+ errlHndl_t l_errl = NULL;
+ ISTEP_ERROR::IStepError l_StepError;
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_post_trainadv entry" );
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_post_trainadv entry" );
+ TargetPairs_t l_dmi_post_trainadv_targets;
+ get_dmi_io_targets(l_dmi_post_trainadv_targets);
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_dmi_post_trainadv exit" );
+ TARGETING::TargetHandleList l_cpuTargetList;
+ getAllChips(l_cpuTargetList, TYPE_PROC);
- return l_err;
+
+ // Note:
+ // Due to lab tester board environment, HW procedure writer (Varkey) has
+ // requested to send in one target of a time (we used to send in
+ // the MCS and MEMBUF pair in one call). Even though they don't have to be
+ // in order, we should keep the pair concept here in case we need to send
+ // in a pair in the future again.
+ for (TargetPairs_t::const_iterator
+ l_itr = l_dmi_post_trainadv_targets.begin();
+ l_itr != l_dmi_post_trainadv_targets.end();
+ ++l_itr)
+ {
+ const fapi::Target l_fapi_mcs_target( TARGET_TYPE_MCS_CHIPLET,
+ (const_cast<TARGETING::Target*>(l_itr->first)));
+
+ const fapi::Target l_fapi_membuf_target( TARGET_TYPE_MEMBUF_CHIP,
+ (const_cast<TARGETING::Target*>(l_itr->second)));
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== Call dmi_post_trainadv HWP( mcs 0x%.8X, mem 0x%.8X) : ",
+ TARGETING::get_huid(l_itr->first),
+ TARGETING::get_huid(l_itr->second));
+
+ // Call on the MCS
+ FAPI_INVOKE_HWP(l_errl, io_post_trainadv, l_fapi_mcs_target);
+
+ if (l_errl)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X : dmi_post_trainadv HWP Target MCS 0x%.8X",
+ l_errl->reasonCode(), TARGETING::get_huid(l_itr->first));
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DMI_POST_TRAINADV_MCS_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_DMI_POST_TRAINADV
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to dmi_post_trainadv on MCS has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_DMI_POST_TRAINADV_MCS_FAILED,
+ ISTEP_DMI_POST_TRAINADV,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ // We want to continue the training despite the error, so
+ // no break
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : call_dmi_post_trainadv HWP - Target 0x%.8X",
+ TARGETING::get_huid(l_itr->first));
+ }
+
+ // Call on the MEMBUF
+ FAPI_INVOKE_HWP(l_errl, io_post_trainadv, l_fapi_membuf_target);
+ if (l_errl)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X : dmi_post_trainadv HWP Target Membuf 0x%.8X",
+ l_errl->reasonCode(), TARGETING::get_huid(l_itr->second));
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_DMI_POST_TRAINADV_MEMBUF_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_DMI_POST_TRAINADV
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to dmi_post_trainadv on MEMBUF has failed
+ */
+ l_StepError.addErrorDetails(ISTEP_DMI_POST_TRAINADV_MEMBUF_FAILED,
+ ISTEP_DMI_POST_TRAINADV,
+ l_errl);
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ // We want to continue the training despite the error, so
+ // no break
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : call_dmi_post_trainadv HWP - Target 0x%.8X",
+ TARGETING::get_huid(l_itr->second));
+ }
+
+ }
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_dmi_post_trainadv exit" );
+
+ // end task, returning any errorlogs to IStepDisp
+ return l_StepError.getErrorHandle();
}
diff --git a/src/usr/hwpf/hwp/dmi_training/makefile b/src/usr/hwpf/hwp/dmi_training/makefile
index e455a9f6f..5fd2e0d4c 100644
--- a/src/usr/hwpf/hwp/dmi_training/makefile
+++ b/src/usr/hwpf/hwp/dmi_training/makefile
@@ -42,6 +42,8 @@ EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/dmi_io_run_training
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/proc_cen_set_inband_addr
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/mss_getecid
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/dmi_io_dccal
+EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training/io_pre_trainadv
+EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training/io_post_trainadv
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/proc_dmi_scominit
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/cen_dmi_scominit
@@ -60,6 +62,8 @@ VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/dmi_io_run_training
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/proc_cen_set_inband_addr
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/mss_getecid
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/dmi_io_dccal
+VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training/io_pre_trainadv
+VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training/io_post_trainadv
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/proc_dmi_scominit
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/dmi_training/cen_dmi_scominit
diff --git a/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C b/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
index 046cf1c4c..78bb31828 100644
--- a/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
+++ b/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
@@ -66,9 +66,9 @@
#include "io_restore_erepair.H"
// #include "fabric_io_dccal/fabric_io_dccal.H"
// #include "fabric_erepair/fabric_erepair.H"
-// #include "fabric_pre_trainadv/fabric_pre_trainadv.H"
#include "fabric_io_run_training/fabric_io_run_training.H"
-// #include "fabric_post_trainadv/fabric_post_trainadv.H"
+#include "io_pre_trainadv.H"
+#include "io_post_trainadv.H"
// #include "host_startprd_pbus/host_startprd_pbus.H"
// #include "host_attnlisten_proc/host_attnlisten_proc.H"
#include "proc_fab_iovalid/proc_fab_iovalid.H"
@@ -451,45 +451,114 @@ void* call_fabric_io_dccal( void *io_pArgs )
void* call_fabric_pre_trainadv( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ IStepError l_StepError;
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_fabric_pre_trainadv entry" );
-#if 0
- // @@@@@ CUSTOM BLOCK: @@@@@
- // figure out what targets we need
- // customize any other inputs
- // set up loops to go through all targets (if parallel, spin off a task)
-
- // write HUID of target
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "target HUID %.8X", TARGETING::get_huid(l));
+ TargetPairs_t l_PbusConnections;
+ TargetPairs_t::iterator l_itr;
+ const uint32_t MaxBusSet = 2;
+ TYPE busSet[MaxBusSet] = { TYPE_ABUS, TYPE_XBUS };
- // cast OUR type of target to a FAPI type of target.
- const fapi::Target l_fapi_@targetN_target( TARGET_TYPE_MEMBUF_CHIP,
- (const_cast<TARGETING::Target*>(l_@targetN_target)) );
+ // Note:
+ // Due to lab tester board environment, HW procedure writer (Varkey) has
+ // requested to send in one target of a time (we used to send in
+ // both ends in one call). Even though they don't have to be
+ // in order, we should keep the pair concept here in case we need to send
+ // in a pair in the future again.
- // call the HWP with each fapi::Target
- FAPI_INVOKE_HWP( l_errl, fabric_pre_trainadv, _args_...);
- if ( l_errl )
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR : .........." );
- errlCommit( l_errl, HWPF_COMP_ID );
- }
- else
+ for (uint32_t ii = 0; (!l_errl) && (ii < MaxBusSet); ii++)
{
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : .........." );
+ l_errl = PbusLinkSvc::getTheInstance().getPbusConnections(
+ l_PbusConnections, busSet[ii] );
+
+ for (l_itr = l_PbusConnections.begin();
+ l_itr != l_PbusConnections.end();
+ ++l_itr)
+ {
+ const fapi::Target l_fapi_endp1_target(
+ (ii ? TARGET_TYPE_XBUS_ENDPOINT : TARGET_TYPE_ABUS_ENDPOINT),
+ (const_cast<TARGETING::Target*>(l_itr->first)));
+ const fapi::Target l_fapi_endp2_target(
+ (ii ? TARGET_TYPE_XBUS_ENDPOINT : TARGET_TYPE_ABUS_ENDPOINT),
+ (const_cast<TARGETING::Target*>(l_itr->second)));
+
+ // call the HWP with each bus connection
+ FAPI_INVOKE_HWP( l_errl, io_pre_trainadv, l_fapi_endp1_target );
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "%s : %cbus connection fabric_pre_trainadv. Target 0x%.8X",
+ (l_errl ? "ERROR" : "SUCCESS"), (ii ? 'X' : 'A'),
+ TARGETING::get_huid(l_itr->first) );
+ if ( l_errl )
+ {
+ // capture the target data in the elog
+ ErrlUserDetailsTarget(l_itr->first).addToLog( l_errl );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_FABRIC_PRE_TRAINADV_ENDPOINT1_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_FABRIC_PRE_TRAINADV
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to fabric_pre_trainadv has failed
+ * see error log in the user details section for
+ * additional details.
+ */
+ l_StepError.addErrorDetails(ISTEP_FABRIC_PRE_TRAINADV_ENDPOINT1_FAILED,
+ ISTEP_FABRIC_PRE_TRAINADV,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ // We want to continue the training despite the error, so
+ // no break
+ }
+
+ // call the HWP with each bus connection
+ FAPI_INVOKE_HWP( l_errl, io_pre_trainadv, l_fapi_endp2_target );
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "%s : %cbus connection fabric_pre_trainadv. Target 0x%.8X",
+ (l_errl ? "ERROR" : "SUCCESS"), (ii ? 'X' : 'A'),
+ TARGETING::get_huid(l_itr->second) );
+ if ( l_errl )
+ {
+ // capture the target data in the elog
+ ErrlUserDetailsTarget(l_itr->second).addToLog( l_errl );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_FABRIC_PRE_TRAINADV_ENDPOINT2_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_FABRIC_PRE_TRAINADV
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to fabric_pre_trainadv has failed
+ * see error log in the user details section for
+ * additional details.
+ */
+ l_StepError.addErrorDetails(ISTEP_FABRIC_PRE_TRAINADV_ENDPOINT2_FAILED,
+ ISTEP_FABRIC_PRE_TRAINADV,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ // We want to continue the training despite the error, so
+ // no break
+ }
+ }
}
- // @@@@@ END CUSTOM BLOCK: @@@@@
-#endif
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_fabric_pre_trainadv exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_StepError.getErrorHandle();
}
@@ -595,56 +664,123 @@ void* call_fabric_io_run_training( void *io_pArgs )
}
-
//
// Wrapper function to call fabric_post_trainadv
//
void* call_fabric_post_trainadv( void *io_pArgs )
{
errlHndl_t l_errl = NULL;
+ IStepError l_StepError;
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_fabric_post_trainadv entry" );
-#if 0
- // @@@@@ CUSTOM BLOCK: @@@@@
- // figure out what targets we need
- // customize any other inputs
- // set up loops to go through all targets (if parallel, spin off a task)
-
- // write HUID of target
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "target HUID %.8X", TARGETING::get_huid(l));
+ TargetPairs_t l_PbusConnections;
+ TargetPairs_t::iterator l_itr;
+ const uint32_t MaxBusSet = 2;
+ TYPE busSet[MaxBusSet] = { TYPE_ABUS, TYPE_XBUS };
- // cast OUR type of target to a FAPI type of target.
- const fapi::Target l_fapi_@targetN_target( TARGET_TYPE_MEMBUF_CHIP,
- (const_cast<TARGETING::Target*>(l_@targetN_target)) );
+ // Note:
+ // Due to lab tester board environment, HW procedure writer (Varkey) has
+ // requested to send in one target of a time (we used to send in
+ // both ends in one call). Even though they don't have to be
+ // in order, we should keep the pair concept here in case we need to send
+ // in a pair in the future again.
- // call the HWP with each fapi::Target
- FAPI_INVOKE_HWP( l_errl, fabric_post_trainadv, _args_...);
- if ( l_errl )
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR : .........." );
- errlCommit( l_errl, HWPF_COMP_ID );
- }
- else
+ for (uint32_t ii = 0; (!l_errl) && (ii < MaxBusSet); ii++)
{
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : .........." );
+ l_errl = PbusLinkSvc::getTheInstance().getPbusConnections(
+ l_PbusConnections, busSet[ii] );
+
+ for (l_itr = l_PbusConnections.begin();
+ l_itr != l_PbusConnections.end();
+ ++l_itr)
+ {
+ const fapi::Target l_fapi_endp1_target(
+ (ii ? TARGET_TYPE_XBUS_ENDPOINT : TARGET_TYPE_ABUS_ENDPOINT),
+ (const_cast<TARGETING::Target*>(l_itr->first)));
+ const fapi::Target l_fapi_endp2_target(
+ (ii ? TARGET_TYPE_XBUS_ENDPOINT : TARGET_TYPE_ABUS_ENDPOINT),
+ (const_cast<TARGETING::Target*>(l_itr->second)));
+
+ // call the HWP with each bus connection
+ FAPI_INVOKE_HWP( l_errl, io_post_trainadv, l_fapi_endp1_target );
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "%s : %cbus connection fabric_post_trainadv. Target 0x%.8X",
+ (l_errl ? "ERROR" : "SUCCESS"), (ii ? 'X' : 'A'),
+ TARGETING::get_huid(l_itr->first) );
+ if ( l_errl )
+ {
+ // capture the target data in the elog
+ ErrlUserDetailsTarget(l_itr->first).addToLog( l_errl );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_FABRIC_POST_TRAINADV_ENDPOINT1_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_FABRIC_POST_TRAINADV
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to fabric_post_trainadv has failed
+ * see error log in the user details section for
+ * additional details.
+ */
+ l_StepError.addErrorDetails(ISTEP_FABRIC_POST_TRAINADV_ENDPOINT1_FAILED,
+ ISTEP_FABRIC_POST_TRAINADV,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ // We want to continue the training despite the error, so
+ // no break
+ }
+
+ // call the HWP with each bus connection
+ FAPI_INVOKE_HWP( l_errl, io_post_trainadv, l_fapi_endp2_target );
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "%s : %cbus connection fabric_post_trainadv. Target 0x%.8X",
+ (l_errl ? "ERROR" : "SUCCESS"), (ii ? 'X' : 'A'),
+ TARGETING::get_huid(l_itr->second) );
+ if ( l_errl )
+ {
+ // capture the target data in the elog
+ ErrlUserDetailsTarget(l_itr->second).addToLog( l_errl );
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_FABRIC_POST_TRAINADV_ENDPOINT2_FAILED
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_FABRIC_POST_TRAINADV
+ * @userdata1 bytes 0-1: plid identifying first error
+ * bytes 2-3: reason code of first error
+ * @userdata2 bytes 0-1: total number of elogs included
+ * bytes 2-3: N/A
+ * @devdesc call to fabric_post_trainadv has failed
+ * see error log in the user details section for
+ * additional details.
+ */
+ l_StepError.addErrorDetails(ISTEP_FABRIC_POST_TRAINADV_ENDPOINT2_FAILED,
+ ISTEP_FABRIC_POST_TRAINADV,
+ l_errl );
+
+ errlCommit( l_errl, HWPF_COMP_ID );
+ // We want to continue the training despite the error, so
+ // no break
+ }
+ }
}
- // @@@@@ END CUSTOM BLOCK: @@@@@
-#endif
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_fabric_post_trainadv exit" );
// end task, returning any errorlogs to IStepDisp
- return l_errl;
+ return l_StepError.getErrorHandle();
}
-
//
// Wrapper function to call host_startprd_pbus
//
diff --git a/src/usr/hwpf/hwp/edi_ei_initialization/makefile b/src/usr/hwpf/hwp/edi_ei_initialization/makefile
index 0cdcee179..b084780d7 100644
--- a/src/usr/hwpf/hwp/edi_ei_initialization/makefile
+++ b/src/usr/hwpf/hwp/edi_ei_initialization/makefile
@@ -45,18 +45,21 @@ EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/edi_ei_initialization
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/edi_ei_initialization/proc_fab_iovalid
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/edi_ei_initialization/fabric_io_run_training
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/edi_ei_initialization/fabric_io_dccal
+EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training/io_pre_trainadv
+EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training/io_post_trainadv
## NOTE: add new object files when you add a new HWP
OBJS = edi_ei_initialization.o \
proc_fab_iovalid.o fabric_io_run_training.o fabric_io_dccal.o
-
## NOTE: add a new directory onto the vpaths when you add a new HWP
## EXAMPLE:
# VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/edi_ei_initialization/<HWP_dir>
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/edi_ei_initialization/proc_fab_iovalid
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/edi_ei_initialization/fabric_io_run_training
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/edi_ei_initialization/fabric_io_dccal
+VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training/io_pre_trainadv
+VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training/io_post_trainadv
include ${ROOTPATH}/config.mk
OpenPOWER on IntegriCloud