diff options
author | Matt Ploetz <maploetz@us.ibm.com> | 2013-07-29 11:27:07 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-09-12 14:17:20 -0500 |
commit | 7ac1d851fdfe0b247fea4c1e3943811d08221f0a (patch) | |
tree | 6cea60f5904cd2a88c84b3e1e11725258a02f1b2 /src/usr | |
parent | 24f7b770b42f2889e8970e75f1ecd8bc1bdb77d5 (diff) | |
download | talos-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/usr')
-rw-r--r-- | src/usr/hwpf/hwp/bus_training/io_post_trainadv.C | 115 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/bus_training/io_post_trainadv.H | 53 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/bus_training/io_pre_trainadv.C | 115 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/bus_training/io_pre_trainadv.H | 54 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/bus_training/makefile | 2 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/dmi_training/dmi_training.C | 219 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/dmi_training/makefile | 4 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C | 256 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/edi_ei_initialization/makefile | 5 |
9 files changed, 753 insertions, 70 deletions
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 |