xref: /illumos-gate/usr/src/lib/libjedec/common/spd_ddr4.h (revision fe82ebb05d43b9572f3144399c279b135828373a)
1*fe82ebb0SRobert Mustacchi /*
2*fe82ebb0SRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*fe82ebb0SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*fe82ebb0SRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*fe82ebb0SRobert Mustacchi  * 1.0 of the CDDL.
6*fe82ebb0SRobert Mustacchi  *
7*fe82ebb0SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*fe82ebb0SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*fe82ebb0SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*fe82ebb0SRobert Mustacchi  */
11*fe82ebb0SRobert Mustacchi 
12*fe82ebb0SRobert Mustacchi /*
13*fe82ebb0SRobert Mustacchi  * Copyright 2023 Oxide Computer Company
14*fe82ebb0SRobert Mustacchi  */
15*fe82ebb0SRobert Mustacchi 
16*fe82ebb0SRobert Mustacchi #ifndef _SPD_DDR4_H
17*fe82ebb0SRobert Mustacchi #define	_SPD_DDR4_H
18*fe82ebb0SRobert Mustacchi 
19*fe82ebb0SRobert Mustacchi /*
20*fe82ebb0SRobert Mustacchi  * Definitions for use in DDR4 Serial Presence Detect decoding based on JEDEC
21*fe82ebb0SRobert Mustacchi  * Standard 21-C Annex L: Serial Presence Detect (SPD) for DDR4 SDRAM Modules
22*fe82ebb0SRobert Mustacchi  * Release 6.
23*fe82ebb0SRobert Mustacchi  *
24*fe82ebb0SRobert Mustacchi  * DDR4 modules are organized into a few main regions:
25*fe82ebb0SRobert Mustacchi  *
26*fe82ebb0SRobert Mustacchi  *   o Base Configuration and DRAM parameters (bytes 0x00-0x7f)
27*fe82ebb0SRobert Mustacchi  *   o Standard Module Parameters (bytes 0x80-0xbf) these vary on whether
28*fe82ebb0SRobert Mustacchi  *     something is considered an RDIMM, UDIMM, LRDIMM, etc.
29*fe82ebb0SRobert Mustacchi  *   o Hybrid Module Parameters (bytes 0xc0-0xff)
30*fe82ebb0SRobert Mustacchi  *   o Hybrid Module Extended Parameters (bytes 0x100-0x13f).
31*fe82ebb0SRobert Mustacchi  *   o Manufacturing Information (bytes 0x140-0x17f)
32*fe82ebb0SRobert Mustacchi  *   o End User Programmable data (0x180-0x1ff).
33*fe82ebb0SRobert Mustacchi  *
34*fe82ebb0SRobert Mustacchi  * This does not currently provide definitions for DDR4 NVDIMMs.
35*fe82ebb0SRobert Mustacchi  */
36*fe82ebb0SRobert Mustacchi 
37*fe82ebb0SRobert Mustacchi #include <sys/bitext.h>
38*fe82ebb0SRobert Mustacchi #include "spd_common.h"
39*fe82ebb0SRobert Mustacchi 
40*fe82ebb0SRobert Mustacchi #ifdef __cplusplus
41*fe82ebb0SRobert Mustacchi extern "C" {
42*fe82ebb0SRobert Mustacchi #endif
43*fe82ebb0SRobert Mustacchi 
44*fe82ebb0SRobert Mustacchi /*
45*fe82ebb0SRobert Mustacchi  * S8.1.1 Number of Bytes Used / Number of Bytes in SPD Device.
46*fe82ebb0SRobert Mustacchi  */
47*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES	0x000
48*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_USED(r)		bitx8(r, 3, 0)
49*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_USED_UNDEF	0
50*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_USED_128	1
51*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_USED_256	2
52*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_USED_384	3
53*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_USED_512	4
54*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_TOTAL(r)	bitx8(r, 6, 4)
55*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_TOTAL_UNDEF	0
56*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_TOTAL_256	1
57*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_NBYTES_TOTAL_512	2
58*fe82ebb0SRobert Mustacchi 
59*fe82ebb0SRobert Mustacchi /*
60*fe82ebb0SRobert Mustacchi  * S8.1.2: SPD Revision. The SPD revision is split into two 4-bit fields. There
61*fe82ebb0SRobert Mustacchi  * is an encoding level and an additions level. This can be somewhat thought of
62*fe82ebb0SRobert Mustacchi  * like a major and minor version. The upper 4-bit encoding level tells us
63*fe82ebb0SRobert Mustacchi  * whether or not we can parse it. The additions level just says what's been
64*fe82ebb0SRobert Mustacchi  * added, but it doesn't reset across major versions.
65*fe82ebb0SRobert Mustacchi  *
66*fe82ebb0SRobert Mustacchi  * Currently all DDR4 devices are at encoding revision 1. The additions level
67*fe82ebb0SRobert Mustacchi  * varies based on the type of DDR4 device (RDIMM, UDIMM, etc.).
68*fe82ebb0SRobert Mustacchi  */
69*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SPD_REV	0x001
70*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SPD_REV_ENC(r)	bitx8(r, 7, 4)
71*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SPD_REV_ADD(r)	bitx8(r, 3, 0)
72*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SPD_REV_V1	1
73*fe82ebb0SRobert Mustacchi 
74*fe82ebb0SRobert Mustacchi /*
75*fe82ebb0SRobert Mustacchi  * S8.1.3: Key Byte / DRAM Device Type. This field identifies the type of DDR
76*fe82ebb0SRobert Mustacchi  * device and is actually consistent across all SPD versions. Known values are
77*fe82ebb0SRobert Mustacchi  * in the spd_dram_type_t enumeration.
78*fe82ebb0SRobert Mustacchi  */
79*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DRAM_TYPE	0x002
80*fe82ebb0SRobert Mustacchi 
81*fe82ebb0SRobert Mustacchi /*
82*fe82ebb0SRobert Mustacchi  * S8.1.4: Key Byte / Module type. This is used to describe what kind of DDR
83*fe82ebb0SRobert Mustacchi  * module it is, which tell us what the module-specific section contents are.
84*fe82ebb0SRobert Mustacchi  * These bits, unlike the one above are device specific.
85*fe82ebb0SRobert Mustacchi  */
86*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE	0x003
87*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_ISHYBRID(r)	bitx8(r, 7, 7)
88*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_HYBRID(r)	bitx8(r, 6, 4)
89*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_HYBRID_NONE		0
90*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_HYBRID_NVDIMM_NF	1
91*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_HYBRID_NVDIMM_P	2
92*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_HYBRID_NVDIMM_H	3
93*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE(r)	bitx8(r, 3, 0)
94*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_EXT		0
95*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_RDIMM		1
96*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_UDIMM		2
97*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_SODIMM		3
98*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_LRDIMM		4
99*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_MINI_RDIMM	5
100*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_MINI_UDIMM	6
101*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_72b_SORDIMM	8
102*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_72b_SOUDIMM	9
103*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_16b_SODIMM	12
104*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_TYPE_TYPE_32b_SODIMM	13
105*fe82ebb0SRobert Mustacchi 
106*fe82ebb0SRobert Mustacchi /*
107*fe82ebb0SRobert Mustacchi  * S8.1.5 SDRAM Density and Banks.
108*fe82ebb0SRobert Mustacchi  */
109*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY	0x004
110*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_NBG_BITS(r)	bitx8(r, 7, 6)
111*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_NBG_BITS_MAX	2
112*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_NBA_BITS(r)	bitx8(r, 5, 4)
113*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_NBA_BITS_BASE	2
114*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_NBA_BITS_MAX	3
115*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY(r)	bitx8(r, 3, 0)
116*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_256Mb	0
117*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_512Mb	1
118*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_1Gb	2
119*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_2Gb	3
120*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_4Gb	4
121*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_8Gb	5
122*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_16Gb	6
123*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_32Gb	7
124*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_12Gb	8
125*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DENSITY_DENSITY_24Gb	9
126*fe82ebb0SRobert Mustacchi 
127*fe82ebb0SRobert Mustacchi /*
128*fe82ebb0SRobert Mustacchi  * S8.1.6 SDRAM Addressing.
129*fe82ebb0SRobert Mustacchi  */
130*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_ADDR	0x005
131*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_ADDR_NROWS(r)	bitx8(r, 5, 3)
132*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_ADDR_NROWS_BASE	12
133*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_ADDR_NROWS_MAX		18
134*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_ADDR_NCOLS(r)	bitx8(r, 2, 0)
135*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_ADDR_NCOLS_BASE	9
136*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_ADDR_NCOLS_MAX		12
137*fe82ebb0SRobert Mustacchi 
138*fe82ebb0SRobert Mustacchi /*
139*fe82ebb0SRobert Mustacchi  * S8.1.7 Primary SDRAM Package Type
140*fe82ebb0SRobert Mustacchi  * S8.1.11 Secondary SDRAM Package Type
141*fe82ebb0SRobert Mustacchi  *
142*fe82ebb0SRobert Mustacchi  * This contains information about the package types that are present. The
143*fe82ebb0SRobert Mustacchi  * secondary is only used when asymmetrical SDRAM types are present. These are
144*fe82ebb0SRobert Mustacchi  * generally the same bits and meanings, with the one exception that the bits
145*fe82ebb0SRobert Mustacchi  * 3:2 must be 0 in the primary. As such, we try to reuse definitions. In the
146*fe82ebb0SRobert Mustacchi  * ratio macros, the 1S and 2S refer to the fact that they are 1 and 2 module
147*fe82ebb0SRobert Mustacchi  * densities smaller.
148*fe82ebb0SRobert Mustacchi  */
149*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PRI_PKG	0x006
150*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SEC_PKG	0x00a
151*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_TYPE(r)	bitx8(r, 7, 7)
152*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_TYPE_MONO	0
153*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_TYPE_NOT	1
154*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_DIE_CNT(r)	bitx8(r, 6, 4)
155*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_DIE_CNT_BASE	1
156*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SEC_PKG_RATIO(r)	bitx8(r, 3, 2)
157*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SEC_PKG_RATIO_EQ	0
158*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SEC_PKG_RATIO_1S	1
159*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_SEC_PKG_RATIO_2S	2
160*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_SIG_LOAD(r)	bitx8(r, 1, 0)
161*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_SIG_LOAD_UNSPEC	0
162*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_SIG_LOAD_MULTI	1
163*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_PKG_SIG_LOAD_SINGLE	2
164*fe82ebb0SRobert Mustacchi 
165*fe82ebb0SRobert Mustacchi /*
166*fe82ebb0SRobert Mustacchi  * S8.1.8 SDRAM Optional Features.
167*fe82ebb0SRobert Mustacchi  */
168*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT	0x007
169*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAW(r)	bitx8(r, 5, 4)
170*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAW_8192X	0
171*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAW_4096X	1
172*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAW_2048X	2
173*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC(r)	bitx8(r, 3, 0)
174*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC_UNTESTED	0
175*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC_700K	1
176*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC_600K	2
177*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC_500K	3
178*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC_400K	4
179*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC_300K	5
180*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC_200K	6
181*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT_MAC_UNLIMITED	8
182*fe82ebb0SRobert Mustacchi 
183*fe82ebb0SRobert Mustacchi /*
184*fe82ebb0SRobert Mustacchi  * S8.1.9 SDRAM Thermal and Refresh Options. This in theory is supposed to have
185*fe82ebb0SRobert Mustacchi  * additional information from a data sheet; however, this field is noted as
186*fe82ebb0SRobert Mustacchi  * reserved as zero. Therefore we entirely ignore this byte.
187*fe82ebb0SRobert Mustacchi  */
188*fe82ebb0SRobert Mustacchi 
189*fe82ebb0SRobert Mustacchi /*
190*fe82ebb0SRobert Mustacchi  * S8.1.10 Other SDRAM Optional Features. These are even more that aren't in the
191*fe82ebb0SRobert Mustacchi  * first set of optional features.
192*fe82ebb0SRobert Mustacchi  */
193*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT2	0x009
194*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT2_PPR(r)	bitx8(r, 7, 6)
195*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT2_PPR_NOTSUP	0
196*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT2_PPR_1RPBG	1
197*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT2_SOFT_PPR(r)	bitx8(r, 5, 5)
198*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_OPT_FEAT2_MBIST_PPR(r)	bitx8(r, 4, 4)
199*fe82ebb0SRobert Mustacchi 
200*fe82ebb0SRobert Mustacchi /*
201*fe82ebb0SRobert Mustacchi  * S8.1.12 Module Nominal Voltage, VDD.
202*fe82ebb0SRobert Mustacchi  */
203*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_VOLT	0x00b
204*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_VOLT_V1P2_ENDUR(r)	bitx8(r, 1, 1)
205*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_VOLT_V1P2_OPER(r)	bitx8(r, 0, 0)
206*fe82ebb0SRobert Mustacchi 
207*fe82ebb0SRobert Mustacchi /*
208*fe82ebb0SRobert Mustacchi  * S8.1.13 Module Organization
209*fe82ebb0SRobert Mustacchi  */
210*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG	0x00c
211*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_RANK_MIX(r)	bitx8(r, 6, 6)
212*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_RANK_MIX_SYM	0
213*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_RANK_MIX_ASYM	1
214*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_NPKG_RANK(r)	bitx8(r, 5, 3)
215*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_NPKG_RANK_BASE	1
216*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_WIDTH(r)	bitx8(r, 2, 0)
217*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_WIDTH_4b	0
218*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_WIDTH_8b	1
219*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_WIDTH_16b	2
220*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_WIDTH_32b	3
221*fe82ebb0SRobert Mustacchi 
222*fe82ebb0SRobert Mustacchi /*
223*fe82ebb0SRobert Mustacchi  * S8.1.14 Module Memory Bus Width. The extensions here are generally used for
224*fe82ebb0SRobert Mustacchi  * ECC.
225*fe82ebb0SRobert Mustacchi  */
226*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH	0x00d
227*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH_EXT(r)	bitx8(r, 4, 3)
228*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH_EXT_NONE	0
229*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH_EXT_8b	1
230*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH_PRI(r)	bitx8(r, 2, 0)
231*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH_PRI_8b	0
232*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH_PRI_16b	1
233*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH_PRI_32b	2
234*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_BUS_WIDTH_PRI_64b	3
235*fe82ebb0SRobert Mustacchi 
236*fe82ebb0SRobert Mustacchi /*
237*fe82ebb0SRobert Mustacchi  * S8.1.15 Module Thermal Sensor.
238*fe82ebb0SRobert Mustacchi  */
239*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_THERM	0x00e
240*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_THERM_PRES(r)	bitx8(r, 7, 7)
241*fe82ebb0SRobert Mustacchi 
242*fe82ebb0SRobert Mustacchi /*
243*fe82ebb0SRobert Mustacchi  * S8.1.16 Extended Module Type. This contains a 4-bit extended module type;
244*fe82ebb0SRobert Mustacchi  * however, none are defined for DDR4. We do not bother with a definition for
245*fe82ebb0SRobert Mustacchi  * it. S8.1.17 Byte 16 is just reserved as must be zero.
246*fe82ebb0SRobert Mustacchi  */
247*fe82ebb0SRobert Mustacchi 
248*fe82ebb0SRobert Mustacchi /*
249*fe82ebb0SRobert Mustacchi  * S8.1.18 Timebases. These values are used throughout all other calculations to
250*fe82ebb0SRobert Mustacchi  * describe various values that are present throughout many of the subsequent
251*fe82ebb0SRobert Mustacchi  * bytes. There are two defined entities: the Median Time Base (MTB) and the
252*fe82ebb0SRobert Mustacchi  * Fine Time Base (FTB). There is only one MTB and FTB defined for DDR4. These
253*fe82ebb0SRobert Mustacchi  * are 125ps and 1ps respectively.
254*fe82ebb0SRobert Mustacchi  *
255*fe82ebb0SRobert Mustacchi  * Many of the timing values are split into two registers. One which contains a
256*fe82ebb0SRobert Mustacchi  * value in MTB and one which has an adjustment in FTB. This is used when there
257*fe82ebb0SRobert Mustacchi  * would otherwise be a fractional value that could not be rounded up to an even
258*fe82ebb0SRobert Mustacchi  * number of MTB. We represent the FTB values by appending '_FINE' to them.
259*fe82ebb0SRobert Mustacchi  */
260*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TIMEBASE	0x011
261*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TIMEBASE_MTB(r)	bitx8(r, 3, 2)
262*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TIMEBASE_MTB_125ps	0
263*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TIMEBASE_FTB(r)	bitx8(r, 1, 0)
264*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TIMEBASE_FTB_1ps	0
265*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MTB_PS		125
266*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_FTB_PS		1
267*fe82ebb0SRobert Mustacchi 
268*fe82ebb0SRobert Mustacchi /*
269*fe82ebb0SRobert Mustacchi  * S8.1.19 SDRAM Minimum Cycle Time t~ckavg~min.
270*fe82ebb0SRobert Mustacchi  * S8.1.52 Fine Offset for ^
271*fe82ebb0SRobert Mustacchi  * S8.1.20 SDRAM Maximum Cycle Time t~ckavg~max.
272*fe82ebb0SRobert Mustacchi  * S8.1.51 Fine Offset for ^
273*fe82ebb0SRobert Mustacchi  */
274*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TCKAVG_MIN		0x012
275*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TCKAVG_MIN_FINE	0x07d
276*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TCKAVG_MAX		0x013
277*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TCKAVG_MAX_FINE	0x07c
278*fe82ebb0SRobert Mustacchi 
279*fe82ebb0SRobert Mustacchi /*
280*fe82ebb0SRobert Mustacchi  * S8.1.21 CAS Latencies. There are four bytes that are used to get at this and
281*fe82ebb0SRobert Mustacchi  * show what is supported. These either start at CL7 or CL23 depending on the
282*fe82ebb0SRobert Mustacchi  * top bit of the last CAS byte.
283*fe82ebb0SRobert Mustacchi  */
284*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CAS_SUP0	0x014
285*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CAS_SUP1	0x015
286*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CAS_SUP2	0x016
287*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CAS_SUP3	0x017
288*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CAS_SUP3_RANGE(r)	bitx8(r, 7, 7)
289*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CAS_SUP3_RANGE_7	0
290*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CAS_SUP3_RANGE_23	1
291*fe82ebb0SRobert Mustacchi 
292*fe82ebb0SRobert Mustacchi /*
293*fe82ebb0SRobert Mustacchi  * S8.1.22 Minimum CAS Latency Time t~AA~min. This uses the MTB.
294*fe82ebb0SRobert Mustacchi  * S8.1.50 Fine Offset for ^
295*fe82ebb0SRobert Mustacchi  */
296*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TAA_MIN	0x018
297*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TAA_MIN_FINE	0x07b
298*fe82ebb0SRobert Mustacchi 
299*fe82ebb0SRobert Mustacchi /*
300*fe82ebb0SRobert Mustacchi  * S8.1.23 Minimum RAS to CAS Delay Time t~RCD~min.
301*fe82ebb0SRobert Mustacchi  * S8.1.49 Fine Offset for ^
302*fe82ebb0SRobert Mustacchi  */
303*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRCD_MIN	0x019
304*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRCD_MIN_FINE	0x07a
305*fe82ebb0SRobert Mustacchi 
306*fe82ebb0SRobert Mustacchi /*
307*fe82ebb0SRobert Mustacchi  * S8.1.24 Minimum Row Precharge Delay Time t~RP~min.
308*fe82ebb0SRobert Mustacchi  * S8.1.48 Fine Offset for ^
309*fe82ebb0SRobert Mustacchi  */
310*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRP_MIN	0x01a
311*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRP_MIN_FINE	0x079
312*fe82ebb0SRobert Mustacchi 
313*fe82ebb0SRobert Mustacchi /*
314*fe82ebb0SRobert Mustacchi  * S8.1.25 Upper Nibbles for t~RAS~min and t~RC~min. These are bits 11:9 of
315*fe82ebb0SRobert Mustacchi  * these values. The lower byte is in subsequent values.
316*fe82ebb0SRobert Mustacchi  * S8.1.26 Minimum Active to Precharge Delay Time t~RAS~min.
317*fe82ebb0SRobert Mustacchi  * S8.1.27 Minimum Active to Active/Refresh Delay Time t~RC~min.
318*fe82ebb0SRobert Mustacchi  * S8.1.47 Fine Offset for ^
319*fe82ebb0SRobert Mustacchi  */
320*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RAS_RC_UPPER	0x01b
321*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RAS_RC_UPPER_RC(r)	bitx8(r, 7, 4)
322*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RAS_RC_UPPER_RAS(r)	bitx8(r, 3, 0)
323*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRAS_MIN	0x01c
324*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRC_MIN	0x01d
325*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRC_MIN_FINE	0x078
326*fe82ebb0SRobert Mustacchi 
327*fe82ebb0SRobert Mustacchi /*
328*fe82ebb0SRobert Mustacchi  * S8.1.28: Minimum Refresh Recovery Delay Time t~RFC1~min.
329*fe82ebb0SRobert Mustacchi  * S8.1.29: Minimum Refresh Recovery Delay Time t~RFC2~min.
330*fe82ebb0SRobert Mustacchi  * S8.1.30: Minimum Refresh Recovery Delay Time t~RFC4~min.
331*fe82ebb0SRobert Mustacchi  *
332*fe82ebb0SRobert Mustacchi  * These are all different minimum refresh times. They are all two byte values
333*fe82ebb0SRobert Mustacchi  * in units of MTB.
334*fe82ebb0SRobert Mustacchi  */
335*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRFC1_MIN_LSB	0x01e
336*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRFC1_MIN_MSB	0x01f
337*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRFC2_MIN_LSB	0x020
338*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRFC2_MIN_MSB	0x021
339*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRFC4_MIN_LSB	0x022
340*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRFC4_MIN_MSB	0x023
341*fe82ebb0SRobert Mustacchi 
342*fe82ebb0SRobert Mustacchi /*
343*fe82ebb0SRobert Mustacchi  * S8.1.31 Upper nibble for t~FAW~
344*fe82ebb0SRobert Mustacchi  * S8.1.32 Minimum Four Activate Window Delay t~FAW~min.
345*fe82ebb0SRobert Mustacchi  *
346*fe82ebb0SRobert Mustacchi  * This is another 12-bit MTB-unit field.
347*fe82ebb0SRobert Mustacchi  */
348*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TFAW_UPPER	0x024
349*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TFAW_UPPER_FAW(r)	bitx8(r, 3, 0)
350*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TFAW		0x025
351*fe82ebb0SRobert Mustacchi 
352*fe82ebb0SRobert Mustacchi /*
353*fe82ebb0SRobert Mustacchi  * S8.1.33 Minimum Activate to Activate Delay Time t~RRD_S~min, different bank
354*fe82ebb0SRobert Mustacchi  * group.
355*fe82ebb0SRobert Mustacchi  * S8.1.46 Fine Offset for ^
356*fe82ebb0SRobert Mustacchi  *
357*fe82ebb0SRobert Mustacchi  * S8.1.34 Minimum Activate to Activate Delay Time t~RRD_L~min, same bank group.
358*fe82ebb0SRobert Mustacchi  * S8.1.45 Fine Offset for ^
359*fe82ebb0SRobert Mustacchi  *
360*fe82ebb0SRobert Mustacchi  * S8.1.35 Minimum CAS to CAS Delay Time t~CCD_L~min, same bank group.
361*fe82ebb0SRobert Mustacchi  * S8.1.44 Fine Offset for ^
362*fe82ebb0SRobert Mustacchi  * group.
363*fe82ebb0SRobert Mustacchi  */
364*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRRDS_MIN	0x026
365*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRRDS_MIN_FINE	0x077
366*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRRDL_MIN	0x027
367*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TRRDL_MIN_FINE	0x076
368*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TCCDL_MIN	0x028
369*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TCCDL_MIN_FINE	0x075
370*fe82ebb0SRobert Mustacchi 
371*fe82ebb0SRobert Mustacchi /*
372*fe82ebb0SRobert Mustacchi  * S8.1.36 Upper Nibble for t~WR~min.
373*fe82ebb0SRobert Mustacchi  * S8.1.37 Minimum Write Recovery Time t~WR~min.
374*fe82ebb0SRobert Mustacchi  */
375*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TWR_MIN_UPPER	0x029
376*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TWR_MIN_UPPER_TWR(r)	bitx8(r, 3, 0)
377*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TWR_MIN	0x02a
378*fe82ebb0SRobert Mustacchi 
379*fe82ebb0SRobert Mustacchi /*
380*fe82ebb0SRobert Mustacchi  * S 8.1.38 Upper Nibbles for t~WTR~min
381*fe82ebb0SRobert Mustacchi  * S8.1.39 Minimum Write to Read Time t~WTR_S~min, different bank group.
382*fe82ebb0SRobert Mustacchi  * S8.1.40 Minimum Write to Read Time t~WTR_L~min, same bank group.
383*fe82ebb0SRobert Mustacchi  *
384*fe82ebb0SRobert Mustacchi  * Note, the referenced version of the spec has a typo here and refers to this
385*fe82ebb0SRobert Mustacchi  * as byte 0x29, but that already exists with a different meaning.
386*fe82ebb0SRobert Mustacchi  */
387*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TWRT_UPPER	0x02b
388*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TWRT_UPPER_TWRL(r)	bitx8(r, 7, 4)
389*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TWRT_UPPER_TWRS(r)	bitx8(r, 3, 0)
390*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TWTRS_MIN	0x02c
391*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_TWTRL_MIN	0x02d
392*fe82ebb0SRobert Mustacchi 
393*fe82ebb0SRobert Mustacchi /*
394*fe82ebb0SRobert Mustacchi  * Bytes 0x2e to 0x3b are all reserved.
395*fe82ebb0SRobert Mustacchi  */
396*fe82ebb0SRobert Mustacchi 
397*fe82ebb0SRobert Mustacchi /*
398*fe82ebb0SRobert Mustacchi  * S8.1.42 Connector to SDRAM bit mapping. Each of the bytes defines a different
399*fe82ebb0SRobert Mustacchi  * set of pins here. These all have a fairly standard set of transformations
400*fe82ebb0SRobert Mustacchi  * that can be applied. These include a package rank map which only has a single
401*fe82ebb0SRobert Mustacchi  * identity transformation applied and a separate nibble map encoding.
402*fe82ebb0SRobert Mustacchi  */
403*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ0	0x03c
404*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ4	0x03d
405*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ8	0x03e
406*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ12	0x03f
407*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ16	0x040
408*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ20	0x041
409*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ24	0x042
410*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ28	0x043
411*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_CB0	0x044
412*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_CB4	0x045
413*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ32	0x046
414*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ36	0x047
415*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ40	0x048
416*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ44	0x049
417*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ48	0x04a
418*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ52	0x04b
419*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ56	0x04c
420*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_DQ60	0x04d
421*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_PKG(r)	bitx8(r, 7, 6)
422*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_PKG_FLIP	0
423*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_NIBBLE(r)	bitx8(r, 5, 5)
424*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_IDX(r)	bitx8(r, 4, 0)
425*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MAP_IDX_UNSPEC	0
426*fe82ebb0SRobert Mustacchi 
427*fe82ebb0SRobert Mustacchi /*
428*fe82ebb0SRobert Mustacchi  * Bytes 0x4e-0x74 are reserved. Bytes 75-7D are fine offsets that are laid out
429*fe82ebb0SRobert Mustacchi  * with their base counterparts.
430*fe82ebb0SRobert Mustacchi  */
431*fe82ebb0SRobert Mustacchi 
432*fe82ebb0SRobert Mustacchi /*
433*fe82ebb0SRobert Mustacchi  * S8.1.53 CRC For Base Configuration Section. This is a CRC that covers bytes
434*fe82ebb0SRobert Mustacchi  * 0x00 to 0x7D using a specific CRC16.
435*fe82ebb0SRobert Mustacchi  */
436*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CRC_LSB	0x07e
437*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_CRC_MSB	0x07f
438*fe82ebb0SRobert Mustacchi 
439*fe82ebb0SRobert Mustacchi /*
440*fe82ebb0SRobert Mustacchi  * We jump ahead to another common region which contains the common
441*fe82ebb0SRobert Mustacchi  * manufacturing information which is shared across all module types.
442*fe82ebb0SRobert Mustacchi  */
443*fe82ebb0SRobert Mustacchi 
444*fe82ebb0SRobert Mustacchi /*
445*fe82ebb0SRobert Mustacchi  * S8.5.1 Module Manufacturer ID Code. This is a two byte JEP-108 style MFG ID.
446*fe82ebb0SRobert Mustacchi  * S8.5.7 DRAM Manufacturer ID code.
447*fe82ebb0SRobert Mustacchi  */
448*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_MFG_ID0	0x140
449*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_MFG_ID1	0x141
450*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DRAM_MFG_ID0	0x15e
451*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DRAM_MFG_ID1	0x15f
452*fe82ebb0SRobert Mustacchi 
453*fe82ebb0SRobert Mustacchi /*
454*fe82ebb0SRobert Mustacchi  * S8.5.2 Module Manufacturing Location. This byte is manufacturer specific.
455*fe82ebb0SRobert Mustacchi  */
456*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_MFG_LOC	0x142
457*fe82ebb0SRobert Mustacchi 
458*fe82ebb0SRobert Mustacchi /*
459*fe82ebb0SRobert Mustacchi  * S8.5.3 module Manufacturing Date. Encoded as two BCD bytes for the year and
460*fe82ebb0SRobert Mustacchi  * week.
461*fe82ebb0SRobert Mustacchi  */
462*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_MFG_YEAR	0x143
463*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_MFG_WEEK	0x144
464*fe82ebb0SRobert Mustacchi 
465*fe82ebb0SRobert Mustacchi /*
466*fe82ebb0SRobert Mustacchi  * S8.5.4 Module Serial Number.
467*fe82ebb0SRobert Mustacchi  * S8.5.5 Module Part Number
468*fe82ebb0SRobert Mustacchi  * S8.5.6 Module Revision Code
469*fe82ebb0SRobert Mustacchi  */
470*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_SN		0x145
471*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_SN_LEN	4
472*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_PN		0x149
473*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_PN_LEN	20
474*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_MOD_REV	0x15d
475*fe82ebb0SRobert Mustacchi 
476*fe82ebb0SRobert Mustacchi /*
477*fe82ebb0SRobert Mustacchi  * S8.5.8 DRAM Stepping
478*fe82ebb0SRobert Mustacchi  */
479*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_DRAM_STEP	0x160
480*fe82ebb0SRobert Mustacchi 
481*fe82ebb0SRobert Mustacchi /*
482*fe82ebb0SRobert Mustacchi  * Bytes 0x161-0x17d are left for Manufacturer specific data while bytes
483*fe82ebb0SRobert Mustacchi  * 0x17e-0x17f are reserved.
484*fe82ebb0SRobert Mustacchi  */
485*fe82ebb0SRobert Mustacchi 
486*fe82ebb0SRobert Mustacchi /*
487*fe82ebb0SRobert Mustacchi  * The next region of bytes in the range 0x80-0xbf. We have specific definitions
488*fe82ebb0SRobert Mustacchi  * for RDIMMs, LRDIMMs, and UDIMMs. While these often are very similar, they are
489*fe82ebb0SRobert Mustacchi  * subtlety different.
490*fe82ebb0SRobert Mustacchi  */
491*fe82ebb0SRobert Mustacchi 
492*fe82ebb0SRobert Mustacchi /*
493*fe82ebb0SRobert Mustacchi  * S9.2.1 RDIMM: Raw Card Extension, Module Nominal Height. Bits 7-5 here have a
494*fe82ebb0SRobert Mustacchi  * raw card revision. The revision extension, bits 7:5, are only valid when the
495*fe82ebb0SRobert Mustacchi  * value of the normal reference card used in byte 0x82 is set to 0b11 (3).
496*fe82ebb0SRobert Mustacchi  */
497*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_HEIGHT	0x080
498*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_HEIGHT_REV(r)	bitx8(r, 7, 5)
499*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_HEIGHT_MM(r)	bitx8(r, 4, 0)
500*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_HEIGHT_LT15MM	0
501*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_HEIGHT_BASE	15
502*fe82ebb0SRobert Mustacchi 
503*fe82ebb0SRobert Mustacchi /*
504*fe82ebb0SRobert Mustacchi  * S9.2.2 RDIMM: Module Maximum Thickness. These measure thicknesses in mm, with
505*fe82ebb0SRobert Mustacchi  * zero value meaning less than or equal to 1mm.
506*fe82ebb0SRobert Mustacchi  */
507*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_THICK	0x081
508*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_THICK_BACK(r)	bitx8(r, 7, 4)
509*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_THICK_FRONT(r)	bitx8(r, 3, 0)
510*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_THICK_BASE	1
511*fe82ebb0SRobert Mustacchi 
512*fe82ebb0SRobert Mustacchi /*
513*fe82ebb0SRobert Mustacchi  * S9.2.3 RDIMM: Reference Raw Card Used. Bit 7 is used as basically another bit
514*fe82ebb0SRobert Mustacchi  * for bits 4-0. We do not define each meaning of these bit combinations in this
515*fe82ebb0SRobert Mustacchi  * header, that is left for tables in the library. When bits 6:5 are 0b11 (3)
516*fe82ebb0SRobert Mustacchi  * then we must add in the reference card value in byte 0x80 to bits 6:5.
517*fe82ebb0SRobert Mustacchi  */
518*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REF	0x082
519*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REF_EXT(r)	bitx8(r, 7, 7)
520*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REF_REV(r)	bitx8(r, 6, 5)
521*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REV_USE_HEIGHT	3
522*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REF_CARD(r)	bitx8(r, 4, 0)
523*fe82ebb0SRobert Mustacchi 
524*fe82ebb0SRobert Mustacchi /*
525*fe82ebb0SRobert Mustacchi  * S9.2.4 RDIMM: DIMM Attributes.
526*fe82ebb0SRobert Mustacchi  */
527*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ATTR	0x083
528*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ATTR_TYPE(r)	bitx8(r, 7, 4)
529*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ATTR_TYPE_RCD01	0
530*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ATTR_TYPE_RCD02	1
531*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ATTR_NROWS(r)	bitx8(r, 3, 2)
532*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ATTR_NREGS(r)	bitx8(r, 1, 0)
533*fe82ebb0SRobert Mustacchi 
534*fe82ebb0SRobert Mustacchi /*
535*fe82ebb0SRobert Mustacchi  * S9.2.5 RDIMM: Thermal Heat Spreader Solution
536*fe82ebb0SRobert Mustacchi  */
537*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_THERM	0x084
538*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_THERM_IMPL(r)	bitx8(r, 7, 7)
539*fe82ebb0SRobert Mustacchi 
540*fe82ebb0SRobert Mustacchi /*
541*fe82ebb0SRobert Mustacchi  * S9.2.6 RDIMM: Register Manufacturer JEDEC ID. This contains the JEDEC ID for
542*fe82ebb0SRobert Mustacchi  * the manufacturer encoded as the number of continuation bytes and then the
543*fe82ebb0SRobert Mustacchi  * actual code. This works with libjedec_vendor_string.
544*fe82ebb0SRobert Mustacchi  */
545*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REG_MFG_ID0	0x085
546*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REG_MFG_ID1	0x086
547*fe82ebb0SRobert Mustacchi 
548*fe82ebb0SRobert Mustacchi /*
549*fe82ebb0SRobert Mustacchi  * S9.2.7 RDIMM: Register Revision Number. This value is just a straight up hex
550*fe82ebb0SRobert Mustacchi  * encoded value. It's a bit arbitrary. For example, they say 0x31 can be rev
551*fe82ebb0SRobert Mustacchi  * 3.1, while 0x01 is just revision 1, and 0xB1 is revision B1.
552*fe82ebb0SRobert Mustacchi  */
553*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REV	0x087
554*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_REV_UNDEF	0xff
555*fe82ebb0SRobert Mustacchi 
556*fe82ebb0SRobert Mustacchi /*
557*fe82ebb0SRobert Mustacchi  * S9.2.8 RDIMM: Address Mapping from Register to DRAM. This covers how the
558*fe82ebb0SRobert Mustacchi  * register maps ranks 1 and 3 between the register and the actual modules.
559*fe82ebb0SRobert Mustacchi  * Ranks 0/2 are always standard.
560*fe82ebb0SRobert Mustacchi  */
561*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_MAP	0x88
562*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_MAP_R1(r)	bitx8(r, 0, 0)
563*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_MAP_R1_STD	0
564*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_MAP_R1_MIRROR	1
565*fe82ebb0SRobert Mustacchi 
566*fe82ebb0SRobert Mustacchi /*
567*fe82ebb0SRobert Mustacchi  * S9.2.9 RDIMM: Register Output Drive Strength for Control and Command/Address
568*fe82ebb0SRobert Mustacchi  * S9.2.10 RDIMM: Register Output Drive Strength for Clock
569*fe82ebb0SRobert Mustacchi  */
570*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0	0x89
571*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0_CS(r)	bitx8(r, 7, 6)
572*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0_CA(r)	bitx8(r, 5, 4)
573*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0_ODT(r)	bitx8(r, 3, 2)
574*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0_CKE(r)	bitx8(r, 1, 0)
575*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0_LIGHT	0
576*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0_MODERATE	1
577*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0_STRONG	2
578*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS0_VERY_STRONG	3
579*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS1	0x8a
580*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS1_SLEW_SUP(r)	bitx8(r, 6, 6)
581*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS1_Y1(r)	bitx8(r, 3, 2)
582*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS1_Y0(r)	bitx8(r, 1, 0)
583*fe82ebb0SRobert Mustacchi 
584*fe82ebb0SRobert Mustacchi /*
585*fe82ebb0SRobert Mustacchi  * S9.2.12 CRC for SPD Block 1.
586*fe82ebb0SRobert Mustacchi  */
587*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_BLK1_CRC_START	0x80
588*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_BLK1_CRC_LSB	0xfe
589*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_BLK1_CRC_MSB	0xff
590*fe82ebb0SRobert Mustacchi 
591*fe82ebb0SRobert Mustacchi /*
592*fe82ebb0SRobert Mustacchi  * S9.1.1 UDIMM: Raw Card Extension, Module Nominal Height.
593*fe82ebb0SRobert Mustacchi  * S9.1.2 UDIMM: Module Maximum Thickness.
594*fe82ebb0SRobert Mustacchi  * S9.1.3 UDIMM: Reference Raw Card Used.
595*fe82ebb0SRobert Mustacchi  *
596*fe82ebb0SRobert Mustacchi  * These definitions are the same as for RDIMMs.
597*fe82ebb0SRobert Mustacchi  */
598*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_UDIMM_HEIGHT	0x080
599*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_UDIMM_THICK	0x081
600*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_UDIMM_REF	0x082
601*fe82ebb0SRobert Mustacchi 
602*fe82ebb0SRobert Mustacchi /*
603*fe82ebb0SRobert Mustacchi  * S9.1.4 UDIMM: Address Mapping from Edge Connector to DRAM. This is similar to
604*fe82ebb0SRobert Mustacchi  * SPD_DDR4_RDIMM_MAP; however it doesn't take into account the register.
605*fe82ebb0SRobert Mustacchi  */
606*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_UDIMM_MAP	0x83
607*fe82ebb0SRobert Mustacchi 
608*fe82ebb0SRobert Mustacchi /*
609*fe82ebb0SRobert Mustacchi  * Everything else in UDIMMs is reserved, aside from the CRC, which is the same
610*fe82ebb0SRobert Mustacchi  * as RDIMMs.
611*fe82ebb0SRobert Mustacchi  */
612*fe82ebb0SRobert Mustacchi 
613*fe82ebb0SRobert Mustacchi /*
614*fe82ebb0SRobert Mustacchi  * S9.3.1 LRDIMM: Raw Card Extension, Module Nominal Height
615*fe82ebb0SRobert Mustacchi  * S9.3.2 LRDIMM: Module Maximum Thickness
616*fe82ebb0SRobert Mustacchi  * S9.3.3 LRDIMM: Reference Raw Card Used
617*fe82ebb0SRobert Mustacchi  *
618*fe82ebb0SRobert Mustacchi  * These are the same as the corresponding UDIMM / RDIMM values.
619*fe82ebb0SRobert Mustacchi  */
620*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_HEIGHT	0x080
621*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_THICK	0x081
622*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_REF	0x082
623*fe82ebb0SRobert Mustacchi 
624*fe82ebb0SRobert Mustacchi /*
625*fe82ebb0SRobert Mustacchi  * S9.3.4 LRDIMM: DIMM Attributes.
626*fe82ebb0SRobert Mustacchi  */
627*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ATTR	0x083
628*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ATTR_TYPE(r)	bitx8(r, 7, 4)
629*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ATTR_TYPE_RCD01_DB01	0
630*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ATTR_TYPE_RCD02_DB02	1
631*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ATTR_NROWS(r)	bitx8(r, 3, 2)
632*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ATTR_NREGS(r)	bitx8(r, 1, 0)
633*fe82ebb0SRobert Mustacchi 
634*fe82ebb0SRobert Mustacchi /*
635*fe82ebb0SRobert Mustacchi  * S9.3.5 LRDIMM: Thermal Heat Spreader. See RDIMM version.
636*fe82ebb0SRobert Mustacchi  */
637*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_THERM	0x084
638*fe82ebb0SRobert Mustacchi 
639*fe82ebb0SRobert Mustacchi /*
640*fe82ebb0SRobert Mustacchi  * S9.3.6 LRDIMM: Register and Data Buffer Manufacturer. See RDIMM version.
641*fe82ebb0SRobert Mustacchi  */
642*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_REG_MFG_ID0	0x085
643*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_REG_MFG_ID1	0x086
644*fe82ebb0SRobert Mustacchi 
645*fe82ebb0SRobert Mustacchi /*
646*fe82ebb0SRobert Mustacchi  * S9.3.7 LRDIMM: Register Revision Number. See RDIMM for more info.
647*fe82ebb0SRobert Mustacchi  */
648*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_REV	0x087
649*fe82ebb0SRobert Mustacchi 
650*fe82ebb0SRobert Mustacchi /*
651*fe82ebb0SRobert Mustacchi  * S9.3.8 LRDIMM: Address Mapping from Register to DRAM. See RDIMM.
652*fe82ebb0SRobert Mustacchi  */
653*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MAP	0x88
654*fe82ebb0SRobert Mustacchi 
655*fe82ebb0SRobert Mustacchi /*
656*fe82ebb0SRobert Mustacchi  * S9.3.9 LRDIMM: Register Output Drive Strength for Control and
657*fe82ebb0SRobert Mustacchi  * Command/Address.
658*fe82ebb0SRobert Mustacchi  * S9.3.10: LRDIMM: Register Output Drive Strength for Clock and Data Buffer
659*fe82ebb0SRobert Mustacchi  * Control.
660*fe82ebb0SRobert Mustacchi  * See RDIMM for valid drive strength values and ODS0.
661*fe82ebb0SRobert Mustacchi  */
662*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODS0	0x89
663*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODS1	0x8a
664*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODS1_OSRC_SUP(r)	bitx8(r, 6, 6)
665*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODS1_BCK(r)	bitx8(r, 5, 5)
666*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODS1_BCOM(r)	bitx8(r, 4, 4)
667*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODS1_MODERATE	0
668*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODS1_STRONG	1
669*fe82ebb0SRobert Mustacchi /*
670*fe82ebb0SRobert Mustacchi  * The above two bit ranges use a single bit drive strength while the following
671*fe82ebb0SRobert Mustacchi  * two use the same two-bit version as RDIMMs.
672*fe82ebb0SRobert Mustacchi  */
673*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS1_Y1(r)	bitx8(r, 3, 2)
674*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_RDIMM_ODS1_Y0(r)	bitx8(r, 1, 0)
675*fe82ebb0SRobert Mustacchi 
676*fe82ebb0SRobert Mustacchi /*
677*fe82ebb0SRobert Mustacchi  * S9.3.7 LRDIMM: Data Buffer Revision Number.
678*fe82ebb0SRobert Mustacchi  */
679*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_DB_REV	0x08b
680*fe82ebb0SRobert Mustacchi 
681*fe82ebb0SRobert Mustacchi /*
682*fe82ebb0SRobert Mustacchi  * S9.3.12 LRDIMM: DRAM VrefDQ for Package Rank 0
683*fe82ebb0SRobert Mustacchi  * S9.3.13 LRDIMM: DRAM VrefDQ for Package Rank 1
684*fe82ebb0SRobert Mustacchi  * S9.3.14 LRDIMM: DRAM VrefDQ for Package Rank 2
685*fe82ebb0SRobert Mustacchi  * S9.3.15 LRDIMM: DRAM VrefDQ for Package Rank 3
686*fe82ebb0SRobert Mustacchi  *
687*fe82ebb0SRobert Mustacchi  * These are all encoded with a value from MR6 in JESD79-4 apparently.
688*fe82ebb0SRobert Mustacchi  */
689*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ0	0x08c
690*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ1	0x08d
691*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ2	0x08e
692*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ3	0x08f
693*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ_V(r)	bitx8(r, 5, 0)
694*fe82ebb0SRobert Mustacchi 
695*fe82ebb0SRobert Mustacchi /*
696*fe82ebb0SRobert Mustacchi  * S9.3.16 LRDIMM: Data Buffer VrefDQ for DRAM Interface. The entire byte is
697*fe82ebb0SRobert Mustacchi  * used to match the encoding from the DDR4DB01 spec.
698*fe82ebb0SRobert Mustacchi  */
699*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ_DB	0x090
700*fe82ebb0SRobert Mustacchi 
701*fe82ebb0SRobert Mustacchi /*
702*fe82ebb0SRobert Mustacchi  * S9.3.17 LRDIMM: Data Buffer MDQ Drive Strength and RTT for data rate <= 1866
703*fe82ebb0SRobert Mustacchi  * S9.3.18 LRDIMM: Data Buffer MDQ Drive Strength and RTT for 1866 < data rate
704*fe82ebb0SRobert Mustacchi  * <= 2400
705*fe82ebb0SRobert Mustacchi  * S9.3.19 LRDIMM: Data Buffer MDQ Drive Strength and RTT for 2400 < data rate
706*fe82ebb0SRobert Mustacchi  * <= 3200
707*fe82ebb0SRobert Mustacchi  *
708*fe82ebb0SRobert Mustacchi  * These three registers all share the same bit values and register extraction.
709*fe82ebb0SRobert Mustacchi  */
710*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_1866	0x091
711*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_2400	0x092
712*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_3200	0x093
713*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_DS(r)	bitx8(r, 6, 4)
714*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_DS_40R	0
715*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_DS_34R	1
716*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_DS_48R	2
717*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_DS_60R	5
718*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT(r)	bitx8(r, 2, 0)
719*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT_DIS	0
720*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT_60R	1
721*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT_120R	2
722*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT_40R	3
723*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT_240R	4
724*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT_48R	5
725*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT_80R	6
726*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_MDQ_RTT_34R	7
727*fe82ebb0SRobert Mustacchi 
728*fe82ebb0SRobert Mustacchi /*
729*fe82ebb0SRobert Mustacchi  * S9.3.20: LRDIMM: DRAM Drive Strength. One byte covers all data rates, which
730*fe82ebb0SRobert Mustacchi  * share the same resistance values.
731*fe82ebb0SRobert Mustacchi  */
732*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_DRAM_DS	0x094
733*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_DRAM_DS_3200(r)	bitx8(r, 5, 4)
734*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_DRAM_DS_2400(r)	bitx8(r, 3, 2)
735*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_DRAM_DS_1866(r)	bitx8(r, 1, 0)
736*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_DRAM_DS_34R	0
737*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_DRAM_DS_48R	1
738*fe82ebb0SRobert Mustacchi 
739*fe82ebb0SRobert Mustacchi /*
740*fe82ebb0SRobert Mustacchi  * S9.3.21 LRDIMM: DRAM ODT (RTT_WR and RTT_NOM) for data rate <= 1866
741*fe82ebb0SRobert Mustacchi  * S9.3.22 LRDIMM: DRAM ODT (RTT_WR and RTT_NOM) for 1866 < data rate <= 2400
742*fe82ebb0SRobert Mustacchi  * S9.3.23 LRDIMM: DRAM ODT (RTT_WR and RTT_NOM) for 2400 < data rate <= 3200
743*fe82ebb0SRobert Mustacchi  */
744*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_1866	0x095
745*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_2400	0x096
746*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_3200	0x097
747*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_WR(r)	bitx8(r, 5, 3)
748*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_WR_DYN_OFF	0
749*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_WR_120R	1
750*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_WR_240R	2
751*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_WR_HIZ	3
752*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_WR_80R	4
753*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM(r)	bitx8(r, 2, 0)
754*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM_DIS	0
755*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM_60R	1
756*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM_120R	2
757*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM_40R	3
758*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM_240R	4
759*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM_48R	5
760*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM_80R	6
761*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_ODT_NOM_34R	7
762*fe82ebb0SRobert Mustacchi 
763*fe82ebb0SRobert Mustacchi /*
764*fe82ebb0SRobert Mustacchi  * S9.3.24 LRDIMM: DRAM ODT (RTT_PARK) for data rate <= 1866
765*fe82ebb0SRobert Mustacchi  * S9.3.25 LRDIMM: DRAM ODT (RTT_PARK) for 1866 < data rate <= 2400
766*fe82ebb0SRobert Mustacchi  * S9.3.26 LRDIMM: DRAM ODT (RTT_PARK) for 2400 < data rate <= 3200
767*fe82ebb0SRobert Mustacchi  */
768*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_1866	0x098
769*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_2400	0x099
770*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_3200	0x09a
771*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_R23(r)	bitx8(r, 5, 3)
772*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_R01(r)	bitx8(r, 2, 0)
773*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_DIS	0
774*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_60R	1
775*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_120R	2
776*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_40R	3
777*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_240R	4
778*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_48R	5
779*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_80R	6
780*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_PARK_34R	7
781*fe82ebb0SRobert Mustacchi 
782*fe82ebb0SRobert Mustacchi /*
783*fe82ebb0SRobert Mustacchi  * S9.3.27: Data Buffer VrefDQ for DRAM Interface Range.
784*fe82ebb0SRobert Mustacchi  */
785*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ_RNG	0x09b
786*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ_RNG_DB(r)	bitx8(r, 4, 4)
787*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ_RNG_R3(r)	bitx8(r, 3, 3)
788*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ_RNG_R2(r)	bitx8(r, 2, 2)
789*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ_RNG_R1(r)	bitx8(r, 1, 1)
790*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VREFDQ_RNG_R0(r)	bitx8(r, 0, 0)
791*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VERFDQ_RNG_1	0
792*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_VERFDQ_RNG_2	1
793*fe82ebb0SRobert Mustacchi 
794*fe82ebb0SRobert Mustacchi /*
795*fe82ebb0SRobert Mustacchi  * S9.3.28: Data Buffer DQ Decision Feedback Equalization
796*fe82ebb0SRobert Mustacchi  */
797*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_EQ	0x09c
798*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_EQ_DFE_SUP(r)	bitx8(r, 1, 1)
799*fe82ebb0SRobert Mustacchi #define	SPD_DDR4_LRDIMM_EQ_GA_SUP(r)	bitx8(r, 0, 0)
800*fe82ebb0SRobert Mustacchi 
801*fe82ebb0SRobert Mustacchi #ifdef __cplusplus
802*fe82ebb0SRobert Mustacchi }
803*fe82ebb0SRobert Mustacchi #endif
804*fe82ebb0SRobert Mustacchi 
805*fe82ebb0SRobert Mustacchi #endif /* _SPD_DDR4_H */
806