diff options
author | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
---|---|---|
committer | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
commit | b7c51c9cf4864df6aabb99a1ae843becd577237c (patch) | |
tree | eebe9b0d0ca03062955223097e57da84dd618b9a /ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcSpdData.h | |
download | zprj-master.tar.xz |
Diffstat (limited to 'ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcSpdData.h')
-rw-r--r-- | ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcSpdData.h | 671 |
1 files changed, 671 insertions, 0 deletions
diff --git a/ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcSpdData.h b/ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcSpdData.h new file mode 100644 index 0000000..a2b68d8 --- /dev/null +++ b/ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcSpdData.h @@ -0,0 +1,671 @@ +/** @file + SPD data format header file. + +@copyright + Copyright (c) 2010 - 2012 Intel Corporation. All rights reserved. + This software and associated documentation (if any) is furnished + under a license and may only be used or copied in accordance + with the terms of the license. Except as permitted by such + license, no part of this software or documentation may be + reproduced, stored in a retrieval system, or transmitted in any + form or by any means without the express written consent of + Intel Corporation. + + This file contains an 'Intel Peripheral Driver' and uniquely + identified as "Intel Reference Module" and is + licensed for Intel CPUs and chipsets under the terms of your + license agreement with Intel or your vendor. This file may + be modified by the user, subject to additional terms of the + license agreement. +**/ + +#ifndef _MrcSpdData_h_ +#define _MrcSpdData_h_ +#pragma pack (push, 1) + +#include "MrcTypes.h" + +#define MAX_XMP_PROFILES (2) +#define SPD3_MANUF_SIZE (SPD3_MANUF_END - SPD3_MANUF_START + 1) ///< The size of the SPD manufacturing data. +typedef union { + struct { + U8 BytesUsed : 4; ///< Bits 3:0 + U8 BytesTotal : 3; ///< Bits 6:4 + U8 CrcCoverage : 1; ///< Bits 7:7 + } Bits; + U8 Data; +} SPD_DEVICE_DESCRIPTION_STRUCT; + +typedef union { + struct { + U8 Minor : 4; ///< Bits 3:0 + U8 Major : 4; ///< Bits 7:4 + } Bits; + U8 Data; +} SPD_REVISION_STRUCT; + +typedef union { + struct { + U8 Type : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_DRAM_DEVICE_TYPE_STRUCT; + +typedef union { + struct { + U8 ModuleType : 4; ///< Bits 3:0 + U8 : 4; ///< Bits 7:4 + } Bits; + U8 Data; +} SPD_MODULE_TYPE_STRUCT; + +typedef union { + struct { + U8 Density : 4; ///< Bits 3:0 + U8 BankAddress : 3; ///< Bits 6:4 + U8 : 1; ///< Bits 7:7 + } Bits; + U8 Data; +} SPD_SDRAM_DENSITY_BANKS_STRUCT; + +typedef union { + struct { + U8 ColumnAddress : 3; ///< Bits 2:0 + U8 RowAddress : 3; ///< Bits 5:3 + U8 : 2; ///< Bits 7:6 + } Bits; + U8 Data; +} SPD_SDRAM_ADDRESSING_STRUCT; + +typedef union { + struct { + U8 OperationAt1_50 : 1; ///< Bits 0:0 + U8 OperationAt1_35 : 1; ///< Bits 1:1 + U8 OperationAt1_25 : 1; ///< Bits 2:2 + U8 : 5; ///< Bits 7:3 + } Bits; + U8 Data; +} SPD_MODULE_NOMINAL_VOLTAGE_STRUCT; + +typedef union { + struct { + U8 SdramDeviceWidth : 3; ///< Bits 2:0 + U8 RankCount : 3; ///< Bits 5:3 + U8 : 2; ///< Bits 7:6 + } Bits; + U8 Data; +} SPD_MODULE_ORGANIZATION_STRUCT; + +typedef union { + struct { + U8 PrimaryBusWidth : 3; ///< Bits 2:0 + U8 BusWidthExtension : 2; ///< Bits 4:3 + U8 : 3; ///< Bits 7:5 + } Bits; + U8 Data; +} SPD_MODULE_MEMORY_BUS_WIDTH_STRUCT; + +typedef union { + struct { + U8 Divisor : 4; ///< Bits 3:0 + U8 Dividend : 4; ///< Bits 7:4 + } Bits; + U8 Data; +} SPD_FINE_TIMEBASE_STRUCT; + +typedef union { + struct { + U8 Dividend : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_MEDIUM_TIMEBASE_DIVIDEND_STRUCT; + +typedef union { + struct { + U8 Divisor : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_MEDIUM_TIMEBASE_DIVISOR_STRUCT; + +typedef struct { + SPD_MEDIUM_TIMEBASE_DIVIDEND_STRUCT Dividend; ///< Medium Timebase (MTB) Dividend + SPD_MEDIUM_TIMEBASE_DIVISOR_STRUCT Divisor; ///< Medium Timebase (MTB) Divisor +} SPD_MEDIUM_TIMEBASE; + +typedef union { + struct { + U8 tCKmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TCK_MIN_MTB_STRUCT; + +typedef union { + struct { + U16 CL4 : 1; ///< Bits 0:0 + U16 CL5 : 1; ///< Bits 1:1 + U16 CL6 : 1; ///< Bits 2:2 + U16 CL7 : 1; ///< Bits 3:3 + U16 CL8 : 1; ///< Bits 4:4 + U16 CL9 : 1; ///< Bits 5:5 + U16 CL10 : 1; ///< Bits 6:6 + U16 CL11 : 1; ///< Bits 7:7 + U16 CL12 : 1; ///< Bits 8:8 + U16 CL13 : 1; ///< Bits 9:9 + U16 CL14 : 1; ///< Bits 10:10 + U16 CL15 : 1; ///< Bits 11:11 + U16 CL16 : 1; ///< Bits 12:12 + U16 CL17 : 1; ///< Bits 13:13 + U16 CL18 : 1; ///< Bits 14:14 + U16 : 1; ///< Bits 15:15 + } Bits; + U16 Data; + U8 Data8; +} SPD_CAS_LATENCIES_SUPPORTED_STRUCT; + +typedef union { + struct { + U8 tAAmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TAA_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tWRmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TWR_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tRCDmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TRCD_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tRRDmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TRRD_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tRPmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TRP_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tRPab : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TRP_AB_MTB_STRUCT; + +typedef union { + struct { + S8 tRPabFine : 8; ///< Bits 7:0 + } Bits; + S8 Data; +} SPD_TRP_AB_FTB_STRUCT; + +typedef union { + struct { + U8 tRASminUpper : 4; ///< Bits 3:0 + U8 tRCminUpper : 4; ///< Bits 7:4 + } Bits; + U8 Data; +} SPD_TRAS_TRC_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tRASmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TRAS_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tRCmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TRC_MIN_MTB_STRUCT; + +typedef union { + struct { + U16 tRFCmin : 16; ///< Bits 15:0 + } Bits; + U16 Data; + U8 Data8; +} SPD_TRFC_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tWTRmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TWTR_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tRTPmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TRTP_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tFAWminUpper : 4; ///< Bits 3:0 + U8 : 4; ///< Bits 7:4 + } Bits; + U8 Data; +} SPD_TFAW_MIN_MTB_UPPER_STRUCT; + +typedef union { + struct { + U8 tFAWmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TFAW_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 tCWLmin : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_TCWL_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 NMode : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_SYSTEM_COMMAND_RATE_STRUCT; + +typedef union { + struct { + U16 tREFImin : 16; ///< Bits 15:0 + } Bits; + U16 Data; + U8 Data8; +} SPD_TREFI_MIN_MTB_STRUCT; + +typedef union { + struct { + U8 RZQ6 : 1; ///< Bits 0:0 + U8 RZQ7 : 1; ///< Bits 1:1 + U8 : 5; ///< Bits 6:2 + U8 DllOff : 1; ///< Bits 7:7 + } Bits; + U8 Data; +} SPD_SDRAM_OPTIONAL_FEATURES_STRUCT; + +typedef union { + struct { + U8 ExtendedTemperatureRange : 1; ///< Bits 0:0 + U8 ExtendedTemperatureRefreshRate : 1; ///< Bits 1:1 + U8 AutoSelfRefresh : 1; ///< Bits 2:2 + U8 OnDieThermalSensor : 1; ///< Bits 3:3 + U8 : 3; ///< Bits 6:4 + U8 PartialArraySelfRefresh : 1; ///< Bits 7:7 + } Bits; + U8 Data; +} SPD_SDRAM_THERMAL_REFRESH_STRUCT; + +typedef union { + struct { + U8 ThermalSensorAccuracy : 7; ///< Bits 6:0 + U8 ThermalSensorPresence : 1; ///< Bits 7:7 + } Bits; + U8 Data; +} SPD_MODULE_THERMAL_SENSOR_STRUCT; + +typedef union { + struct { + U8 NonStandardDeviceDescription : 7; ///< Bits 6:0 + U8 SdramDeviceType : 1; ///< Bits 7:7 + } Bits; + U8 Data; +} SPD_SDRAM_DEVICE_TYPE_STRUCT; + +typedef union { + struct { + U8 : 8; ///< Bits 7:0 + } Bits; + U8 Data; +} SPD_AUTO_SELF_REFRESH_PERF_STRUCT; + +typedef union { + struct { + S8 tCKminFine : 8; ///< Bits 7:0 + } Bits; + S8 Data; +} SPD_TCK_MIN_FTB_STRUCT; + +typedef union { + struct { + S8 tAAminFine : 8; ///< Bits 7:0 + } Bits; + S8 Data; +} SPD_TAA_MIN_FTB_STRUCT; + +typedef union { + struct { + S8 tRCDminFine : 8; ///< Bits 7:0 + } Bits; + S8 Data; +} SPD_TRCD_MIN_FTB_STRUCT; + +typedef union { + struct { + S8 tRPminFine : 8; ///< Bits 7:0 + } Bits; + S8 Data; +} SPD_TRP_MIN_FTB_STRUCT; + +typedef union { + struct { + S8 tRCminFine : 8; ///< Bits 7:0 + } Bits; + S8 Data; +} SPD_TRC_MIN_FTB_STRUCT; + +typedef union { + struct { + S8 tRRDminFine : 8; ///< Bits 7:0 + } Bits; + S8 Data; +} SPD_TRRD_MIN_FTB_STRUCT; + +typedef union { + struct { + U8 Height : 5; ///< Bits 4:0 + U8 RawCardExtension : 3; ///< Bits 7:5 + } Bits; + U8 Data; +} SPD_UNBUF_MODULE_NOMINAL_HEIGHT; + +typedef union { + struct { + U8 FrontThickness : 4; ///< Bits 3:0 + U8 BackThickness : 4; ///< Bits 7:4 + } Bits; + U8 Data; +} SPD_UNBUF_MODULE_NOMINAL_THICKNESS; + +typedef union { + struct { + U8 Card : 5; ///< Bits 4:0 + U8 Revision : 2; ///< Bits 6:5 + U8 Extension : 1; ///< Bits 7:7 + } Bits; + U8 Data; +} SPD_UNBUF_REFERENCE_RAW_CARD; + +typedef union { + struct { + U8 MappingRank1 : 1; ///< Bits 0:0 + U8 : 7; ///< Bits 7:1 + } Bits; + U8 Data; +} SPD_UNBUF_ADDRESS_MAPPING; + +typedef union { + struct { + U8 Height : 5; ///< Bits 4:0 + U8 : 3; ///< Bits 7:5 + } Bits; + U8 Data; +} SPD_RDIMM_MODULE_NOMINAL_HEIGHT; + +typedef union { + struct { + U8 FrontThickness : 4; ///< Bits 3:0 + U8 BackThickness : 4; ///< Bits 7:4 + } Bits; + U8 Data; +} SPD_RDIMM_MODULE_NOMINAL_THICKNESS; + +typedef union { + struct { + U8 Card : 5; ///< Bits 4:0 + U8 Revision : 2; ///< Bits 6:5 + U8 Extension : 1; ///< Bits 7:7 + } Bits; + U8 Data; +} SPD_RDIMM_REFERENCE_RAW_CARD; + +typedef union { + struct { + U8 RegisterCount : 2; ///< Bits 1:0 + U8 DramRowCount : 2; ///< Bits 3:2 + U8 : 4; ///< Bits 7:4 + } Bits; + U8 Data; +} SPD_RDIMM_MODULE_ATTRIBUTES; + +typedef union { + struct { + U16 ContinuationCount : 7; ///< Bits 6:0 + U16 ContinuationParity : 1; ///< Bits 7:7 + U16 LastNonZeroByte : 8; ///< Bits 15:8 + } Bits; + U16 Data; + U8 Data8; +} SPD_MANUFACTURER_ID_CODE; + +typedef struct { + U8 Year; ///< Year represented in BCD (00h = 2000) + U8 Week; ///< Year represented in BCD (47h = week 47) +} SPD_MANUFACTURING_DATE; + +typedef union { + U32 Data; + U16 SerialNumber16[2]; + U8 SerialNumber8[4]; +} SPD_MANUFACTURER_SERIAL_NUMBER; + +typedef union { + U16 Crc[1]; + U8 Data8[2]; +} SPD_CYCLIC_REDUNDANCY_CODE; + +typedef union { + struct { + U8 ProfileEnable1 : 1; ///< Bits 0:0 + U8 ProfileEnable2 : 1; ///< Bits 1:1 + U8 ProfileConfig1 : 2; ///< Bits 3:2 + U8 ProfileConfig2 : 2; ///< Bits 5:4 + U8 : 2; ///< Bits 7:6 + } Bits; + U8 Data; +} SPD_XMP_ORG_CONFIG; + +typedef struct { + U16 XmpId; ///< 176-177 XMP Identification String + SPD_XMP_ORG_CONFIG XmpOrgConf; ///< 178 XMP Organization & Configuration + SPD_REVISION_STRUCT XmpRevision; ///< 179 XMP Revision + SPD_MEDIUM_TIMEBASE MediumTimeBase[MAX_XMP_PROFILES]; ///< 180-183 Medium Timebase (MTB) + SPD_FINE_TIMEBASE_STRUCT FineTimeBase; ///< 184 Fine Timebase (FTB) Dividend / Divisor +} SPD_EXTREME_MEMORY_PROFILE_HEADER; + +typedef union { + struct { + U8 Decimal : 5; + U8 Integer : 2; + U8 : 1; + } Bits; + U8 Data; +} SPD_VDD_VOLTAGE_LEVEL_STRUCT; + +typedef struct { + SPD_VDD_VOLTAGE_LEVEL_STRUCT Vdd; ///< 185, 220 XMP Module VDD Voltage Level + SPD_TCK_MIN_MTB_STRUCT tCKmin; ///< 186, 221 XMP SDRAM Minimum Cycle Time (tCKmin) + SPD_TAA_MIN_MTB_STRUCT tAAmin; ///< 187, 222 XMP Minimum CAS Latency Time (tAAmin) + SPD_CAS_LATENCIES_SUPPORTED_STRUCT CasLatencies; ///< 188-189, 223-224 XMP CAS Latencies Supported, Least Significant Byte + SPD_TCWL_MIN_MTB_STRUCT tCWLmin; ///< 190, 225 XMP Minimum CAS Write Latency Time (tCWLmin) + SPD_TRP_MIN_MTB_STRUCT tRPmin; ///< 191, 226 XMP Minimum Row Precharge Delay Time (tRPmin) + SPD_TRCD_MIN_MTB_STRUCT tRCDmin; ///< 192, 227 XMP Minimum RAS# to CAS# Delay Time (tRCDmin) + SPD_TWR_MIN_MTB_STRUCT tWRmin; ///< 193, 228 XMP Minimum Write Recovery Time (tWRmin) + SPD_TRAS_TRC_MIN_MTB_STRUCT tRASMintRCMinUpper; ///< 194, 229 XMP Upper Nibbles for tRAS and tRC + SPD_TRAS_MIN_MTB_STRUCT tRASmin; ///< 195, 230 XMP Minimum Active to Precharge Delay Time (tRASmin), Least Significant Byte + SPD_TRC_MIN_MTB_STRUCT tRCmin; ///< 196, 231 XMP Minimum Active to Active/Refresh Delay Time (tRCmin), Least Significant Byte + SPD_TREFI_MIN_MTB_STRUCT tREFImin; ///< 197-198, 232-233 XMP Maximum tREFI Time (Average Periodic Refresh Interval), Least Significant Byte + SPD_TRFC_MIN_MTB_STRUCT tRFCmin; ///< 199-200, 234-235 XMP Minimum Refresh Recovery Delay Time (tRFCmin), Least Significant Byte + SPD_TRTP_MIN_MTB_STRUCT tRTPmin; ///< 201, 236 XMP Minimum Internal Read to Precharge Command Delay Time (tRTPmin) + SPD_TRRD_MIN_MTB_STRUCT tRRDmin; ///< 202, 237 XMP Minimum Row Active to Row Active Delay Time (tRRDmin) + SPD_TFAW_MIN_MTB_UPPER_STRUCT tFAWMinUpper; ///< 203, 238 XMP Upper Nibble for tFAW + SPD_TFAW_MIN_MTB_STRUCT tFAWmin; ///< 204, 239 XMP Minimum Four Activate Window Delay Time (tFAWmin) + SPD_TWTR_MIN_MTB_STRUCT tWTRmin; ///< 205, 240 XMP Minimum Internal Write to Read Command Delay Time (tWTRmin) + U8 Reserved1[207 - 206 + 1]; ///< 206-207, 241-242 XMP Reserved + SPD_SYSTEM_COMMAND_RATE_STRUCT SystemCmdRate; ///< 208, 243 XMP System ADD/CMD Rate (1N or 2N mode) + SPD_AUTO_SELF_REFRESH_PERF_STRUCT AsrPerf; ///< 209, 244 XMP SDRAM Auto Self Refresh Performance (Sub 1x Refresh and IDD6 impact) + U8 VoltageLevel; ///< 210, 245 XMP Memory Controller Voltage Level + SPD_TCK_MIN_FTB_STRUCT tCKminFine; ///< 211, 246 XMP Fine Offset for SDRAM Minimum Cycle Time (tCKmin) + SPD_TAA_MIN_FTB_STRUCT tAAminFine; ///< 212, 247 XMP Fine Offset for Minimum CAS Latency Time (tAAmin) + SPD_TRP_MIN_FTB_STRUCT tRPminFine; ///< 213, 248 XMP Minimum Row Precharge Delay Time (tRPmin) + SPD_TRCD_MIN_FTB_STRUCT tRCDminFine; ///< 214, 249 XMP Fine Offset for Minimum RAS# to CAS# Delay Time (tRCDmin) + SPD_TRC_MIN_FTB_STRUCT tRCminFine; ///< 215, 250 XMP Fine Offset for Minimum Active to Active/Refresh Delay Time (tRCmin) + U8 Reserved2[218 - 216 + 1]; ///< 216-218, 251-253 XMP Reserved + U8 VendorPersonality; ///< 219, 254 XMP Vendor Personality +} SPD_EXTREME_MEMORY_PROFILE_DATA; + +typedef struct { + SPD_EXTREME_MEMORY_PROFILE_HEADER Header; ///< 176-184 XMP header + SPD_EXTREME_MEMORY_PROFILE_DATA Data[MAX_XMP_PROFILES]; ///< 185-254 XMP profiles +} SPD_EXTREME_MEMORY_PROFILE; + +typedef struct { + SPD_DEVICE_DESCRIPTION_STRUCT Description; ///< 0 Number of Serial PD Bytes Written / SPD Device Size / CRC Coverage 1, 2 + SPD_REVISION_STRUCT Revision; ///< 1 SPD Revision + SPD_DRAM_DEVICE_TYPE_STRUCT DramDeviceType; ///< 2 DRAM Device Type + SPD_MODULE_TYPE_STRUCT ModuleType; ///< 3 Module Type + SPD_SDRAM_DENSITY_BANKS_STRUCT SdramDensityAndBanks; ///< 4 SDRAM Density and Banks + SPD_SDRAM_ADDRESSING_STRUCT SdramAddressing; ///< 5 SDRAM Addressing + SPD_MODULE_NOMINAL_VOLTAGE_STRUCT ModuleNominalVoltage; ///< 6 Module Nominal Voltage, VDD + SPD_MODULE_ORGANIZATION_STRUCT ModuleOrganization; ///< 7 Module Organization + SPD_MODULE_MEMORY_BUS_WIDTH_STRUCT ModuleMemoryBusWidth; ///< 8 Module Memory Bus Width + SPD_FINE_TIMEBASE_STRUCT FineTimebase; ///< 9 Fine Timebase (FTB) Dividend / Divisor + SPD_MEDIUM_TIMEBASE MediumTimebase; ///< 10-11 Medium Timebase (MTB) Dividend + SPD_TCK_MIN_MTB_STRUCT tCKmin; ///< 12 SDRAM Minimum Cycle Time (tCKmin) + U8 Reserved1; ///< 13 Reserved + SPD_CAS_LATENCIES_SUPPORTED_STRUCT CasLatencies; ///< 14-15 CAS Latencies Supported + SPD_TAA_MIN_MTB_STRUCT tAAmin; ///< 16 Minimum CAS Latency Time (tAAmin) + SPD_TWR_MIN_MTB_STRUCT tWRmin; ///< 17 Minimum Write Recovery Time (tWRmin) + SPD_TRCD_MIN_MTB_STRUCT tRCDmin; ///< 18 Minimum RAS# to CAS# Delay Time (tRCDmin) + SPD_TRRD_MIN_MTB_STRUCT tRRDmin; ///< 19 Minimum Row Active to Row Active Delay Time (tRRDmin) + SPD_TRP_MIN_MTB_STRUCT tRPmin; ///< 20 Minimum Row Precharge Delay Time (tRPmin) + SPD_TRAS_TRC_MIN_MTB_STRUCT tRASMintRCMinUpper; ///< 21 Upper Nibbles for tRAS and tRC + SPD_TRAS_MIN_MTB_STRUCT tRASmin; ///< 22 Minimum Active to Precharge Delay Time (tRASmin), Least Significant Byte + SPD_TRC_MIN_MTB_STRUCT tRCmin; ///< 23 Minimum Active to Active/Refresh Delay Time (tRCmin), Least Significant Byte + SPD_TRFC_MIN_MTB_STRUCT tRFCmin; ///< 24-25 Minimum Refresh Recovery Delay Time (tRFCmin) + SPD_TWTR_MIN_MTB_STRUCT tWTRmin; ///< 26 Minimum Internal Write to Read Command Delay Time (tWTRmin) + SPD_TRTP_MIN_MTB_STRUCT tRTPmin; ///< 27 Minimum Internal Read to Precharge Command Delay Time (tRTPmin) + SPD_TFAW_MIN_MTB_UPPER_STRUCT tFAWMinUpper; ///< 28 Upper Nibble for tFAW + SPD_TFAW_MIN_MTB_STRUCT tFAWmin; ///< 29 Minimum Four Activate Window Delay Time (tFAWmin) + SPD_SDRAM_OPTIONAL_FEATURES_STRUCT SdramOptionalFeatures; ///< 30 SDRAM Optional Features + SPD_SDRAM_THERMAL_REFRESH_STRUCT ThermalAndRefreshOptions; ///< 31 SDRAMThermalAndRefreshOptions + SPD_MODULE_THERMAL_SENSOR_STRUCT ModuleThermalSensor; ///< 32 Module Thermal Sensor + SPD_SDRAM_DEVICE_TYPE_STRUCT SdramDeviceType; ///< 33 SDRAM Device Type + SPD_TCK_MIN_FTB_STRUCT tCKminFine; ///< 34 Fine Offset for SDRAM Minimum Cycle Time (tCKmin) + SPD_TAA_MIN_FTB_STRUCT tAAminFine; ///< 35 Fine Offset for Minimum CAS Latency Time (tAAmin) + SPD_TRCD_MIN_FTB_STRUCT tRCDminFine; ///< 36 Fine Offset for Minimum RAS# to CAS# Delay Time (tRCDmin) + SPD_TRP_MIN_FTB_STRUCT tRPminFine; ///< 37 Minimum Row Precharge Delay Time (tRPmin) + SPD_TRC_MIN_FTB_STRUCT tRCminFine; ///< 38 Fine Offset for Minimum Active to Active/Refresh Delay Time (tRCmin) +#if (SUPPORT_LPDDR3 == SUPPORT) + SPD_TRP_AB_MTB_STRUCT tRPab; ///< 39 Minimum Row Precharge Delay Time for all banks (tRPab) + SPD_TRP_AB_FTB_STRUCT tRPabFine; ///< 40 Fine Offset for Minimum Row Precharge Delay Time for all banks (tRPab) + U8 Reserved2[59 - 41 + 1]; ///< 41 - 59 Reserved +#else + U8 Reserved2[59 - 39 + 1]; ///< 39 - 59 Reserved +#endif +} SPD_GENERAL_SECTION; + +typedef struct { + SPD_UNBUF_MODULE_NOMINAL_HEIGHT ModuleNominalHeight; ///< 60 Module Nominal Height + SPD_UNBUF_MODULE_NOMINAL_THICKNESS ModuleMaximumThickness; ///< 61 Module Maximum Thickness + SPD_UNBUF_REFERENCE_RAW_CARD ReferenceRawCardUsed; ///< 62 Reference Raw Card Used + SPD_UNBUF_ADDRESS_MAPPING AddressMappingEdgeConn; ///< 63 Address Mapping from Edge Connector to DRAM + U8 Reserved[116 - 64 + 1]; ///< 64-116 Reserved +} SPD_MODULE_UNBUFFERED; + +typedef struct { + SPD_RDIMM_MODULE_NOMINAL_HEIGHT ModuleNominalHeight; ///< 60 Module Nominal Height + SPD_RDIMM_MODULE_NOMINAL_THICKNESS ModuleMaximumThickness; ///< 61 Module Maximum Thickness + SPD_RDIMM_REFERENCE_RAW_CARD ReferenceRawCardUsed; ///< 62 Reference Raw Card Used + SPD_RDIMM_MODULE_ATTRIBUTES DimmModuleAttributes; ///< 63 DIMM Module Attributes + U8 Reserved[116 - 64 + 1]; ///< 64-116 Reserved +} SPD_MODULE_REGISTERED; + +typedef union { + SPD_MODULE_UNBUFFERED Unbuffered; + SPD_MODULE_REGISTERED Registered; +} SPD_MODULE_SPECIFIC; + +typedef struct { + U8 Location; ///< 119 Module Manufacturing Location +} SPD_MANUFACTURING_LOCATION; + +typedef struct { + SPD_MANUFACTURER_ID_CODE IdCode; ///< 117-118 Module Manufacturer ID Code + SPD_MANUFACTURING_LOCATION Location; ///< 119 Module Manufacturing Location + SPD_MANUFACTURING_DATE Date; ///< 120-121 Module Manufacturing Year, in BCD (range: 2000-2255) + SPD_MANUFACTURER_SERIAL_NUMBER SerialNumber; ///< 122-125 Module Serial Number +} SPD_UNIQUE_MODULE_ID; + +typedef struct { + U8 ModulePartNumber[145 - 128 + 1]; ///< 128-145 Module Part Number +} SPD_MODULE_PART_NUMBER; + +typedef struct { + U8 ModuleRevisionCode[147 - 146 + 1]; ///< 146-147 Module Revision Code +} SPD_MODULE_REVISION_CODE; + +typedef struct { + U8 ManufactureSpecificData[175 - 150 + 1]; ///< 150-175 Manufacturer's Specific Data +} SPD_MANUFACTURE_SPECIFIC; + +/// +/// DDR3 Serial Presence Detect structure +/// +typedef struct { + SPD_GENERAL_SECTION General; ///< 0-59 General Section + SPD_MODULE_SPECIFIC Module; ///< 60-116 Module-Specific Section + SPD_UNIQUE_MODULE_ID ModuleId; ///< 117-125 Unique Module ID + SPD_CYCLIC_REDUNDANCY_CODE Crc; ///< 126-127 Cyclical Redundancy Code (CRC) + SPD_MODULE_PART_NUMBER ModulePartNumber; ///< 128-145 Module Part Number + SPD_MODULE_REVISION_CODE ModuleRevisionCode; ///< 146-147 Module Revision Code + SPD_MANUFACTURER_ID_CODE DramIdCode; ///< 148-149 Dram Manufacturer ID Code + SPD_MANUFACTURE_SPECIFIC ManufactureSpecificData; ///< 150-175 Manufacturer's Specific Data + SPD_EXTREME_MEMORY_PROFILE Xmp; ///< 176-254 Intel(r) Extreme Memory Profile support + U8 Reserved; ///< 255 Reserved +} MrcSpdDdr3; +typedef union { + MrcSpdDdr3 Ddr3; +} MrcSpd; + +typedef struct { + SPD_MODULE_TYPE_STRUCT ModuleType; ///< 3 Module Type + SPD_MODULE_MEMORY_BUS_WIDTH_STRUCT ModuleMemoryBusWidth; ///< 8/14 Module Memory Bus Width +} SMBIOS_SPD_SAVE; + +typedef struct { + SPD_UNIQUE_MODULE_ID ModuleId; ///< 117-125 Unique Module ID + SPD_CYCLIC_REDUNDANCY_CODE Crc; ///< 126-127 Cyclical Redundancy Code (CRC) + SPD_MODULE_PART_NUMBER ModulePartNumber; ///< 128-145 Module Part Number + SPD_MODULE_REVISION_CODE ModuleRevisionCode; ///< 146-147 Module Revision Code +} MANUFACTURING_SPD_SAVE_DDR3; + +typedef union { + MANUFACTURING_SPD_SAVE_DDR3 Ddr3Data; +} MANUFACTURING_SPD_SAVE; + +typedef struct { + SMBIOS_SPD_SAVE SmbiosData; + MANUFACTURING_SPD_SAVE ManufacturingData; +} MrcSpdSave; + +#pragma pack (pop) +#endif // _MrcSpdData_h_ |