diff options
author | Matt Derksen <v2cibmd@us.ibm.com> | 2016-03-28 15:25:35 -0500 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2016-05-02 15:33:59 -0400 |
commit | 350a434f7132e332ceda2da898cdb8d0d20c2e67 (patch) | |
tree | a3de2cbf23c6fc047920b5e22dc88808c14e9b80 /src/usr/isteps/istep09/call_fabric_post_trainadv.C | |
parent | b9cafc9a11646de0a5ef173fac9ddfb7e1a89932 (diff) | |
download | talos-hostboot-350a434f7132e332ceda2da898cdb8d0d20c2e67.tar.gz talos-hostboot-350a434f7132e332ceda2da898cdb8d0d20c2e67.zip |
istep9 HWP enablement
Change-Id: Ie780ed10e29961092a19373c994ec24a8cea500a
RTC:146576
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/23517
Tested-by: Jenkins Server
Tested-by: FSP CI Jenkins
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/isteps/istep09/call_fabric_post_trainadv.C')
-rw-r--r-- | src/usr/isteps/istep09/call_fabric_post_trainadv.C | 158 |
1 files changed, 92 insertions, 66 deletions
diff --git a/src/usr/isteps/istep09/call_fabric_post_trainadv.C b/src/usr/isteps/istep09/call_fabric_post_trainadv.C index 9fdfffa45..210427508 100644 --- a/src/usr/isteps/istep09/call_fabric_post_trainadv.C +++ b/src/usr/isteps/istep09/call_fabric_post_trainadv.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015 */ +/* Contributors Listed Below - COPYRIGHT 2015,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -57,6 +57,13 @@ #include <targeting/common/utilFilter.H> #include <targeting/common/trace.H> +#include <pbusLinkSvc.H> +#include <fapi2/target.H> +#include <fapi2/plat_hwp_invoker.H> + +// HWP +#include <p9_io_xbus_post_trainadv.H> + namespace ISTEP_09 { @@ -72,88 +79,107 @@ using namespace HWAS; void* call_fabric_post_trainadv( void *io_pArgs ) { IStepError l_StepError; - //@TODO RTC:134079 -/* errlHndl_t l_errl = NULL; + errlHndl_t l_errl = NULL; TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_fabric_post_trainadv entry" ); - TargetPairs_t l_PbusConnections; - TargetPairs_t::iterator l_itr; - const uint32_t MaxBusSet = 2; - TYPE busSet[MaxBusSet] = { TYPE_ABUS, TYPE_XBUS }; - - // 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. + EDI_EI_INITIALIZATION::TargetPairs_t l_PbusConnections; + const uint32_t MaxBusSet = 1; + TYPE busSet[MaxBusSet] = { TYPE_XBUS }; // TODO RTC:152304 - add TYPE_OBUS for (uint32_t ii = 0; (!l_errl) && (ii < MaxBusSet); ii++) { - l_errl = PbusLinkSvc::getTheInstance().getPbusConnections( - l_PbusConnections, busSet[ii] ); - - for (l_itr = l_PbusConnections.begin(); - l_itr != l_PbusConnections.end(); - ++l_itr) + l_errl = EDI_EI_INITIALIZATION::PbusLinkSvc::getTheInstance(). + getPbusConnections(l_PbusConnections, busSet[ii]); + if (l_errl) { - 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))); - - //@TODO RTC:133830 call the HWP with each bus connection - //FAPI_INVOKE_HWP( l_errl, p9_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 ); + "ERROR 0x%.8X : getPbusConnections TYPE_%cBUS returns error", + l_errl->reasonCode(), (ii ? 'X':'O') ); - // Create IStep error log and cross ref error that occurred - l_StepError.addErrorDetails( l_errl ); + // Create IStep error log and cross reference to error that occurred + l_StepError.addErrorDetails( l_errl ); - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - // We want to continue the training despite the error, so - // no break - } + // Commit the error log + // Log should be deleted and set to NULL in errlCommit. + errlCommit(l_errl, HWPF_COMP_ID); - //@TODO RTC:133830 call the HWP with each bus connection - FAPI_INVOKE_HWP( l_errl, io_post_trainadv, l_fapi_endp2_target ); + // Don't continue with a potential bad connection set + break; + } - 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 ) + for (const auto & l_PbusConnection: l_PbusConnections) + { + const TARGETING::Target* l_thisPbusTarget = l_PbusConnection.first; + const TARGETING::Target* l_connectedPbusTarget = + l_PbusConnection.second; + + const fapi2::Target <fapi2::TARGET_TYPE_XBUS> + l_thisPbusFapi2Target( + (const_cast<TARGETING::Target*>(l_thisPbusTarget))); + + const fapi2::Target <fapi2::TARGET_TYPE_XBUS> + l_connectedPbusFapi2Target( + (const_cast<TARGETING::Target*>(l_connectedPbusTarget))); + + // group is either 0 or 1, + // need to train both groups and allow for them to differ + uint8_t l_this_group = 0; + uint8_t l_connected_group = 0; + uint8_t l_group_loop = 0; + for (l_group_loop = 0; l_group_loop < 4; l_group_loop++) { - // capture the target data in the elog - ErrlUserDetailsTarget(l_itr->second).addToLog( l_errl ); - - // Create IStep error log and cross ref error that occurred - l_StepError.addErrorDetails( l_errl ); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - // We want to continue the training despite the error, so - // no break - } - } - } + l_this_group = l_group_loop / 2; // 0, 0, 1, 1 + l_connected_group = l_group_loop % 2; // 0, 1, 1, 0 + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9_io_xbus_post_trainadv HWP on " + "this %cbus target %.8X (group %d) and connected " + "target %.8X (group %d)", + (ii ? 'X' : 'O'), + TARGETING::get_huid(l_thisPbusTarget), l_this_group, + TARGETING::get_huid(l_connectedPbusTarget), + l_connected_group ); + + FAPI_INVOKE_HWP( l_errl, p9_io_xbus_post_trainadv, + l_thisPbusFapi2Target, l_this_group, + l_connectedPbusFapi2Target, + l_connected_group ); + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "%s : %cbus connection p9_io_xbus_post_trainadv " + "Target 0x%.8X using group %d, connected target 0x%.8X " + "using group %d", + (l_errl ? "ERROR" : "SUCCESS"), (ii ? 'X' : 'O'), + TARGETING::get_huid(l_thisPbusTarget), l_this_group, + TARGETING::get_huid(l_connectedPbusTarget), + l_connected_group ); + + if ( l_errl ) + { + // capture the target data in the elog + ErrlUserDetailsTarget(l_thisPbusTarget).addToLog(l_errl); + ErrlUserDetailsTarget(l_connectedPbusFapi2Target).addToLog + (l_errl); + + // Create IStep error log and cross ref error that occurred + l_StepError.addErrorDetails( l_errl ); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + // We want to continue the training despite the error, so + // no break + l_errl = NULL; + } + + } // end of groups + } // end of connection TYPE combinations + } // end of connection set loop TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_fabric_post_trainadv exit" ); -*/ + // end task, returning any errorlogs to IStepDisp return l_StepError.getErrorHandle(); } |