diff options
5 files changed, 85 insertions, 39 deletions
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/i2c/exp_i2c_fields.C b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/i2c/exp_i2c_fields.C index 822c518d3..c1c9c31a9 100644 --- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/i2c/exp_i2c_fields.C +++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/i2c/exp_i2c_fields.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2018 */ +/* Contributors Listed Below - COPYRIGHT 2018,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -23,6 +23,7 @@ /* */ /* IBM_PROLOG_END_TAG */ #include <lib/i2c/exp_i2c_fields.H> +#include <generic/memory/lib/utils/find.H> namespace mss { @@ -33,7 +34,7 @@ namespace i2c // If a constexpr static data member (since C++11) is odr-used, // a definition at namespace scope is still required, but it cannot have an initializer. -constexpr mss::field_t<mss::endian::BIG> fields::BOOT_MODE; +constexpr mss::field_t<mss::endian::BIG> fields::DFE_DISABLE; constexpr mss::field_t<mss::endian::BIG> fields::LANE_MODE; constexpr mss::field_t<mss::endian::BIG> fields::SERDES_FREQ; constexpr mss::field_t<mss::endian::BIG> fields::FW_MODE; @@ -44,6 +45,49 @@ constexpr mss::field_t<mss::endian::BIG> fields::CMD_ID; constexpr mss::field_t<mss::endian::BIG> fields::STATUS_CODE; constexpr mss::field_t<mss::endian::BIG> fields::BOOT_STAGE; +namespace boot_cfg +{ + +/// +/// @brief SERDES_FREQ setter +/// @param[in] i_target the OCMB target +/// @param[in,out] io_data the buffer as a reference to a vector +/// @param[in] i_freq frequency to set +/// @return FAPI2_RC_SUCCESS iff okay +/// +fapi2::ReturnCode set_serdes_freq(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, + std::vector<uint8_t>& io_data, + const uint32_t i_freq) +{ + static const std::vector< std::pair<uint32_t, uint8_t> > OMI_FREQ_MAP = + { + {fapi2::ENUM_ATTR_FREQ_OMI_MHZ_21330, 1}, + {fapi2::ENUM_ATTR_FREQ_OMI_MHZ_23460, 2}, + {fapi2::ENUM_ATTR_FREQ_OMI_MHZ_25600, 3}, + // All others reserved or not supported + }; + + uint8_t l_setting = 0; + const bool l_is_val_found = mss::find_value_from_key(OMI_FREQ_MAP, i_freq, l_setting); + + FAPI_ASSERT( l_is_val_found, + fapi2::MSS_LOOKUP_FAILED() + .set_KEY(i_freq) + .set_DATA(l_setting) + .set_FUNCTION(SET_SERDES_FREQ) + .set_TARGET(i_target), + "Failed to find a BOOT_CONFIG setting for OMI value %d on %s", + i_freq, + mss::c_str(i_target) ); + + return set_field<fields::SERDES_FREQ>(i_target, io_data, l_setting); + +fapi_try_exit: + return fapi2::current_err; +} + +}// boot_cfg + }// i2c }// exp }// mss diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/i2c/exp_i2c_fields.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/i2c/exp_i2c_fields.H index 3098e9e28..02ab0fc98 100644 --- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/i2c/exp_i2c_fields.H +++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/i2c/exp_i2c_fields.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2018 */ +/* Contributors Listed Below - COPYRIGHT 2018,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -57,10 +57,10 @@ struct fields // First value is byte index, then buffer extract start bit, and extract data length // Part of EXP_FW_BOOT_CONFIG - static constexpr mss::field_t<mss::endian::BIG> BOOT_MODE{0, 0, 1}; + static constexpr mss::field_t<mss::endian::BIG> DFE_DISABLE{0, 0, 1}; static constexpr mss::field_t<mss::endian::BIG> LANE_MODE{0, 1, 3}; static constexpr mss::field_t<mss::endian::BIG> SERDES_FREQ{0, 4, 4}; - static constexpr mss::field_t<mss::endian::BIG> FW_MODE{1, 2, 1}; + static constexpr mss::field_t<mss::endian::BIG> FW_MODE{1, 1, 2}; static constexpr mss::field_t<mss::endian::BIG> LOOPBACK_TEST{1, 3, 1}; static constexpr mss::field_t<mss::endian::BIG> TRANSPORT_LAYER{1, 4, 2}; static constexpr mss::field_t<mss::endian::BIG> DL_LAYER_BOOT_MODE{1, 6, 2}; @@ -108,14 +108,14 @@ struct fieldTraits<fields::LANE_MODE> }; /// -/// @class fieldTraits - BOOT_MODE specialization +/// @class fieldTraits - DFE_DISABLE specialization /// @brief Traits assoiated with the Explorer I2C commands /// template <> -struct fieldTraits<fields::BOOT_MODE> +struct fieldTraits<fields::DFE_DISABLE> { static constexpr uint8_t COMPARISON_VAL = 0x01; - static constexpr const char* FIELD_STR = "Boot mode"; + static constexpr const char* FIELD_STR = "DFE Disable"; template <typename T> using COMPARISON_OP = std::less_equal<T>; @@ -170,7 +170,7 @@ struct fieldTraits<fields::LOOPBACK_TEST> template <> struct fieldTraits<fields::FW_MODE> { - static constexpr uint8_t COMPARISON_VAL = 0x01; + static constexpr uint8_t COMPARISON_VAL = 0x02; static constexpr const char* FIELD_STR = "FW Mode"; template <typename T> @@ -284,15 +284,12 @@ inline fapi2::ReturnCode get_serdes_freq(const fapi2::Target<fapi2::TARGET_TYPE_ /// @brief SERDES_FREQ setter /// @param[in] i_target the OCMB target /// @param[in,out] io_data the buffer as a reference to a vector -/// @param[in] i_setting the value to set +/// @param[in] i_freq frequency to set /// @return FAPI2_RC_SUCCESS iff okay /// -inline fapi2::ReturnCode set_serdes_freq(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, - std::vector<uint8_t>& io_data, - const uint8_t i_setting) -{ - return set_field<fields::SERDES_FREQ>(i_target, io_data, i_setting); -} +fapi2::ReturnCode set_serdes_freq(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, + std::vector<uint8_t>& io_data, + const uint32_t i_freq); /// /// @brief LANE_MODE getter @@ -323,31 +320,31 @@ inline fapi2::ReturnCode set_lane_mode(const fapi2::Target<fapi2::TARGET_TYPE_OC } /// -/// @brief BOOT_MODE getter +/// @brief DFE_DISABLE getter /// @param[in] i_target the OCMB target /// @param[in] i_data the buffer as a reference to a vector /// @param[out] o_setting /// @return FAPI2_RC_SUCCESS iff okay /// -inline fapi2::ReturnCode get_boot_mode(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, - const std::vector<uint8_t>& i_data, - uint8_t& o_setting) +inline fapi2::ReturnCode get_dfe_disable(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, + const std::vector<uint8_t>& i_data, + uint8_t& o_setting) { - return get_field<fields::BOOT_MODE>(i_target, i_data, o_setting); + return get_field<fields::DFE_DISABLE>(i_target, i_data, o_setting); } /// -/// @brief BOOT_MODE setter +/// @brief DFE_DISABLE setter /// @param[in] i_target the OCMB target /// @param[in,out] io_data the buffer as a reference to a vector /// @param[in] i_setting the value to set /// @return FAPI2_RC_SUCCESS iff okay /// -inline fapi2::ReturnCode set_boot_mode(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, - std::vector<uint8_t>& io_data, - const uint8_t i_setting) +inline fapi2::ReturnCode set_dfe_disable(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, + std::vector<uint8_t>& io_data, + const uint8_t i_setting) { - return set_field<fields::BOOT_MODE>(i_target, io_data, i_setting); + return set_field<fields::DFE_DISABLE>(i_target, io_data, i_setting); } /// @brief DL_LAYER_BOOT_MODE getter diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/omi/exp_omi_utils.C b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/omi/exp_omi_utils.C index e58f134cb..5c5372851 100644 --- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/omi/exp_omi_utils.C +++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/omi/exp_omi_utils.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2018 */ +/* Contributors Listed Below - COPYRIGHT 2018,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -33,6 +33,7 @@ // *HWP Level: 3 // *HWP Consumed by: Memory +#include <generic/memory/lib/utils/find.H> #include <lib/omi/exp_omi_utils.H> #include <lib/shared/exp_consts.H> #include <lib/i2c/exp_i2c_fields.H> @@ -61,9 +62,11 @@ fapi2::ReturnCode setup_fw_boot_config( const fapi2::Target<fapi2::TARGET_TYPE_O uint8_t l_loopback_test = 0; uint8_t l_transport_layer = 0; uint8_t l_dl_layer_boot_mode = 0; - uint8_t l_boot_mode = 0; + uint8_t l_dfe_disable = 0; uint8_t l_lane_mode = 0; - uint8_t l_serdes_freq = 0; + uint32_t l_omi_freq = 0; + + const auto& l_proc = mss::find_target<fapi2::TARGET_TYPE_PROC_CHIP>(i_target); // Read the EXP_FW_BOOT_CONFIG from the attributes FAPI_TRY(mss::attr::get_ocmb_exp_boot_config_fw_mode(i_target, l_fw_mode)); @@ -74,20 +77,20 @@ fapi2::ReturnCode setup_fw_boot_config( const fapi2::Target<fapi2::TARGET_TYPE_O FAPI_TRY(mss::attr::get_ocmb_exp_boot_config_dl_layer_boot_mode(i_target, l_dl_layer_boot_mode)); - FAPI_TRY(mss::attr::get_ocmb_exp_boot_config_boot_mode(i_target, l_boot_mode)); + FAPI_TRY(mss::attr::get_ocmb_exp_boot_config_dfe_disable(i_target, l_dfe_disable)); FAPI_TRY(mss::attr::get_ocmb_exp_boot_config_lane_mode(i_target, l_lane_mode)); - FAPI_TRY(mss::attr::get_ocmb_exp_boot_config_serdes_frequency(i_target, l_serdes_freq)); + FAPI_TRY( FAPI_ATTR_GET(fapi2::ATTR_FREQ_OMI_MHZ, l_proc, l_omi_freq) ); // Clears o_data, just in case o_data.clear(); o_data.assign(mss::exp::i2c::FW_BOOT_CONFIG_BYTE_LEN, 0); - FAPI_TRY(mss::exp::i2c::boot_cfg::set_serdes_freq( i_target, o_data, l_serdes_freq )); + FAPI_TRY(mss::exp::i2c::boot_cfg::set_serdes_freq( i_target, o_data, l_omi_freq )); FAPI_TRY(mss::exp::i2c::boot_cfg::set_lane_mode( i_target, o_data, l_lane_mode )); - FAPI_TRY(mss::exp::i2c::boot_cfg::set_boot_mode( i_target, o_data, l_boot_mode )); + FAPI_TRY(mss::exp::i2c::boot_cfg::set_dfe_disable( i_target, o_data, l_dfe_disable )); FAPI_TRY(mss::exp::i2c::boot_cfg::set_dl_layer_boot_mode( i_target, o_data, l_dl_layer_boot_mode )); FAPI_TRY(mss::exp::i2c::boot_cfg::set_transport_layer( i_target, o_data, l_transport_layer )); FAPI_TRY(mss::exp::i2c::boot_cfg::set_loopback_test( i_target, o_data, l_loopback_test )); diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H index 37bad4942..a2b702bca 100644 --- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H +++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H @@ -147,6 +147,7 @@ enum ffdc_codes SET_MRAM_SUPPORT = 0x1049, SET_3DS_HEIGHT = 0x1050, SET_SPD_CL_SUPPORTED = 0x1051, + SET_SERDES_FREQ = 0x1052, }; /// diff --git a/src/import/chips/ocmb/explorer/procedures/xml/attribute_info/exp_omi_train.xml b/src/import/chips/ocmb/explorer/procedures/xml/attribute_info/exp_omi_train.xml index fbb950259..e60696f2e 100644 --- a/src/import/chips/ocmb/explorer/procedures/xml/attribute_info/exp_omi_train.xml +++ b/src/import/chips/ocmb/explorer/procedures/xml/attribute_info/exp_omi_train.xml @@ -44,7 +44,8 @@ <valueType>uint8</valueType> <enum> NORMAL_MODE = 0, - MANUFACTURING_MODE = 1 + MANUFACTURING_MODE = 1, + PRODUCT_QUALIFICATION_MODE = 2 </enum> <initToZero/> <platInit/> @@ -106,20 +107,20 @@ </attribute> <attribute> - <id>ATTR_MSS_OCMB_EXP_BOOT_CONFIG_BOOT_MODE</id> + <id>ATTR_MSS_OCMB_EXP_BOOT_CONFIG_DFE_DISABLE</id> <targetType>TARGET_TYPE_OCMB_CHIP</targetType> <description> - Indicates the full boot or step-by-step boot + Set to disable DFE </description> <valueType>uint8</valueType> <enum> - FULL_BOOT = 0, - STEP_BY_STEP_BOOT = 1 + DEFAULT = 0, + DISABLED = 1 </enum> <initToZero/> <platInit/> <overrideOnly/> - <mssAccessorName>ocmb_exp_boot_config_boot_mode</mssAccessorName> + <mssAccessorName>ocmb_exp_boot_config_dfe_disable</mssAccessorName> </attribute> <attribute> |