summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonald Washburn <dwashbur@us.ibm.com>2017-09-11 13:58:25 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-11-01 17:07:12 -0400
commit621ab58f2f538157abc992f1f490ae0a927ed0cc (patch)
tree27c8fcc3e968dd52fa9f1ae7d0ca51836bb07cee
parent5e731ccc76d458e752e465471e27a40dd6011e5b (diff)
downloadtalos-hostboot-621ab58f2f538157abc992f1f490ae0a927ed0cc.tar.gz
talos-hostboot-621ab58f2f538157abc992f1f490ae0a927ed0cc.zip
Integration of hardware vpd accessor functions into Hostboot.
*Created macros and platform functions to invoke vpd accessor functions for reading attributes from Hostboot. *Create a unit test for calling each attribute accessor macro. RTC: 178950 Change-Id: Ia74406eabcdff238f6bbc4bd8dc43715ebfcd643 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48185 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Prachi Gupta <pragupta@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-rwxr-xr-xsrc/build/simics/hb-pnor-vpd-preload.pl19
-rw-r--r--src/include/securerom/ROM.H2
-rw-r--r--src/include/usr/fapi2/attribute_service.H1020
-rw-r--r--src/include/usr/fapi2/hwpf_fapi2_reasoncodes.H9
-rw-r--r--src/usr/fapi2/attribute_service.C496
-rwxr-xr-xsrc/usr/fapi2/fapi2.mk18
-rw-r--r--src/usr/fapi2/plat_mbvpd_access.C2
-rw-r--r--src/usr/fapi2/test/fapi2Test.mk3
-rw-r--r--src/usr/fapi2/test/fapiGetMBVpdTest.H628
-rw-r--r--src/usr/fapi2/test/makefile5
-rw-r--r--src/usr/secureboot/base/securerommgr.C2
-rw-r--r--src/usr/vpd/HBconfig2
-rw-r--r--src/usr/vpd/makefile10
13 files changed, 2204 insertions, 12 deletions
diff --git a/src/build/simics/hb-pnor-vpd-preload.pl b/src/build/simics/hb-pnor-vpd-preload.pl
index 72717fa94..20f89608b 100755
--- a/src/build/simics/hb-pnor-vpd-preload.pl
+++ b/src/build/simics/hb-pnor-vpd-preload.pl
@@ -351,6 +351,7 @@ sub createCVPDData
my $sourceFile;
my $sysMemVPDFile = "$outputPath/$sysMemVPD";
my $sysMemVPDFileECC = $sysMemVPDFile . ".ecc";
+ my $numProcs = $maxProcs;
if( -e $sysMemVPDFile )
{
@@ -360,7 +361,11 @@ sub createCVPDData
if( $procChipType eq "p9n")
{
- $maxProcs = 2;
+ $numProcs = 2;
+ }
+ elsif($procChipType eq "p9c")
+ {
+ $numProcs = 4;
}
#Centaurs are populated based on populated Processors and special
@@ -370,10 +375,18 @@ sub createCVPDData
#For direct access memory, $mcsArray has which MCSs are present
# Create empty Mem VPD data chunk
- $cmd = " echo \"000FFF: 00\" \| xxd -r \> $emptyMemVPD";
+ if($procChipType eq "p9c")
+ {
+ $cmd = " echo \"001FFF: 00\" \| xxd -r \> $emptyMemVPD";
+ }
+ else
+ {
+ $cmd = " echo \"000FFF: 00\" \| xxd -r \> $emptyMemVPD";
+ }
+
system( $cmd ) == 0 or die "Creating $emptyMemVPD failed!";
- for( my $proc = 0; $proc < $maxProcs; $proc++ )
+ for( my $proc = 0; $proc < $numProcs; $proc++ )
{
for( my $mcs = 0; $mcs < $MAX_MCS; $mcs++ )
{
diff --git a/src/include/securerom/ROM.H b/src/include/securerom/ROM.H
index 7ff73bf5b..5b5e46635 100644
--- a/src/include/securerom/ROM.H
+++ b/src/include/securerom/ROM.H
@@ -318,7 +318,7 @@ enum SB_FUNC_TYPES : sbFuncType_t
SHA512 = 0x0000,
ECDSA521 = 0x0001,
MAX_TYPES,
- INVALID = 0xFFFF
+ SB_FUNC_TYPES_INVALID = 0xFFFF
};
/**
diff --git a/src/include/usr/fapi2/attribute_service.H b/src/include/usr/fapi2/attribute_service.H
index 110e0b4c8..47538d00c 100644
--- a/src/include/usr/fapi2/attribute_service.H
+++ b/src/include/usr/fapi2/attribute_service.H
@@ -295,6 +295,141 @@ ReturnCode platGetSecurityMode(uint8_t & o_securityMode);
/// @return ReturnCode Always FAPI2_RC_SUCCESS, this cannot fail.
ReturnCode platSetSecurityMode();
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the VPD_POWER_CONTROL_CAPABLE attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_vpdPowerControlCapableVal The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetControlCapableData(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_POWER_CONTROL_CAPABLE_Type& o_vpdPowerControlCapableVal
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the VPD_ISDIMMTOC4DQ attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_vpdIsDimmTOC4DQVal The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetDQAttrISDIMM(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_ISDIMMTOC4DQ_Type &o_vpdIsDimmTOC4DQVal
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the VPD_ISDIMMTOC4DQS attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_vpdIsDimmTOC4DQSVal The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetDQSAttrISDIMM(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_ISDIMMTOC4DQS_Type &o_vpdIsDimmTOC4DQSVal
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the DRAM_2N_MODE_ENABLED attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_dram2NModeEnabled The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetMBvpdDram2NModeEnabled(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_DRAM_2N_MODE_ENABLED_Type& o_dram2NModeEnabled
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the VPD_VM_KEYWORD attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_vpdVMKeywordVal The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetMBvpdMemoryDataVersion(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_VM_KEYWORD_Type& o_vpdVMKeywordVal
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the VPD_VD_KEYWORD attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_vpdVDKeywordVal The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetMBvpdSPDXRecordVersion(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_VD_KEYWORD_Type& o_vpdVDKeywordVal
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the VPD_DIMM_SPARE attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_vpdDimmSpare The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetMBvpdSpareDramData(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_DIMM_SPARE_Type &o_vpdDimmSpare
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the VPD_VERSION attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_vpdVersion The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetMBvpdVersion(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_VERSION_Type& o_vpdVersion
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// the VPD_DW_KEYWORD attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The target for the attribute operation.
+// @param[out] o_vpdDWKeyword The retrieved attribute value.
+// @return ReturnCode Zero on success, else platform specified error.
+ReturnCode platGetMBvpdVoltageSettingData(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_DW_KEYWORD_Type& o_vpdDWKeyword
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// a Memory Buffer vpd attribute. It should not be called directly.
+//
+// @param[in] i_fapiTarget The fapi target for the attribute get.
+// @param[in] i_attr The MBVpd attribute to fetch.
+// @param[out] o_pVal A pointer to a buffer in which to copy the
+// attribute value.
+// @param[in] i_valSize The size of the buffer for the attribute value.
+ReturnCode platGetMBvpdAttr(
+ const fapi2::Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ const fapi2::AttributeId i_attr,
+ void* o_pVal,
+ const size_t i_valSize
+ );
+
+/// @brief This function is called by the FAPI_ATTR_GET macro when getting
+// a Memory Buffer vpd attribute. It should not be called directly.
+//
+// @param[in] i_attr The MBVpd attribute to fetch.
+// @param[in] i_fapiTarget The MBA target for the attribute get.
+// @param[out] o_MBvpdAttrVal A variable into which the attribute will
+// be copied
+template<typename T>
+ReturnCode platGetMBvpdAttr(
+ const fapi2::AttributeId i_attrId,
+ const fapi2::Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ T& o_MBvpdAttrVal
+ )
+{
+ return platGetMBvpdAttr(i_fapiTarget,
+ i_attrId,
+ reinterpret_cast<void*>(&o_MBvpdAttrVal),
+ sizeof(T));
+}
+
+
// -----------------------------------------------------------------------------
// End TODO: End to be supported functions
// -----------------------------------------------------------------------------
@@ -326,8 +461,6 @@ fapiToTargeting::ID, sizeof(VAL), &(VAL))
platAttrSvc::setTargetingAttr(PTARGET, (const TARGETING::ATTRIBUTE_ID)\
fapiToTargeting::ID, sizeof(VAL), &(VAL))
-
-
//------------------------------------------------------------------------------
// MACRO to route ATTR_NAME access to the correct Hostboot function
//------------------------------------------------------------------------------
@@ -408,4 +541,887 @@ fapiToTargeting::ID, sizeof(VAL), &(VAL))
? fapi2::ReturnCode() : \
fapi2::platAttrSvc::platGetSecurityMode(VAL)
+//-----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_POWER_CONTROL_CAPABLE access to the correct
+// HB function
+//-----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_POWER_CONTROL_CAPABLE_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetControlCapableData(TARGET, VAL)
+
+//-----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_ISDIMMTOC4DQ access to the correct HB function
+//-----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_ISDIMMTOC4DQ_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetDQAttrISDIMM(TARGET, VAL)
+
+//-----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_ISDIMMTOC4DQS access to the correct HB function
+//-----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_ISDIMMTOC4DQS_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetDQSAttrISDIMM(TARGET, VAL)
+
+//-----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRAM_2N_MODE_ENABLED access to the correct
+// HB function
+//-----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRAM_2N_MODE_ENABLED_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetMBvpdDram2NModeEnabled(TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_VM_KEYWORD access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_VM_KEYWORD_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetMBvpdMemoryDataVersion(TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_VD_KEYWORD access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_VD_KEYWORD_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetMBvpdSPDXRecordVersion(TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DIMM_SPARE access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DIMM_SPARE_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetMBvpdSpareDramData(TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_VERSION access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_VERSION_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetMBvpdVersion(TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DW_KEYWORD access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DW_KEYWORD_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::platGetMBvpdVoltageSettingData(TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_TSYS_ADR access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_TSYS_ADR_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_TSYS_ADR_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_TSYS_DP18 access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_TSYS_DP18_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_TSYS_DP18_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRAM_RON access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRAM_RON_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRAM_RON_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRAM_RTT_NOM access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRAM_RTT_NOM_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRAM_RTT_NOM_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRAM_RTT_WR access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRAM_RTT_WR_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRAM_RTT_WR_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_ODT_RD access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_ODT_RD_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_ODT_RD_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_ODT_WR access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_ODT_WR_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_ODT_WR_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DIMM_RCD_IBT access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DIMM_RCD_IBT_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DIMM_RCD_IBT_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DIMM_RCD_OUTPUT_TIMING access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DIMM_RCD_OUTPUT_TIMING_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DIMM_RCD_OUTPUT_TIMING_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_RD_VREF access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_RD_VREF_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_RD_VREF_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRAM_WR_VREF access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRAM_WR_VREF_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRAM_WR_VREF_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRAM_WRDDR4_VREF access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRAM_WRDDR4_VREF_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRAM_WRDDR4_VREF_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_RCV_IMP_DQ_DQS access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_RCV_IMP_DQ_DQS_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_RCV_IMP_DQ_DQS_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRV_IMP_DQ_DQS access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRV_IMP_DQ_DQS_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRV_IMP_DQ_DQS_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRV_IMP_CNTL access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRV_IMP_CNTL_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRV_IMP_CNTL_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRV_IMP_ADDR access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRV_IMP_ADDR_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRV_IMP_ADDR_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRV_IMP_CLK access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRV_IMP_CLK_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRV_IMP_CLK_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRV_IMP_SPCKE access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRV_IMP_SPCKE_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRV_IMP_SPCKE_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_SLEW_RATE_DQ_DQS access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_SLEW_RATE_DQ_DQS_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_SLEW_RATE_DQ_DQS_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_SLEW_RATE_CNTL access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_SLEW_RATE_CNTL_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_SLEW_RATE_CNTL_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_SLEW_RATE_ADDR access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_SLEW_RATE_ADDR_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_SLEW_RATE_ADDR_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_SLEW_RATE_CLK access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_SLEW_RATE_CLK_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_SLEW_RATE_CLK_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_SLEW_RATE_SPCKE access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_SLEW_RATE_SPCKE_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_SLEW_RATE_SPCKE_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_CKE_PRI_MAP access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_CKE_PRI_MAP_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_CKE_PRI_MAP_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_CKE_PWR_MAP access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_CKE_PWR_MAP_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_CKE_PWR_MAP_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_RLO access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_RLO_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_RLO_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_WLO access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_WLO_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_WLO_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_GPO access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_GPO_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_GPO_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CLK_P0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CLK_P0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CLK_P0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CLK_P1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CLK_P1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CLK_P1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CLK_P0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CLK_P0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CLK_P0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CLK_P1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CLK_P1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CLK_P1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A2 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A2_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A2_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A3 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A3_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A3_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A4 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A4_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A4_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A5 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A5_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A5_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A6 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A6_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A6_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A7 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A7_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A7_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A8 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A8_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A8_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A9 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A9_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A9_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A10 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A10_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A10_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A11 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A11_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A11_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A12 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A12_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A12_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A13 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A13_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A13_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A14 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A14_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A14_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_A15 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_A15_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_A15_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA2 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA2_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA2_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_CASN access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_CASN_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_CASN_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_RASN access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_RASN_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_RASN_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_CMD_WEN access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_CMD_WEN_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_CMD_WEN_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_PAR access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_PAR_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_PAR_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M_ACTN access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M_ACTN_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M_ACTN_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE2 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE2_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE2_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE3 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE3_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE3_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN2 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN2_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN2_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN3 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN3_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN3_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_ODT0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_ODT0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_ODT0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_ODT1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_ODT1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_ODT1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE2 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE2_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE2_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE3 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE3_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CKE3_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN2 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN2_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN2_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN3 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN3_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_CSN3_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_ODT0 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_ODT0_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_ODT0_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_ODT1 access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_ODT1_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PHASE_ROT_M1_CNTL_ODT1_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_PERIODIC_MEMCAL_MODE_OPTIONS access to the
+// correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_PERIODIC_MEMCAL_MODE_OPTIONS_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_PERIODIC_MEMCAL_MODE_OPTIONS_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_DRAM_RTT_PARK access to the correct HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_DRAM_RTT_PARK_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_DRAM_RTT_PARK_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_RD_CTR_WINDAGE_OFFSET access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_RD_CTR_WINDAGE_OFFSET_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_RD_CTR_WINDAGE_OFFSET_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_MR_VERSION_BYTE access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_MR_VERSION_BYTE_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_MR_VERSION_BYTE_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_MR_DATA_CONTROL_BYTE access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_MR_DATA_CONTROL_BYTE_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_MR_DATA_CONTROL_BYTE_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_MT_VERSION_BYTE access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_MT_VERSION_BYTE_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_MT_VERSION_BYTE_Type>(ID, TARGET, VAL)
+
+//----------------------------------------------------------------------------
+// MACRO to route ATTR_CEN_VPD_MT_DATA_CONTROL_BYTE access to the correct
+// HB function
+//----------------------------------------------------------------------------
+#define ATTR_CEN_VPD_MT_DATA_CONTROL_BYTE_GETMACRO(ID, TARGET, VAL) \
+ AttrOverrideSync::getAttrOverrideFunc(ID, TARGET, &VAL)\
+ ? fapi2::ReturnCode() : \
+ fapi2::platAttrSvc::\
+ platGetMBvpdAttr<fapi2::ATTR_CEN_VPD_MT_DATA_CONTROL_BYTE_Type>(ID, TARGET, VAL)
+
#endif // ATTRIBUTESERVICE_H_
diff --git a/src/include/usr/fapi2/hwpf_fapi2_reasoncodes.H b/src/include/usr/fapi2/hwpf_fapi2_reasoncodes.H
index 98eddff7b..0018d3c57 100644
--- a/src/include/usr/fapi2/hwpf_fapi2_reasoncodes.H
+++ b/src/include/usr/fapi2/hwpf_fapi2_reasoncodes.H
@@ -60,6 +60,8 @@ namespace fapi2
MOD_FAPI2_CVPD_ACCESS = 0x11,
MOD_FAPI2_BAD_DQ_BITMAP = 0x12,
MOD_FAPI2_GET_CHIP_CFAM_TARGET = 0x13,
+ MOD_FAPI2_GET_ATTR_CEN_VPD_VERSION = 0x14,
+ MOD_FAPI2_GET_MB_VPD_ATTR = 0x15
};
/**
@@ -126,7 +128,12 @@ namespace fapi2
RC_MM_SET_PERMISSION_FAILED = FAPI2_COMP_ID | 0x31,
RC_MM_REMOVE_PAGES_FAILED = FAPI2_COMP_ID | 0x32,
RC_MM_SET_PERMISSION2_FAILED = FAPI2_COMP_ID | 0x33,
- RC_INVALID_PARENT_TARGET_FOUND = FAPI2_COMP_ID | 0x34,
+ RC_NO_SINGLE_MBA = FAPI2_COMP_ID | 0x34,
+ RC_NO_PARENT_MBA = FAPI2_COMP_ID | 0x35,
+ RC_NO_CHILD_MBA = FAPI2_COMP_ID | 0x36,
+ RC_INVALID_TARGET_TYPE = FAPI2_COMP_ID | 0x37,
+ RC_NO_PARENT_MEMBUF = FAPI2_COMP_ID | 0x38,
+ RC_INVALID_PARENT_TARGET_FOUND = FAPI2_COMP_ID | 0x39,
// HWP generated errors
RC_HWP_GENERATED_ERROR = HWPF_COMP_ID | 0x0f,
diff --git a/src/usr/fapi2/attribute_service.C b/src/usr/fapi2/attribute_service.C
index 4de34efc1..5b4aa93b0 100644
--- a/src/usr/fapi2/attribute_service.C
+++ b/src/usr/fapi2/attribute_service.C
@@ -64,6 +64,20 @@
#include <secureboot/service.H>
+#include<vpd_accessors/accessMBvpdL4BankDelete.H>
+#include<vpd_accessors/getControlCapableData.H>
+#include<vpd_accessors/getDQAttrISDIMM.H>
+#include<vpd_accessors/getDQSAttrISDIMM.H>
+#include<vpd_accessors/getISDIMMTOC4DAttrs.H>
+#include<vpd_accessors/getMBvpdDram2NModeEnabled.H>
+#include<vpd_accessors/getMBvpdMemoryDataVersion.H>
+#include<vpd_accessors/getMBvpdSPDXRecordVersion.H>
+#include<vpd_accessors/getMBvpdSensorMap.H>
+#include<vpd_accessors/getMBvpdSpareDramData.H>
+#include<vpd_accessors/getMBvpdVersion.H>
+#include<vpd_accessors/getMBvpdVoltageSettingData.H>
+#include<vpd_accessors/getMBvpdAttr.H>
+
//******************************************************************************
// Implementation
//******************************************************************************
@@ -1309,6 +1323,488 @@ ReturnCode platSetSecurityMode()
return fapi2::ReturnCode();
}
+//-----------------------------------------------------------------------------
+ReturnCode platGetControlCapableData(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_POWER_CONTROL_CAPABLE_Type& o_vpdPowerControlCapableVal
+ )
+{
+ ReturnCode rc;
+
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must use
+ // the generic TARGET_TYPE_ALL -- so convert back to the correct type
+ // manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetControlCapableData: Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> l_fapiTarget(l_pTarget);
+ rc = getControlCapableData(l_fapiTarget, o_vpdPowerControlCapableVal);
+ }
+
+ return rc;
+}
+
+//-----------------------------------------------------------------------------
+ReturnCode platGetDQAttrISDIMM(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_ISDIMMTOC4DQ_Type &o_vpdIsDimmTOC4DQVal
+ )
+{
+ ReturnCode rc;
+
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must use
+ // the generic TARGET_TYPE_ALL -- so convert back to the correct type
+ // manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetDQAttrISDIMM: Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> l_fapiTarget(l_pTarget);
+ rc = getDQAttrISDIMM(l_fapiTarget, o_vpdIsDimmTOC4DQVal);
+ }
+
+ return rc;
+}
+
+//-----------------------------------------------------------------------------
+ReturnCode platGetDQSAttrISDIMM(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_ISDIMMTOC4DQS_Type& o_vpdIsDimmTOC4DQSVal
+ )
+{
+ ReturnCode rc;
+
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must use
+ // the generic TARGET_TYPE_ALL -- so convert back to the correct type
+ // manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetDQSAttrISDIMM: Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> l_fapiTarget(l_pTarget);
+ rc = getDQSAttrISDIMM(l_fapiTarget,o_vpdIsDimmTOC4DQSVal);
+ }
+
+ return rc;
+}
+
+//-----------------------------------------------------------------------------
+ReturnCode platGetMBvpdDram2NModeEnabled(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_DRAM_2N_MODE_ENABLED_Type& o_dram2NModeEnabled
+ )
+{
+ ReturnCode rc;
+
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must use
+ // the generic TARGET_TYPE_ALL -- so convert back to the correct type
+ // manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetMBvpdDram2NModeEnabled: "
+ "Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MBA> l_fapiTarget(l_pTarget);
+ rc = getMBvpdDram2NModeEnabled(l_fapiTarget, o_dram2NModeEnabled);
+ }
+
+ return rc;
+}
+
+//-----------------------------------------------------------------------------
+ReturnCode platGetMBvpdMemoryDataVersion(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_VM_KEYWORD_Type& o_vpdVMKeywordVal
+ )
+{
+ ReturnCode rc;
+
+ do
+ {
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must
+ // use the generic TARGET_TYPE_ALL -- so convert back to the correct
+ // type manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetMBvpdMemoryDataVersion: "
+ "Error from getTargetingTarget");
+
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ break;
+ }
+ else
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>
+ l_fapiTarget(l_pTarget);
+
+ rc = getMBvpdMemoryDataVersion(l_fapiTarget, o_vpdVMKeywordVal);
+ }
+ }
+ while(0);
+
+ return rc;
+}
+
+//-----------------------------------------------------------------------------
+ReturnCode platGetMBvpdSPDXRecordVersion(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_VD_KEYWORD_Type& o_vpdVDKeywordVal
+ )
+{
+ ReturnCode rc;
+
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must use
+ // the generic TARGET_TYPE_ALL -- so convert back to the correct type
+ // manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetMBvpdSPDXRecordVersion: "
+ "Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> l_fapiTarget(l_pTarget);
+ rc = getMBvpdSPDXRecordVersion(l_fapiTarget, o_vpdVDKeywordVal);
+ }
+
+ return rc;
+}
+
+//-----------------------------------------------------------------------------
+ReturnCode platGetMBvpdSpareDramData(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_DIMM_SPARE_Type& o_vpdDimmSpare
+ )
+{
+ ReturnCode rc;
+
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must use
+ // the generic TARGET_TYPE_ALL -- so convert back to the correct type
+ // manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetMBvpdSpareDramData: Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MBA> l_fapiTarget(l_pTarget);
+ rc = getMBvpdSpareDramData(l_fapiTarget, o_vpdDimmSpare);
+ }
+
+ return rc;
+}
+
+//-----------------------------------------------------------------------------
+ReturnCode platGetMBvpdVersion(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_VERSION_Type& o_vpdVersion
+ )
+{
+ ReturnCode rc;
+
+ do
+ {
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must use
+ // the generic TARGET_TYPE_ALL -- so convert back to the correct type
+ // manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetMBvpdVersion: Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ TARGETING::TargetHandleList l_mbaList;
+
+ // Find MBA target from DIMM target
+ getParentAffinityTargets(l_mbaList,
+ l_pTarget,
+ TARGETING::CLASS_UNIT,
+ TARGETING::TYPE_MBA,
+ false);
+
+ const bool hbSwError = true;
+
+ if(l_mbaList.empty())
+ {
+ /*@
+ * @errortype
+ * @moduleid fapi2::MOD_FAPI2_GET_ATTR_CEN_VPD_VERSION
+ * @reasoncode fapi2::RC_NO_PARENT_MBA
+ * @userdata1 DIMM HUID
+ * @userdata2 0
+ * @devdesc platGetMBvpdMemoryDataVersion could not find
+ * an mba parent target from the passed in
+ * dimm target.
+ */
+ l_errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ fapi2::MOD_FAPI2_GET_ATTR_CEN_VPD_VERSION,
+ fapi2::RC_NO_SINGLE_MBA,
+ TARGETING::get_huid(l_pTarget),
+ 0,
+ hbSwError);
+
+ FAPI_ERR("platGetMBvpdVersion: "
+ "Error could not find an MBA parent for DIMM");
+
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ break;
+ }
+ else if(l_mbaList.size() != 1)
+ {
+ /*@
+ * @errortype
+ * @moduleid fapi2::MOD_FAPI2_GET_ATTR_CEN_VPD_VERSION
+ * @reasoncode fapi2::RC_NO_SINGLE_MBA
+ * @userdata1 Number of MBAs
+ * @userdata2 DIMM HUID
+ * @devdesc platGetMBvpdMemoryDataVersion could not find
+ * the expected 1 mba from the passed dimm target
+ */
+ l_errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ fapi2::MOD_FAPI2_GET_ATTR_CEN_VPD_VERSION,
+ fapi2::RC_NO_SINGLE_MBA,
+ l_mbaList.size(),
+ TARGETING::get_huid(l_pTarget),
+ hbSwError);
+
+ FAPI_ERR("platGetMBvpdVersion: "
+ "Found multiple MBA chips while "
+ "seeking parent for DIMM");
+
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ break;
+ }
+
+ fapi2::Target<fapi2::TARGET_TYPE_MBA>
+ l_fapiTarget(l_mbaList.front());
+
+ rc = getMBvpdVersion(l_fapiTarget, o_vpdVersion);
+ }
+
+ }
+ while(0);
+
+ return rc;
+}
+
+//-----------------------------------------------------------------------------
+ReturnCode platGetMBvpdVoltageSettingData(
+ const Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ ATTR_CEN_VPD_DW_KEYWORD_Type& o_vpdDWKeyword
+ )
+{
+ ReturnCode rc;
+
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must use
+ // the generic TARGET_TYPE_ALL -- so convert back to the correct type
+ // manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetMBvpdVoltageSettingData: "
+ "Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> l_fapiTarget(l_pTarget);
+ rc = getMBvpdVoltageSettingData(l_fapiTarget, o_vpdDWKeyword);
+ }
+
+ return rc;
+}
+
+//----------------------------------------------------------------------------
+ReturnCode platGetMBvpdAttr(
+ const fapi2::Target<TARGET_TYPE_ALL>& i_fapiTarget,
+ const fapi2::AttributeId i_attr,
+ void* o_pVal,
+ const size_t i_valSize
+ )
+{
+ FAPI_INF("platGetMBvpdAttr: Enter");
+ FAPI_INF("platGetMBvpdAttr: Attr: 0x%08X", i_attr);
+
+ ReturnCode rc;
+ constexpr bool hbSwError{true};
+
+ do
+ {
+ // Don't need to check the type here, the FAPI_ATTR_GET macro clause
+ // "fapi2::Target<ID##_TargetType>(TARGET)" does it for us. However,
+ // to enable a streamlined dump of the attributes, all plat code must
+ // use the generic TARGET_TYPE_ALL -- so convert back to the correct
+ // type manually
+ TARGETING::Target * l_pTarget = NULL;
+ errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget);
+
+ if (l_errl)
+ {
+ FAPI_ERR("platGetMBvpdAttr: Error from getTargetingTarget");
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ }
+ else
+ {
+ TARGETING::TYPE l_type =
+ l_pTarget->getAttr<TARGETING::ATTR_TYPE>();
+
+ if(TARGETING::TYPE_MBA != l_type)
+ {
+ if(TARGETING::TYPE_MEMBUF != l_type)
+ {
+ /*@
+ * @errortype
+ * @moduleid fapi2::MOD_FAPI2_GET_MB_VPD_ATTR
+ * @reasoncode fapi2::RC_INVALID_TARGET_TYPE
+ * @userdata1 Target Type
+ * @userdata2 Target HUID
+ * @devdesc platGetMBvpdMemoryDataVersion requires
+ * a target of type TYPE_MBA or TYPE_MEMBUF
+ */
+ l_errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ fapi2::MOD_FAPI2_GET_ATTR_CEN_VPD_VERSION,
+ fapi2::RC_INVALID_TARGET_TYPE,
+ l_type,
+ TARGETING::get_huid(l_pTarget),
+ hbSwError);
+
+ rc = ReturnCode(fapi2::RC_INVALID_TARGET_TYPE);
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ FAPI_ERR("platGetMBvpdAttr: Invalid Target Type.");
+ break;
+ }
+
+ TARGETING::TargetHandleList l_mbaList;
+ TARGETING::getChildAffinityTargets(l_mbaList,
+ l_pTarget,
+ TARGETING::CLASS_UNIT,
+ TARGETING::TYPE_MBA,
+ false);
+
+ if(l_mbaList.empty())
+ {
+ /*@
+ * @errortype
+ * @moduleid fapi2::MOD_FAPI2_GET_MB_VPD_ATTR
+ * @reasoncode fapi2::RC_NO_CHILD_MBA
+ * @userdata1 Target Type
+ * @userdata2 Target HUID
+ * @devdesc platGetMBvpdMemoryDataVersion could not
+ * find any child mba's from the passed in
+ * target of type TYPE_MEMBUF
+ */
+ l_errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ fapi2::MOD_FAPI2_GET_ATTR_CEN_VPD_VERSION,
+ fapi2::RC_NO_CHILD_MBA,
+ l_type,
+ TARGETING::get_huid(l_pTarget),
+ hbSwError);
+
+ rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ FAPI_ERR("platGetMBvpdAttr: Could not find a child mba "
+ "for the passed in membuf target."
+ );
+ break;
+ }
+
+ //since we have to get the value from a child mba, try all
+ //child mba's until successful.
+ for(auto l_currentMba: l_mbaList)
+ {
+ fapi2::Target<fapi2::TARGET_TYPE_MBA>
+ l_fapiTarget(l_currentMba);
+
+ rc = getMBvpdAttr(l_fapiTarget,
+ i_attr,
+ o_pVal,
+ i_valSize);
+
+ if(rc == fapi2::FAPI2_RC_SUCCESS)
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+
+ fapi2::Target<fapi2::TARGET_TYPE_MBA> l_fapiTarget(l_pTarget);
+ rc = getMBvpdAttr(l_fapiTarget,
+ i_attr,
+ o_pVal,
+ i_valSize);
+ }
+ }
+ }
+ while(0);
+
+ return rc;
+}
+
} // End platAttrSvc namespace
} // End fapi2 namespace
diff --git a/src/usr/fapi2/fapi2.mk b/src/usr/fapi2/fapi2.mk
index a338ffe1d..2b110c829 100755
--- a/src/usr/fapi2/fapi2.mk
+++ b/src/usr/fapi2/fapi2.mk
@@ -52,6 +52,7 @@ EXTRAINCDIR += ${HWP_PATH_2}/hwp/memory
EXTRAINCDIR += ${HWP_PATH_2}/hwp/memory/lib/
EXTRAINCDIR += ${HWP_PATH_2}/hwp/memory/lib/shared/
EXTRAINCDIR += ${HWP_PATH_2}/hwp/memory/lib/utils/
+EXTRAINCDIR += ${HWP_PATH_2}/vpd_accessors/
include ${ROOTPATH}/src/build/mkrules/verbose.rules.mk
define __CLEAN_TARGET
@@ -159,10 +160,27 @@ include $(ROOTPATH)/src/import/chips/p9/procedures/hwp/pm/p9_pm_get_poundw_bucke
# provider is shutdown
include $(ROOTPATH)/src/import/chips/p9/procedures/hwp/initfiles/p9_int_scom.mk
+CENTAUR_VPD_PATH=${HWP_PATH_2}/vpd_accessors
+include ${CENTAUR_VPD_PATH}/getControlCapableData.mk
+include ${CENTAUR_VPD_PATH}/getDecompressedISDIMMAttrs.mk
+include ${CENTAUR_VPD_PATH}/getISDIMMTOC4DAttrs.mk
+include ${CENTAUR_VPD_PATH}/getDQAttrISDIMM.mk
+include ${CENTAUR_VPD_PATH}/getDQSAttrISDIMM.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdAddrMirrorData.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdAttr.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdDram2NModeEnabled.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdMemoryDataVersion.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdSlopeInterceptData.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdSpareDramData.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdSPDXRecordVersion.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdVersion.mk
+include ${CENTAUR_VPD_PATH}/getMBvpdVoltageSettingData.mk
+
VPATH += ${HWP_PATH_1}/hwp/accessors
VPATH += ${ROOTPATH}/src/import/hwpf/fapi2/src/
VPATH += ${ROOTPATH}/src/import/chips/p9/procedures/hwp/pm/
VPATH += ${ROOTPATH}/src/import/chips/p9/procedures/hwp/ffdc/
VPATH += ${ROOTPATH}/src/import/chips/p9/procedures/hwp/lib/
VPATH += ${ROOTPATH}/src/import/chips/p9/procedures/hwp/initfiles/
+VPATH += ${CENTAUR_VPD_PATH}/
VPATH += ${GENPATH}
diff --git a/src/usr/fapi2/plat_mbvpd_access.C b/src/usr/fapi2/plat_mbvpd_access.C
index cd76207ef..c13b6b082 100644
--- a/src/usr/fapi2/plat_mbvpd_access.C
+++ b/src/usr/fapi2/plat_mbvpd_access.C
@@ -350,7 +350,7 @@ fapi2::ReturnCode setMBvpdField
const fapi2::MBvpdKeyword i_keyword,
const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> &i_target,
const uint8_t * const i_pBuffer,
- const uint32_t i_fieldSize)
+ const size_t i_fieldSize)
{
fapi2::ReturnCode l_rc;
uint8_t l_recIndex = MBVPD_INVALID_CHIP_UNIT;
diff --git a/src/usr/fapi2/test/fapi2Test.mk b/src/usr/fapi2/test/fapi2Test.mk
index f818ed778..ebead350d 100644
--- a/src/usr/fapi2/test/fapi2Test.mk
+++ b/src/usr/fapi2/test/fapi2Test.mk
@@ -41,6 +41,9 @@ EXTRAINCDIR += ${ROOTPATH}/src/include/usr/targeting/common/
EXTRAINCDIR += ${ROOTPATH}/src/import/chips/p9/procedures/hwp/ffdc/
EXTRAINCDIR += ${ROOTPATH}/obj/genfiles/
+CENTAUR_PROC_PATH=${ROOTPATH}/src/import/chips/centaur/procedures
+EXTRAINCDIR += ${CENTAUR_PROC_PATH}/hwp/memory/lib/shared/
+
# Procedures
OBJS += p9_sample_procedure.o
OBJS += p9_hwtests.o
diff --git a/src/usr/fapi2/test/fapiGetMBVpdTest.H b/src/usr/fapi2/test/fapiGetMBVpdTest.H
new file mode 100644
index 000000000..87a7d89e9
--- /dev/null
+++ b/src/usr/fapi2/test/fapiGetMBVpdTest.H
@@ -0,0 +1,628 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/fapi2/test/fapiGetMBVpdTest.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __FAPI2_FAPI_GET_MB_VPD_TEST_H
+#define __FAPI2_FAPI_GET_MB_VPD_TEST_H
+
+#include <cxxtest/TestSuite.H>
+#include <attribute_service.H>
+
+#include <targeting/common/attributes.H>
+#include <fapi2/target.H>
+#include <target_types.H>
+
+#include <fapi2.H>
+
+// use TRACE_MB_VPD_ATTR_UNIT_TEST=1 make -j32
+// to enable tracing of unit test
+#ifdef TRACE_MB_VPD_ATTR_UNIT_TEST
+#define PRINT_VPD_INFO(str) \
+ FAPI_INF("%s", str)
+#define __TRACE_USE_ONLY__
+#define FAPI_TEST_TRACE(fmt, args...)\
+ FAPI_INF("Fapi2GetMBVpdTest::" fmt, ##args)
+#else
+#define __TRACE_USE_ONLY__ __attribute__((unused))
+#define PRINT_VPD_INFO(str)
+#define FAPI_TEST_TRACE(fmt, args...)
+#endif
+
+#define TEST_GET_ATTR(ID, TARGET) \
+if(rc)\
+{\
+ break;\
+}\
+do{\
+ FAPI_TEST_TRACE("TEST_GET_ATTR: Start Get Test For %s", #ID);\
+ ID##_Type buffer; \
+ clear_buffer(buffer); \
+ rc = FAPI_ATTR_GET(ID, TARGET, buffer);\
+ if(rc) \
+ {\
+ FAPI_TEST_TRACE("TEST_GET_ATTR: Failed to read %s", #ID);\
+ TS_FAIL("Fapi2GetMBVpdTest: Get Test Failed For Attribute %s", #ID); \
+ }\
+ else \
+ {\
+ dump_buffer(buffer, strbuffer, #ID); \
+ PRINT_VPD_INFO(strbuffer); \
+ }\
+}while(0)
+
+
+//----------------------------------------------------------------------
+class Fapi2GetMBVpdTest:public CxxTest::TestSuite
+{
+public:
+
+ //------------------------------------------------------------------
+ fapi2::ReturnCode hw_proc_for_test()
+ {
+ fapi2::ReturnCode rc{0};
+
+ do
+ {
+ char strbuffer[2048] = {0};
+
+ //getMBAttr attribute function.
+ TEST_GET_ATTR(ATTR_CEN_VPD_TSYS_ADR, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_TSYS_DP18, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRAM_RON, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRAM_RTT_NOM, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRAM_RTT_WR, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_ODT_RD, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_ODT_WR, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DIMM_RCD_IBT, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DIMM_RCD_OUTPUT_TIMING, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_RD_VREF, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRAM_WR_VREF, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRAM_WRDDR4_VREF, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_RCV_IMP_DQ_DQS, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRV_IMP_DQ_DQS, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRV_IMP_CNTL, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRV_IMP_ADDR, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRV_IMP_CLK, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRV_IMP_SPCKE, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_SLEW_RATE_DQ_DQS, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_SLEW_RATE_CNTL, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_SLEW_RATE_ADDR, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_SLEW_RATE_CLK, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_SLEW_RATE_SPCKE, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_CKE_PRI_MAP, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_CKE_PWR_MAP, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_RLO, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_WLO, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_GPO, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CLK_P0, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CLK_P1, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M1_CLK_P0, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M1_CLK_P1, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A0, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A1, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A2, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A3, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A4, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A5, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A6, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A7, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A8, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A9, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A10, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A11, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A12, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A13, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A14, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_A15, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA0, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA1, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_BA2, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_CASN, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_RASN, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_CMD_WEN, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_PAR, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M_ACTN, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE0, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE1, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE2, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CKE3, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN0, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN1, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN2, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_CSN3, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_ODT0, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_PHASE_ROT_M0_CNTL_ODT1, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRAM_RTT_PARK, iv_targ_mba);
+ TEST_GET_ATTR(ATTR_CEN_VPD_RD_CTR_WINDAGE_OFFSET, iv_targ_mba);
+
+ TEST_GET_ATTR(ATTR_CEN_VPD_MR_VERSION_BYTE, iv_targ_membuf);
+ TEST_GET_ATTR(ATTR_CEN_VPD_MR_DATA_CONTROL_BYTE, iv_targ_membuf);
+ TEST_GET_ATTR(ATTR_CEN_VPD_MT_VERSION_BYTE, iv_targ_membuf);
+ TEST_GET_ATTR(ATTR_CEN_VPD_MT_DATA_CONTROL_BYTE, iv_targ_membuf);
+
+ //getControlCapableData attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_POWER_CONTROL_CAPABLE,
+ iv_targ_membuf);
+
+ //getDQAttrISDIMM attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_ISDIMMTOC4DQ, iv_targ_membuf);
+
+ //getDQSAttrISDIMM attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_ISDIMMTOC4DQS, iv_targ_membuf);
+
+ //getMBvpdMemoryDataVersion attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_VM_KEYWORD, iv_targ_membuf);
+
+ //getMBvpdSPDXRecordVersion attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_VD_KEYWORD, iv_targ_membuf);
+
+ //getMBvpdVoltageSettingData attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_DW_KEYWORD, iv_targ_membuf);
+
+ //getMBvpdDram2NModeEnabled attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_DRAM_2N_MODE_ENABLED, iv_targ_mba);
+
+ //getMBvpdSpareDramData attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_DIMM_SPARE, iv_targ_mba);
+
+ //getMBvpdVersion attribute function
+ TEST_GET_ATTR(ATTR_CEN_VPD_VERSION, iv_targ_dimm);
+ }
+ while(0);
+
+ return rc;
+ }
+
+ //-----------------------------------------------------------------
+ void test_mb_vpd_attr()
+ {
+ errlHndl_t l_errl{};
+
+ do
+ {
+ if(not getTargets())
+ {
+ FAPI_INF("test_mb_vpd_attr: Skipping test, unable to populate "
+ "targets. Assuming no memory buffers present.");
+ break;
+ }
+
+ //Tests placed in hardware proccedure for synchronization
+ FAPI_INVOKE_HWP(l_errl, hw_proc_for_test);
+ }
+ while(0);
+
+ if(not l_errl)
+ {
+ FAPI_INF("test_mb_vpd_attr: Exit Test Passed!");
+ }
+ else
+ {
+ delete l_errl;
+ FAPI_INF("test_mb_vpd_attr: Exit Test Failed!");
+ }
+ }
+
+private:
+
+ fapi2::Target<TARGET_TYPE_DIMM> iv_targ_dimm;
+ fapi2::Target<TARGET_TYPE_MBA> iv_targ_mba;
+ fapi2::Target<TARGET_TYPE_MEMBUF_CHIP> iv_targ_membuf;
+
+ //----------------------------------------------------
+ bool getTargets()
+ {
+ bool l_retval{false};
+
+ do
+ {
+ TARGETING::TargetHandleList l_membufTargetList;
+ TARGETING::getAllChips(l_membufTargetList,
+ TARGETING::TYPE_MEMBUF);
+
+ if(l_membufTargetList.empty())
+ {
+ FAPI_TEST_TRACE("getTargets: did not find any "
+ "membuf targets.");
+ return l_retval;
+ }
+
+ for(TARGETING::Target* l_membufTarget: l_membufTargetList)
+ {
+ TARGETING::TargetHandleList l_mbaTargetList;
+ TARGETING::getChildChiplets(l_mbaTargetList,
+ l_membufTarget,
+ TARGETING::TYPE_MBA
+ );
+
+ for(TARGETING::Target* l_mbaTarget: l_mbaTargetList)
+ {
+ TARGETING::Target* l_dimmTarget{};
+ TARGETING::TargetHandleList l_dimmList;
+
+ TARGETING::getChildAffinityTargets(
+ l_dimmList,
+ l_mbaTarget,
+ TARGETING::CLASS_LOGICAL_CARD,
+ TARGETING::TYPE_DIMM,
+ false
+ );
+
+ for(TARGETING::Target* l_currentDimm: l_dimmList)
+ {
+ if(nullptr != l_currentDimm)
+ {
+ FAPI_TEST_TRACE("getTargets: Found a DIMM target "
+ "for the parent mba target.");
+
+ l_dimmTarget = l_currentDimm;
+ break;
+ }
+ }
+
+ if(nullptr == l_dimmTarget)
+ {
+ FAPI_TEST_TRACE("getTargets: Failed to find a "
+ "DIMM child target from an MBA target"
+ );
+ continue;
+ }
+
+ iv_targ_mba =
+ fapi2::Target<fapi2::TARGET_TYPE_MBA>(l_mbaTarget);
+
+ iv_targ_membuf =
+ fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>
+ (l_membufTarget);
+
+ iv_targ_dimm =
+ fapi2::Target<fapi2::TARGET_TYPE_DIMM>(l_dimmTarget);
+
+ __TRACE_USE_ONLY__ TARGETING::ATTR_HUID_type l_huid = 0;
+
+ l_huid = l_membufTarget->getAttr<TARGETING::ATTR_HUID>();
+ FAPI_TEST_TRACE("getTargets: membuf huid: 0x%0X", l_huid);
+
+ l_huid = l_mbaTarget->getAttr<TARGETING::ATTR_HUID>();
+ FAPI_TEST_TRACE("getTargets: mba huid: 0x%0X", l_huid);
+
+ l_huid = l_dimmTarget->getAttr<TARGETING::ATTR_HUID>();
+ FAPI_TEST_TRACE("getTargets: dimm huid: 0x%0X", l_huid);
+
+ l_retval = true;
+
+ break;
+ }
+
+ if(l_retval)
+ {
+ break;
+ }
+ }
+ }
+ while(0);
+
+ return l_retval;
+ }
+
+ //-------------------------------------------------------------------------
+ template<typename T>
+ bool dump_buffer_element(const T& i_arr,
+ char*& io_ptr,
+ size_t& io_remaining,
+ size_t i_element_1)
+ {
+ bool l_retval{false};
+
+ do
+ {
+ int l_result = snprintf(io_ptr, io_remaining,
+ "\t[%llu]=0x%llX (%llu)\n",
+ i_element_1,
+ i_arr[i_element_1],
+ i_arr[i_element_1]
+ );
+
+ if(l_result >= 0 && static_cast<size_t>(l_result) <= io_remaining)
+ {
+ io_remaining -= static_cast<size_t>(l_result);
+ io_ptr += static_cast<size_t>(l_result);
+ l_retval = true;
+ }
+ }
+ while(0);
+
+ return l_retval;
+ }
+
+ //------------------------------------------------------------------------
+ template<typename T>
+ bool dump_buffer_element(const T& i_arr,
+ char*& io_ptr,
+ size_t& io_remaining,
+ size_t i_element_1,
+ size_t i_element_2)
+ {
+ bool l_retval{false};
+
+ do
+ {
+ int l_result = snprintf(io_ptr, io_remaining,
+ "\t[%llu][%llu]=0x%llX (%llu)\n",
+ i_element_1,
+ i_element_2,
+ i_arr[i_element_1][i_element_2],
+ i_arr[i_element_1][i_element_2]
+ );
+
+ if(l_result >= 0 && static_cast<size_t>(l_result) <= io_remaining)
+ {
+ io_remaining -= static_cast<size_t>(l_result);
+ io_ptr += static_cast<size_t>(l_result);
+ l_retval = true;
+ }
+ }
+ while(0);
+
+ return l_retval;
+ }
+
+ //-------------------------------------------------------------------------
+ template<typename T>
+ bool dump_buffer_element(const T& i_arr,
+ char*& io_ptr,
+ size_t& io_remaining,
+ size_t i_element_1,
+ size_t i_element_2,
+ size_t i_element_3)
+ {
+ bool l_retval{false};
+
+ do
+ {
+ if(nullptr == io_ptr)
+ {
+ break;
+ }
+
+ int l_result = snprintf(io_ptr, io_remaining,
+ "\t[%llu][%llu][%llu]=0x%llX (%llu)\n",
+ i_element_1,
+ i_element_2,
+ i_element_3,
+ i_arr[i_element_1][i_element_2][i_element_3],
+ i_arr[i_element_1][i_element_2][i_element_3]);
+
+ if(l_result >= 0 && static_cast<size_t>(l_result) <= io_remaining)
+ {
+ io_remaining -= static_cast<size_t>(l_result);
+ io_ptr += static_cast<size_t>(l_result);
+ l_retval = true;
+ }
+ }
+ while(0);
+
+ return l_retval;
+ }
+
+ //-------------------------------------------------------------------------
+ bool dump_prefix(const char* i_prefix,
+ char*& io_ptr,
+ size_t& io_remaining)
+ {
+ bool l_retval{false};
+
+ do
+ {
+ int l_result = snprintf(io_ptr, io_remaining, "%s\n", i_prefix);
+ if(l_result >= 0 && static_cast<size_t>(l_result) <= io_remaining)
+ {
+ io_remaining -= static_cast<size_t>(l_result);
+ io_ptr += static_cast<size_t>(l_result);
+ l_retval = true;
+ }
+ }
+ while(0);
+
+ return l_retval;
+ }
+
+ //-------------------------------------------------------------------------
+ template<typename T, size_t N>
+ void dump_buffer(const T& i_arr,
+ char (&i_strbuffer)[N],
+ const char* i_prefix)
+ {
+ memset(i_strbuffer, 0, N);
+ char* l_ptr = i_strbuffer;
+ bool l_bResult{false};
+
+ do
+ {
+ size_t l_remaining{(N - 1)};
+
+ if(i_prefix)
+ {
+ l_bResult = dump_prefix(i_prefix ,l_ptr, l_remaining);
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+
+ snprintf(l_ptr, l_remaining, "\tval=0x%llX\n", i_arr);
+ }
+ while(0);
+ }
+
+ //-------------------------------------------------------------------------
+ template<typename T>
+ void clear_buffer(T& i_arr)
+ {
+ memset(&i_arr, 0, sizeof(T));
+ }
+
+ //-------------------------------------------------------------------------
+ template<typename T, size_t I, size_t N>
+ void dump_buffer(const T (&i_arr)[I],
+ char (&i_strbuffer)[N],
+ const char* i_prefix)
+ {
+ memset(i_strbuffer, 0, N);
+ char* l_ptr = i_strbuffer;
+ bool l_bResult{false};
+
+ do
+ {
+ size_t l_remaining{(N - 1)};
+
+ if(i_prefix)
+ {
+ l_bResult = dump_prefix(i_prefix , l_ptr, l_remaining);
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+
+ for(size_t i=0; i<I; ++i)
+ {
+ l_bResult = dump_buffer_element(i_arr, l_ptr, l_remaining, i);
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+ }
+ while(0);
+ }
+
+ //----------------------------------------------------------------------
+ template<typename T, size_t I, size_t J, size_t N>
+ void dump_buffer(const T (&i_arr)[I][J],
+ char (&i_strbuffer)[N],
+ const char* i_prefix)
+ {
+ memset(i_strbuffer, 0, N);
+ char* l_ptr = i_strbuffer;
+
+ bool l_bResult{true};
+
+ do
+ {
+ size_t l_remaining{(N - 1)};
+
+ if(i_prefix)
+ {
+ l_bResult = dump_prefix(i_prefix , l_ptr, l_remaining);
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+
+ for(size_t i=0; i<I; ++i)
+ {
+ for(size_t j=0; j<J; ++j)
+ {
+ l_bResult = dump_buffer_element(i_arr,
+ l_ptr,
+ l_remaining,
+ i,
+ j);
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+
+ }
+ while(0);
+ }
+
+ //-------------------------------------------------------------------------
+ template<typename T, size_t I, size_t J, size_t K, size_t N>
+ void dump_buffer(const T (&i_arr)[I][J][K],
+ char (&i_strbuffer)[N],
+ const char* i_prefix)
+ {
+ memset(i_strbuffer, 0, N);
+ char* l_ptr = i_strbuffer;
+
+ bool l_bResult{true};
+
+ do
+ {
+ size_t l_remaining{(N - 1)};
+
+ if(i_prefix)
+ {
+ l_bResult = dump_prefix(i_prefix, l_ptr, l_remaining);
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+
+ for(size_t i=0; i<I; ++i)
+ {
+ for(size_t j=0; j<J; ++j)
+ {
+ for(size_t k=0; k<K; ++k)
+ {
+ l_bResult = dump_buffer_element(i_arr,
+ l_ptr,
+ l_remaining,
+ i,
+ j,
+ k);
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+
+ if(not l_bResult)
+ {
+ break;
+ }
+ }
+ }
+ while(0);
+ }
+
+};
+
+#endif
diff --git a/src/usr/fapi2/test/makefile b/src/usr/fapi2/test/makefile
index 909ee7ac2..407e2eb5c 100644
--- a/src/usr/fapi2/test/makefile
+++ b/src/usr/fapi2/test/makefile
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2015,2016
+# Contributors Listed Below - COPYRIGHT 2015,2017
# [+] International Business Machines Corp.
#
#
@@ -31,6 +31,9 @@ MODULE = testfapi2
include fapi2Test.mk
+ifdef TRACE_MB_VPD_ATTR_UNIT_TEST
+CXXFLAGS+=-DTRACE_MB_VPD_ATTR_UNIT_TEST
+endif
include ${ROOTPATH}/config.mk
diff --git a/src/usr/secureboot/base/securerommgr.C b/src/usr/secureboot/base/securerommgr.C
index d596d5c64..072fcf950 100644
--- a/src/usr/secureboot/base/securerommgr.C
+++ b/src/usr/secureboot/base/securerommgr.C
@@ -546,7 +546,7 @@ const SecureRomManager::SecRomFuncTypeOffsetMap_t
sbFuncVer_t SecureRomManager::getSecRomFuncVersion(const sbFuncType_t
i_funcType) const
{
- sbFuncVer_t l_funcVer = SB_FUNC_TYPES::INVALID;
+ sbFuncVer_t l_funcVer = SB_FUNC_TYPES::SB_FUNC_TYPES_INVALID;
switch (i_funcType)
{
diff --git a/src/usr/vpd/HBconfig b/src/usr/vpd/HBconfig
index 49d846757..131f9cd74 100644
--- a/src/usr/vpd/HBconfig
+++ b/src/usr/vpd/HBconfig
@@ -138,6 +138,6 @@ config PALMETTO_PASS1
Palmetto pass1 specific changes
config CDIMM_FORMAT_FOR_CVPD
- default y
+ default n
help
Assume Custom DIMM VPD layout for CVPD
diff --git a/src/usr/vpd/makefile b/src/usr/vpd/makefile
index a559b1841..4e0de0709 100644
--- a/src/usr/vpd/makefile
+++ b/src/usr/vpd/makefile
@@ -25,6 +25,9 @@
ROOTPATH = ../../..
MODULE = vpd
+#include configuration defines
+include $(ROOTPATH)/obj/genfiles/config.mk
+
#include common objects between hb and runtime
include vpd.mk
@@ -51,9 +54,14 @@ BINARY_FILES += $(IMGDIR)/vpo_djvpd.dat:eb4dce98f19ebfe77243be1c56d3d0eaa1889d90
BINARY_FILES += $(IMGDIR)/procmvpd_p9n.dat:a351f3cd5ba8a81a50c3e5a0dea5fea03e55769d
BINARY_FILES += $(IMGDIR)/procmvpd_p9c.dat:423208204c2f0e759610f4f39243362fd4b6d103
-
#Update to Centaur DD2.0 for CCIN 31E8
+ifdef CONFIG_CDIMM_FORMAT_FOR_CVPD
+#download 4k cvpd file
BINARY_FILES += $(IMGDIR)/cvpd.dat:2e33352ca95279b992927336567adf960dca7d46
+else
+#download 8k cvpd file
+BINARY_FILES += $(IMGDIR)/cvpd.dat:af41c35b5a10f309f2519a871204936a2129e5ea
+endif
#Direct memory vpd
BINARY_FILES += $(IMGDIR)/dvpd.dat:9292032f653710f92bbeb56b39582b2d0e5296b7
OpenPOWER on IntegriCloud