summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authornagendra <nagendra.g@in.ibm.com>2015-07-24 13:55:08 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-10-15 15:00:13 -0500
commit29bd2509664ce1040eb98797857d1dc76a0fa42f (patch)
tree5bcd33f0f4add9361caf5cab92c16d03d91a2b16 /src/include
parent568932e9e7a3f6b2e06ef7ec48fb10ed5d3e1f93 (diff)
downloadtalos-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')
-rw-r--r--src/include/usr/hwpf/fapi/fapiMBvpdAccess.H15
-rw-r--r--src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H133
-rw-r--r--src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdMemoryDataVersion.H62
-rw-r--r--src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSPDXRecordVersion.H62
-rw-r--r--src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdSlopeInterceptData.H10
-rw-r--r--src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdVoltageSettingData.H61
-rw-r--r--src/include/usr/hwpf/plat/fapiPlatAttributeService.H291
-rw-r--r--src/include/usr/vpd/cvpdenums.H8
-rw-r--r--src/include/usr/vpd/spdenums.H39
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
OpenPOWER on IntegriCloud