Skip to content

Commit

Permalink
Fix HB error with -Os compile flag due to eff_config
Browse files Browse the repository at this point in the history
Top level template is NOT unique between the two files
when using the -Os compile flag. The linker just picks
the wrong file template definition between p9a and p9n.
In -O3 everything is left in place, inline so it just works
which is why we didn't hit this error before in HB

Change-Id: I529f93fc91684ae14a132d96f518a5f66f036d4b
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/80167
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com>
Reviewed-by: Louis Stermole <stermole@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Dev-Ready: STEPHEN GLANCY <sglancy@us.ibm.com>
Reviewed-by: Jennifer A Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/80229
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
  • Loading branch information
aamarin authored and dcrowell77 committed Jul 19, 2019
1 parent dd6aa0f commit 831f9e0
Show file tree
Hide file tree
Showing 16 changed files with 529 additions and 575 deletions.

Large diffs are not rendered by default.

Expand Up @@ -34,9 +34,6 @@
// *HWP Consumed by: HB:CI

#include <fapi2.H>
#include <generic/memory/lib/data_engine/data_engine_traits_def.H>
#include <generic/memory/lib/data_engine/data_engine.H>
#include <generic/memory/lib/spd/spd_facade.H>
#include <lib/mss_pmic_attribute_setters.H>
#include <lib/eff_config/pmic_efd_processing.H>
#include <lib/utils/pmic_consts.H>
Expand Down
Expand Up @@ -37,9 +37,7 @@
#define _MSS_PMIC_EFD_PROCESSING_H_

#include <fapi2.H>
#include <generic/memory/lib/data_engine/data_engine_traits_def.H>
#include <generic/memory/lib/data_engine/data_engine.H>
#include <generic/memory/lib/spd/spd_facade.H>
#include <generic/memory/lib/spd/ddimm/efd_decoder.H>

namespace mss
{
Expand Down
Expand Up @@ -98,7 +98,7 @@ enum rail
SWD = 3,
};

enum attr_eff_engine_fields
enum class attr_eff_engine_fields
{
// Template recursive base case
ATTR_EFF_BASE_CASE = 0,
Expand Down Expand Up @@ -160,7 +160,7 @@ enum attr_eff_engine_fields
DRAM_MODULE_HEIGHT = 45,

// Dispatcher set to last enum value
ATTR_EFF_DISPATCHER = DRAM_MODULE_HEIGHT,
DISPATCHER = DRAM_MODULE_HEIGHT,
};

