diff options
Diffstat (limited to 'src/usr/isteps/istep09/call_fabric_io_dccal.C')
-rw-r--r-- | src/usr/isteps/istep09/call_fabric_io_dccal.C | 172 |
1 files changed, 106 insertions, 66 deletions
diff --git a/src/usr/isteps/istep09/call_fabric_io_dccal.C b/src/usr/isteps/istep09/call_fabric_io_dccal.C index 0b49bed69..0dbfd9d48 100644 --- a/src/usr/isteps/istep09/call_fabric_io_dccal.C +++ b/src/usr/isteps/istep09/call_fabric_io_dccal.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_dccal.H> + namespace ISTEP_09 { using namespace ISTEP; @@ -69,9 +76,8 @@ using namespace HWAS; // void* call_fabric_io_dccal( void *io_pArgs ) { - errlHndl_t l_errl = NULL; - //@TODO RTC:134079 Port to fapi2 -/* IStepError l_StepError; + errlHndl_t l_errl = NULL; + IStepError l_StepError; // We are not running this analog procedure in VPO if (TARGETING::is_vpo()) @@ -84,83 +90,117 @@ void* call_fabric_io_dccal( void *io_pArgs ) TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_fabric_io_dccal 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, io_dccal, l_fapi_endp1_target ); - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "%s : %cbus connection fabric_io_dccal. 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 reference to error that occurred + l_StepError.addErrorDetails( l_errl ); - // Create IStep error log and cross ref error that occurred - l_StepError.addErrorDetails( l_errl ); + // Commit the error log + // Log should be deleted and set to NULL in errlCommit. + errlCommit(l_errl, HWPF_COMP_ID); - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - // We want to continue the training despite the error, so - // no break - } + // Don't continue with a potential bad connection set + break; + } - //@TODO RTC:133830 call the HWP with each bus connection - FAPI_INVOKE_HWP( l_errl, fabric_io_dccal, l_fapi_endp2_target ); + for (const auto & l_PbusConnection: l_PbusConnections) + { + const TARGETING::Target* l_thisPbusTarget = l_PbusConnection.first; + const TARGETING::Target* l_connectedPbusTarget = + l_PbusConnection.second; - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "%s : %cbus connection fabric_io_dccal. 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 ); + const fapi2::Target <fapi2::TARGET_TYPE_XBUS> + l_thisPbusFapi2Target( + (const_cast<TARGETING::Target*>(l_thisPbusTarget))); - // Create IStep error log and cross ref error that occurred - l_StepError.addErrorDetails( l_errl ); + const fapi2::Target <fapi2::TARGET_TYPE_XBUS> + l_connectedPbusFapi2Target( + (const_cast<TARGETING::Target*>(l_connectedPbusTarget))); - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - // We want to continue the training despite the error, so - // no break - } - } - } + // group is either 0 or 1 + uint8_t l_group = 0; + for (l_group = 0; l_group < 2; l_group++) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9_io_xbus_dccal HWP on " + "this %cbus target %.8X, group %d", + (ii ? 'X' : 'O'), + TARGETING::get_huid(l_thisPbusTarget), l_group ); + + FAPI_INVOKE_HWP( l_errl, p9_io_xbus_dccal, + l_thisPbusFapi2Target, l_group ); + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "%s : %cbus connection p9_io_xbus_dccal " + "with group %d. Target 0x%.8X", + (l_errl ? "ERROR" : "SUCCESS"), (ii ? 'X' : 'O'), + l_group, TARGETING::get_huid(l_thisPbusTarget) ); + if ( l_errl ) + { + // capture the target data in the elog + ErrlUserDetailsTarget(l_thisPbusTarget).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; + } + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9_io_xbus_dccal HWP on " + "connected %cbus target %.8X, group %d", + (ii ? 'X' : 'O'), + TARGETING::get_huid(l_connectedPbusTarget), l_group ); + + // call the HWP with each bus connection + FAPI_INVOKE_HWP( l_errl, p9_io_xbus_dccal, + l_connectedPbusFapi2Target, l_group); + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "%s : %cbus connection p9_io_xbus_dccal " + "with group %d. Target 0x%.8X", + (l_errl ? "ERROR" : "SUCCESS"), (ii ? 'X' : 'O'), + l_group, TARGETING::get_huid(l_connectedPbusTarget) ); + if ( l_errl ) + { + // capture the target data in the elog + ErrlUserDetailsTarget(l_connectedPbusTarget). + 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_io_dccal exit" ); // end task, returning any errorlogs to IStepDisp return l_StepError.getErrorHandle(); - */ - return l_errl; } + }; |