Skip to content

Commit

Permalink
update omi hang workaround to loop through all lanes
Browse files Browse the repository at this point in the history
Change-Id: I2fd513a636eaaae0110ad553fbef697ac3a78303
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/96756
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Louis Stermole <stermole@us.ibm.com>
Reviewed-by: Mark Pizzutillo <mark.pizzutillo@ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Jennifer A Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/96781
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
  • Loading branch information
devonbaughen authored and dcrowell77 committed May 17, 2020
1 parent edf9895 commit ebe4ee8
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 8 deletions.
Expand Up @@ -64,15 +64,19 @@ fapi2::ReturnCode exp_omi_train_check(const fapi2::Target<fapi2::TARGET_TYPE_OCM
fapi2::buffer<uint64_t> l_dl0_config1;
uint8_t l_state_machine_state = 0;
uint32_t l_omi_freq = 0;
uint8_t l_lane = 0;
constexpr uint8_t NUM_LANES = 8;

FAPI_TRY(mss::exp::omi::train::poll_for_training_completion(i_target, l_state_machine_state, l_omi_status));

if (l_state_machine_state == mss::omi::train_mode::TX_TRAINING_STATE2)
while ((l_state_machine_state == mss::omi::train_mode::TX_TRAINING_STATE2
|| l_state_machine_state == mss::omi::train_mode::TX_TRAINING_STATE1) && l_lane < NUM_LANES)
{
FAPI_TRY(mss::exp::omi::train::bump_sl_workaround(l_omi));
FAPI_TRY(mss::exp::omi::train::bump_sl_workaround(l_omi, l_lane));

// Now poll once more
FAPI_TRY(mss::exp::omi::train::poll_for_training_completion(i_target, l_state_machine_state, l_omi_status));
l_lane++;
}

// Note: this is very useful debug information while trying to debug training during polling
Expand Down
Expand Up @@ -162,7 +162,7 @@ fapi_try_exit:
///
/// @brief Check the OMI train status on the OCMB chip
///
/// @param[in] i_target OCMB chil
/// @param[in] i_target OCMB chip
/// @param[out] o_state_machine_state training state mahcine
/// @param[out] o_omi_training_status training status
/// @return fapi2::ReturnCode
Expand All @@ -189,16 +189,25 @@ fapi_try_exit:
/// @brief Helper function to perform BUMP_SL workaround
///
/// @param[in] i_omi OMI target
/// @param[in] i_lane OMI lane
/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS iff success, else error code
///
fapi2::ReturnCode bump_sl_workaround(const fapi2::Target<fapi2::TARGET_TYPE_OMI>& i_omi)
fapi2::ReturnCode bump_sl_workaround(const fapi2::Target<fapi2::TARGET_TYPE_OMI>& i_omi, uint8_t i_lane)
{
FAPI_DBG("Performing BUMP_SL workaround on %s", mss::c_str(i_omi));
FAPI_INF("Performing BUMP_SL workaround on %s", mss::c_str(i_omi));

const auto& l_omic = mss::find_target<fapi2::TARGET_TYPE_OMIC>(i_omi);

fapi2::buffer<uint64_t> l_omi_status;
uint8_t l_state_machine_state_omi = 0;
constexpr uint8_t MAX_LANE = 7;

// Check valid lane input
FAPI_ASSERT((i_lane <= MAX_LANE),
fapi2::EXP_OMI_BUMP_SL_WORKAROUND_ERROR()
.set_MAX_LANE(MAX_LANE)
.set_LANE_INPUT(i_lane),
"Invalid lane input of %d", i_lane);

// Check OMI training status
FAPI_TRY(mss::getScom(i_omi, P9A_MC_REG2_DL0_STATUS, l_omi_status));
Expand All @@ -213,8 +222,8 @@ fapi2::ReturnCode bump_sl_workaround(const fapi2::Target<fapi2::TARGET_TYPE_OMI>

FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OMI_DL_GROUP_POS, i_omi, l_group_pos));

l_lane = l_group_pos * mss::conversions::BITS_PER_BYTE; // tk 8 = bits_per_byte

l_lane = (l_group_pos * mss::conversions::BITS_PER_BYTE) + i_lane; // tk 8 = bits_per_byte
FAPI_INF("Bumping PHY by one UI for lane %d", i_lane);
// Set
FAPI_TRY(io::rmw(OPT_RX_PR_BUMP_SL_1UI, // reg, fld, len
l_omic, // target
Expand Down
Expand Up @@ -250,9 +250,11 @@ fapi2::ReturnCode omi_train_status(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_C
/// @brief Helper function to perform BUMP_SL workaround
///
/// @param[in] i_omi OMI target
/// @param[in] i_lane OMI lane
/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS iff success, else error code
///
fapi2::ReturnCode bump_sl_workaround(const fapi2::Target<fapi2::TARGET_TYPE_OMI>& i_omi);
fapi2::ReturnCode bump_sl_workaround(const fapi2::Target<fapi2::TARGET_TYPE_OMI>& i_omi,
const uint8_t i_lane);

///
/// @brief Poll for OMI training completion
Expand Down
Expand Up @@ -52,5 +52,22 @@
<target>OCMB_TARGET</target>
</gard>
</hwpError>
<hwpError>
<rc>RC_EXP_OMI_BUMP_SL_WORKAROUND_ERROR</rc>
<description>
bump_sl_workaround received an invalid lane input
</description>
<ffdc>OCMB_TARGET</ffdc>
<ffdc>LANE_INPUT</ffdc>
<ffdc>MAX_LANE</ffdc>
<callout>
<target>OCMB_TARGET</target>
<priority>HIGH</priority>
</callout>
<callout>
<bus>OMI_TARGET, OCMB_TARGET</bus>
<priority>HIGH</priority>
</callout>
</hwpError>
<!-- ******************************************************************** -->
</hwpErrors>

0 comments on commit ebe4ee8

Please sign in to comment.