summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndre Marin <aamarin@us.ibm.com>2019-07-09 15:50:06 -0400
committerDaniel M Crowell <dcrowell@us.ibm.com>2019-07-19 09:07:03 -0500
commit831f9e0d8b3297f38acd3f059b853f5711877530 (patch)
treea9b405fc568edca26ce2239fc15adc442c520794 /src
parentdd6aa0faadde7069f8bf628b5557b98206730c2c (diff)
downloadtalos-hostboot-831f9e0d8b3297f38acd3f059b853f5711877530.tar.gz
talos-hostboot-831f9e0d8b3297f38acd3f059b853f5711877530.zip
Fix HB error with -Os compile flag due to eff_config
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>
Diffstat (limited to 'src')
-rw-r--r--src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_attr_engine_traits.H333
-rw-r--r--src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.C3
-rw-r--r--src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.H4
-rw-r--r--src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_consts.H4
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/eff_config/explorer_attr_engine_traits.H102
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H6
-rw-r--r--src/import/chips/p9a/procedures/hwp/memory/p9a_mss_eff_config.C10
-rw-r--r--src/import/chips/p9a/procedures/hwp/memory/p9a_mss_freq.C9
-rw-r--r--src/import/generic/memory/lib/data_engine/attr_engine_traits.H308
-rw-r--r--src/import/generic/memory/lib/data_engine/data_engine.H132
-rw-r--r--src/import/generic/memory/lib/data_engine/data_engine_traits_def.H54
-rw-r--r--src/import/generic/memory/lib/data_engine/data_engine_utils.H71
-rw-r--r--src/import/generic/memory/lib/data_engine/p9a/p9a_data_init_traits.H18
-rw-r--r--src/import/generic/memory/lib/data_engine/p9n/p9n_data_init_traits.H29
-rw-r--r--src/import/generic/memory/lib/data_engine/pre_data_init.H15
-rw-r--r--src/import/generic/memory/lib/utils/dimm/mss_timing.H6
16 files changed, 529 insertions, 575 deletions
diff --git a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_attr_engine_traits.H b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_attr_engine_traits.H
index 4f5d51df3..cd4ee2a02 100644
--- a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_attr_engine_traits.H
+++ b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_attr_engine_traits.H
@@ -52,19 +52,21 @@ namespace mss
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, ATTR_EFF_BASE_CASE specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, ATTR_EFF_BASE_CASE partial specialization
/// NOP for base case needed to trigger partial specialization of attr_engine
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::ATTR_EFF_BASE_CASE> {};
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::ATTR_EFF_BASE_CASE> {};
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, DRAM_MODULE_HEIGHT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, DRAM_MODULE_HEIGHT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::DRAM_MODULE_HEIGHT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::DRAM_MODULE_HEIGHT>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_MODULE_HEIGHT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -115,10 +117,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::DRAM_MODULE_HEIGHT>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_MFG_ID specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_MFG_ID partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_MFG_ID>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_MFG_ID>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_MFG_ID_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -165,10 +168,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_MFG_ID>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWA_VOLTAGE_SETTING specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWA_VOLTAGE_SETTING partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_VOLTAGE_SETTING>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWA_VOLTAGE_SETTING>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWA_VOLTAGE_SETTING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -215,10 +219,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_VOLTAGE_SE
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWA_VOLTAGE_RANGE_SELECT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWA_VOLTAGE_RANGE_SELECT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_VOLTAGE_RANGE_SELECT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWA_VOLTAGE_RANGE_SELECT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWA_VOLTAGE_RANGE_SELECT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -265,10 +270,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_VOLTAGE_RA
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWA_VOLTAGE_OFFSET specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWA_VOLTAGE_OFFSET partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_VOLTAGE_OFFSET>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWA_VOLTAGE_OFFSET>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWA_VOLTAGE_OFFSET_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -323,10 +329,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_VOLTAGE_OF
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWA_SEQUENCE_DELAY specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWA_SEQUENCE_DELAY partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_SEQUENCE_DELAY>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWA_SEQUENCE_DELAY>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWA_SEQUENCE_DELAY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -373,10 +380,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_SEQUENCE_D
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWA_SEQUENCE_ORDER specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWA_SEQUENCE_ORDER partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_SEQUENCE_ORDER>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWA_SEQUENCE_ORDER>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWA_SEQUENCE_ORDER_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -423,10 +431,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWA_SEQUENCE_O
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWB_VOLTAGE_SETTING specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWB_VOLTAGE_SETTING partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_VOLTAGE_SETTING>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWB_VOLTAGE_SETTING>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWB_VOLTAGE_SETTING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -473,10 +482,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_VOLTAGE_SE
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWB_VOLTAGE_RANGE_SELECT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWB_VOLTAGE_RANGE_SELECT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_VOLTAGE_RANGE_SELECT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWB_VOLTAGE_RANGE_SELECT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWB_VOLTAGE_RANGE_SELECT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -523,10 +533,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_VOLTAGE_RA
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWB_VOLTAGE_OFFSET specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWB_VOLTAGE_OFFSET partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_VOLTAGE_OFFSET>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWB_VOLTAGE_OFFSET>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWB_VOLTAGE_OFFSET_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -581,10 +592,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_VOLTAGE_OF
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWB_SEQUENCE_DELAY specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWB_SEQUENCE_DELAY partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_SEQUENCE_DELAY>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWB_SEQUENCE_DELAY>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWB_SEQUENCE_DELAY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -631,10 +643,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_SEQUENCE_D
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWB_SEQUENCE_ORDER specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWB_SEQUENCE_ORDER partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_SEQUENCE_ORDER>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWB_SEQUENCE_ORDER>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWB_SEQUENCE_ORDER_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -682,10 +695,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWB_SEQUENCE_O
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWC_VOLTAGE_SETTING specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWC_VOLTAGE_SETTING partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_VOLTAGE_SETTING>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWC_VOLTAGE_SETTING>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWC_VOLTAGE_SETTING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -732,10 +746,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_VOLTAGE_SE
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWC_VOLTAGE_RANGE_SELECT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWC_VOLTAGE_RANGE_SELECT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_VOLTAGE_RANGE_SELECT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWC_VOLTAGE_RANGE_SELECT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWC_VOLTAGE_RANGE_SELECT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -782,10 +797,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_VOLTAGE_RA
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWC_VOLTAGE_OFFSET specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWC_VOLTAGE_OFFSET partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_VOLTAGE_OFFSET>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWC_VOLTAGE_OFFSET>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWC_VOLTAGE_OFFSET_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -840,10 +856,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_VOLTAGE_OF
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWC_SEQUENCE_DELAY specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWC_SEQUENCE_DELAY partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_SEQUENCE_DELAY>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWC_SEQUENCE_DELAY>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWC_SEQUENCE_DELAY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -890,10 +907,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_SEQUENCE_D
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWC_SEQUENCE_ORDER specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWC_SEQUENCE_ORDER partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_SEQUENCE_ORDER>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWC_SEQUENCE_ORDER>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWC_SEQUENCE_ORDER_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -941,10 +959,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWC_SEQUENCE_O
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWD_VOLTAGE_SETTING specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWD_VOLTAGE_SETTING partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_VOLTAGE_SETTING>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWD_VOLTAGE_SETTING>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWD_VOLTAGE_SETTING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -991,10 +1010,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_VOLTAGE_SE
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWD_VOLTAGE_RANGE_SELECT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWD_VOLTAGE_RANGE_SELECT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_VOLTAGE_RANGE_SELECT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWD_VOLTAGE_RANGE_SELECT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWD_VOLTAGE_RANGE_SELECT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1041,10 +1061,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_VOLTAGE_RA
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWD_VOLTAGE_OFFSET specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWD_VOLTAGE_OFFSET partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_VOLTAGE_OFFSET>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWD_VOLTAGE_OFFSET>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWD_VOLTAGE_OFFSET_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1099,10 +1120,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_VOLTAGE_OF
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWD_SEQUENCE_DELAY specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWD_SEQUENCE_DELAY partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_SEQUENCE_DELAY>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWD_SEQUENCE_DELAY>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWD_SEQUENCE_DELAY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1149,10 +1171,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_SEQUENCE_D
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_SWD_SEQUENCE_ORDER specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_SWD_SEQUENCE_ORDER partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_SEQUENCE_ORDER>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_SWD_SEQUENCE_ORDER>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_SWD_SEQUENCE_ORDER_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1199,10 +1222,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_SWD_SEQUENCE_O
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC0_PHASE_COMB specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC0_PHASE_COMB partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_PHASE_COMB>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC0_PHASE_COMB>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC0_PHASE_COMB_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1254,10 +1278,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC0_PHASE_COMB>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_MFG_ID specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_MFG_ID partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_MFG_ID>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_MFG_ID>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_MFG_ID_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1304,10 +1329,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_MFG_ID>
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWA_VOLTAGE_SETTING specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWA_VOLTAGE_SETTING partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_VOLTAGE_SETTING>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWA_VOLTAGE_SETTING>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWA_VOLTAGE_SETTING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1354,10 +1380,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_VOLTAGE_SE
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWA_VOLTAGE_RANGE_SELECT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWA_VOLTAGE_RANGE_SELECT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_VOLTAGE_RANGE_SELECT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWA_VOLTAGE_RANGE_SELECT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWA_VOLTAGE_RANGE_SELECT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1404,10 +1431,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_VOLTAGE_RA
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWA_VOLTAGE_OFFSET specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWA_VOLTAGE_OFFSET partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_VOLTAGE_OFFSET>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWA_VOLTAGE_OFFSET>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWA_VOLTAGE_OFFSET_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1462,10 +1490,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_VOLTAGE_OF
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWA_SEQUENCE_DELAY specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWA_SEQUENCE_DELAY partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_SEQUENCE_DELAY>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWA_SEQUENCE_DELAY>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWA_SEQUENCE_DELAY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1512,10 +1541,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_SEQUENCE_D
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWA_SEQUENCE_ORDER specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWA_SEQUENCE_ORDER partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_SEQUENCE_ORDER>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWA_SEQUENCE_ORDER>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWA_SEQUENCE_ORDER_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1562,10 +1592,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWA_SEQUENCE_O
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWB_VOLTAGE_SETTING specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWB_VOLTAGE_SETTING partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_VOLTAGE_SETTING>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWB_VOLTAGE_SETTING>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWB_VOLTAGE_SETTING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1612,10 +1643,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_VOLTAGE_SE
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWB_VOLTAGE_RANGE_SELECT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWB_VOLTAGE_RANGE_SELECT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_VOLTAGE_RANGE_SELECT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWB_VOLTAGE_RANGE_SELECT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWB_VOLTAGE_RANGE_SELECT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1662,10 +1694,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_VOLTAGE_RA
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWB_VOLTAGE_OFFSET specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWB_VOLTAGE_OFFSET partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_VOLTAGE_OFFSET>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWB_VOLTAGE_OFFSET>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWB_VOLTAGE_OFFSET_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1720,10 +1753,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_VOLTAGE_OF
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWB_SEQUENCE_DELAY specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWB_SEQUENCE_DELAY partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_SEQUENCE_DELAY>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWB_SEQUENCE_DELAY>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWB_SEQUENCE_DELAY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1770,10 +1804,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_SEQUENCE_D
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWB_SEQUENCE_ORDER specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWB_SEQUENCE_ORDER partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_SEQUENCE_ORDER>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWB_SEQUENCE_ORDER>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWB_SEQUENCE_ORDER_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1820,10 +1855,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWB_SEQUENCE_O
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWC_VOLTAGE_SETTING specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWC_VOLTAGE_SETTING partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_VOLTAGE_SETTING>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWC_VOLTAGE_SETTING>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWC_VOLTAGE_SETTING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1870,10 +1906,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_VOLTAGE_SE
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWC_VOLTAGE_RANGE_SELECT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWC_VOLTAGE_RANGE_SELECT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_VOLTAGE_RANGE_SELECT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWC_VOLTAGE_RANGE_SELECT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWC_VOLTAGE_RANGE_SELECT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1920,10 +1957,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_VOLTAGE_RA
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWC_VOLTAGE_OFFSET specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWC_VOLTAGE_OFFSET partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_VOLTAGE_OFFSET>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWC_VOLTAGE_OFFSET>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWC_VOLTAGE_OFFSET_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1978,10 +2016,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_VOLTAGE_OF
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWC_SEQUENCE_DELAY specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWC_SEQUENCE_DELAY partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_SEQUENCE_DELAY>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWC_SEQUENCE_DELAY>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWC_SEQUENCE_DELAY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2028,10 +2067,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_SEQUENCE_D
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWC_SEQUENCE_ORDER specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWC_SEQUENCE_ORDER partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_SEQUENCE_ORDER>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWC_SEQUENCE_ORDER>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWC_SEQUENCE_ORDER_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2078,10 +2118,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWC_SEQUENCE_O
///
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWD_VOLTAGE_SETTING specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWD_VOLTAGE_SETTING partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_VOLTAGE_SETTING>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWD_VOLTAGE_SETTING>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWD_VOLTAGE_SETTING_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2128,10 +2169,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_VOLTAGE_SE
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWD_VOLTAGE_RANGE_SELECT specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWD_VOLTAGE_RANGE_SELECT partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_VOLTAGE_RANGE_SELECT>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWD_VOLTAGE_RANGE_SELECT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWD_VOLTAGE_RANGE_SELECT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2178,10 +2220,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_VOLTAGE_RA
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWD_VOLTAGE_OFFSET specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWD_VOLTAGE_OFFSET partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_VOLTAGE_OFFSET>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWD_VOLTAGE_OFFSET>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWD_VOLTAGE_OFFSET_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2236,10 +2279,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_VOLTAGE_OF
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWD_SEQUENCE_DELAY specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWD_SEQUENCE_DELAY partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_SEQUENCE_DELAY>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWD_SEQUENCE_DELAY>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWD_SEQUENCE_DELAY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2286,10 +2330,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_SEQUENCE_D
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_SWD_SEQUENCE_ORDER specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_SWD_SEQUENCE_ORDER partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_SEQUENCE_ORDER>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_SWD_SEQUENCE_ORDER>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_SWD_SEQUENCE_ORDER_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2336,10 +2381,11 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_SWD_SEQUENCE_O
//
/// @brief Traits for attr_engine
/// @class attrEngineTraits
-/// @note attr_eff_engine_fields, PMIC1_PHASE_COMB specialization
+/// @tparam P processor type
+/// @note P, pmic::attr_eff_engine_fields, PMIC1_PHASE_COMB partial specialization
///
-template<>
-struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_PHASE_COMB>
+template< proc_type P>
+struct attrEngineTraits<P, pmic::attr_eff_engine_fields, pmic::attr_eff_engine_fields::PMIC1_PHASE_COMB>
{
using attr_type = fapi2::ATTR_MEM_EFF_PMIC1_PHASE_COMB_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2383,17 +2429,6 @@ struct attrEngineTraits<pmic::attr_eff_engine_fields, pmic::PMIC1_PHASE_COMB>
}
};
-///
-/// @brief Value traits for attr_eff_engine_fields
-/// @class attrEngineTraits
-/// @note attr_eff_engine_fields
-///
-template < >
-struct attrEnumTraits<pmic::attr_eff_engine_fields>
-{
- static constexpr size_t DISPATCHER = pmic::ATTR_EFF_DISPATCHER;
-};
-
}//mss
#endif
diff --git a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.C b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.C
index 58bbc9aa2..32e3157cb 100644
--- a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.C
+++ b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.C
@@ -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>
diff --git a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.H b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.H
index 9a6997889..e09d8087f 100644
--- a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.H
+++ b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/eff_config/pmic_efd_processing.H
@@ -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
{
diff --git a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_consts.H b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_consts.H
index 96d7e9932..8908d8779 100644
--- a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_consts.H
+++ b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_consts.H
@@ -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,
@@ -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,
};
///
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/eff_config/explorer_attr_engine_traits.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/eff_config/explorer_attr_engine_traits.H
index ff72e2e65..8ed2289b5 100644
--- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/eff_config/explorer_attr_engine_traits.H
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/eff_config/explorer_attr_engine_traits.H
@@ -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";
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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
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 910213e59..b2b93fedf 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
@@ -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,
@@ -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,
};
///
diff --git a/src/import/chips/p9a/procedures/hwp/memory/p9a_mss_eff_config.C b/src/import/chips/p9a/procedures/hwp/memory/p9a_mss_eff_config.C
index 059121ac3..2e20bac7a 100644
--- a/src/import/chips/p9a/procedures/hwp/memory/p9a_mss_eff_config.C
+++ b/src/import/chips/p9a/procedures/hwp/memory/p9a_mss_eff_config.C
@@ -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));
@@ -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
diff --git a/src/import/chips/p9a/procedures/hwp/memory/p9a_mss_freq.C b/src/import/chips/p9a/procedures/hwp/memory/p9a_mss_freq.C
index 6646ba5c4..73b7ed5a8 100644
--- a/src/import/chips/p9a/procedures/hwp/memory/p9a_mss_freq.C
+++ b/src/import/chips/p9a/procedures/hwp/memory/p9a_mss_freq.C
@@ -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) );
}
}
diff --git a/src/import/generic/memory/lib/data_engine/attr_engine_traits.H b/src/import/generic/memory/lib/data_engine/attr_engine_traits.H
index d78a0aa95..4a89e13ec 100644
--- a/src/import/generic/memory/lib/data_engine/attr_engine_traits.H
+++ b/src/import/generic/memory/lib/data_engine/attr_engine_traits.H
@@ -53,11 +53,12 @@ namespace mss
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_eff_engine_fields, PRIM_STACK_TYPE specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, PRIM_STACK_TYPE>
+template< proc_type P >
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::PRIM_STACK_TYPE>
{
using attr_type = fapi2::ATTR_MEM_EFF_PRIM_STACK_TYPE_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -103,11 +104,12 @@ struct attrEngineTraits<attr_eff_engine_fields, PRIM_STACK_TYPE>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_eff_engine_fields, PRIM_DIE_COUNT specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, PRIMARY_DIE_COUNT>
+template< proc_type P >
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::PRIMARY_DIE_COUNT>
{
using attr_type = fapi2::ATTR_MEM_EFF_PRIM_DIE_COUNT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -182,11 +184,12 @@ struct attrEngineTraits<attr_eff_engine_fields, PRIMARY_DIE_COUNT>
///
/// @brief Traits for pre_data_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_eff_engine_fields, DRAM_DENSITY specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_DENSITY>
+template< proc_type P >
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_DENSITY>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_DENSITY_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -254,11 +257,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_DENSITY>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_engine_derived_fields, BUS_WIDTH specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, PRIM_BUS_WIDTH>
+template< proc_type P >
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::PRIM_BUS_WIDTH>
{
using attr_type = fapi2::ATTR_MEM_EFF_PRIM_BUS_WIDTH_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -330,11 +334,12 @@ struct attrEngineTraits<attr_eff_engine_fields, PRIM_BUS_WIDTH>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_eff_engine_fields, DRAM_WIDTH specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_WIDTH>
+template< proc_type P >
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_WIDTH>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_WIDTH_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -407,11 +412,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_WIDTH>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, COLUMN_ADDR_BITS specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, COLUMN_ADDR_BITS>
+template< proc_type P >
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::COLUMN_ADDR_BITS>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_COLUMN_BITS_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -471,11 +477,12 @@ struct attrEngineTraits<attr_eff_engine_fields, COLUMN_ADDR_BITS>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, ROW_ADDR_BITS specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, ROW_ADDR_BITS>
+template< proc_type P >
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::ROW_ADDR_BITS>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_ROW_BITS_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -543,19 +550,21 @@ struct attrEngineTraits<attr_eff_engine_fields, ROW_ADDR_BITS>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, ATTR_SI_BASE_CASE specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, ATTR_SI_BASE_CASE> {};
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::ATTR_SI_BASE_CASE> {};
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_RCV_IMP_DQ_DQS specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_RCV_IMP_DQ_DQS>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_RCV_IMP_DQ_DQS>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_RCV_IMP_DQ_DQS_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -622,11 +631,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_RCV_IMP_DQ_DQS>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_DRV_IMP_DQ_DQS_PULL_UP specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_IMP_DQ_DQS_PULL_UP>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_DRV_IMP_DQ_DQS_PULL_UP>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_DRV_IMP_DQ_DQS_PULL_UP_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -706,11 +716,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_IMP_DQ_DQS_PULL_UP>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_DRV_IMP_DQ_DQS_PULL_DOWN specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_IMP_DQ_DQS_PULL_DOWN>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_DRV_IMP_DQ_DQS_PULL_DOWN>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_DRV_IMP_DQ_DQS_PULL_DOWN_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -791,11 +802,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_IMP_DQ_DQS_PULL_DOWN>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_DQ_DQS specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_DQ_DQS>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_DRV_SLEW_RATE_DQ_DQS>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_DRV_SLEW_RATE_DQ_DQS_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -841,11 +853,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_DQ_DQS>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_DRV_IMP_CMD_ADDR specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_IMP_CMD_ADDR>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_DRV_IMP_CMD_ADDR>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_DRV_IMP_CMD_ADDR_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -913,11 +926,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_IMP_CMD_ADDR>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_CMD_ADDR specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_CMD_ADDR>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_DRV_SLEW_RATE_CMD_ADDR>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_DRV_SLEW_RATE_CMD_ADDR_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -963,11 +977,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_CMD_ADDR>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_DRV_IMP_CLK specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_IMP_CLK>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_DRV_IMP_CLK>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_DRV_IMP_CLK_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1035,11 +1050,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_IMP_CLK>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_CLK specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_CLK>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_DRV_SLEW_RATE_CLK>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_DRV_SLEW_RATE_CLK_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1085,11 +1101,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_SLEW_RATE_CLK>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_RCV_IMP_ALERT_N specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_RCV_IMP_ALERT_N>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_RCV_IMP_ALERT_N>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_RCV_IMP_ALERT_N_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1157,11 +1174,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_RCV_IMP_ALERT_N>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_DRAM_RTT_NOM specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_RTT_NOM>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_DRAM_RTT_NOM>
{
using attr_type = fapi2::ATTR_MEM_SI_DRAM_RTT_NOM_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1227,11 +1245,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_RTT_NOM>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_DRAM_RTT_WR specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_RTT_WR>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_DRAM_RTT_WR>
{
using attr_type = fapi2::ATTR_MEM_SI_DRAM_RTT_WR_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1294,11 +1313,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_RTT_WR>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_DRAM_RTT_PARK specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_RTT_PARK>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_DRAM_RTT_PARK>
{
using attr_type = fapi2::ATTR_MEM_SI_DRAM_RTT_PARK_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1366,11 +1386,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_RTT_PARK>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_DRAM_PREAMBLE specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_PREAMBLE>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_DRAM_PREAMBLE>
{
using attr_type = fapi2::ATTR_MEM_SI_DRAM_PREAMBLE_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1417,11 +1438,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_PREAMBLE>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_MC_DRV_EQ_DQ_DQS specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_EQ_DQ_DQS>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_MC_DRV_EQ_DQ_DQS>
{
using attr_type = fapi2::ATTR_MEM_SI_MC_DRV_EQ_DQ_DQS_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1467,11 +1489,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_MC_DRV_EQ_DQ_DQS>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_DRAM_DRV_IMP_DQ_DQS specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_DRV_IMP_DQ_DQS>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_DRAM_DRV_IMP_DQ_DQS>
{
using attr_type = fapi2::ATTR_MEM_SI_DRAM_DRV_IMP_DQ_DQS_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1534,11 +1557,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_DRAM_DRV_IMP_DQ_DQS>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_ODT_WR specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_ODT_WR>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_ODT_WR>
{
using attr_type = fapi2::ATTR_MEM_SI_ODT_WR_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1618,11 +1642,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_ODT_WR>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_ODT_RD specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_ODT_RD>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_ODT_RD>
{
using attr_type = fapi2::ATTR_MEM_SI_ODT_RD_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1702,11 +1727,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_ODT_RD>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_si_engine_fields, SI_GEARDOWN_MODE specialization
///
-template<>
-struct attrEngineTraits<attr_si_engine_fields, SI_GEARDOWN_MODE>
+template< proc_type P >
+struct attrEngineTraits<P, attr_si_engine_fields, attr_si_engine_fields::SI_GEARDOWN_MODE>
{
using attr_type = fapi2::ATTR_MEM_SI_GEARDOWN_MODE_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1756,11 +1782,12 @@ struct attrEngineTraits<attr_si_engine_fields, SI_GEARDOWN_MODE>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, MRANKS specialization
///
-template<>
-struct attrEngineTraits<attr_engine_derived_fields, LOGICAL_RANKS>
+template< proc_type P >
+struct attrEngineTraits<P, attr_engine_derived_fields, attr_engine_derived_fields::LOGICAL_RANKS>
{
using attr_type = fapi2::ATTR_MEM_EFF_LOGICAL_RANKS_PER_DIMM_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1825,11 +1852,12 @@ struct attrEngineTraits<attr_engine_derived_fields, LOGICAL_RANKS>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_engine_derived_fields, MEM_DIMM_SIZE specialization
///
-template<>
-struct attrEngineTraits<attr_engine_derived_fields, MEM_DIMM_SIZE>
+template< proc_type P >
+struct attrEngineTraits<P, attr_engine_derived_fields, attr_engine_derived_fields::MEM_DIMM_SIZE>
{
using attr_type = fapi2::ATTR_MEM_EFF_DIMM_SIZE_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1894,11 +1922,12 @@ struct attrEngineTraits<attr_engine_derived_fields, MEM_DIMM_SIZE>
///
/// @brief Traits for attr_engine
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attr_engine_derived_fields, HEIGHT_3DS specialization
///
-template<>
-struct attrEngineTraits<attr_engine_derived_fields, HEIGHT_3DS>
+template< proc_type P >
+struct attrEngineTraits<P, attr_engine_derived_fields, attr_engine_derived_fields::HEIGHT_3DS>
{
using attr_type = fapi2::ATTR_MEM_3DS_HEIGHT_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -1966,11 +1995,12 @@ struct attrEngineTraits<attr_engine_derived_fields, HEIGHT_3DS>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_CWL specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_CWL>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_CWL>
{
using attr_type = fapi2::ATTR_MEM_DRAM_CWL_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2063,11 +2093,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_CWL>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TREFI specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TREFI>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TREFI>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TREFI_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2199,11 +2230,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TREFI>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TCCD_L specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TCCD_L>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TCCD_L>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TCCD_L_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2299,11 +2331,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TCCD_L>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TWTR_L specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TWTR_L>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TWTR_L>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TWTR_L_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2390,11 +2423,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TWTR_L>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TWTR_S specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TWTR_S>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TWTR_S>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TWTR_S_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2481,11 +2515,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TWTR_S>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TFAW specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TFAW>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TFAW>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TFAW_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2598,11 +2633,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TFAW>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TRCD specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRCD>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TRCD>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TRCD_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2697,11 +2733,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRCD>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TRP specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRP>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TRP>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TRP_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2799,11 +2836,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRP>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TRAS specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRAS>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TRAS>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TRAS_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2883,11 +2921,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRAS>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TWR specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TWR>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TWR>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TWR_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -2980,11 +3019,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TWR>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TRTP specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRTP>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TRTP>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TRTP_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -3056,11 +3096,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRTP>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TRRD_S specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRRD_S>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TRRD_S>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TRRD_S_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -3178,11 +3219,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRRD_S>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TRRD_L specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRRD_L>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TRRD_L>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TRRD_L_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -3300,11 +3342,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRRD_L>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TRFC specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRFC>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TRFC>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TRFC_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -3427,11 +3470,12 @@ struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRFC>
///
/// @brief Traits for attrEngineTraits
-/// @class attrEngineTraits
+/// @class attrEngineTraits - partial specialization
+/// @tparam P processor type
/// @note attrEngineTraits, DRAM_TRFC_DLR specialization
///
-template<>
-struct attrEngineTraits<attr_eff_engine_fields, DRAM_TRFC_DLR>
+template<proc_type P>
+struct attrEngineTraits<P, attr_eff_engine_fields, attr_eff_engine_fields::DRAM_TRFC_DLR>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_TRFC_DLR_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
diff --git a/src/import/generic/memory/lib/data_engine/data_engine.H b/src/import/generic/memory/lib/data_engine/data_engine.H
index 806fbf024..a4dfbf8ae 100644
--- a/src/import/generic/memory/lib/data_engine/data_engine.H
+++ b/src/import/generic/memory/lib/data_engine/data_engine.H
@@ -135,138 +135,6 @@ fapi_try_exit:
return fapi2::current_err;
}
-///
-/// @brief Sets preliminary data fields
-/// @tparam F pre_data_init_fields
-/// @tparam T FAPI2 target type
-/// @tparam IT Input data type
-/// @tparam TT defaulted to preDataInitTraits<T>
-/// @param[in] i_setting value we want to set attr with
-/// @return FAPI2_RC_SUCCESS iff okay
-///
-template< attr_eff_engine_fields F,
- fapi2::TargetType T,
- typename IT,
- typename TT = mss::attrEngineTraits<decltype(F), F>
- >
-inline fapi2::ReturnCode set_field(const fapi2::Target<T>& i_target,
- const IT i_setting)
-{
- FAPI_TRY( (gen::set_field<TT>(i_target, i_setting)),
- "Failed set_field() for %s", spd::c_str(i_target) );
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Value traits for attrEnumTraits
-/// @class attrEnumTraits - attr_si_engine_fields specialization
-///
-template < >
-struct attrEnumTraits<attr_si_engine_fields>
-{
- static constexpr size_t DISPATCHER = ATTR_SI_DISPATCHER;
-};
-
-///
-/// @brief Value traits for attrEnumTraits
-/// @class attrEnumTraits - attr_eff_engine_fields specialization
-///
-template < >
-struct attrEnumTraits<attr_eff_engine_fields>
-{
- static constexpr size_t DISPATCHER = ATTR_EFF_DISPATCHER;
-};
-
-///
-/// @brief Value traits for attrEnumTraits
-/// @class attrEnumTraits - attr_eff_engine_fields specialization
-///
-template < >
-struct attrEnumTraits<pre_data_init_fields>
-{
- static constexpr size_t DISPATCHER = ATTR_PRE_DATA_ENG_DISPATCHER;
-};
-
-///
-/// @brief Value traits for attrEnumTraits
-/// @class attrEnumTraits - attr_eff_engine_fields specialization
-///
-template < >
-struct attrEnumTraits<attr_engine_derived_fields>
-{
- static constexpr size_t DISPATCHER = ATTR_DERIVED_DISPATCHER;
-};
-
-///
-/// @brief attribute signal integrity engine
-/// @class attr_si_engine
-/// @tparam ET field enumeration type
-/// @tparam TT defaulted to attrEnumTraits<ET>
-///
-template < typename ET, typename TT = attrEnumTraits<ET> >
-struct attr_si_engine
-{
- using attr_eng_t = gen::attr_engine<ET, static_cast<ET>(TT::DISPATCHER)>;
-
- ///
- /// @brief Sets attr_si_engine_fields
- /// @tparam[in] IT rank input type
- /// @param[in] i_target the DIMM target
- /// @param[in] i_efd_data EFD data
- /// @param[in] i_rank current rank
- /// @return FAPI2_RC_SUCCESS iff ok
- ///
- static fapi2::ReturnCode set(const std::shared_ptr<efd::base_decoder>& i_efd_data)
- {
- return attr_eng_t::set(i_efd_data);
- }
-};
-
-///
-/// @brief Data structure to set effective config EFF data
-/// @class pre_attr_eff_engine
-/// @tparam F attr_eff_engine_fields enum
-///
-template < typename ET, typename TT = attrEnumTraits<ET> >
-struct attr_eff_engine
-{
- using attr_eng_t = gen::attr_engine<ET, static_cast<ET>(TT::DISPATCHER)>;
-
- ///
- /// @brief Sets attr_si_engine_fields
- /// @param[in] i_target the DIMM target
- /// @param[in] i_spd_data EFD data
- /// @return FAPI2_RC_SUCCESS iff ok
- ///
- static fapi2::ReturnCode set(const mss::spd::facade& i_spd_data)
- {
- return attr_eng_t::set(i_spd_data);
- }
-};
-
-///
-/// @brief Data structure to set effective config EFF data
-/// @class attr_derived_engine
-/// @tparam ET attr fields enum type
-///
-template < typename ET, typename TT = attrEnumTraits<ET> >
-struct attr_derived_engine
-{
- using attr_eng_t = gen::attr_engine<ET, static_cast<ET>(TT::DISPATCHER)>;
-
- ///
- /// @brief Sets attr fields denoted by an eum list
- /// @param[in] i_target the DIMM target
- /// @return FAPI2_RC_SUCCESS iff ok
- ///
- static fapi2::ReturnCode set(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target)
- {
- return attr_eng_t::set(i_target);
- }
-};
-
}// mss
#endif
diff --git a/src/import/generic/memory/lib/data_engine/data_engine_traits_def.H b/src/import/generic/memory/lib/data_engine/data_engine_traits_def.H
index 702e0db9a..14c6bc518 100644
--- a/src/import/generic/memory/lib/data_engine/data_engine_traits_def.H
+++ b/src/import/generic/memory/lib/data_engine/data_engine_traits_def.H
@@ -45,7 +45,7 @@ namespace mss
///
/// @brief enum list of preliminary data fields needed before eff_config
///
-enum pre_data_init_fields
+enum class pre_data_init_fields
{
// Template recursive base case
ATTR_PRE_DATA_ENGINE_CASE = 0,
@@ -60,7 +60,7 @@ enum pre_data_init_fields
DIMM_RANKS_CNFG = 7,
// Dispatcher set to last enum value
- ATTR_PRE_DATA_ENG_DISPATCHER = DIMM_RANKS_CNFG,
+ DISPATCHER = DIMM_RANKS_CNFG,
};
///
@@ -70,7 +70,7 @@ enum pre_data_init_fields
/// (e.g. Nimbus vs Axone)
/// @warning these depend on pre_data_init_fields fields being set
///
-enum generic_metadata_fields
+enum class generic_metadata_fields
{
// Template recursive base case
ATTR_METADATA_BASE_CASE = 0,
@@ -81,13 +81,13 @@ enum generic_metadata_fields
DIMM_POS_METADATA = 3,
// Dispatcher set to last enum value
- ATTR_METADATA_DISPATCHER = DIMM_POS_METADATA,
+ DISPATCHER = DIMM_POS_METADATA,
};
///
/// @brief enum list of SPD based attr fields to set
///
-enum attr_eff_engine_fields
+enum class attr_eff_engine_fields
{
// Template recursive base case
ATTR_EFF_BASE_CASE = 0,
@@ -117,13 +117,13 @@ enum attr_eff_engine_fields
ROW_ADDR_BITS = 22,
// Dispatcher set to last enum value
- ATTR_EFF_DISPATCHER = ROW_ADDR_BITS,
+ DISPATCHER = ROW_ADDR_BITS,
};
///
/// @brief enum list of SI attr fields to set from EFD
///
-enum attr_si_engine_fields
+enum class attr_si_engine_fields
{
// Template recursive base case
ATTR_SI_BASE_CASE = 0,
@@ -149,7 +149,7 @@ enum attr_si_engine_fields
SI_GEARDOWN_MODE = 18,
// Dispatcher set to last enum value
- ATTR_SI_DISPATCHER = SI_GEARDOWN_MODE,
+ DISPATCHER = SI_GEARDOWN_MODE,
};
///
@@ -157,7 +157,7 @@ enum attr_si_engine_fields
/// @note these are attributes that are derived from other
/// attributes or other APIs.
///
-enum attr_engine_derived_fields
+enum class attr_engine_derived_fields
{
// Attributes are set recursively from the bottom up.
// When adding attrs that depend on other attrs
@@ -173,22 +173,22 @@ enum attr_engine_derived_fields
LOGICAL_RANKS = 3,
// Dispatcher set to last enum value
- ATTR_DERIVED_DISPATCHER = LOGICAL_RANKS,
+ DISPATCHER = LOGICAL_RANKS,
};
///
/// @brief Forward declartion of traits for pre_data_engine
/// @class preDataInitTraits
-/// @tparam T proc_type (e.g. Nimbus, Axone, etc.)
+/// @tparam P processor type (e.g. Nimbus, Axone, etc.)
/// @tparam TT pre_data_init_fields (e.g. DIMM_TYPE, MRANK, etc.)
///
-template< proc_type T, pre_data_init_fields TT >
+template< proc_type P, pre_data_init_fields TT >
class preDataInitTraits;
///
/// @brief Traits associated with DIMM positioning
/// @class dimmPosTraits
-/// @tparam MC the MC type
+/// @tparam MC the memory controller type
///
template< mss::mc_type MC >
class dimmPosTraits;
@@ -196,10 +196,11 @@ class dimmPosTraits;
///
/// @brief Forward declartion of traits for attrEngineTraits
/// @class attrEngineTraits
+/// @tparam P processor type (e.g. Nimbus, Axone, etc.)
/// @tparam ET enum type
/// @tparam T enum value
///
-template < typename ET, ET T>
+template < proc_type P, typename ET, ET T = ET::DISPATCHER>
struct attrEngineTraits;
///
@@ -211,14 +212,25 @@ struct attrEngineTraits;
template < typename ET, ET T >
struct setTimingTraits;
+namespace gen
+{
///
-/// @brief Forward declartion of traits for attrEnumTraits
-/// @class attrEnumTraits
-/// @tparam ET enum type
-///
-template < typename ET >
-struct attrEnumTraits;
-
+/// @brief Template recursive algorithm for setting attrs
+/// @class attr_engine
+/// @tparam P processor type (e.g. Nimbus, Axone, etc.)
+/// @tparam ET enum type - conceptually a list of attrs to set
+/// @tparam F enum value - the specific attr value from ET to set
+/// @tparam TT associated traits for attr_engine
+/// @tparam B dispatch tag - defaulted to false
+///
+template < proc_type P,
+ typename ET,
+ ET F = ET::DISPATCHER,
+ typename TT = attrEngineTraits<P, ET, F>,
+ bool B = false>
+struct attr_engine;
+
+}// gen
}// mss
#endif
diff --git a/src/import/generic/memory/lib/data_engine/data_engine_utils.H b/src/import/generic/memory/lib/data_engine/data_engine_utils.H
index 56d2b2d3b..d43286d44 100644
--- a/src/import/generic/memory/lib/data_engine/data_engine_utils.H
+++ b/src/import/generic/memory/lib/data_engine/data_engine_utils.H
@@ -310,10 +310,15 @@ inline fapi2::ReturnCode set_field(const fapi2::Target<T>& i_target,
{
const auto l_attr_target = mss::find_target<TT::TARGET_TYPE>(i_target);
typename TT::attr_type l_attr_list = {};
- FAPI_TRY( TT::get_attr(l_attr_target, l_attr_list) );
- FAPI_TRY( update_data(i_target, i_setting, TT::FFDC_CODE, l_attr_list) );
- FAPI_TRY( TT::set_attr(l_attr_target, l_attr_list) );
+ FAPI_TRY( TT::get_attr(l_attr_target, l_attr_list),
+ "Failed get_attr() for %s", spd::c_str(i_target) );
+
+ FAPI_TRY( update_data(i_target, i_setting, TT::FFDC_CODE, l_attr_list),
+ "Failed update_data for %s", spd::c_str(i_target) );
+
+ FAPI_TRY( TT::set_attr(l_attr_target, l_attr_list),
+ "Failed set_attr() for %s", spd::c_str(i_target) );
fapi_try_exit:
return fapi2::current_err;
@@ -342,13 +347,16 @@ inline fapi2::ReturnCode set_field(const DT& i_data,
// Get the attribute data in its entirety
typename TT::attr_type l_attr_list = {};
- FAPI_TRY( TT::get_attr(l_attr_target, l_attr_list) );
+ FAPI_TRY( TT::get_attr(l_attr_target, l_attr_list),
+ "Failed get_attr()");
// Update the portion of interest (can vary per dimm and/or rank)
- FAPI_TRY( update_data(i_data, i_setting, TT::FFDC_CODE, l_attr_list) );
+ FAPI_TRY( update_data(i_data, i_setting, TT::FFDC_CODE, l_attr_list),
+ "Failed update_data()");
// Set the contents back to the attribute
- FAPI_TRY( TT::set_attr(l_attr_target, l_attr_list) );
+ FAPI_TRY( TT::set_attr(l_attr_target, l_attr_list),
+ "Failed set_attr()");
fapi_try_exit:
return fapi2::current_err;
@@ -356,17 +364,14 @@ fapi_try_exit:
///
/// @brief Template recursive algorithm for setting attrs
-/// @class attr_engine
+/// @class attr_engine - partial specialization when F != 0
+/// @tparam P processor type
/// @tparam ET enum type - conceptually a list of attrs to set
/// @tparam F enum value - the specific attr value from ET to set
-/// @tparam TT defaulted to attrEngineTraits<ET, F>
-/// @tparam V defaulted to void (dispatch tag)
+/// @tparam TT associated traits for attr_engine
///
-template < typename ET,
- ET F,
- typename TT = mss::attrEngineTraits<ET, F>,
- typename V = void >
-struct attr_engine
+template < proc_type P, typename ET, ET F, typename TT >
+struct attr_engine<P, ET, F, TT, false>
{
///
/// @brief Sets attributes fields F in ET
@@ -378,9 +383,12 @@ struct attr_engine
static fapi2::ReturnCode single_set(const IT& i_input)
{
typename TT::attr_integral_type l_value = 0;
- FAPI_TRY( TT::get_value_to_set(i_input, l_value) );
- FAPI_TRY( set_field<TT>(i_input, l_value) );
+ FAPI_TRY( TT::get_value_to_set(i_input, l_value),
+ "Failed get_value_to_set() for proc_type: %d and enum val: %d", P, F);
+
+ FAPI_TRY( set_field<TT>(i_input, l_value),
+ "Failed set_field() for proc_type: %d and enum val: %d", P, F);
fapi_try_exit:
return fapi2::current_err;
@@ -395,12 +403,20 @@ struct attr_engine
template < typename IT >
static fapi2::ReturnCode set(const IT& i_input)
{
- FAPI_TRY( (attr_engine<ET, F>::single_set(i_input)) );
+ FAPI_TRY( (attr_engine<P, ET, F, TT, static_cast<size_t>(F) == 0u>::single_set(i_input)),
+ "Failed attr_engine<P, ET, F>::single_set() for proc_type: %d and enum val: %d", P, F);
// Compiler isn't smart enough to deduce F - 1u (decrementing the enum values by 1)
// Cast needed to help the compiler deduce this value is an ET type
// This does the recursive call to unroll a compile-time looping of a enum list of attrs to set
- FAPI_TRY( (attr_engine < ET, static_cast<ET>(F - 1u) >::set(i_input)) );
+ // The recursion stops at the base case where NEXT_FLD == 0u
+ {
+ constexpr ET NEXT_FLD = static_cast<ET>( static_cast<size_t>(F) - 1u );
+ using T = mss::attrEngineTraits<P, ET, NEXT_FLD>;
+
+ FAPI_TRY( (attr_engine <P, ET, NEXT_FLD, T, 0u == static_cast<size_t>(NEXT_FLD)>::set(i_input)),
+ "Failed (attr_engine <P, ET, NEXT_FLD>::set() for proc_type: %d and enum val: %d", P, F);
+ }
fapi_try_exit:
return fapi2::current_err;
@@ -408,17 +424,15 @@ struct attr_engine
};
///
-/// @brief Algorithm for setting SI attrs
-/// @class attr_engine
-/// @tparam ET enum type
-/// @tparam F enum value
-/// @note partial specialization when F == 0 (base case). Which is a NOP.
+/// @brief Template recursive algorithm for setting attrs
+/// @class attr_engine - partial specialization where F == 0u
+/// @tparam P processor type
+/// @tparam ET attr fields enum type (conceptually a list of attrs to set)
+/// @tparam F enum value - the specific attr value from ET to set
+/// @tparam TT associated traits for attr_engine
///
-template < typename ET, ET F>
-struct attr_engine< ET,
- F,
- mss::attrEngineTraits<ET, F>,
- typename std::enable_if<0u == F>::type >
+template < proc_type P, typename ET, ET F, typename TT >
+struct attr_engine< P, ET, F, TT, true >
{
///
/// @brief Sets attributes fields F in ET
@@ -429,6 +443,7 @@ struct attr_engine< ET,
template < typename IT >
static fapi2::ReturnCode set(const IT& i_input)
{
+ FAPI_DBG("NO-OP: Reached base case (0) of recursive template for proc_type: %d and enum value: %d", P, F);
return fapi2::FAPI2_RC_SUCCESS;
}
};
diff --git a/src/import/generic/memory/lib/data_engine/p9a/p9a_data_init_traits.H b/src/import/generic/memory/lib/data_engine/p9a/p9a_data_init_traits.H
index 9122c12da..f8b5abdc9 100644
--- a/src/import/generic/memory/lib/data_engine/p9a/p9a_data_init_traits.H
+++ b/src/import/generic/memory/lib/data_engine/p9a/p9a_data_init_traits.H
@@ -51,7 +51,7 @@ namespace mss
/// @note pre_data_init_fields, DIMM_TYPE specialization
///
template<>
-struct attrEngineTraits<pre_data_init_fields, DIMM_TYPE>
+struct attrEngineTraits<proc_type::AXONE, pre_data_init_fields, pre_data_init_fields::DIMM_TYPE>
{
using attr_type = fapi2::ATTR_MEM_EFF_DIMM_TYPE_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -124,7 +124,7 @@ struct attrEngineTraits<pre_data_init_fields, DIMM_TYPE>
/// @note pre_data_init_fields, DRAM_GEN specialization
///
template<>
-struct attrEngineTraits<pre_data_init_fields, DRAM_GEN>
+struct attrEngineTraits<proc_type::AXONE, pre_data_init_fields, pre_data_init_fields::DRAM_GEN>
{
using attr_type = fapi2::ATTR_MEM_EFF_DRAM_GEN_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -195,7 +195,7 @@ struct attrEngineTraits<pre_data_init_fields, DRAM_GEN>
/// @note pre_data_init_fields, HOST_TO_DDR_SPEED_RATIO specialization
///
template<>
-struct attrEngineTraits<pre_data_init_fields, HOST_TO_DDR_SPEED_RATIO>
+struct attrEngineTraits<proc_type::AXONE, pre_data_init_fields, pre_data_init_fields::HOST_TO_DDR_SPEED_RATIO>
{
using attr_type = fapi2::ATTR_MEM_EFF_HOST_TO_DDR_SPEED_RATIO_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -273,7 +273,7 @@ struct attrEngineTraits<pre_data_init_fields, HOST_TO_DDR_SPEED_RATIO>
/// @note pre_data_init_fields, HYBRID specialization
///
template<>
-struct attrEngineTraits<pre_data_init_fields, HYBRID>
+struct attrEngineTraits<proc_type::AXONE, pre_data_init_fields, pre_data_init_fields::HYBRID>
{
using attr_type = fapi2::ATTR_MEM_EFF_HYBRID_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -345,7 +345,7 @@ struct attrEngineTraits<pre_data_init_fields, HYBRID>
/// @note pre_data_init_fields, HYBRID_MEDIA specialization
///
template<>
-struct attrEngineTraits<pre_data_init_fields, HYBRID_MEDIA>
+struct attrEngineTraits<proc_type::AXONE, pre_data_init_fields, pre_data_init_fields::HYBRID_MEDIA>
{
using attr_type = fapi2::ATTR_MEM_EFF_HYBRID_MEMORY_TYPE_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -417,7 +417,7 @@ struct attrEngineTraits<pre_data_init_fields, HYBRID_MEDIA>
/// @note pre_data_init_fields, MRANKS specialization
///
template<>
-struct attrEngineTraits<pre_data_init_fields, MRANKS>
+struct attrEngineTraits<proc_type::AXONE, pre_data_init_fields, pre_data_init_fields::MRANKS>
{
using attr_type = fapi2::ATTR_MEM_EFF_NUM_MASTER_RANKS_PER_DIMM_Type;
using attr_integral_type = std::remove_all_extents<attr_type>::type;
@@ -489,7 +489,7 @@ struct attrEngineTraits<pre_data_init_fields, MRANKS>
/// @note DIMM_RANKS_CNFG specialization
///
template<>
-struct attrEngineTraits<pre_data_init_fields, DIMM_RANKS_CNFG>
+struct attrEngineTraits<proc_type::AXONE, pre_data_init_fields, pre_data_init_fields::DIMM_RANKS_CNFG>
{
using attr_type = fapi2::ATTR_MEM_EFF_DIMM_RANKS_CONFIGED_Type;
@@ -536,7 +536,9 @@ struct attrEngineTraits<pre_data_init_fields, DIMM_RANKS_CNFG>
// Make sure the number of master ranks is setup
uint8_t l_master_ranks = 0;
- FAPI_TRY( (attrEngineTraits<pre_data_init_fields, MRANKS>::get_value_to_set(i_spd_data, l_master_ranks)) );
+ FAPI_TRY( (attrEngineTraits<proc_type::AXONE, pre_data_init_fields, pre_data_init_fields::MRANKS>::get_value_to_set(
+ i_spd_data,
+ l_master_ranks)) );
FAPI_TRY( l_ranks_configed.setBit(0, l_master_ranks),
"%s. Failed to setBit", spd::c_str(i_spd_data.get_dimm_target()) );
diff --git a/src/import/generic/memory/lib/data_engine/p9n/p9n_data_init_traits.H b/src/import/generic/memory/lib/data_engine/p9n/p9n_data_init_traits.H
index cf520c148..cb70955c0 100644
--- a/src/import/generic/memory/lib/data_engine/p9n/p9n_data_init_traits.H
+++ b/src/import/generic/memory/lib/data_engine/p9n/p9n_data_init_traits.H
@@ -50,7 +50,7 @@ namespace mss
/// @note NIMBUS, DIMM_TYPE specialization
///
template<>
-class preDataInitTraits<mss::proc_type::NIMBUS, DIMM_TYPE>
+class preDataInitTraits<mss::proc_type::NIMBUS, pre_data_init_fields::DIMM_TYPE>
{
public:
using attr_type = fapi2::ATTR_EFF_DIMM_TYPE_Type;
@@ -91,7 +91,7 @@ class preDataInitTraits<mss::proc_type::NIMBUS, DIMM_TYPE>
/// @note NIMBUS, DRAM_GEN specialization
///
template<>
-class preDataInitTraits<mss::proc_type::NIMBUS, DRAM_GEN>
+class preDataInitTraits<mss::proc_type::NIMBUS, pre_data_init_fields::DRAM_GEN>
{
public:
using attr_type = fapi2::ATTR_EFF_DRAM_GEN_Type;
@@ -132,7 +132,7 @@ class preDataInitTraits<mss::proc_type::NIMBUS, DRAM_GEN>
/// @note NIMBUS, HYBRID specialization
///
template<>
-class preDataInitTraits<mss::proc_type::NIMBUS, HYBRID>
+class preDataInitTraits<mss::proc_type::NIMBUS, pre_data_init_fields::HYBRID>
{
public:
using attr_type = fapi2::ATTR_EFF_HYBRID_Type;
@@ -173,7 +173,7 @@ class preDataInitTraits<mss::proc_type::NIMBUS, HYBRID>
/// @note NIMBUS, HYBRID_MEDIA specialization
///
template<>
-class preDataInitTraits<mss::proc_type::NIMBUS, HYBRID_MEDIA>
+class preDataInitTraits<mss::proc_type::NIMBUS, pre_data_init_fields::HYBRID_MEDIA>
{
public:
using attr_type = fapi2::ATTR_EFF_HYBRID_MEMORY_TYPE_Type;
@@ -214,7 +214,7 @@ class preDataInitTraits<mss::proc_type::NIMBUS, HYBRID_MEDIA>
/// @note NIMBUS, MRANKS specialization
///
template<>
-class preDataInitTraits<mss::proc_type::NIMBUS, MRANKS>
+class preDataInitTraits<mss::proc_type::NIMBUS, pre_data_init_fields::MRANKS>
{
public:
using attr_type = fapi2::ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM_Type;
@@ -255,7 +255,7 @@ class preDataInitTraits<mss::proc_type::NIMBUS, MRANKS>
/// @note NIMBUS, DIMM_RANKS_CNFG specialization
///
template<>
-struct preDataInitTraits<mss::proc_type::NIMBUS, DIMM_RANKS_CNFG>
+struct preDataInitTraits<mss::proc_type::NIMBUS, pre_data_init_fields::DIMM_RANKS_CNFG>
{
using attr_type = fapi2::ATTR_EFF_DIMM_RANKS_CONFIGED_Type;
static const fapi2::TargetType TARGET_TYPE = fapi2::ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM_TargetType;
@@ -292,7 +292,7 @@ struct preDataInitTraits<mss::proc_type::NIMBUS, DIMM_RANKS_CNFG>
/// @note AXONE, DIMM_TYPE_METADATA specialization
///
template<>
-struct attrEngineTraits<generic_metadata_fields, DIMM_TYPE_METADATA>
+struct attrEngineTraits<proc_type::NIMBUS, 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;
@@ -373,7 +373,7 @@ class dimmPosTraits<mss::mc_type::NIMBUS>
/// @note generic_metadata_fields, DRAM_GEN_METADATA specialization
///
template<>
-struct attrEngineTraits<generic_metadata_fields, DRAM_GEN_METADATA>
+struct attrEngineTraits<proc_type::NIMBUS, 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;
@@ -423,7 +423,7 @@ struct attrEngineTraits<generic_metadata_fields, DRAM_GEN_METADATA>
/// @note generic_metadata_fields, DIMM_POS_METADATA specialization
///
template<>
-struct attrEngineTraits<generic_metadata_fields, DIMM_POS_METADATA>
+struct attrEngineTraits<proc_type::NIMBUS, 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;
@@ -468,17 +468,6 @@ struct attrEngineTraits<generic_metadata_fields, DIMM_POS_METADATA>
}
};
-///
-/// @brief Value traits for attr_eff_engine_fields
-/// @class attrEngineTraits
-/// @note attr_eff_engine_fields
-///
-template < >
-struct attrEnumTraits<generic_metadata_fields>
-{
- static constexpr size_t DISPATCHER = ATTR_METADATA_DISPATCHER;
-};
-
}// mss
#endif
diff --git a/src/import/generic/memory/lib/data_engine/pre_data_init.H b/src/import/generic/memory/lib/data_engine/pre_data_init.H
index 307c08aa1..52e358fc2 100644
--- a/src/import/generic/memory/lib/data_engine/pre_data_init.H
+++ b/src/import/generic/memory/lib/data_engine/pre_data_init.H
@@ -232,7 +232,7 @@ class pre_data_engine
FAPI_TRY(iv_spd_data.base_module(l_base_module_type));
FAPI_TRY(lookup_table_check(iv_dimm, BASE_MODULE_TYPE_MAP, SET_ATTR_DIMM_TYPE, l_base_module_type, l_dimm_type));
- FAPI_TRY( (set_field<P, DIMM_TYPE>(iv_dimm, l_dimm_type)) );
+ FAPI_TRY( (set_field<P, pre_data_init_fields::DIMM_TYPE>(iv_dimm, l_dimm_type)) );
fapi_try_exit:
return fapi2::current_err;
@@ -250,7 +250,7 @@ class pre_data_engine
FAPI_TRY(iv_spd_data.device_type(l_device_type));
FAPI_TRY(lookup_table_check(iv_dimm, DRAM_GEN_MAP, SET_ATTR_DRAM_GEN, l_device_type, l_dram_gen));
- FAPI_TRY( (set_field<P, DRAM_GEN>(iv_dimm, l_dram_gen)) );
+ FAPI_TRY( (set_field<P, pre_data_init_fields::DRAM_GEN>(iv_dimm, l_dram_gen)) );
fapi_try_exit:
return fapi2::current_err;
@@ -268,7 +268,7 @@ class pre_data_engine
FAPI_TRY(iv_spd_data.hybrid(l_spd_hybrid_type));
FAPI_TRY(lookup_table_check(iv_dimm, HYBRID_MAP, SET_ATTR_HYBRID, l_spd_hybrid_type, l_hybrid));
- FAPI_TRY( (set_field<P, HYBRID>(iv_dimm, l_hybrid)) );
+ FAPI_TRY( (set_field<P, pre_data_init_fields::HYBRID>(iv_dimm, l_hybrid)) );
fapi_try_exit:
return fapi2::current_err;
@@ -286,7 +286,7 @@ class pre_data_engine
FAPI_TRY(iv_spd_data.hybrid_media(l_spd_hybrid_media));
FAPI_TRY(lookup_table_check(iv_dimm, HYBRID_MAP, SET_ATTR_HYBRID, l_spd_hybrid_media, l_hybrid_media));
- FAPI_TRY( (set_field<P, HYBRID_MEDIA>(iv_dimm, l_hybrid_media)) );
+ FAPI_TRY( (set_field<P, pre_data_init_fields::HYBRID_MEDIA>(iv_dimm, l_hybrid_media)) );
fapi_try_exit:
return fapi2::current_err;
@@ -301,7 +301,7 @@ class pre_data_engine
uint8_t l_master_ranks = 0;
FAPI_TRY( get_master_ranks(l_master_ranks) );
- FAPI_TRY( (set_field<P, MRANKS>(iv_dimm, l_master_ranks)) );
+ FAPI_TRY( (set_field<P, pre_data_init_fields::MRANKS>(iv_dimm, l_master_ranks)) );
fapi_try_exit:
return fapi2::current_err;
@@ -324,7 +324,7 @@ class pre_data_engine
FAPI_TRY( l_ranks_configed.setBit(0, l_master_ranks),
"%s. Failed to setBit", spd::c_str(iv_dimm) );
- FAPI_TRY( (set_field<P, DIMM_RANKS_CNFG>(iv_dimm, uint8_t(l_ranks_configed))) );
+ FAPI_TRY( (set_field<P, pre_data_init_fields::DIMM_RANKS_CNFG>(iv_dimm, uint8_t(l_ranks_configed))) );
fapi_try_exit:
return fapi2::current_err;
@@ -395,7 +395,8 @@ inline fapi2::ReturnCode set_pre_init_attrs<mss::proc_type::NIMBUS>( const fapi2
mss::spd::c_str(i_target) );
// Adding metadata c-str fields derived from attrs set above
- FAPI_TRY( mss::attr_derived_engine<mss::generic_metadata_fields>::set(i_target) );
+ FAPI_TRY( (mss::gen::attr_engine<proc_type::NIMBUS, mss::generic_metadata_fields>::set(i_target)),
+ "Failed attr_engine<proc_type::NIMBUS, mss::generic_metadata_fields>::set for %s", mss::spd::c_str(i_target) );
fapi_try_exit:
return fapi2::current_err;
diff --git a/src/import/generic/memory/lib/utils/dimm/mss_timing.H b/src/import/generic/memory/lib/utils/dimm/mss_timing.H
index aa1915e3d..8fd169508 100644
--- a/src/import/generic/memory/lib/utils/dimm/mss_timing.H
+++ b/src/import/generic/memory/lib/utils/dimm/mss_timing.H
@@ -213,7 +213,7 @@ inline fapi2::ReturnCode calc_trfc_dlr(const fapi2::Target<fapi2::TARGET_TYPE_DI
// Item No. 1727.58A
// pg. 69 - 71
// Table 42 - Refresh parameters by logical rank density
- static const std::vector<std::pair<uint8_t, uint64_t> > TRFC_DLR1 =
+ const std::vector<std::pair<uint8_t, uint64_t> > TRFC_DLR1 =
{
// { density in GBs, tRFC4(min) in picoseconds }
{4, 90000},
@@ -225,7 +225,7 @@ inline fapi2::ReturnCode calc_trfc_dlr(const fapi2::Target<fapi2::TARGET_TYPE_DI
// Item No. 1727.58A
// pg. 69 - 71
// Table 42 - Refresh parameters by logical rank density
- static const std::vector<std::pair<uint8_t, uint64_t> > TRFC_DLR2 =
+ const std::vector<std::pair<uint8_t, uint64_t> > TRFC_DLR2 =
{
// { density in GBs, tRFC4(min) in picoseconds }
{4, 55000},
@@ -237,7 +237,7 @@ inline fapi2::ReturnCode calc_trfc_dlr(const fapi2::Target<fapi2::TARGET_TYPE_DI
// Item No. 1727.58A
// pg. 69 - 71
// Table 42 - Refresh parameters by logical rank density
- static const std::vector<std::pair<uint8_t, uint64_t> > TRFC_DLR4 =
+ const std::vector<std::pair<uint8_t, uint64_t> > TRFC_DLR4 =
{
// { density in GBs, tRFC4(min) in picoseconds }
{4, 40000},
OpenPOWER on IntegriCloud