diff options
author | Donald Washburn <dwashbur@us.ibm.com> | 2017-09-11 13:58:25 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-11-01 17:07:12 -0400 |
commit | 621ab58f2f538157abc992f1f490ae0a927ed0cc (patch) | |
tree | 27c8fcc3e968dd52fa9f1ae7d0ca51836bb07cee | |
parent | 5e731ccc76d458e752e465471e27a40dd6011e5b (diff) | |
download | talos-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-x | src/build/simics/hb-pnor-vpd-preload.pl | 19 | ||||
-rw-r--r-- | src/include/securerom/ROM.H | 2 | ||||
-rw-r--r-- | src/include/usr/fapi2/attribute_service.H | 1020 | ||||
-rw-r--r-- | src/include/usr/fapi2/hwpf_fapi2_reasoncodes.H | 9 | ||||
-rw-r--r-- | src/usr/fapi2/attribute_service.C | 496 | ||||
-rwxr-xr-x | src/usr/fapi2/fapi2.mk | 18 | ||||
-rw-r--r-- | src/usr/fapi2/plat_mbvpd_access.C | 2 | ||||
-rw-r--r-- | src/usr/fapi2/test/fapi2Test.mk | 3 | ||||
-rw-r--r-- | src/usr/fapi2/test/fapiGetMBVpdTest.H | 628 | ||||
-rw-r--r-- | src/usr/fapi2/test/makefile | 5 | ||||
-rw-r--r-- | src/usr/secureboot/base/securerommgr.C | 2 | ||||
-rw-r--r-- | src/usr/vpd/HBconfig | 2 | ||||
-rw-r--r-- | src/usr/vpd/makefile | 10 |
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 |