diff options
author | nagendra <nagendra.g@in.ibm.com> | 2015-07-24 13:55:08 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-10-15 15:00:13 -0500 |
commit | 29bd2509664ce1040eb98797857d1dc76a0fa42f (patch) | |
tree | 5bcd33f0f4add9361caf5cab92c16d03d91a2b16 /src/include | |
parent | 568932e9e7a3f6b2e06ef7ec48fb10ed5d3e1f93 (diff) | |
download | talos-hostboot-29bd2509664ce1040eb98797857d1dc76a0fa42f.tar.gz talos-hostboot-29bd2509664ce1040eb98797857d1dc76a0fa42f.zip |
New SPD and VPD attributes support for DDR4 DIMM enablement
. Added new SPD attributes support as per DDR4 JEDEC
. Added new VPD attributes as per ver5 Membuff vpd
Change-Id: I9b3eabe6fe1c804b88429548fbac7adf08d8f6ae
RTC: 116143
CQ: SW325324
Backport: release-fips840
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/19337
Tested-by: Jenkins Server
Tested-by: Jenkins OP Build CI
Tested-by: Jenkins OP HW
Tested-by: FSP CI Jenkins
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/include')
9 files changed, 537 insertions, 144 deletions
diff --git a/src/include/usr/hwpf/fapi/fapiMBvpdAccess.H b/src/include/usr/hwpf/fapi/fapiMBvpdAccess.H index 56d3dc55d..3f50ec389 100644 --- a/src/include/usr/hwpf/fapi/fapiMBvpdAccess.H +++ b/src/include/usr/hwpf/fapi/fapiMBvpdAccess.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2014 */ +/* Contributors Listed Below - COPYRIGHT 2013,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -22,7 +22,7 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: fapiMBvpdAccess.H,v 1.11 2014/10/23 20:57:58 eliner Exp $ +// $Id: fapiMBvpdAccess.H,v 1.12 2015/09/29 15:59:29 dcrowell Exp $ /** * @file fapiMBvpdAccess.H * @@ -123,6 +123,17 @@ namespace fapi MBVPD_KEYWORD_K6 = 0x39, MBVPD_KEYWORD_K7 = 0x3a, MBVPD_KEYWORD_K8 = 0x3b, + MBVPD_KEYWORD_MM = 0x3c, + MBVPD_KEYWORD_SS = 0x3d, + MBVPD_KEYWORD_ET = 0x3e, + MBVPD_KEYWORD_VM = 0x3f, + MBVPD_KEYWORD_PD1 = 0x40, //#1 + MBVPD_KEYWORD_PDZ = 0x41, //#Z + MBVPD_KEYWORD_PD4 = 0x42, //#4 + MBVPD_KEYWORD_PD5 = 0x43, //#5 + MBVPD_KEYWORD_PD6 = 0x44, //#6 + MBVPD_KEYWORD_PD8 = 0x45, //#8 + MBVPD_KEYWORD_PDY = 0x46, //#Y }; } diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H index 810cb4072..591617411 100644 --- a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H +++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H @@ -22,7 +22,7 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: getMBvpdAttr.H,v 1.2 2015/02/24 19:22:26 whs Exp $ +// $Id: getMBvpdAttr.H,v 1.7 2015/10/06 18:04:03 janssens Exp $ /** * @file getMBvpdAttr.H @@ -35,38 +35,78 @@ #define _HWP_MBVPDATTR_ #include <fapi.H> +#include <fapiUtil.H> #include <fapiMBvpdAccess.H> namespace fapi { namespace getAttrData { - //MT and MR keyword layout - const uint8_t NUM_MBA = 2; //There are 2 MBAs per Centaur memory buffer - const uint8_t NUM_PORTS = 2; //Each MBA has 2 ports - const uint8_t NUM_DIMMS = 2; //Each port has 2 DIMMs - const uint8_t NUM_RANKS = 4; //Number of ranks - //Each port has 64 bytes of space, but only 62 bytes is useable - const uint8_t PORT_SECTION_SIZE = 64; - const uint8_t PORT_SECTION_USED = 62; - - struct port_attributes + const uint32_t VM_00_MR_LAYOUT_KW_SIZE = 255; + const uint32_t VM_00_MR_LAYOUT_NON_PORT_HEAD_SIZE = 0; + const uint32_t VM_00_MR_LAYOUT_PORT_SEC_SIZE = 64; + const uint32_t VM_00_MT_LAYOUT_KW_SIZE = 255; + const uint32_t VM_00_MT_LAYOUT_NON_PORT_HEAD_SIZE = 0; + const uint32_t VM_00_MT_LAYOUT_PORT_SEC_SIZE = 64; + const uint32_t VM_01_MR_LAYOUT_KW_SIZE = 255; + const uint32_t VM_01_MR_LAYOUT_NON_PORT_HEAD_SIZE =2; + const uint32_t VM_01_MR_LAYOUT_PORT_SEC_SIZE = 64; + const uint32_t VM_01_MT_LAYOUT_KW_SIZE = 384; + const uint32_t VM_01_MT_LAYOUT_NON_PORT_HEAD_SIZE = 2; + const uint32_t VM_01_MT_LAYOUT_PORT_SEC_SIZE = 96; + + class keywordLayout + { + public: + virtual uint32_t getKeywordSize()=0; + virtual uint32_t getNonPortHeadSize()=0; + virtual uint32_t getPortSectionSize()=0; + virtual ~keywordLayout() {} + }; + class VM_00_MR_layout : public keywordLayout { - uint8_t port_attr[PORT_SECTION_USED]; - uint8_t nonport_data[PORT_SECTION_SIZE-PORT_SECTION_USED]; + public: + uint32_t getKeywordSize(){ return VM_00_MR_LAYOUT_KW_SIZE; } + uint32_t getNonPortHeadSize(){ return VM_00_MR_LAYOUT_NON_PORT_HEAD_SIZE; } + uint32_t getPortSectionSize(){ return VM_00_MR_LAYOUT_PORT_SEC_SIZE; } + ~VM_00_MR_layout() {} }; - struct mba_attributes + class VM_00_MT_layout : public keywordLayout { - port_attributes mba_port[NUM_PORTS]; + public: + uint32_t getKeywordSize(){ return VM_00_MT_LAYOUT_KW_SIZE; } + uint32_t getNonPortHeadSize(){ return VM_00_MT_LAYOUT_NON_PORT_HEAD_SIZE; } + uint32_t getPortSectionSize(){ return VM_00_MT_LAYOUT_PORT_SEC_SIZE; } + ~VM_00_MT_layout() {} }; - struct attr_keyword + class VM_01_MR_layout : public keywordLayout { - mba_attributes mb_mba[NUM_MBA]; + public: + uint32_t getKeywordSize(){ return VM_01_MR_LAYOUT_KW_SIZE; } + uint32_t getNonPortHeadSize(){ return VM_01_MR_LAYOUT_NON_PORT_HEAD_SIZE; } + uint32_t getPortSectionSize(){ return VM_01_MR_LAYOUT_PORT_SEC_SIZE; } + ~VM_01_MR_layout() {} }; - // The actual size of the keyword is 255 bytes, which is one byte short - // of the attr_keyword struct. One byte is used for the size in the vpd. - // As long as there is at least one reserved attribute, then all will fit. - const uint32_t ATTR_KEYWORD_SIZE = 255; // keyword size for attributes + class VM_01_MT_layout : public keywordLayout + { + public: + uint32_t getKeywordSize(){ return VM_01_MT_LAYOUT_KW_SIZE; } + uint32_t getNonPortHeadSize(){ return VM_01_MT_LAYOUT_NON_PORT_HEAD_SIZE; } + uint32_t getPortSectionSize(){ return VM_01_MT_LAYOUT_PORT_SEC_SIZE; } + ~VM_01_MT_layout() {} + }; + class layoutFactory + { + public: + static keywordLayout* getLayout(const uint32_t &i_keyword ,const uint32_t &i_ver); + }; + + + //MT and MR keyword layout for VM ver 0. + const uint8_t NUM_MBA = 2; //There are 2 MBAs per Centaur memory buffer + const uint8_t NUM_PORTS = 2; //Each MBA has 2 ports + const uint8_t NUM_DIMMS = 2; //Each port has 2 DIMMs + const uint8_t NUM_RANKS = 4; //Number of ranks // DIMM types enum DimmType @@ -76,14 +116,19 @@ namespace getAttrData ISDIMM = 2, }; + //Exceptions for MT keyword layout for VM ver 1. + + // Versions to check for enum VpdVersion { VD_VER = 0x010000, // Version came from VD keyword VZ_VER = 0x020000, // Version came from VZ keyword + VM_VER = 0x040000, // Version came from VM keyword ALL_VD = VD_VER, // Base value for VD keyword (version=0) ALL_VZ = VZ_VER, // Base value for VZ keyword (version=0) - ALL_VER = VD_VER|VZ_VER, // Base value for all versions + ALL_VM = VM_VER, // Base value for VM keyword (version=0) + ALL_VER = VD_VER|VZ_VER|VM_VER, // Base value for all versions // VZ values VZ_10 = VZ_VER | 0x3130, // Version 6.0 is ascii "10" @@ -91,6 +136,14 @@ namespace getAttrData // VD values VD_01 = VD_VER | 0x3031, // VD version "01" + + // VM values + VM_01 = VM_VER | 0x0001, // VM version "01" in hex + + // Supported VM version range + // As of now only VM_01 is supported + VM_SUPPORTED_HIGH_VER = 0x01, + VM_NOT_SUPPORTED = 0x00, VER_MASK= 0xffff, // Just version INVALID_VER = 0, // Invalid initialization value @@ -166,6 +219,14 @@ namespace getAttrData SPECIAL_PROCESSING_MASK = 0xFF00, }; +// VM keyword defination + struct MBvpdVMKeyword + { + uint8_t iv_version; + uint8_t iv_systemType; + uint8_t iv_systemType_ext; + uint8_t iv_dataVersion; + }; // Attribute definition struct MBvpdAttrDef { @@ -340,6 +401,22 @@ template<>class MBvpdAttrDataType<fapi::ATTR_VPD_CEN_PHASE_ROT_M1_CNTL_ODT0> { public: typedef fapi::ATTR_VPD_CEN_PHASE_ROT_M1_CNTL_ODT0_Type Type; }; template<>class MBvpdAttrDataType<fapi::ATTR_VPD_CEN_PHASE_ROT_M1_CNTL_ODT1> { public: typedef fapi::ATTR_VPD_CEN_PHASE_ROT_M1_CNTL_ODT1_Type Type; }; +template<>class MBvpdAttrDataType<fapi::ATTR_VPD_MR_VERSION_BYTE> + { public: typedef fapi::ATTR_VPD_MR_VERSION_BYTE_Type Type; }; +template<>class MBvpdAttrDataType<fapi::ATTR_VPD_MR_DATA_CONTROL_BYTE> + { public: typedef fapi::ATTR_VPD_MR_DATA_CONTROL_BYTE_Type Type; }; +template<>class MBvpdAttrDataType<fapi::ATTR_VPD_PERIODIC_MEMCAL_MODE_OPTIONS> + { public: typedef fapi::ATTR_VPD_PERIODIC_MEMCAL_MODE_OPTIONS_Type Type; }; +template<>class MBvpdAttrDataType<fapi::ATTR_VPD_MT_VERSION_BYTE> + { public: typedef fapi::ATTR_VPD_MT_VERSION_BYTE_Type Type; }; +template<>class MBvpdAttrDataType<fapi::ATTR_VPD_MT_DATA_CONTROL_BYTE> + { public: typedef fapi::ATTR_VPD_MT_DATA_CONTROL_BYTE_Type Type; }; +template<>class MBvpdAttrDataType<fapi::ATTR_VPD_DRAM_RTT_PARK> + { public: typedef fapi::ATTR_VPD_DRAM_RTT_PARK_Type Type; }; +template<>class MBvpdAttrDataType<fapi::ATTR_VPD_RD_CTR_WINDAGE_OFFSET> + { public: typedef fapi::ATTR_VPD_RD_CTR_WINDAGE_OFFSET_Type Type; }; + + // There is no ATTR_VPD_DRAM_2N_MODE attribute. getMBvpdAttr is called // directly using ATTR_VPD_DRAM_2N_MODE_ENABLED as an ID. //template<>class MBvpdAttrDataType<fapi::ATTR_VPD_DRAM_2N_MODE> @@ -381,6 +458,8 @@ typedef fapi::ReturnCode (*getMBvpdAttr_FP_t) (const fapi::Target &, const fapi::AttributeId, void *, const size_t); + + extern "C" { /** @@ -399,6 +478,16 @@ fapi::ReturnCode getMBvpdAttr( const fapi::AttributeId i_attr, void * o_pVal, const size_t i_valSize); + +/** + * @brief Find dimm info; parent, type, position + */ +fapi::ReturnCode findDimmInfo (const fapi::Target & i_mbaTarget, + fapi::Target & o_mbTarget, + uint8_t & o_pos, + fapi::getAttrData::DimmType & o_dimmType); + + } #endif diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H new file mode 100644 index 000000000..f172508cb --- /dev/null +++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H @@ -0,0 +1,62 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2015 */ +/* [+] 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 */ +// $Id: getMBvpdMemoryDataVersion.H,v 1.2 2015/10/06 15:18:04 dcrowell Exp $ +/** + * @file getMBvpdMemoryDataVersion.H + * + * @brief MBVPD Accessor for providing the ATTR_VPD_VM_KEYWORD attribute + */ + +#ifndef _HWP_GETMBVPDMEMDATAVERSION_ +#define _HWP_GETMBVPDMEMDATAVERSION_ + +#include <fapi.H> +#define VM_KEYWORD_DEFAULT_VALUE 0x00000000 + +// function pointer typedef definition for HWP call support +typedef fapi::ReturnCode (*getMBvpdMemoryDataVersion_FP_t) + (const fapi::Target &, uint32_t &); + +extern "C" +{ +/** + * @brief Get the ATTR_VPD_VM_KEYWORD FAPI attribute + * + * Return the Memory Data version from MBvpd record SPDX keyword VM. + * + * The ATTR_VPD_VM_KEYWORD attribute is associated with a DIMM. The platfrom must + * get the associated Membuff chip to be passed to this hwp accessor. + * + * @param[in] i_mbTarget - Reference to membuf Target + * @param[out] o_val - Filled in with vpd version + * + * @return fapi::ReturnCode FAPI_RC_SUCCESS if success, else error code + */ +fapi::ReturnCode getMBvpdMemoryDataVersion( + const fapi::Target & i_mbTarget, + uint32_t & o_val); +} + +#endif diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSPDXRecordVersion.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSPDXRecordVersion.H new file mode 100644 index 000000000..647e68189 --- /dev/null +++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSPDXRecordVersion.H @@ -0,0 +1,62 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSPDXRecordVersion.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2015 */ +/* [+] 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 */ +// $Id: getMBvpdSPDXRecordVersion.H,v 1.1 2015/09/29 16:25:03 dcrowell Exp $ +/** + * @file getMBvpdSPDXRecordVersion.H + * + * @brief MBVPD Accessor for providing the ATTR_VPD_VD_KEYWORD attribute + */ + +#ifndef _HWP_GETMBVPDSPDXVERSION_ +#define _HWP_GETMBVPDSPDXVERSION_ + +#include <fapi.H> +#define VD_KEYWORD_DEFAULT_VALUE 0x0000 + +// function pointer typedef definition for HWP call support +typedef fapi::ReturnCode (*getMBvpdSPDXRecordVersion_FP_t) + (const fapi::Target &, uint32_t &); + +extern "C" +{ +/** + * @brief Get the ATTR_VPD_VD_KEYWORD FAPI attribute + * + * Return the SPDX version from MBvpd record SPDX keyword VD. + * + * The ATTR_VPD_VD_KEYWORD attribute is associated with a DIMM. The platfrom must + * get the associated MemBuff chip to be passed to this hwp accessor. + * + * @param[in] i_mbTarget - Reference to membuf Target + * @param[out] o_val - Filled in with vpd version + * + * @return fapi::ReturnCode FAPI_RC_SUCCESS if success, else error code + */ +fapi::ReturnCode getMBvpdSPDXRecordVersion( + const fapi::Target & i_mbTarget, + uint32_t & o_val); +} + +#endif diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSlopeInterceptData.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSlopeInterceptData.H index 1a3fbb733..d88a087a7 100644 --- a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSlopeInterceptData.H +++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSlopeInterceptData.H @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2014 */ +/* Contributors Listed Below - COPYRIGHT 2013,2015 */ +/* [+] 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. */ @@ -20,7 +22,7 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: getMBvpdSlopeInterceptData.H,v 1.1 2013/07/18 15:35:01 whs Exp $ +// $Id: getMBvpdSlopeInterceptData.H,v 1.2 2015/09/29 15:59:42 dcrowell Exp $ /** * @file getMBvpdSlopeInterceptData.H @@ -43,6 +45,10 @@ namespace fapi MASTER_POWER_INTERCEPT = 0x01, SUPPLIER_POWER_SLOPE = 0x02, SUPPLIER_POWER_INTERCEPT = 0x03, + MASTER_TOTAL_POWER_SLOPE = 0x04, + MASTER_TOTAL_POWER_INTERCEPT = 0x05, + SUPPLIER_TOTAL_POWER_SLOPE = 0x06, + SUPPLIER_TOTAL_POWER_INTERCEPT = 0x07, }; } diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdVoltageSettingData.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdVoltageSettingData.H new file mode 100644 index 000000000..90f5a4d4e --- /dev/null +++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdVoltageSettingData.H @@ -0,0 +1,61 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdVoltageSettingData.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2015 */ +/* [+] 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 */ +// $Id: getMBvpdVoltageSettingData.H,v 1.1 2015/09/29 16:25:05 dcrowell Exp $ +/** + * @file getMBvpdVoltageSettingData.H + * + * @brief MBVPD Accessor for providing the ATTR_VPD_DW_KEYWORD attribute + */ + +#ifndef _HWP_GETMBVPDDWDATA_ +#define _HWP_GETMBVPDDWDATA_ + +#include <fapi.H> +#define DW_KEYWORD_DEFAULT_VALUE 0x0109 +// function pointer typedef definition for HWP call support +typedef fapi::ReturnCode (*getMBvpdVoltageSettingData_FP_t) + (const fapi::Target &, uint32_t &); + +extern "C" +{ +/** + * @brief Get the ATTR_VPD_DW_KEYWORD FAPI attribute + * + * Return the voltage setting data from MBvpd record SPDX keyword DW. + * + * The ATTR_VPD_DW_KEYWORD attribute is associated with a DIMM. The platfrom must + * get the associated MemBuff chip to be passed to this hwp accessor. + * + * @param[in] i_mbTarget - Reference to membuff Target + * @param[out] o_val - Filled in with vpd version + * + * @return fapi::ReturnCode FAPI_RC_SUCCESS if success, else error code + */ +fapi::ReturnCode getMBvpdVoltageSettingData( + const fapi::Target & i_mbTarget, + uint32_t & o_val); +} + +#endif diff --git a/src/include/usr/hwpf/plat/fapiPlatAttributeService.H b/src/include/usr/hwpf/plat/fapiPlatAttributeService.H index c7bd87109..cfadb2cca 100644 --- a/src/include/usr/hwpf/plat/fapiPlatAttributeService.H +++ b/src/include/usr/hwpf/plat/fapiPlatAttributeService.H @@ -51,6 +51,9 @@ #include <hwpf/hwp/mvpd_accessors/getMBvpdSlopeInterceptData.H> #include <hwpf/hwp/mvpd_accessors/getMBvpdSpareDramData.H> #include <hwpf/hwp/mvpd_accessors/getMBvpdVersion.H> +#include <hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H> +#include <hwpf/hwp/mvpd_accessors/getMBvpdSPDXRecordVersion.H> +#include <hwpf/hwp/mvpd_accessors/getMBvpdVoltageSettingData.H> #include <hwpf/hwp/mvpd_accessors/getMBvpdDram2NModeEnabled.H> #include <hwpf/hwp/mvpd_accessors/getMBvpdSensorMap.H> #include <hwpf/hwp/mvpd_accessors/getControlCapableData.H> @@ -197,6 +200,17 @@ fapi::ReturnCode fapiPlatGetTargetName(const fapi::Target * i_pFapiTarget, /** * @brief This function is called by the FAPI_ATTR_GET macro when getting + * ATTR_MODULE_TYPE. It should not be called directly + * + * @param[in] i_pFapiTarget Target pointer + * @param[out] o_name Output Name (from enum ATTR_MODULE_TYPE_Enum) + * @return ReturnCode. Zero on success, else platform specified error + */ +fapi::ReturnCode fapiPlatGetModuleType(const fapi::Target * i_pFapiTarget, + uint8_t & o_name); + +/** + * @brief This function is called by the FAPI_ATTR_GET macro when getting * ATTR_FUNCTIONAL. It should not be called directly * * @param[in] i_pFapiTarget Target pointer @@ -522,6 +536,42 @@ fapi::ReturnCode fapiPlatDimmGetBadDqBitmap ( [DIMM_DQ_RANK_BITMAP_SIZE]); /** * @brief This function is called by the FAPI_ATTR_GET macro when getting + * the memory data version + * It should not be called directly. + * + * @param[in] i_pTarget Target DIMM pointer + * @param[out] o_val Memory Data version + * @return ReturnCode. Zero on success, else platform specified error + */ +fapi::ReturnCode fapiPlatGetMBvpdMemoryDataVersion( + const fapi::Target * i_pTarget, + uint32_t & o_val ); +/** + * @brief This function is called by the FAPI_ATTR_GET macro when getting + * the SPDX/VSPD Record version + * It should not be called directly. + * + * @param[in] i_pTarget Target DIMM pointer + * @param[out] o_val SPDX/VSPD version + * @return ReturnCode. Zero on success, else platform specified error + */ +fapi::ReturnCode fapiPlatGetMBvpdSPDXRecordVersion ( + const fapi::Target * i_pTarget, + uint32_t & o_val ); +/** + * @brief This function is called by the FAPI_ATTR_GET macro when getting + * the Voltage setting Data + * It should not be called directly. + * + * @param[in] i_pTarget Target DIMM pointer + * @param[out] o_val Voltage setting Data + * @return ReturnCode. Zero on success, else platform specified error + */ +fapi::ReturnCode fapiPlatGetMBvpdVoltageSettingData ( + const fapi::Target * i_pTarget, + uint32_t & o_val ); +/** + * @brief This function is called by the FAPI_ATTR_GET macro when getting * the vpd version * It should not be called directly. * @@ -533,6 +583,7 @@ fapi::ReturnCode fapiPlatGetVpdVersion ( const fapi::Target * i_pTarget, uint32_t & o_val ); + /** * @brief This function is called by the FAPI_ATTR_GET macro when getting * the Dram 2N Mode Enabled attribute @@ -760,7 +811,7 @@ fapi::ReturnCode getIsDimmToC4DQS /** * @brief This function is called by the FAPI_ATTR_GET macro when getting - * the ATTR_VPD_DIMM_RCD_CNTL_WORD_0_15 attribute. + * the ATTR_SPD_DIMM_RCD_CNTL_WORD_0_15 attribute. * It should not be called directly. * * @param[in] i_pTarget Mem Buf Target pointer @@ -808,7 +859,7 @@ fapi::ReturnCode fapiPlatGetTpVitlSpyOffsetAttr( uint32_t (&o_data)[SPY_OFFSET_SIZE]); /* * @brief This function is called by the FAPI_ATTR_GET macro when getting - * certain memory attributes + * certain memory attributes at node level * It should not be called directly. * * @param[in] i_pTarget Target Centaur pointer @@ -816,7 +867,7 @@ fapi::ReturnCode fapiPlatGetTpVitlSpyOffsetAttr( * @param[out] o_val Attribute Value * @return ReturnCode. Zero on success, else platform specified error */ -fapi::ReturnCode fapiPlatGetMemAttrData ( +fapi::ReturnCode fapiPlatGetNodeMemAttrData ( const fapi::Target * i_pTarget, const TARGETING::ATTRIBUTE_ID i_attr, uint32_t & o_val); @@ -862,10 +913,14 @@ fapi::ReturnCode fapiPlatGetMemAttrData ( //------------------------------------------------------------------------------ // MACRO to support the RCD Control Word attribute //------------------------------------------------------------------------------ +#define ATTR_SPD_DIMM_RCD_CNTL_WORD_0_15_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS : fapi::platAttrSvc::fapiPlatGetRCDCntlWord015(PTARGET,VAL) #define ATTR_VPD_DIMM_RCD_CNTL_WORD_0_15_GETMACRO(ID, PTARGET, VAL)\ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ fapi::FAPI_RC_SUCCESS : fapi::platAttrSvc::fapiPlatGetRCDCntlWord015(PTARGET,VAL) + //------------------------------------------------------------------------------ // MACRO to support the power control capable memory attribute //------------------------------------------------------------------------------ @@ -885,14 +940,19 @@ fapi::ReturnCode fapiPlatGetMemAttrData ( fapi::FAPI_RC_SUCCESS : fapi::platAttrSvc::getIsDimmToC4DQS(PTARGET,VAL) //------------------------------------------------------------------------------ +// MACRO to support the MODULE TYPE attributes. +//------------------------------------------------------------------------------ + +#define ATTR_SPD_MODULE_TYPE_GETMACRO(ID, PTARGET, VAL) \ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL)?\ + fapi::FAPI_RC_SUCCESS : fapi::platAttrSvc::fapiPlatGetModuleType( PTARGET,VAL) + +//------------------------------------------------------------------------------ // MACROs to route each ATTR_SPD access to the Hostboot SPD function //------------------------------------------------------------------------------ #define ATTR_SPD_DRAM_DEVICE_TYPE_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::BASIC_MEMORY_TYPE, &(VAL), sizeof(VAL) ) -#define ATTR_SPD_MODULE_TYPE_GETMACRO(ID, PTARGET, VAL) \ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::MODULE_TYPE, &(VAL), sizeof(VAL) ) #define ATTR_SPD_SDRAM_DENSITY_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::DENSITY, &(VAL), sizeof(VAL) ) @@ -1175,78 +1235,77 @@ fapi::ReturnCode fapiPlatGetMemAttrData ( #define ATTR_SPD_CRC_MNFG_SEC_DDR4_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::MANUFACTURING_SECTION_CRC, &(VAL), sizeof(VAL) ) -#define ATTR_SPD_LR_REGISTER_MANF_ID_GETMACRO(ID, PTARGET, VAL) \ +#define ATTR_SPD_REGISTER_MANF_ID_GETMACRO(ID, PTARGET, VAL) \ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::MODSPEC_MM_MFR_ID_CODE, &(VAL), sizeof(VAL) ) +#define ATTR_SPD_DIMM_MODULE_ATTRIBUTES_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_REGISTER_MANF_ID, &(VAL), sizeof(VAL) ) -#define ATTR_SPD_LR_ADDR_MAP_REG_TO_DRAM_GETMACRO(ID, PTARGET, VAL) \ + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::MODSPEC_MM_ATTRIBS, &(VAL), sizeof(VAL) ) +#define ATTR_SPD_ADDR_MAP_REG_TO_DRAM_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_REGISTER_MANF_ID, &(VAL), sizeof(VAL) ) -#define ATTR_SPD_LR_REG_OUTPUT_DRV_STRENGTH_CK_GETMACRO(ID, PTARGET, VAL) \ + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::MODSPEC_MM_ADDR_MAPPING, &(VAL), sizeof(VAL) ) +#define ATTR_SPD_OUTPUT_DRV_STRENGTH_CNTL_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_REG_OUTPUT_DRV_STRENGTH_CK, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::MODSPEC_MM_DRV_STRENGTH_CNTL, &(VAL), sizeof(VAL) ) +#define ATTR_SPD_REG_OUTPUT_DRV_STRENGTH_CK_GETMACRO(ID, PTARGET, VAL) \ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::MODSPEC_MM_DRV_STRENGTH_CK, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_VREF_DQ_RANK0_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_VREF_DQ_RANK0, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_VREF_DQ_RANK0, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_VREF_DQ_RANK1_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_VREF_DQ_RANK1, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_VREF_DQ_RANK1, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_VREF_DQ_RANK2_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_VREF_DQ_RANK2, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_VREF_DQ_RANK2, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_VREF_DQ_RANK3_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_VREF_DQ_RANK3, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_VREF_DQ_RANK3, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_BUF_VREF_DQ_FOR_DRAM_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_BUF_VREF_DQ_FOR_DRAM, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_VREF_DQ_FOR_DRAM, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_BUF_MDQ_DRV_LESS_THAN_1866_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_BUF_MDQ_DRV_LESS_THAN_1866, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_MDQ_DRV_LT_1866, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_BUF_MDQ_DRV_1866_2400_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_BUF_MDQ_DRV_1866_2400, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_MDQ_DRV_1866_2400, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_BUF_MDQ_DRV_2400_3200_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_BUF_MDQ_DRV_2400_3200, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_MDQ_DRV_2400_3200, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_DRV_STRENGTH_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_DRV_STRENGTH, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_DRV_STRENGTH, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_WR_LESS_THAN_1866_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_WR_LESS_THAN_1866, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_WR_LT_1866, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_NOM_LESS_THAN_1866_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_NOM_LESS_THAN_1866, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_NOM_LT_1866, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_WR_1866_2400_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_WR_1866_2400, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_WR_1866_2400, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_NOM_1866_2400_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_NOM_1866_2400, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_NOM_1866_2400, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_WR_2400_3200_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_WR_2400_3200, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_WR_2400_3200, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_NOM_2400_3200_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_NOM_2400_3200, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_NOM_2400_3200, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_PARK_LESS_THAN_1866_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_PARK_LESS_THAN_1866, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_PARK_LT_1866, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_PARK_1866_2400_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_PARK_1866_2400, &(VAL), sizeof(VAL) ) + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_PARK_1866_2400, &(VAL), sizeof(VAL) ) #define ATTR_SPD_LR_DRAM_ODT_RTT_PARK_2400_3200_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LR_DRAM_ODT_RTT_PARK_2400_3200, &(VAL), sizeof(VAL) ) - #define ATTR_SPD_DIMM_RCD_CNTL_WORD_0_15_GETMACRO(ID, PTARGET, VAL) \ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::DIMM_RCD_CNTL_WORD_0_15, &(VAL), sizeof(VAL) ) - #define ATTR_SPD_DIMM_MODULE_LR_ATTRIBUTES_GETMACRO(ID, PTARGET, VAL) \ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::DIMM_MODULE_LR_ATTRIBUTES, &(VAL), sizeof(VAL) ) - - + fapi::platAttrSvc::fapiPlatGetSpdAttr( PTARGET, SPD::LRMM_ODT_RTT_PARK_2400_3200, &(VAL), sizeof(VAL) ) +//------------------------------------------------------------------------------ // MACRO to route ATTR_CEN_DQ_TO_DIMM_CONN_DQ access to the correct Hostboot // function //------------------------------------------------------------------------------ @@ -1354,6 +1413,72 @@ fapi::ReturnCode fapiPlatGetMemAttrData ( fapi::platAttrSvc::fapiPlatGetSingleMemberEnableAttr ( PTARGET, VAL ) //------------------------------------------------------------------------------ +// MACROS to support MBVPD exclusive DDR4 attributes +//------------------------------------------------------------------------------ + + +#define ATTR_VPD_MR_VERSION_BYTE_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_MR_VERSION_BYTE>(VAL), \ + fapi::platAttrSvc::fapiPlatGetAttrData\ + (PTARGET, fapi::ATTR_VPD_MR_VERSION_BYTE, VAL, sizeof(VAL))) +#define ATTR_VPD_MR_DATA_CONTROL_BYTE_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_MR_DATA_CONTROL_BYTE>(VAL), \ + fapi::platAttrSvc::fapiPlatGetAttrData\ + (PTARGET, fapi::ATTR_VPD_MR_DATA_CONTROL_BYTE, VAL, sizeof(VAL))) +#define ATTR_VPD_PERIODIC_MEMCAL_MODE_OPTIONS_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_PERIODIC_MEMCAL_MODE_OPTIONS>(VAL), \ + fapi::platAttrSvc::fapiPlatGetAttrData\ + (PTARGET, fapi::ATTR_VPD_PERIODIC_MEMCAL_MODE_OPTIONS, VAL, sizeof(VAL))) +#define ATTR_VPD_MT_VERSION_BYTE_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_MT_VERSION_BYTE>(VAL), \ + fapi::platAttrSvc::fapiPlatGetAttrData\ + (PTARGET, fapi::ATTR_VPD_MT_VERSION_BYTE, VAL, sizeof(VAL))) +#define ATTR_VPD_MT_DATA_CONTROL_BYTE_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_MT_DATA_CONTROL_BYTE>(VAL), \ + fapi::platAttrSvc::fapiPlatGetAttrData\ + (PTARGET, fapi::ATTR_VPD_MT_DATA_CONTROL_BYTE, VAL, sizeof(VAL))) +#define ATTR_VPD_DRAM_RTT_PARK_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_DRAM_RTT_PARK>(VAL), \ + fapi::platAttrSvc::fapiPlatGetAttrData\ + (PTARGET, fapi::ATTR_VPD_DRAM_RTT_PARK, VAL, sizeof(VAL))) +#define ATTR_VPD_VM_KEYWORD_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_VM_KEYWORD>(VAL), \ + fapi::platAttrSvc::fapiPlatGetMBvpdMemoryDataVersion\ + (PTARGET, VAL)) +#define ATTR_VPD_VD_KEYWORD_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_VD_KEYWORD>(VAL), \ + fapi::platAttrSvc::fapiPlatGetMBvpdSPDXRecordVersion \ + (PTARGET, VAL)) +#define ATTR_VPD_DW_KEYWORD_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_DW_KEYWORD>(VAL), \ + fapi::platAttrSvc::fapiPlatGetMBvpdVoltageSettingData\ + (PTARGET, VAL, )) +#define ATTR_VPD_RD_CTR_WINDAGE_OFFSET_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkAttrDataType<fapi::ATTR_VPD_RD_CTR_WINDAGE_OFFSET>(VAL), \ + fapi::platAttrSvc::fapiPlatGetAttrData\ + (PTARGET, fapi::ATTR_VPD_RD_CTR_WINDAGE_OFFSET, VAL, sizeof(VAL))) + +//------------------------------------------------------------------------------ // MACROS to support MBVPD Phase Rotator attributes //------------------------------------------------------------------------------ #ifndef CONFIG_VPD_GETMACRO_USE_EFF_ATTR @@ -2239,67 +2364,6 @@ fapi::ReturnCode fapiPlatGetMemAttrData ( (checkAttrDataType<fapi::ATTR_VPD_GPO>(VAL), \ fapi::platAttrSvc::fapiPlatGetAttrData\ (PTARGET, fapi::ATTR_VPD_GPO , VAL, sizeof(VAL))) -#define ATTR_VPD_DRAM_RTT_PARK_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_DRAM_RTT_PARK>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_DRAM_RTT_PARK , VAL, sizeof(VAL))) -#define ATTR_VPD_PERIODIC_MEMCAL_MODE_OPTIONS_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_PERIODIC_MEMCAL_MODE_OPTIONS>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_PERIODIC_MEMCAL_MODE_OPTIONS , VAL, sizeof(VAL))) -#define ATTR_VPD_MT_VERSION_BYTE_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_MT_VERSION_BYTE>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_MT_VERSION_BYTE , VAL, sizeof(VAL))) -#define ATTR_VPD_MR_VERSION_BYTE_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_MR_VERSION_BYTE>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_MR_VERSION_BYTE , VAL, sizeof(VAL))) -#define ATTR_VPD_MR_DATA_CONTROL_BYTE_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_MR_DATA_CONTROL_BYTE>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_MR_DATA_CONTROL_BYTE , VAL, sizeof(VAL))) -#define ATTR_VPD_MT_DATA_CONTROL_BYTE_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_MT_DATA_CONTROL_BYTE>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_MT_DATA_CONTROL_BYTE , VAL, sizeof(VAL))) -#define ATTR_VPD_VM_KEYWORD_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_VM_KEYWORD_BYTE>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_VM_KEYWORD_BYTE , VAL, sizeof(VAL))) -#define ATTR_VPD_VD_KEYWORD_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_VD_KEYWORD>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_VD_KEYWORD , VAL, sizeof(VAL))) -#define ATTR_VPD_DW_KEYWORD_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_DW_KEYWORD>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_DW_KEYWORD , VAL, sizeof(VAL))) -#define ATTR_VPD_RD_CTR_WINDAGE_OFFSET_GETMACRO(ID, PTARGET, VAL)\ - fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ - fapi::FAPI_RC_SUCCESS :\ - (checkAttrDataType<fapi::ATTR_VPD_RD_CTR_WINDAGE_OFFSET>(VAL), \ - fapi::platAttrSvc::fapiPlatGetAttrData\ - (PTARGET, fapi::ATTR_VPD_RD_CTR_WINDAGE_OFFSET , VAL, sizeof(VAL))) - #else #define ATTR_VPD_DRAM_RON_GETMACRO(ID, PTARGET, VAL)\ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ @@ -2595,7 +2659,6 @@ fapi::ReturnCode fapiPlatGetMemAttrData ( fapi::platAttrSvc::fapiPlatGetSlopeInterceptData \ (PTARGET, fapi::SUPPLIER_TOTAL_POWER_INTERCEPT , VAL) - // MACRO to support BAD_DQ_BITMAP Attribute //------------------------------------------------------------------------------ #define ATTR_BAD_DQ_BITMAP_GETMACRO(ID, PTARGET, VAL) \ @@ -2937,72 +3000,72 @@ fapi::ReturnCode fapiPlatGetMemAttrData ( #define ATTR_MSS_VDD_SLOPE_ACTIVE_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_CENT_VDD_SLOPE_ACTIVE, VAL) #define ATTR_MSS_VDD_SLOPE_INACTIVE_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_CENT_VDD_SLOPE_INACTIVE, VAL) #define ATTR_MSS_VDD_SLOPE_INTERCEPT_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_CENT_VDD_INTERCEPT, VAL) #define ATTR_MSS_VCS_SLOPE_ACTIVE_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_CENT_VCS_SLOPE_ACTIVE, VAL) #define ATTR_MSS_VCS_SLOPE_INACTIVE_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_CENT_VCS_SLOPE_INACTIVE, VAL) #define ATTR_MSS_VCS_SLOPE_INTERCEPT_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_CENT_VCS_INTERCEPT, VAL) #define ATTR_MSS_VPP_SLOPE_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_VOLT_VPP_SLOPE_EFF_CONFIG, VAL) #define ATTR_MSS_VPP_SLOPE_INTERCEPT_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT_EFF_CONFIG, VAL) #define ATTR_MSS_DDR3_VDDR_SLOPE_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE_EFF_CONFIG, VAL) #define ATTR_MSS_DDR3_VDDR_INTERCEPT_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(PTARGET,\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(PTARGET,\ TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT_EFF_CONFIG, VAL) #define ATTR_MRW_DDR3_VDDR_MAX_LIMIT_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT_EFF_CONFIG, VAL) #define ATTR_MSS_DDR4_VDDR_SLOPE_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE_EFF_CONFIG, VAL) #define ATTR_MSS_DDR4_VDDR_INTERCEPT_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(PTARGET,\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(PTARGET,\ TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT_EFF_CONFIG, VAL) #define ATTR_MRW_DDR4_VDDR_MAX_LIMIT_GETMACRO(ID, PTARGET, VAL) \ fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ? \ fapi::FAPI_RC_SUCCESS : \ - fapi::platAttrSvc::fapiPlatGetMemAttrData(\ + fapi::platAttrSvc::fapiPlatGetNodeMemAttrData(\ PTARGET, TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT_EFF_CONFIG, VAL) #endif // FAPIPLATATTRIBUTESERVICE_H_ diff --git a/src/include/usr/vpd/cvpdenums.H b/src/include/usr/vpd/cvpdenums.H index 79b81093c..c26743140 100644 --- a/src/include/usr/vpd/cvpdenums.H +++ b/src/include/usr/vpd/cvpdenums.H @@ -123,6 +123,14 @@ namespace CVPD MM = 0x3c, SS = 0x3d, ET = 0x3e, + VM = 0x3f, + pd1 = 0x40, //#1 + pdZ = 0x41, //#Z + pd4 = 0x42, //#4 + pd5 = 0x43, //#5 + pd6 = 0x44, //#6 + pd8 = 0x45, //#8 + pdY = 0x46, //#Y // Last Keyword CVPD_LAST_KEYWORD, diff --git a/src/include/usr/vpd/spdenums.H b/src/include/usr/vpd/spdenums.H index d429690cf..b728e3fbf 100644 --- a/src/include/usr/vpd/spdenums.H +++ b/src/include/usr/vpd/spdenums.H @@ -163,7 +163,7 @@ enum LRMM_NUM_ROWS = SPD_FIRST_MOD_SPEC | 0x0e, LRMM_MIRRORING = SPD_FIRST_MOD_SPEC | 0x0f, LRMM_REVISION_NUM = SPD_FIRST_MOD_SPEC | 0x10, - LRMM_MFR_ID_CODE = SPD_FIRST_MOD_SPEC | 0x11, + MODSPEC_MM_MFR_ID_CODE = SPD_FIRST_MOD_SPEC | 0x11, // ============================================================== // Module Specific Keywords (Available for DDR3 DIMMs only) @@ -309,9 +309,31 @@ enum MODSPEC_COM_RAW_CARD_EXT = SPD_FIRST_MOD_SPEC | 0x9a, UMM_CRC = SPD_FIRST_MOD_SPEC | 0x9b, RMM_ADDR_MAPPING = SPD_FIRST_MOD_SPEC | 0x9c, - RMM_CRC = SPD_FIRST_MOD_SPEC | 0x9d, - LRMM_CRC = SPD_FIRST_MOD_SPEC | 0x9e, - SPD_LAST_MOD_SPEC = SPD_FIRST_MOD_SPEC | 0x9e, + MODSPEC_MM_ATTRIBS = SPD_FIRST_MOD_SPEC | 0x9d, + MODSPEC_MM_ADDR_MAPPING = SPD_FIRST_MOD_SPEC | 0x9e, + MODSPEC_MM_DRV_STRENGTH_CNTL = SPD_FIRST_MOD_SPEC | 0x9f, + MODSPEC_MM_DRV_STRENGTH_CK = SPD_FIRST_MOD_SPEC | 0xa0, + LRMM_VREF_DQ_RANK0 = SPD_FIRST_MOD_SPEC | 0xa1, + LRMM_VREF_DQ_RANK1 = SPD_FIRST_MOD_SPEC | 0xa2, + LRMM_VREF_DQ_RANK2 = SPD_FIRST_MOD_SPEC | 0xa3, + LRMM_VREF_DQ_RANK3 = SPD_FIRST_MOD_SPEC | 0xa4, + LRMM_VREF_DQ_FOR_DRAM = SPD_FIRST_MOD_SPEC | 0xa5, + LRMM_MDQ_DRV_LT_1866 = SPD_FIRST_MOD_SPEC | 0xa6, + LRMM_MDQ_DRV_1866_2400 = SPD_FIRST_MOD_SPEC | 0xa7, + LRMM_MDQ_DRV_2400_3200 = SPD_FIRST_MOD_SPEC | 0xa8, + LRMM_DRV_STRENGTH = SPD_FIRST_MOD_SPEC | 0xa9, + LRMM_ODT_RTT_WR_LT_1866 = SPD_FIRST_MOD_SPEC | 0xaa, + LRMM_ODT_RTT_NOM_LT_1866 = SPD_FIRST_MOD_SPEC | 0xab, + LRMM_ODT_RTT_WR_1866_2400 = SPD_FIRST_MOD_SPEC | 0xac, + LRMM_ODT_RTT_NOM_1866_2400 = SPD_FIRST_MOD_SPEC | 0xad, + LRMM_ODT_RTT_WR_2400_3200 = SPD_FIRST_MOD_SPEC | 0xae, + LRMM_ODT_RTT_NOM_2400_3200 = SPD_FIRST_MOD_SPEC | 0xaf, + LRMM_ODT_RTT_PARK_LT_1866 = SPD_FIRST_MOD_SPEC | 0xb0, + LRMM_ODT_RTT_PARK_1866_2400 = SPD_FIRST_MOD_SPEC | 0xb1, + LRMM_ODT_RTT_PARK_2400_3200 = SPD_FIRST_MOD_SPEC | 0xb2, + RMM_CRC = SPD_FIRST_MOD_SPEC | 0xb3, + LRMM_CRC = SPD_FIRST_MOD_SPEC | 0xb4, + SPD_LAST_MOD_SPEC = SPD_FIRST_MOD_SPEC | 0xb5, // This keyword should be last in the list // Invalid Keyword @@ -319,6 +341,15 @@ enum INVALID_SPD_KEYWORD = 0xFFFF, }; +enum +{ + // These are LRDIMM values for Module Type attribute + // according to ver3 and ver4 JEDEC specs + JEDEC_VER3_LRDIMM_VAL = 0x0b, + JEDEC_VER4_LRDIMM_VAL = 0x04, +}; + + }; // end SPD #endif |