diff options
Diffstat (limited to 'src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_omi_setup.C')
-rw-r--r-- | src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_omi_setup.C | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_omi_setup.C b/src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_omi_setup.C index 0581cb8cf..2eb53635e 100644 --- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_omi_setup.C +++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_omi_setup.C @@ -34,6 +34,7 @@ // *HWP Consumed by: Memory #include <fapi2.H> +#include <exp_omi_setup.H> #include <generic/memory/lib/utils/c_str.H> #include <lib/exp_attribute_accessors_manual.H> #include <lib/omi/exp_omi_utils.H> @@ -42,6 +43,7 @@ #include <generic/memory/mss_git_data_helper.H> #include <generic/memory/lib/mss_generic_attribute_getters.H> #include <generic/memory/lib/mss_generic_system_attribute_getters.H> +#include <generic/memory/lib/utils/shared/mss_generic_consts.H> extern "C" { @@ -54,17 +56,14 @@ extern "C" fapi2::ReturnCode exp_omi_setup( const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target) { mss::display_git_commit_info("exp_omi_setup"); + uint8_t l_gem_menterp_workaround = 0; // Declares variables - fapi2::buffer<uint64_t> l_data; - fapi2::buffer<uint64_t> dlx_config1_data; - uint8_t l_edpl_disable = 0; - bool l_is_enterprise = false; - bool l_is_half_dimm = false; - bool l_workaround_required = false; std::vector<uint8_t> l_boot_config_data; + + // BOOT CONFIG 0 uint8_t l_dl_layer_boot_mode = fapi2::ENUM_ATTR_MSS_OCMB_EXP_BOOT_CONFIG_DL_LAYER_BOOT_MODE_NON_DL_TRAINING; - uint8_t l_gem_menterp_workaround = 0; + // Gets the data setup FAPI_TRY(mss::exp::omi::train::setup_fw_boot_config(i_target, l_boot_config_data)); @@ -75,12 +74,27 @@ extern "C" // Note: This does not kick off OMI training FAPI_TRY(mss::exp::i2c::boot_config(i_target, l_boot_config_data)); + // Check FW status for success + FAPI_TRY(mss::exp::i2c::fw_status(i_target, mss::DELAY_1MS, 100)); + FAPI_TRY(mss::exp::workarounds::omi::gem_menterp(i_target, l_gem_menterp_workaround)); - // If no workaround, we can perform menterp reads/writes (explorer) - // If workaround (gem). we need to bypass menterp. Can also bypass dlx_config1 since it's a noop - if (!l_gem_menterp_workaround) + // If no workaround (explorer), we can perform menterp reads/writes + // If workaround (gemini). we need to bypass menterp. Can also bypass dlx_config1 too since it's a noop + if (l_gem_menterp_workaround) + { + return fapi2::FAPI2_RC_SUCCESS; + } + + // Set up DLX_CONFIG1 { + fapi2::buffer<uint64_t> l_data; + fapi2::buffer<uint64_t> l_dlx_config1_data; + + uint8_t l_edpl_disable = 0; + bool l_is_enterprise = false; + bool l_is_half_dimm = false; + // Gets the configuration information from attributes FAPI_TRY(mss::enterprise_mode(i_target, l_is_enterprise)); FAPI_TRY(mss::half_dimm_mode(i_target, l_is_half_dimm)); @@ -102,24 +116,15 @@ extern "C" FAPI_TRY(mss::exp::omi::check_enterprise_mode(i_target, l_is_enterprise, l_data)); // Set the EDPL according the attribute - FAPI_TRY(mss::exp::omi::read_dlx_config1(i_target, dlx_config1_data)); - mss::exp::omi::set_edpl_enable_bit(dlx_config1_data, l_edpl_disable); - FAPI_TRY(mss::exp::omi::write_dlx_config1(i_target, dlx_config1_data)); + FAPI_TRY(mss::exp::omi::read_dlx_config1(i_target, l_dlx_config1_data)); + mss::exp::omi::set_edpl_enable_bit(l_dlx_config1_data, !l_edpl_disable); + FAPI_TRY(mss::exp::omi::write_dlx_config1(i_target, l_dlx_config1_data)); FAPI_INF("%s EDPL enable: %s", mss::c_str(i_target), l_edpl_disable ? "false" : "true"); } - // Run the workaround if it's needed - FAPI_TRY(mss::exp::workarounds::omi::is_prbs_ocmb_required(i_target, l_workaround_required)); - - if (l_workaround_required) - { - uint8_t l_dl_x4_backoff_en = 0; - - FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_EC_FEATURE_OMI_DL_X4_BACKOFF_ENABLE, i_target, l_dl_x4_backoff_en), - "Error getting ATTR_CHIP_EC_FEATURE_OMI_DL_X4_BACKOFF_ENABLE"); - - FAPI_TRY(mss::exp::workarounds::omi::prbs_ocmb(i_target, l_dl_x4_backoff_en)); - } + // Perform p9a workaround + // Train mode 6 (state 3) + FAPI_TRY(mss::exp::workarounds::omi::pre_training_prbs(i_target)); fapi_try_exit: return fapi2::current_err; |