xref: /illumos-gate/usr/src/lib/libjedec/common/spd_ddr3.h (revision 8119dad84d6416f13557b0ba8e2aaf9064cbcfd3)
1*8119dad8SRobert Mustacchi /*
2*8119dad8SRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*8119dad8SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*8119dad8SRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*8119dad8SRobert Mustacchi  * 1.0 of the CDDL.
6*8119dad8SRobert Mustacchi  *
7*8119dad8SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*8119dad8SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*8119dad8SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*8119dad8SRobert Mustacchi  */
11*8119dad8SRobert Mustacchi 
12*8119dad8SRobert Mustacchi /*
13*8119dad8SRobert Mustacchi  * Copyright 2024 Oxide Computer Company
14*8119dad8SRobert Mustacchi  */
15*8119dad8SRobert Mustacchi 
16*8119dad8SRobert Mustacchi #ifndef _SPD_DDR3_H
17*8119dad8SRobert Mustacchi #define	_SPD_DDR3_H
18*8119dad8SRobert Mustacchi 
19*8119dad8SRobert Mustacchi /*
20*8119dad8SRobert Mustacchi  * Definitions for use in DDR3 Serial Presence Decoding
21*8119dad8SRobert Mustacchi  * based on JEDEC Standard 21-C Section Annex K: Serial Presence Detect
22*8119dad8SRobert Mustacchi  * (SPD) for DDR3 SDRAM Modules Release 6.
23*8119dad8SRobert Mustacchi  *
24*8119dad8SRobert Mustacchi  * DDR3 modules are organized in a 256 byte memory map:
25*8119dad8SRobert Mustacchi  *
26*8119dad8SRobert Mustacchi  *   o Base Configuration and DRAM parameters (bytes 0x00-0x3b)
27*8119dad8SRobert Mustacchi  *   o Standard Module Parameters (bytes 0x40-0x74) these vary on whether
28*8119dad8SRobert Mustacchi  *     something is considered an RDIMM, UDIMM, etc.
29*8119dad8SRobert Mustacchi  *   o Manufacturing Information (bytes 0x75-0xaf)
30*8119dad8SRobert Mustacchi  *   o End User Programmable data (0xb0-0xff).
31*8119dad8SRobert Mustacchi  */
32*8119dad8SRobert Mustacchi 
33*8119dad8SRobert Mustacchi #include <sys/bitext.h>
34*8119dad8SRobert Mustacchi #include "spd_common.h"
35*8119dad8SRobert Mustacchi 
36*8119dad8SRobert Mustacchi #ifdef __cplusplus
37*8119dad8SRobert Mustacchi extern "C" {
38*8119dad8SRobert Mustacchi #endif
39*8119dad8SRobert Mustacchi 
40*8119dad8SRobert Mustacchi /*
41*8119dad8SRobert Mustacchi  * Number of Bytes Used / Number of Bytes in SPD Device / CRC Coverage
42*8119dad8SRobert Mustacchi  */
43*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES		0x00
44*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_CRC(r)		bitx8(r, 7, 7)
45*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_CRC_125		0
46*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_CRC_116		1
47*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_TOTAL(r)	bitx8(r, 6, 4)
48*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_TOTAL_UNDEF	0
49*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_TOTAL_256	1
50*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_USED(r)		bitx8(r, 3, 0)
51*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_USED_UNDEF	0
52*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_USED_128	1
53*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_USED_176	2
54*8119dad8SRobert Mustacchi #define	SPD_DDR3_NBYTES_USED_256	3
55*8119dad8SRobert Mustacchi 
56*8119dad8SRobert Mustacchi /*
57*8119dad8SRobert Mustacchi  * SPD Revision. This is the same as described in SPD_DDR4_SPD_REV as
58*8119dad8SRobert Mustacchi  * defined in spd_ddr4.h.
59*8119dad8SRobert Mustacchi  */
60*8119dad8SRobert Mustacchi #define	SPD_DDR3_SPD_REV	0x01
61*8119dad8SRobert Mustacchi #define	SPD_DDR3_SPD_REV_ENC(r)	bitx8(r, 7, 4)
62*8119dad8SRobert Mustacchi #define	SPD_DDR3_SPD_REV_ADD(r)	bitx8(r, 3, 0)
63*8119dad8SRobert Mustacchi #define	SPD_DDR3_SPD_REV_V1	1
64*8119dad8SRobert Mustacchi 
65*8119dad8SRobert Mustacchi /*
66*8119dad8SRobert Mustacchi  * Key Byte / DRAM Device Type. This field identifies the type of DDR device and
67*8119dad8SRobert Mustacchi  * is actually consistent across all SPD versions. Known values are in the
68*8119dad8SRobert Mustacchi  * spd_dram_type_t enumeration.
69*8119dad8SRobert Mustacchi  */
70*8119dad8SRobert Mustacchi #define	SPD_DDR3_DRAM_TYPE	0x02
71*8119dad8SRobert Mustacchi 
72*8119dad8SRobert Mustacchi /*
73*8119dad8SRobert Mustacchi  * Key Byte / Module Type. This is used to describe what kind of DDR module it
74*8119dad8SRobert Mustacchi  * is, which tells us what the module-specific section contents are. These bits,
75*8119dad8SRobert Mustacchi  * unlike the one above are device specific.
76*8119dad8SRobert Mustacchi  */
77*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE	0x03
78*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE(r)	bitx8(r, 3, 0)
79*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_UNDEF		0
80*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_RDIMM		1
81*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_UDIMM		2
82*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_SODIMM		3
83*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_MICRO_DIMM	4
84*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_MINI_RDIMM	5
85*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_MINI_UDIMM	6
86*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_MINI_CDIMM	7
87*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_72b_SORDIMM	8
88*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_72b_SOUDIMM	9
89*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_72b_SOCDIMM	10
90*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_LRDIMM		11
91*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_16b_SODIMM	12
92*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_TYPE_TYPE_32b_SODIMM	13
93*8119dad8SRobert Mustacchi 
94*8119dad8SRobert Mustacchi /*
95*8119dad8SRobert Mustacchi  * SDRAM Density and Banks
96*8119dad8SRobert Mustacchi  */
97*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY	0x04
98*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_NBA_BITS(r)	bitx8(r, 6, 4)
99*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_NBA_BITS_BASE	3
100*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_NBA_BITS_MAX	6
101*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY(r)	bitx8(r, 3, 0)
102*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_256Mb	0
103*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_512Mb	1
104*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_1Gb	2
105*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_2Gb	3
106*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_4Gb	4
107*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_8Gb	5
108*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_16Gb	6
109*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_32Gb	7
110*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_12Gb	8
111*8119dad8SRobert Mustacchi #define	SPD_DDR3_DENSITY_DENSITY_24Gb	9
112*8119dad8SRobert Mustacchi 
113*8119dad8SRobert Mustacchi /*
114*8119dad8SRobert Mustacchi  * SDRAM Addressing.
115*8119dad8SRobert Mustacchi  */
116*8119dad8SRobert Mustacchi #define	SPD_DDR3_ADDR		0x05
117*8119dad8SRobert Mustacchi #define	SPD_DDR3_ADDR_NROWS(r)		bitx8(r, 5, 3)
118*8119dad8SRobert Mustacchi #define	SPD_DDR3_ADDR_NROWS_BASE	12
119*8119dad8SRobert Mustacchi #define	SPD_DDR3_ADDR_NROWS_MAX		16
120*8119dad8SRobert Mustacchi #define	SPD_DDR3_ADDR_NCOLS(r)		bitx8(r, 2, 0)
121*8119dad8SRobert Mustacchi #define	SPD_DDR3_ADDR_NCOLS_BASE	9
122*8119dad8SRobert Mustacchi #define	SPD_DDR3_ADDR_NCOLS_MAX		12
123*8119dad8SRobert Mustacchi 
124*8119dad8SRobert Mustacchi /*
125*8119dad8SRobert Mustacchi  * Module Nominal Voltage, VDD
126*8119dad8SRobert Mustacchi  */
127*8119dad8SRobert Mustacchi #define	SPD_DDR3_VOLT		0x06
128*8119dad8SRobert Mustacchi #define	SPD_DDR3_VOLT_V1P25_OPER(r)	bitx8(r, 2, 2)
129*8119dad8SRobert Mustacchi #define	SPD_DDR3_VOLT_V1P35_OPER(r)	bitx8(r, 1, 1)
130*8119dad8SRobert Mustacchi #define	SPD_DDR3_VOLT_V1P5_OPER(r)	bitx8(r, 0, 0)
131*8119dad8SRobert Mustacchi 
132*8119dad8SRobert Mustacchi /*
133*8119dad8SRobert Mustacchi  * Module Organization
134*8119dad8SRobert Mustacchi  */
135*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG	0x07
136*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG_NRANKS(r)	bitx(r, 5, 3)
137*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG_NRANKS_1	0
138*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG_NRANKS_2	1
139*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG_NRANKS_3	2
140*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG_NRANKS_4	3
141*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG_NRANKS_8	4
142*8119dad8SRobert Mustacchi #define	SPD_DDR4_MOD_ORG_WIDTH(r)	bitx8(r, 2, 0)
143*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG_WIDTH_BASE	2
144*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_ORG_WIDTH_MAX	32
145*8119dad8SRobert Mustacchi 
146*8119dad8SRobert Mustacchi /*
147*8119dad8SRobert Mustacchi  * Module Memory Bus Width
148*8119dad8SRobert Mustacchi  */
149*8119dad8SRobert Mustacchi #define	SPD_DDR3_BUS_WIDTH	0x08
150*8119dad8SRobert Mustacchi #define	SPD_DDR3_BUS_WIDTH_EXT(r)	bitx8(r, 4, 3)
151*8119dad8SRobert Mustacchi #define	SPD_DDR3_BUS_WIDTH_EXT_NONE	0
152*8119dad8SRobert Mustacchi #define	SPD_DDR3_BUS_WIDTH_EXT_8b	1
153*8119dad8SRobert Mustacchi #define	SPD_DDR3_BUS_WIDTH_PRI(r)	bitx8(r, 2, 0)
154*8119dad8SRobert Mustacchi #define	SPD_DDR3_BUS_WIDTH_PRI_BASE	3
155*8119dad8SRobert Mustacchi #define	SPD_DDR3_BUS_WIDTH_PRI_MAX	64
156*8119dad8SRobert Mustacchi 
157*8119dad8SRobert Mustacchi /*
158*8119dad8SRobert Mustacchi  * Fine Timebase (FTB) Dividend / Divisor. While LPDDR3+ and DDR4+ use fixed
159*8119dad8SRobert Mustacchi  * timebases, DDR3 does not and the fine time base is defined as a divisor and
160*8119dad8SRobert Mustacchi  * dividend.
161*8119dad8SRobert Mustacchi  */
162*8119dad8SRobert Mustacchi #define	SPD_DDR3_FTB		0x09
163*8119dad8SRobert Mustacchi #define	SPD_DDR3_FTB_DIVIDEND(r)	bitx8(r, 7, 4)
164*8119dad8SRobert Mustacchi #define	SPD_DDR3_FTB_DIVISOR(r)		bitx8(r, 3, 0)
165*8119dad8SRobert Mustacchi #define	SPD_DDR3_FTB_PS		1
166*8119dad8SRobert Mustacchi 
167*8119dad8SRobert Mustacchi /*
168*8119dad8SRobert Mustacchi  * Medium Timebase (MTB) Dividend and Divisor. Like the FTB, this is split into
169*8119dad8SRobert Mustacchi  * two different values. DDR3 only defines a single valid MTB value, a dividend
170*8119dad8SRobert Mustacchi  * of 1 and a divisor of 8 meaning that the MTB is 125 ps.
171*8119dad8SRobert Mustacchi  */
172*8119dad8SRobert Mustacchi #define	SPD_DDR3_MTB_DIVIDEND	0x0a
173*8119dad8SRobert Mustacchi #define	SPD_DDR3_MTB_DIVISOR	0x0b
174*8119dad8SRobert Mustacchi #define	SPD_DDR3_MTB_PS		125
175*8119dad8SRobert Mustacchi #define	SPD_DDR3_MTB_125PS_DIVIDEND	1
176*8119dad8SRobert Mustacchi #define	SPD_DDR3_MTB_125PS_DIVISOR	8
177*8119dad8SRobert Mustacchi 
178*8119dad8SRobert Mustacchi /*
179*8119dad8SRobert Mustacchi  * SDRAM Minimum Cycle Time t~CK~min. This is only in units of MTB.
180*8119dad8SRobert Mustacchi  * Fine offset for ^
181*8119dad8SRobert Mustacchi  */
182*8119dad8SRobert Mustacchi #define	SPD_DDR3_TCK_MIN	0x0c
183*8119dad8SRobert Mustacchi #define	SPD_DDR3_TCK_MIN_FINE	0x22
184*8119dad8SRobert Mustacchi 
185*8119dad8SRobert Mustacchi /*
186*8119dad8SRobert Mustacchi  * Supported CAS Latencies. There are two bytes that are used to get at what
187*8119dad8SRobert Mustacchi  * speeds are supported. This starts at CL4 and goes up by 1 each time.
188*8119dad8SRobert Mustacchi  */
189*8119dad8SRobert Mustacchi #define	SPD_DDR3_CAS_SUP0	0x0e
190*8119dad8SRobert Mustacchi #define	SPD_DDR3_CAS_SUP1	0x0f
191*8119dad8SRobert Mustacchi #define	SPD_DDR3_CAS_BASE	0x04
192*8119dad8SRobert Mustacchi 
193*8119dad8SRobert Mustacchi /*
194*8119dad8SRobert Mustacchi  * Minimum CAS Latency Time t~AA~min.
195*8119dad8SRobert Mustacchi  * Fine Offset for ^
196*8119dad8SRobert Mustacchi  */
197*8119dad8SRobert Mustacchi #define	SPD_DDR3_TAA_MIN	0x10
198*8119dad8SRobert Mustacchi #define	SPD_DDR3_TAA_MIN_FINE	0x23
199*8119dad8SRobert Mustacchi 
200*8119dad8SRobert Mustacchi /*
201*8119dad8SRobert Mustacchi  * Minimum Write Recovery Time t~WR~min.
202*8119dad8SRobert Mustacchi  */
203*8119dad8SRobert Mustacchi #define	SPD_DDR3_TWR_MIN	0x11
204*8119dad8SRobert Mustacchi 
205*8119dad8SRobert Mustacchi /*
206*8119dad8SRobert Mustacchi  * Minimum RAS to CAS Delay Time t~RCD~min.
207*8119dad8SRobert Mustacchi  * Fine Offset for ^
208*8119dad8SRobert Mustacchi  */
209*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRCD_MIN	0x12
210*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRCD_MIN_FINE	0x24
211*8119dad8SRobert Mustacchi 
212*8119dad8SRobert Mustacchi /*
213*8119dad8SRobert Mustacchi  * Minimum Row Active to Row Active Delay Time t~RRD~min
214*8119dad8SRobert Mustacchi  */
215*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRRD_MIN	0x13
216*8119dad8SRobert Mustacchi 
217*8119dad8SRobert Mustacchi /*
218*8119dad8SRobert Mustacchi  * Minimum Row Precharge Delay Time t~RP~min.
219*8119dad8SRobert Mustacchi  * Fine Offset for ^
220*8119dad8SRobert Mustacchi  */
221*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRP_MIN	0x14
222*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRP_MIN_FINE	0x25
223*8119dad8SRobert Mustacchi 
224*8119dad8SRobert Mustacchi /*
225*8119dad8SRobert Mustacchi  * Upper Nibbles for t~RAS~min and t~RC~min. These are bits 11:9 of
226*8119dad8SRobert Mustacchi  * these values. The lower byte is in subsequent values.
227*8119dad8SRobert Mustacchi  * Minimum Active to Precharge Delay Time t~RAS~min.
228*8119dad8SRobert Mustacchi  * Minimum Active to Active/Refresh Delay Time t~RC~min.
229*8119dad8SRobert Mustacchi  * Fine Offset for ^
230*8119dad8SRobert Mustacchi  */
231*8119dad8SRobert Mustacchi #define	SPD_DDR3_RAS_RC_UPPER	0x15
232*8119dad8SRobert Mustacchi #define	SPD_DDR3_RAS_RC_UPPER_RC(r)	bitx8(r, 7, 4)
233*8119dad8SRobert Mustacchi #define	SPD_DDR3_RAS_RC_UPPER_RAS(r)	bitx8(r, 3, 0)
234*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRAS_MIN	0x16
235*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRC_MIN	0x17
236*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRC_MIN_FINE	0x26
237*8119dad8SRobert Mustacchi 
238*8119dad8SRobert Mustacchi /*
239*8119dad8SRobert Mustacchi  * Minimum Refresh Recovery Delay Time t~RFC~min. This value is split into two
240*8119dad8SRobert Mustacchi  * bytes of MTB.
241*8119dad8SRobert Mustacchi  */
242*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRFC_MIN_LSB	0x18
243*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRFC_MIN_MSB	0x19
244*8119dad8SRobert Mustacchi 
245*8119dad8SRobert Mustacchi /*
246*8119dad8SRobert Mustacchi  * Minimum Internal Write to Read Command Delay t~WTR~min.
247*8119dad8SRobert Mustacchi  */
248*8119dad8SRobert Mustacchi #define	SPD_DDR3_TWTR_MIN	0x1a
249*8119dad8SRobert Mustacchi 
250*8119dad8SRobert Mustacchi /*
251*8119dad8SRobert Mustacchi  * Minimum Internal Read to Precharge Command Delay Time t~RTP~min.
252*8119dad8SRobert Mustacchi  */
253*8119dad8SRobert Mustacchi #define	SPD_DDR3_TRTP_MIN	0x1b
254*8119dad8SRobert Mustacchi 
255*8119dad8SRobert Mustacchi /*
256*8119dad8SRobert Mustacchi  * Upper Nibble for t~FAW~
257*8119dad8SRobert Mustacchi  * Minimum Four Activate Window Delay Time t~FAW~min
258*8119dad8SRobert Mustacchi  */
259*8119dad8SRobert Mustacchi #define	SPD_DDR3_TFAW_NIB	0x1c
260*8119dad8SRobert Mustacchi #define	SPD_DDR3_TFAB_NIB_UPPER_TFAW(r)	bitx8(r, 3, 0)
261*8119dad8SRobert Mustacchi #define	SPD_DDR3_TFAW_LSB	0x1d
262*8119dad8SRobert Mustacchi 
263*8119dad8SRobert Mustacchi /*
264*8119dad8SRobert Mustacchi  * SDRAM Optional Features
265*8119dad8SRobert Mustacchi  */
266*8119dad8SRobert Mustacchi #define	SPD_DDR3_OPT_FEAT	0x1e
267*8119dad8SRobert Mustacchi #define	SPD_DDR3_OPT_FEAT_DLLO(r)	bitx8(r, 7, 7)
268*8119dad8SRobert Mustacchi #define	SPD_DDR3_OPT_FEAT_RZQ7(r)	bitx8(r, 1, 1)
269*8119dad8SRobert Mustacchi #define	SPD_DDR3_OPT_FEAT_RZQ6(r)	bitx8(r, 0, 0)
270*8119dad8SRobert Mustacchi 
271*8119dad8SRobert Mustacchi /*
272*8119dad8SRobert Mustacchi  * SDRAM Thermal and Refresh Options
273*8119dad8SRobert Mustacchi  */
274*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH		0x1f
275*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_PASR_SUP(r)	bitx8(r, 7, 7)
276*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_ODTS_SUP(r)	bitx8(r, 3, 3)
277*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_ASR_SUP(r)	bitx8(r, 2, 2)
278*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_ETR_REF(r)	bitx8(r, 1, 1)
279*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_ETR_REF_2X	0
280*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_ETR_REF_1X	1
281*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_ETR_TEMP(r)	bitx8(r, 0, 0)
282*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_ETR_TEMP_85C	0
283*8119dad8SRobert Mustacchi #define	SPD_DDR3_REFRESH_ETR_TEMP_95C	1
284*8119dad8SRobert Mustacchi 
285*8119dad8SRobert Mustacchi /*
286*8119dad8SRobert Mustacchi  * Module Thermal Sensor. If present, this complies with TSE2002. The remaining
287*8119dad8SRobert Mustacchi  * bits here are used for thermal sensor accuracy and all values are undefined.
288*8119dad8SRobert Mustacchi  */
289*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_THERM	0x20
290*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_THERM_PRES(r)	bitx8(r, 7, 7)
291*8119dad8SRobert Mustacchi 
292*8119dad8SRobert Mustacchi /*
293*8119dad8SRobert Mustacchi  * SDRAM Device Type
294*8119dad8SRobert Mustacchi  */
295*8119dad8SRobert Mustacchi #define	SPD_DDR3_TYPE		0x21
296*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_TYPE(r)		bitx8(r, 7, 7)
297*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_TYPE_MONO		0
298*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_TYPE_NOT		1
299*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_DIE_CNT(r)		bitx8(r, 6, 4)
300*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_DIE_CNT_MIN	1
301*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_DIE_CNT_MAX	8
302*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_SIG_LOAD(r)	bitx8(r, 1, 0)
303*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_SIG_LOAD_UNSPEC	0
304*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_SIG_LOAD_MULTI	1
305*8119dad8SRobert Mustacchi #define	SPD_DDR3_PKG_SIG_LOAD_SINGLE	2
306*8119dad8SRobert Mustacchi 
307*8119dad8SRobert Mustacchi /*
308*8119dad8SRobert Mustacchi  * SDRAM Maximum Active Count
309*8119dad8SRobert Mustacchi  */
310*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC		0x29
311*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAW(r)		bitx8(r, 5, 4)
312*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAW_8192X		0
313*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAW_4096X		1
314*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAW_2048X		2
315*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC(r)		bitx8(r, 3, 0)
316*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC_UNTESTED	0
317*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC_700K		1
318*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC_600K		2
319*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC_500K		3
320*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC_400K		4
321*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC_300K		5
322*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC_200K		6
323*8119dad8SRobert Mustacchi #define	SPD_DDR3_MAC_MAC_UNLIMITED	8
324*8119dad8SRobert Mustacchi 
325*8119dad8SRobert Mustacchi /*
326*8119dad8SRobert Mustacchi  * Module Specific Bytes. There are four annexes defined: UDIMMs, RDIMMs,
327*8119dad8SRobert Mustacchi  * CDIMMs, and LRDIMMS.
328*8119dad8SRobert Mustacchi  */
329*8119dad8SRobert Mustacchi 
330*8119dad8SRobert Mustacchi /*
331*8119dad8SRobert Mustacchi  * Annex K.1 Module Specific Bytes for Unbuffered Memory Module Types.
332*8119dad8SRobert Mustacchi  */
333*8119dad8SRobert Mustacchi 
334*8119dad8SRobert Mustacchi /*
335*8119dad8SRobert Mustacchi  * UDIMM: Raw Card Extension, Module Nominal Height. Bits 7-5 here have a raw
336*8119dad8SRobert Mustacchi  * card revision. The revision extension, bits 7:5, are only valid when the
337*8119dad8SRobert Mustacchi  * value of the normal reference card used in byte 0x3e is set to 0b11 (3).
338*8119dad8SRobert Mustacchi  */
339*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_HEIGHT	0x3c
340*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_HEIGHT_REV(r)	bitx8(r, 7, 5)
341*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_HEIGHT_MM(r)	bitx8(r, 4, 0)
342*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_HEIGHT_LT15MM	0
343*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_HEIGHT_BASE	15
344*8119dad8SRobert Mustacchi 
345*8119dad8SRobert Mustacchi /*
346*8119dad8SRobert Mustacchi  * UDIMM: Module Maximum Thickness. These measure thicknesses in mm,
347*8119dad8SRobert Mustacchi  * with zero value meaning less than or equal to 1mm.
348*8119dad8SRobert Mustacchi  */
349*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_THICK	0x3d
350*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_THICK_BACK(r)	bitx8(r, 7, 4)
351*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_THICK_FRONT(r)	bitx8(r, 3, 0)
352*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_THICK_BASE	1
353*8119dad8SRobert Mustacchi 
354*8119dad8SRobert Mustacchi /*
355*8119dad8SRobert Mustacchi  * UDIMM: Reference Raw Card Used. Bit 7 is used as basically another
356*8119dad8SRobert Mustacchi  * bit for bits 4-0. We do not define each meaning of these bit combinations in
357*8119dad8SRobert Mustacchi  * this header, that is left for tables in the library. When bits 6:5 are 0b11
358*8119dad8SRobert Mustacchi  * (3) then we must add in the reference card value in byte 0x80 to bits 6:5.
359*8119dad8SRobert Mustacchi  */
360*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_REF	0x3e
361*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_REF_EXT(r)	bitx8(r, 7, 7)
362*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_REF_REV(r)	bitx8(r, 6, 5)
363*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_REV_USE_HEIGHT	3
364*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_REF_CARD(r)	bitx8(r, 4, 0)
365*8119dad8SRobert Mustacchi 
366*8119dad8SRobert Mustacchi /*
367*8119dad8SRobert Mustacchi  * UDIMM: Address Mapping from Edge Connector to DRAM.
368*8119dad8SRobert Mustacchi  */
369*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_MAP	0x3f
370*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_MAP_R1(r)	bitx8(r, 0, 0)
371*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_MAP_R1_STD	0
372*8119dad8SRobert Mustacchi #define	SPD_DDR3_UDIMM_MAP_R1_MIRROR	1
373*8119dad8SRobert Mustacchi 
374*8119dad8SRobert Mustacchi /*
375*8119dad8SRobert Mustacchi  * Annex K.2 Module Specific bytes for Registered Memory Module Types.
376*8119dad8SRobert Mustacchi  */
377*8119dad8SRobert Mustacchi 
378*8119dad8SRobert Mustacchi /*
379*8119dad8SRobert Mustacchi  * RDIMM: Raw Card Extension, Module Nominal Height
380*8119dad8SRobert Mustacchi  * RDIMM: Module Maximum Thickness
381*8119dad8SRobert Mustacchi  * RDIMM: Reference Raw Card Used
382*8119dad8SRobert Mustacchi  *
383*8119dad8SRobert Mustacchi  * These have the same definitions as the DDR3 UDIMM.
384*8119dad8SRobert Mustacchi  */
385*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_HEIGHT	0x3c
386*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_THICK	0x3d
387*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_REF	0x3e
388*8119dad8SRobert Mustacchi 
389*8119dad8SRobert Mustacchi /*
390*8119dad8SRobert Mustacchi  * RDIMM: DIMM Module Attributes
391*8119dad8SRobert Mustacchi  */
392*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_ATTR	0x3f
393*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_ATTR_NROWS(r)	bitx8(r, 3, 2)
394*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_ATTR_NREGS(r)	bitx8(r, 1, 0)
395*8119dad8SRobert Mustacchi 
396*8119dad8SRobert Mustacchi /*
397*8119dad8SRobert Mustacchi  * RDIMM: Thermal Heat Spreader Solution.
398*8119dad8SRobert Mustacchi  */
399*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_THERM	0x40
400*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_THERM_IMPL(r)	bitx8(r, 7, 7)
401*8119dad8SRobert Mustacchi 
402*8119dad8SRobert Mustacchi /*
403*8119dad8SRobert Mustacchi  * RDIMM: Register Manufacturer JEDEC ID. This contains the JEDEC ID for the
404*8119dad8SRobert Mustacchi  * manufacturer encoded as the number of continuation bytes and then the actual
405*8119dad8SRobert Mustacchi  * code. This works with libjedec_vendor_string.
406*8119dad8SRobert Mustacchi  */
407*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_REG_MFG_ID0	0x41
408*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_REG_MFG_ID1	0x42
409*8119dad8SRobert Mustacchi 
410*8119dad8SRobert Mustacchi /*
411*8119dad8SRobert Mustacchi  * RDIMM: Register Revision Number. This value is just a straight up hex encoded
412*8119dad8SRobert Mustacchi  * value. It's a bit arbitrary. For example, they say 0x31 can be rev 3.1, while
413*8119dad8SRobert Mustacchi  * 0x01 is just revision 1, and 0xB1 is revision B1.
414*8119dad8SRobert Mustacchi  */
415*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_REV	0x43
416*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_REV_UNDEF	0xff
417*8119dad8SRobert Mustacchi 
418*8119dad8SRobert Mustacchi /*
419*8119dad8SRobert Mustacchi  * RDIMM: Register Type
420*8119dad8SRobert Mustacchi  */
421*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_RTYPE	0x44
422*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_RTYPE_TYPE(r)	bitx8(r, 2, 0)
423*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_RTYPE_TYPE_SSTE32882	0
424*8119dad8SRobert Mustacchi 
425*8119dad8SRobert Mustacchi /*
426*8119dad8SRobert Mustacchi  * Byte 69 (0x45) is reserved for future use.
427*8119dad8SRobert Mustacchi  */
428*8119dad8SRobert Mustacchi 
429*8119dad8SRobert Mustacchi /*
430*8119dad8SRobert Mustacchi  * RDIMM: SSTE32882: RC3 / RC2 - Drive Strength, Command/Address. The lower
431*8119dad8SRobert Mustacchi  * nibble is reserved.
432*8119dad8SRobert Mustacchi  */
433*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_CADS	0x46
434*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_CADS_CAA(r)	bitx8(r, 5, 4)
435*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_DS_LIGHT		0
436*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_DS_MODERATE	1
437*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_DS_STRONG	2
438*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_DS_VERY_STRONG	3	/* LRDIMMs only */
439*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_CADS_CAB(r)	bitx8(r, 7, 6)
440*8119dad8SRobert Mustacchi 
441*8119dad8SRobert Mustacchi /*
442*8119dad8SRobert Mustacchi  * RDIMM: SSTE32882: RC5 / RC4 - Drive Strength, Control and Clock
443*8119dad8SRobert Mustacchi  */
444*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_CCDS	0x47
445*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_CCDS_CLK0(r)	bitx8(r, 7, 6)
446*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_CCDS_CLK1(r)	bitx8(r, 5, 4)
447*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_CCDS_CTLB(r)	bitx8(r, 3, 2)
448*8119dad8SRobert Mustacchi #define	SPD_DDR3_RDIMM_CCDS_CTLA(r)	bitx8(r, 1, 0)
449*8119dad8SRobert Mustacchi 
450*8119dad8SRobert Mustacchi /*
451*8119dad8SRobert Mustacchi  * Bytes 72-76 have definitions but must be written as zero and are all
452*8119dad8SRobert Mustacchi  * reserved. As such we don't define any of them. The rest of the section is
453*8119dad8SRobert Mustacchi  * fully reserved.
454*8119dad8SRobert Mustacchi  */
455*8119dad8SRobert Mustacchi 
456*8119dad8SRobert Mustacchi /*
457*8119dad8SRobert Mustacchi  * Annex K.3: Module Specific Bytes for Clocked Memory Module Types
458*8119dad8SRobert Mustacchi  *
459*8119dad8SRobert Mustacchi  * CDIMM: Raw Card Extension, Module Nominal Height
460*8119dad8SRobert Mustacchi  * CDIMM: Module Maximum Thickness
461*8119dad8SRobert Mustacchi  * CDIMM: Reference Raw Card Used
462*8119dad8SRobert Mustacchi  *
463*8119dad8SRobert Mustacchi  * These have the same definitions as the DDR3 UDIMM.
464*8119dad8SRobert Mustacchi  */
465*8119dad8SRobert Mustacchi #define	SPD_DDR3_CDIMM_HEIGHT	0x3c
466*8119dad8SRobert Mustacchi #define	SPD_DDR3_CDIMM_THICK	0x3d
467*8119dad8SRobert Mustacchi #define	SPD_DDR3_CDIMM_REF	0x3e
468*8119dad8SRobert Mustacchi 
469*8119dad8SRobert Mustacchi /*
470*8119dad8SRobert Mustacchi  * Annex K.4: Module Specific Bytes for Load Reduced Memory Module Types
471*8119dad8SRobert Mustacchi  */
472*8119dad8SRobert Mustacchi 
473*8119dad8SRobert Mustacchi /*
474*8119dad8SRobert Mustacchi  * LRDIMM: Raw Card Extension, Module Nominal Height
475*8119dad8SRobert Mustacchi  * LRDIMM: Module Maximum Thickness
476*8119dad8SRobert Mustacchi  * LRDIMM: Reference Raw Card Used
477*8119dad8SRobert Mustacchi  *
478*8119dad8SRobert Mustacchi  * These have the same definitions as the DDR3 UDIMM.
479*8119dad8SRobert Mustacchi  */
480*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_HEIGHT	0x3c
481*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_THICK	0x3d
482*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_REF	0x3e
483*8119dad8SRobert Mustacchi 
484*8119dad8SRobert Mustacchi /*
485*8119dad8SRobert Mustacchi  * LRDIMM: Module Attributes
486*8119dad8SRobert Mustacchi  */
487*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR	0x3f
488*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_HS(r)	bitx8(r, 7, 7)
489*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_RN(r)	bitx8(r, 5, 5)
490*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_RN_CONTIG	0
491*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_RN_EVEN	1
492*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_ORIENT(r)	bitx8(r, 4, 4)
493*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_ORIENT_VERT	0
494*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_ORIENT_HORIZ	1
495*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_NROWS(r)	bitx8(r, 3, 2)
496*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_MIR(r)	bitx8(r, 1, 0)
497*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_MIR_ALL_NONE	0
498*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ATTR_MIR_ODD_ARE	1
499*8119dad8SRobert Mustacchi 
500*8119dad8SRobert Mustacchi /*
501*8119dad8SRobert Mustacchi  * LRDIMM: Memory Buffer Revision Number
502*8119dad8SRobert Mustacchi  * LRDIMM: Memory Buffer Manufacturer ID Code
503*8119dad8SRobert Mustacchi  */
504*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MB_REV	0x40
505*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MB_MFG_ID0	0x41
506*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MB_MFG_ID1	0x42
507*8119dad8SRobert Mustacchi 
508*8119dad8SRobert Mustacchi /*
509*8119dad8SRobert Mustacchi  * LRDIMM: F0RC3 / F0RC2 - Timing Control & Drive Strength, Address/Command &
510*8119dad8SRobert Mustacchi  * QxCS_n
511*8119dad8SRobert Mustacchi  *
512*8119dad8SRobert Mustacchi  * Drive strength values and encodings are shared with RDIMMs.
513*8119dad8SRobert Mustacchi  */
514*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS	0x43
515*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS_QxCS(r)	bitx8(r, 7, 6)
516*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS_AC(r)	bitx8(r, 5, 4)
517*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS_SWAP(r)	bitx8(r, 1, 1)
518*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS_SWAP_NONE	0
519*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS_SWAP_R15	1
520*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS_ACPL(r)	bitx8(r, 0, 0)
521*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS_ACPL_STD		0
522*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_TCDS_ACPL_F1RC12	1
523*8119dad8SRobert Mustacchi 
524*8119dad8SRobert Mustacchi /*
525*8119dad8SRobert Mustacchi  * LRDIMM: F0RC5 / F0RC4 - Drive Strength, QxODT & QxCKE and Clock
526*8119dad8SRobert Mustacchi  */
527*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_CKDS	0x44
528*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_CKDS_Y0Y2(r)	bitx8(r, 7, 6)
529*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_CKDS_Y1Y3(r)	bitx8(r, 5, 4)
530*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_CKDS_CKE(r)	bitx8(r, 3, 2)
531*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_CKDS_ODT(r)	bitx8(r, 1, 0)
532*8119dad8SRobert Mustacchi 
533*8119dad8SRobert Mustacchi /*
534*8119dad8SRobert Mustacchi  * LRDIMM: F1RC11 / F1RC8 - Extended Delay for Clocks, QxCS_n and QxODT & QxCKE
535*8119dad8SRobert Mustacchi  *
536*8119dad8SRobert Mustacchi  * Delay measures are defined in terms of 1/128 clock cycles.
537*8119dad8SRobert Mustacchi  */
538*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_EXTD	0x45
539*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_EXTD_CKE(r)	bitx8(r, 7, 6)
540*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_EXTD_ODT(r)	bitx8(r, 5, 4)
541*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_EXTD_CS(r)	bitx8(r, 3, 2)
542*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_EXTD_Y(r)	bitx8(r, 1, 0)
543*8119dad8SRobert Mustacchi 
544*8119dad8SRobert Mustacchi /*
545*8119dad8SRobert Mustacchi  * LRDIMM: F1RC13 / F1RC12 - Additive Delay for QxCS and QxCA
546*8119dad8SRobert Mustacchi  *
547*8119dad8SRobert Mustacchi  * Values are shared between this and the next registers. The Y value delay
548*8119dad8SRobert Mustacchi  * controls are bit 0 in SPD_DDR3_LRDIMM_TCDS_ACPL.
549*8119dad8SRobert Mustacchi  */
550*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_CSY	0x46
551*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_CSY_CS_EN(r)	bitx8(r, 7, 7)
552*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_CSY_CS(r)		bitx8(r, 6, 4)
553*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_CSY_Y(r)		bitx8(r, 2, 0)
554*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADD_BASE		8
555*8119dad8SRobert Mustacchi 
556*8119dad8SRobert Mustacchi /*
557*8119dad8SRobert Mustacchi  * LRDIMM: F1RC15 / F1RC14 - Additive Delay for QxODT and QxCKE
558*8119dad8SRobert Mustacchi  */
559*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_ODT	0x47
560*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_ODT_CKE_EN(r)	bitx8(r, 7, 7)
561*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_ODT_CKE(r)		bitx8(r, 6, 4)
562*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_ODT_ODT_EN(r)	bitx8(r, 3, 3)
563*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ADDD_ODT_ODT(r)		bitx8(r, 2, 0)
564*8119dad8SRobert Mustacchi 
565*8119dad8SRobert Mustacchi /*
566*8119dad8SRobert Mustacchi  * This constant represents the gap between a register and its corresponding
567*8119dad8SRobert Mustacchi  * speed variants. This section of LRDIMM data has a version for 800, 133, and
568*8119dad8SRobert Mustacchi  * 1866 which are all 6 registers apart.
569*8119dad8SRobert Mustacchi  */
570*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_STRIDE	6
571*8119dad8SRobert Mustacchi 
572*8119dad8SRobert Mustacchi /*
573*8119dad8SRobert Mustacchi  * LRDIMM: F3RC9 / F3RC8 - DRAM Interface MDQ Termination and Drive Strength
574*8119dad8SRobert Mustacchi  * <= 1066
575*8119dad8SRobert Mustacchi  * LRDIMM: F3RC9 / F3RC8 - DRAM Interface MDQ Termination and Drive Strength
576*8119dad8SRobert Mustacchi  * >= 1333 <= 1600
577*8119dad8SRobert Mustacchi  * LRDIMM: F3RC9 / F3RC8 - DRAM Interface MDQ Termination and Drive Strength
578*8119dad8SRobert Mustacchi  * >= 1866 <= 2133
579*8119dad8SRobert Mustacchi  */
580*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_800		0x48
581*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_1333	0x4e
582*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_1866	0x54
583*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_DS(r)	bitx8(r, 6, 4)
584*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_DS_40R	0
585*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_DS_34R	1
586*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_DS_48R	2
587*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_DS_27R	3
588*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_DS_20R	4
589*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_ODT(r)	bitx8(r, 2, 0)
590*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_ODT_DIS	0
591*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_ODT_60R	1
592*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_ODT_120R	2
593*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_ODT_40R	3
594*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_ODT_30R	5
595*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_ODT_240R	6
596*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MDQ_ODT_80R	7
597*8119dad8SRobert Mustacchi 
598*8119dad8SRobert Mustacchi /*
599*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 0/1 R/W QxODT Control <= 1066
600*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 2/3 R/W QxODT Control <= 1066
601*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 4/5 R/W QxODT Control <= 1066
602*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 6/7 R/W QxODT Control <= 1066
603*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 0/1 R/W QxODT Control >= 1333 <= 1600
604*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 2/3 R/W QxODT Control >= 1333 <= 1600
605*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 4/5 R/W QxODT Control >= 1333 <= 1600
606*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 6/7 R/W QxODT Control >= 1333 <= 1600
607*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 0/1 R/W QxODT Control >= 1866 <= 2133
608*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 2/3 R/W QxODT Control >= 1866 <= 2133
609*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 4/5 R/W QxODT Control >= 1866 <= 2133
610*8119dad8SRobert Mustacchi  * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 6/7 R/W QxODT Control >= 1866 <= 2133
611*8119dad8SRobert Mustacchi  *
612*8119dad8SRobert Mustacchi  * These registers all have the same layout, just different targeted ranks.
613*8119dad8SRobert Mustacchi  */
614*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R0_800	0x49
615*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R2_800	0x4a
616*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R4_800	0x4b
617*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R6_800	0x4c
618*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R0_1333	0x4f
619*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R2_1333	0x50
620*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R4_1333	0x51
621*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R6_1333	0x52
622*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R0_1866	0x55
623*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R2_1866	0x56
624*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R4_1866	0x57
625*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R6_1866	0x58
626*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R1_ODT1_WR(r)	bitx8(r, 7, 7)
627*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R1_ODT0_WR(r)	bitx8(r, 6, 6)
628*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R0_ODT1_WR(r)	bitx8(r, 5, 5)
629*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R0_ODT0_WR(r)	bitx8(r, 4, 4)
630*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R1_ODT1_RD(r)	bitx8(r, 3, 3)
631*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R1_ODT0_RD(r)	bitx8(r, 2, 2)
632*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R0_ODT1_RD(r)	bitx8(r, 1, 1)
633*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_ODT_R0_ODT0_RD(r)	bitx8(r, 0, 0)
634*8119dad8SRobert Mustacchi 
635*8119dad8SRobert Mustacchi /*
636*8119dad8SRobert Mustacchi  * LRDIMM: MR1,2 <= 1066
637*8119dad8SRobert Mustacchi  * LRDIMM: MR1,2 >= 1333 <= 1600
638*8119dad8SRobert Mustacchi  * LRDIMM: MR1,2 >= 1866 <= 2133
639*8119dad8SRobert Mustacchi  */
640*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_800		0x4d
641*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_1333	0x53
642*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_1866	0x59
643*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_WR(r)	bitx8(r, 7, 6)
644*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_WR_DIS	0
645*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_WR_60R	1
646*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_WR_120R	2
647*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_NOM(r)	bitx8(r, 4, 2)
648*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_NOM_DIS	0
649*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_NOM_60R	1
650*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_NOM_120R	2
651*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_NOM_40R	3
652*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_NOM_20R	4
653*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_NOM_30R	5
654*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_IMP(r)	bitx8(r, 1, 0)
655*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_IMP_40R	0
656*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_RTT_IMP_34R	1
657*8119dad8SRobert Mustacchi 
658*8119dad8SRobert Mustacchi /*
659*8119dad8SRobert Mustacchi  * LRDIMM: Minimum Module Delay Time for 1.5V
660*8119dad8SRobert Mustacchi  * LRDIMM: Maximum Module Delay Time for 1.5V
661*8119dad8SRobert Mustacchi  * LRDIMM: Minimum Module Delay Time for 1.35V
662*8119dad8SRobert Mustacchi  * LRDIMM: Maximum Module Delay Time for 1.35V
663*8119dad8SRobert Mustacchi  * LRDIMM: Minimum Module Delay Time for 1.25V
664*8119dad8SRobert Mustacchi  * LRDIMM: Maximum Module Delay Time for 1.25V
665*8119dad8SRobert Mustacchi  */
666*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MIN_DELAY_1V5	0x5a
667*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MAX_DELAY_1V5	0x5b
668*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MIN_DELAY_1V35	0x5c
669*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MAX_DELAY_1V35	0x5d
670*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MIN_DELAY_1V25	0x5e
671*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_MAX_DELAY_1V25	0x5f
672*8119dad8SRobert Mustacchi 
673*8119dad8SRobert Mustacchi /*
674*8119dad8SRobert Mustacchi  * LRDIMM: Memory Buffer Personality Bytes
675*8119dad8SRobert Mustacchi  */
676*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_PERS	0x66
677*8119dad8SRobert Mustacchi #define	SPD_DDR3_LRDIMM_PERS_NBYTES	15
678*8119dad8SRobert Mustacchi 
679*8119dad8SRobert Mustacchi 
680*8119dad8SRobert Mustacchi /*
681*8119dad8SRobert Mustacchi  * S2.3 Unique Module ID Bytes. This is a two byte JEP-108 style ID.
682*8119dad8SRobert Mustacchi  */
683*8119dad8SRobert Mustacchi #define	SPD_DDR3_MFG_MOD_ID0	0x75
684*8119dad8SRobert Mustacchi #define	SPD_DDR3_MFG_MOD_ID1	0x76
685*8119dad8SRobert Mustacchi 
686*8119dad8SRobert Mustacchi /*
687*8119dad8SRobert Mustacchi  * Module Manufacturing Location
688*8119dad8SRobert Mustacchi  */
689*8119dad8SRobert Mustacchi #define	SPD_DDR3_MFG_LOC	0x77
690*8119dad8SRobert Mustacchi 
691*8119dad8SRobert Mustacchi /*
692*8119dad8SRobert Mustacchi  * Module Manufacturing Date. Encoded as two BCD bytes for the year and week.
693*8119dad8SRobert Mustacchi  */
694*8119dad8SRobert Mustacchi #define	SPD_DDR3_MFG_YEAR	0x78
695*8119dad8SRobert Mustacchi #define	SPD_DDR3_MFG_WEEK	0x79
696*8119dad8SRobert Mustacchi 
697*8119dad8SRobert Mustacchi /*
698*8119dad8SRobert Mustacchi  * Module Serial Number
699*8119dad8SRobert Mustacchi  */
700*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_SN		0x7a
701*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_SN_LEN	4
702*8119dad8SRobert Mustacchi 
703*8119dad8SRobert Mustacchi /*
704*8119dad8SRobert Mustacchi  * SPD Cyclical Redundancy Code (CRC)
705*8119dad8SRobert Mustacchi  */
706*8119dad8SRobert Mustacchi #define	SPD_DDR3_CRC_LSB	0x7e
707*8119dad8SRobert Mustacchi #define	SPD_DDR3_CRC_MSB	0x7f
708*8119dad8SRobert Mustacchi 
709*8119dad8SRobert Mustacchi /*
710*8119dad8SRobert Mustacchi  * Module Part Number
711*8119dad8SRobert Mustacchi  */
712*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_PN		0x80
713*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_PN_LEN	18
714*8119dad8SRobert Mustacchi 
715*8119dad8SRobert Mustacchi /*
716*8119dad8SRobert Mustacchi  * Module Revision Code
717*8119dad8SRobert Mustacchi  */
718*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_REV	0x92
719*8119dad8SRobert Mustacchi #define	SPD_DDR3_MOD_REV_LEN	2
720*8119dad8SRobert Mustacchi 
721*8119dad8SRobert Mustacchi /*
722*8119dad8SRobert Mustacchi  * DRAM Manufacturer ID Code. This is a two byte JEP-108 style ID.
723*8119dad8SRobert Mustacchi  */
724*8119dad8SRobert Mustacchi #define	SPD_DDR3_MFG_DRAM_ID0	0x94
725*8119dad8SRobert Mustacchi #define	SPD_DDR3_MFG_DRAM_ID1	0x95
726*8119dad8SRobert Mustacchi 
727*8119dad8SRobert Mustacchi /*
728*8119dad8SRobert Mustacchi  * The remaining portions of this are defined for the manufacturer's and end
729*8119dad8SRobert Mustacchi  * user's use.
730*8119dad8SRobert Mustacchi  */
731*8119dad8SRobert Mustacchi 
732*8119dad8SRobert Mustacchi #ifdef __cplusplus
733*8119dad8SRobert Mustacchi }
734*8119dad8SRobert Mustacchi #endif
735*8119dad8SRobert Mustacchi 
736*8119dad8SRobert Mustacchi #endif /* _SPD_DDR3_H */
737