summaryrefslogtreecommitdiffstats
path: root/src/usr/isteps/istep09/call_fabric_post_trainadv.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/isteps/istep09/call_fabric_post_trainadv.C')
-rw-r--r--src/usr/isteps/istep09/call_fabric_post_trainadv.C158
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();
}
OpenPOWER on IntegriCloud