///
Expand Down
Expand Up @@ -58,7 +58,7 @@ namespace mss
/// @note exp::attr_eff_engine_fields, SPD_TAA_MIN
///
template< >
struct setTimingTraits< exp::attr_eff_engine_fields, exp::SPD_TAA_MIN >
struct setTimingTraits< exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::SPD_TAA_MIN >
{
static constexpr const char* TIMING_NAME = "tAAmin";

Expand All @@ -74,19 +74,21 @@ struct setTimingTraits< exp::attr_eff_engine_fields, exp::SPD_TAA_MIN >
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, ATTR_EFF_BASE_CASE specialization
/// NOP for base case needed to trigger partial specialization of attr_engine
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::ATTR_EFF_BASE_CASE> {};
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::ATTR_EFF_BASE_CASE> {};

///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, ADDRESS_MIRROR specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::ADDRESS_MIRROR>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::ADDRESS_MIRROR>
{
using attr_type = fapi2::ATTR_MEM_EXP_DRAM_ADDRESS_MIRRORING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -133,10 +135,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::ADDRESS_MIRROR>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, BYTE_ENABLES specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::BYTE_ENABLES>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::BYTE_ENABLES>
{
using attr_type = fapi2::ATTR_MEM_EFF_BYTE_ENABLES_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -183,10 +186,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::BYTE_ENABLES>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, NIBBLE_ENABLES specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::NIBBLE_ENABLES>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::NIBBLE_ENABLES>
{
using attr_type = fapi2::ATTR_MEM_EFF_NIBBLE_ENABLES_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -233,10 +237,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::NIBBLE_ENABLES>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, SPD_TAA_MIN specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::SPD_TAA_MIN>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::SPD_TAA_MIN>
{
using attr_type = fapi2::ATTR_MEM_EXP_SPD_TAA_MIN_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -276,17 +281,19 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::SPD_TAA_MIN>
static fapi2::ReturnCode get_value_to_set(const spd::facade& i_spd_data,
attr_integral_type& o_setting)
{
return mss::calc_spd_time_in_ps<exp::attr_eff_engine_fields, exp::SPD_TAA_MIN>(i_spd_data, o_setting);
return mss::calc_spd_time_in_ps<exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::SPD_TAA_MIN>(i_spd_data,
o_setting);
}
};

///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, FOUR_RANK_MODE specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::FOUR_RANK_MODE>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::FOUR_RANK_MODE>
{
using attr_type = fapi2::ATTR_MEM_EFF_FOUR_RANK_MODE_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -340,10 +347,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::FOUR_RANK_MODE>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, DDP_COMPATIBILITY specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::DDP_COMPATIBILITY>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::DDP_COMPATIBILITY>
{
using attr_type = fapi2::ATTR_MEM_EFF_DDP_COMPATIBILITY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -397,10 +405,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::DDP_COMPATIBILITY>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, TSV_8H_SUPPORT specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::TSV_8H_SUPPORT>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::TSV_8H_SUPPORT>
{
using attr_type = fapi2::ATTR_MEM_EFF_TSV_8H_SUPPORT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -447,10 +456,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::TSV_8H_SUPPORT>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, PSTATES specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::PSTATES>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::PSTATES>
{
using attr_type = fapi2::ATTR_MEM_EFF_PSTATES_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -497,10 +507,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::PSTATES>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, MRAM_SUPPORT specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::MRAM_SUPPORT>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::MRAM_SUPPORT>
{
using attr_type = fapi2::ATTR_MEM_EFF_MRAM_SUPPORT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -554,10 +565,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::MRAM_SUPPORT>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note attr_eff_engine_fields, SPD_CL_SUPPORTED specialization
///
template<>
struct attrEngineTraits<exp::attr_eff_engine_fields, exp::SPD_CL_SUPPORTED>
template< proc_type P >
struct attrEngineTraits<P, exp::attr_eff_engine_fields, exp::attr_eff_engine_fields::SPD_CL_SUPPORTED>
{
using attr_type = fapi2::ATTR_MEM_EXP_SPD_CL_SUPPORTED_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -610,10 +622,11 @@ struct attrEngineTraits<exp::attr_eff_engine_fields, exp::SPD_CL_SUPPORTED>
///
/// @brief Traits for pre_data_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note AXONE, DIMM_TYPE_METADATA specialization
///
template<>
struct attrEngineTraits<generic_metadata_fields, DIMM_TYPE_METADATA>
template< proc_type P >
struct attrEngineTraits<P, generic_metadata_fields, generic_metadata_fields::DIMM_TYPE_METADATA>
{
using attr_type = fapi2::ATTR_MEM_DIMM_TYPE_METADATA_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -694,10 +707,11 @@ class dimmPosTraits<mss::mc_type::EXPLORER>
///
/// @brief Traits for pre_data_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note generic_metadata_fields, DRAM_GEN_METADATA specialization
///
template<>
struct attrEngineTraits<generic_metadata_fields, DRAM_GEN_METADATA>
template< proc_type P >
struct attrEngineTraits<P, generic_metadata_fields, generic_metadata_fields::DRAM_GEN_METADATA>
{
using attr_type = fapi2::ATTR_MEM_DRAM_GEN_METADATA_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -744,10 +758,11 @@ struct attrEngineTraits<generic_metadata_fields, DRAM_GEN_METADATA>
///
/// @brief Traits for pre_data_engine
/// @class attrEngineTraits
/// @tparam P processor type
/// @note generic_metadata_fields, DIMM_POS_METADATA specialization
///
template<>
struct attrEngineTraits<generic_metadata_fields, DIMM_POS_METADATA>
template< proc_type P >
struct attrEngineTraits<P, generic_metadata_fields, generic_metadata_fields::DIMM_POS_METADATA>
{
using attr_type = fapi2::ATTR_MEM_DIMM_POS_METADATA_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
Expand Down Expand Up @@ -792,33 +807,6 @@ struct attrEngineTraits<generic_metadata_fields, DIMM_POS_METADATA>
}
};

////////////////////////////////////////////////////////
// Explorer specific traits for attrEnumTraits
////////////////////////////////////////////////////////


///
/// @brief Value traits for attr_eff_engine_fields
/// @class attrEngineTraits
/// @note exp::attr_eff_engine_fields are exp DDIMM SPD fields
///
template < >
struct attrEnumTraits<exp::attr_eff_engine_fields>
{
static constexpr size_t DISPATCHER = exp::ATTR_EFF_DISPATCHER;
};

///
/// @brief Value traits for attr_eff_engine_fields
/// @class attrEngineTraits
/// @note generic_metadata_fields used for dimm pos setting
///
template < >
struct attrEnumTraits<generic_metadata_fields>
{
static constexpr size_t DISPATCHER = ATTR_METADATA_DISPATCHER;
};

}//mss

#endif
Expand Up @@ -90,9 +90,9 @@ enum attr_delay_index
/// @brief enum list of explorer SPD derived attributes to set
/// @note these attrs are strictly derived from SPD
/// @warning wrapped in exp namesapce to be distinguished from
/// the generic attr_eff_engine_fields
/// the exp::attr_eff_engine_fields
///
enum attr_eff_engine_fields
enum class attr_eff_engine_fields
{
// Template recursive base case
ATTR_EFF_BASE_CASE = 0,
Expand All @@ -110,7 +110,7 @@ enum attr_eff_engine_fields
ADDRESS_MIRROR = 10,

// Dispatcher set to last enum value
ATTR_EFF_DISPATCHER = ADDRESS_MIRROR,
DISPATCHER = ADDRESS_MIRROR,
};

///
Expand Down
10 changes: 5 additions & 5 deletions src/import/chips/p9a/procedures/hwp/memory/p9a_mss_eff_config.C
Expand Up @@ -94,7 +94,7 @@ fapi2::ReturnCode p9a_mss_eff_config( const fapi2::Target<fapi2::TARGET_TYPE_MEM
FAPI_TRY( mss::efd::factory(l_ocmb, l_vpd_raw, l_vpd_info.iv_rank, l_efd_data) );

// Set up SI ATTRS
FAPI_TRY( mss::attr_si_engine<mss::attr_si_engine_fields>::set(l_efd_data) );
FAPI_TRY( (mss::gen::attr_engine<mss::proc_type::AXONE, mss::attr_si_engine_fields>::set(l_efd_data)) );

// Explorer EFD
FAPI_TRY( mss::exp::efd::process(dimm, l_efd_data));
Expand All @@ -115,18 +115,18 @@ fapi2::ReturnCode p9a_mss_eff_config( const fapi2::Target<fapi2::TARGET_TYPE_MEM
FAPI_TRY( l_rc, "Failed to initialize SPD facade for %s", mss::spd::c_str(dimm) );

// Set up generic SPD ATTRS
FAPI_TRY( mss::attr_eff_engine<mss::attr_eff_engine_fields>::set(l_spd_decoder) );
FAPI_TRY( (mss::gen::attr_engine<mss::proc_type::AXONE, mss::attr_eff_engine_fields>::set(l_spd_decoder)) );

// Set up explorer SPD ATTRS
FAPI_TRY( mss::attr_eff_engine<mss::exp::attr_eff_engine_fields>::set(l_spd_decoder) );
FAPI_TRY( (mss::gen::attr_engine<mss::proc_type::AXONE, mss::exp::attr_eff_engine_fields>::set(l_spd_decoder)) );

// Set up pmic SPD ATTRS
FAPI_TRY( mss::attr_eff_engine<mss::pmic::attr_eff_engine_fields>::set(l_spd_decoder) );
FAPI_TRY( (mss::gen::attr_engine<mss::proc_type::AXONE, mss::pmic::attr_eff_engine_fields>::set(l_spd_decoder)) );
}
}

// Set up derived ATTRS
FAPI_TRY( mss::attr_derived_engine<mss::attr_engine_derived_fields>::set(dimm) );
FAPI_TRY( (mss::gen::attr_engine<mss::proc_type::AXONE, mss::attr_engine_derived_fields>::set(dimm)) );

}// dimm

Expand Down
9 changes: 7 additions & 2 deletions src/import/chips/p9a/procedures/hwp/memory/p9a_mss_freq.C
Expand Up @@ -78,8 +78,13 @@ fapi2::ReturnCode p9a_mss_freq( const fapi2::Target<fapi2::TARGET_TYPE_MEM_PORT>
// Checks that the facade was setup correctly
FAPI_TRY( l_rc, "Failed to initialize SPD facade for %s", mss::spd::c_str(d) );

FAPI_TRY( mss::attr_eff_engine<mss::pre_data_init_fields>::set(l_spd_decoder) );
FAPI_TRY( mss::attr_derived_engine<mss::generic_metadata_fields>::set(d) );
// Set pre-eff_config SPD driven attributes
FAPI_TRY( (mss::gen::attr_engine<mss::proc_type::AXONE, mss::pre_data_init_fields>::set(l_spd_decoder)),
"Failed gen::attr_engine<mss::proc_type::AXONE, mss::pre_data_init_fields>::set on %s", mss::spd::c_str(d) );

// Set pre_eff_config attributes derived from other attributes
FAPI_TRY( (mss::gen::attr_engine<mss::proc_type::AXONE, mss::generic_metadata_fields>::set(d)),
"Failed gen::attr_engine<mss::proc_type::AXONE, mss::generic_metadata_fields>::set on %s", mss::spd::c_str(d) );
}

}
Expand Down

0 comments on commit 831f9e0

Please sign in to comment.