diff options
Diffstat (limited to 'src/import/chips/p9a/procedures/hwp/memory/p9a_omi_train.C')
-rw-r--r-- | src/import/chips/p9a/procedures/hwp/memory/p9a_omi_train.C | 69 |
1 files changed, 23 insertions, 46 deletions
diff --git a/src/import/chips/p9a/procedures/hwp/memory/p9a_omi_train.C b/src/import/chips/p9a/procedures/hwp/memory/p9a_omi_train.C index c70bf77a1..2ade12916 100644 --- a/src/import/chips/p9a/procedures/hwp/memory/p9a_omi_train.C +++ b/src/import/chips/p9a/procedures/hwp/memory/p9a_omi_train.C @@ -38,61 +38,38 @@ #include <fapi2.H> #include <p9a_mc_scom_addresses.H> #include <p9a_mc_scom_addresses_fld.H> +#include <p9a_mc_scom_addresses_fixes.H> +#include <p9a_mc_scom_addresses_fld_fixes.H> #include <generic/memory/lib/utils/c_str.H> #include <generic/memory/lib/utils/scom.H> #include <generic/memory/lib/utils/buffer_ops.H> +#include <generic/memory/lib/utils/find.H> +#include <generic/memory/lib/utils/shared/mss_generic_consts.H> +#include <lib/mc/omi.H> -extern "C" +/// +/// @brief Turn on Axone config regs to enable training +/// @param[in] i_target the OMI target to operate on +/// @return FAPI2_RC_SUCCESS iff ok +/// +fapi2::ReturnCode p9a_omi_train( const fapi2::Target<fapi2::TARGET_TYPE_OMI>& i_target) { + FAPI_INF("%s Start p9a_omi_train", mss::c_str(i_target)); - /// - /// @brief Check the omi status in Axone side - /// @param[in] i_target the OMIC target to operate on - /// @return FAPI2_RC_SUCCESS iff ok - /// - fapi2::ReturnCode p9a_omi_train( const fapi2::Target<fapi2::TARGET_TYPE_OMIC>& i_target) - { - FAPI_INF("%s Start p9a_omi_train", mss::c_str(i_target)); - - // Const - constexpr uint8_t STATE_MACHINE_SUCCESS = 0b111; // This value is from Lonny Lambrecht - - // Declares variables - fapi2::buffer<uint64_t> l_omi_status; - fapi2::buffer<uint64_t> l_omi_training_status; - uint8_t l_state_machine_state = 0; - - // Check OMI training status - FAPI_TRY(mss::getScom(i_target, P9A_OMI_REG0_DL0_STATUS, l_omi_status)); - FAPI_TRY(mss::getScom(i_target, P9A_OMI_REG0_DL0_TRAINING_STATUS, l_omi_training_status)); + const auto l_mc = mss::find_target<fapi2::TARGET_TYPE_MC>(i_target); - l_omi_status.extractToRight<P9A_OMI_REG0_DL0_STATUS_STS_TRAINING_STATE_MACHINE, P9A_OMI_REG0_DL0_STATUS_STS_TRAINING_STATE_MACHINE_LEN> - (l_state_machine_state); + FAPI_TRY(mss::mc::setup_mc_mcn_config_helper(l_mc)); + FAPI_TRY(mss::mc::setup_mc_config1_helper(i_target)); + FAPI_TRY(mss::mc::setup_mc_cya_bits_helper(i_target)); + FAPI_TRY(mss::mc::setup_mc_error_action_helper(i_target)); + FAPI_TRY(mss::mc::setup_mc_rmt_config_helper(i_target)); - FAPI_ASSERT(l_state_machine_state == STATE_MACHINE_SUCCESS, - fapi2::P9A_OMI_TRAIN_ERR() - .set_TARGET(i_target) - .set_EXPECTED_SM_STATE(STATE_MACHINE_SUCCESS) - .set_ACTUAL_SM_STATE(l_state_machine_state) - .set_DL0_STATUS(l_omi_status) - .set_DL0_TRAINING_STATUS(l_omi_training_status), - "%s OMI Training Failure, expected state:%d/actual state:%d", - mss::c_str(i_target), - STATE_MACHINE_SUCCESS, - l_state_machine_state - ); + // *_CONFIG0 should be the last one written, since it starts the training. + FAPI_TRY(mss::mc::setup_mc_config0_helper(i_target)); - FAPI_INF("%s End p9a_omi_train, expected state:%d/actual state:%d, DL0_STATUS:%d, DL0_TRAINING_STATUS:%d", - mss::c_str(i_target), - STATE_MACHINE_SUCCESS, - l_state_machine_state, - l_omi_status, - l_omi_training_status); - return fapi2::FAPI2_RC_SUCCESS; - fapi_try_exit: - return fapi2::current_err; +fapi_try_exit: + return fapi2::current_err; - }// p9a_omi_train -}// extern C +}// p9a_omi_train |