xref: /illumos-gate/usr/src/test/util-tests/tests/libjedec/hex2spd/libjedec_hex2spd_ddr3.c (revision 1ddc0273b2ca46ac2b55efc357739b7c4f8cafb1)
1 /*
2  * This file and its contents are supplied under the terms of the
3  * Common Development and Distribution License ("CDDL"), version 1.0.
4  * You may only use this file in accordance with the terms of version
5  * 1.0 of the CDDL.
6  *
7  * A full copy of the text of the CDDL should have accompanied this
8  * source.  A copy of the CDDL is also available via the Internet at
9  * http://www.illumos.org/license/CDDL.
10  */
11 
12 /*
13  * Copyright 2024 Oxide Computer Company
14  */
15 
16 /*
17  * DDR3 SPD tests
18  */
19 
20 #include <libjedec.h>
21 #include "libjedec_hex2spd.h"
22 
23 const hex2spd_test_t samsung_ddr3_rdimm = {
24 	.ht_file = "ddr3/M393B4G70BM0-CMA09",
25 	.ht_checks = { {
26 		.hs_key = SPD_KEY_DRAM_TYPE,
27 		.hs_type = DATA_TYPE_UINT32,
28 		.hs_val = { .hs_u32 = SPD_DT_DDR3_SDRAM }
29 	}, {
30 		.hs_key = SPD_KEY_MOD_TYPE,
31 		.hs_type = DATA_TYPE_UINT32,
32 		.hs_val = { .hs_u32 = SPD_MOD_TYPE_RDIMM }
33 	}, {
34 		.hs_key = SPD_KEY_NBYTES_TOTAL,
35 		.hs_type = DATA_TYPE_UINT32,
36 		.hs_val = { .hs_u32 = 256 }
37 	}, {
38 		.hs_key = SPD_KEY_NBYTES_USED,
39 		.hs_type = DATA_TYPE_UINT32,
40 		.hs_val = { .hs_u32 = 176 }
41 	}, {
42 		.hs_key = SPD_KEY_CRC_DDR3_LEN,
43 		.hs_type = DATA_TYPE_UINT32,
44 		.hs_val = { .hs_u32 = 117 }
45 	}, {
46 		.hs_key = SPD_KEY_REV_ENC,
47 		.hs_type = DATA_TYPE_UINT32,
48 		.hs_val = { .hs_u32 = 1 }
49 	}, {
50 		.hs_key = SPD_KEY_REV_ADD,
51 		.hs_type = DATA_TYPE_UINT32,
52 		.hs_val = { .hs_u32 = 1 }
53 	}, {
54 		.hs_key = SPD_KEY_DIE_SIZE,
55 		.hs_type = DATA_TYPE_UINT64,
56 		.hs_val = { .hs_u64 = 4ULL * 1024ULL * 1024ULL * 1024ULL }
57 	}, {
58 		.hs_key = SPD_KEY_NBGRP_BITS,
59 		.hs_type = DATA_TYPE_UINT32,
60 		.hs_val = { .hs_u32 = 0 }
61 	}, {
62 		.hs_key = SPD_KEY_NBANK_BITS,
63 		.hs_type = DATA_TYPE_UINT32,
64 		.hs_val = { .hs_u32 = 3 }
65 	}, {
66 		.hs_key = SPD_KEY_NROW_BITS,
67 		.hs_type = DATA_TYPE_UINT32,
68 		.hs_val = { .hs_u32 = 16 }
69 	}, {
70 		.hs_key = SPD_KEY_NCOL_BITS,
71 		.hs_type = DATA_TYPE_UINT32,
72 		.hs_val = { .hs_u32 = 11 }
73 	}, {
74 		.hs_key = SPD_KEY_NOM_VDD,
75 		.hs_type = DATA_TYPE_UINT32_ARRAY,
76 		.hs_val = { .hs_u32a = { .ha_nval = 1, .ha_vals = { 1500 } } },
77 	}, {
78 		.hs_key = SPD_KEY_DRAM_WIDTH,
79 		.hs_type = DATA_TYPE_UINT32,
80 		.hs_val = { .hs_u32 = 4 }
81 	}, {
82 		.hs_key = SPD_KEY_NRANKS,
83 		.hs_type = DATA_TYPE_UINT32,
84 		.hs_val = { .hs_u32 = 4 }
85 	}, {
86 		.hs_key = SPD_KEY_NSUBCHAN,
87 		.hs_type = DATA_TYPE_UINT32,
88 		.hs_val = { .hs_u32 = 1 },
89 	}, {
90 		.hs_key = SPD_KEY_DRAM_NCHAN,
91 		.hs_type = DATA_TYPE_UINT32,
92 		.hs_val = { .hs_u32 = 1 },
93 	}, {
94 		.hs_key = SPD_KEY_DATA_WIDTH,
95 		.hs_type = DATA_TYPE_UINT32,
96 		.hs_val = { .hs_u32 = 64 },
97 	}, {
98 		.hs_key = SPD_KEY_ECC_WIDTH,
99 		.hs_type = DATA_TYPE_UINT32,
100 		.hs_val = { .hs_u32 = 8 },
101 	}, {
102 		.hs_key = SPD_KEY_FTB,
103 		.hs_type = DATA_TYPE_UINT32,
104 		.hs_val = { .hs_u32 = 1 },
105 	}, {
106 		.hs_key = SPD_KEY_MTB,
107 		.hs_type = DATA_TYPE_UINT32,
108 		.hs_val = { .hs_u32 = 125 },
109 	}, {
110 		.hs_key = SPD_KEY_TCKAVG_MIN,
111 		.hs_type = DATA_TYPE_UINT64,
112 		.hs_val = { .hs_u64 = 1071 },
113 	}, {
114 		.hs_key = SPD_KEY_CAS,
115 		.hs_type = DATA_TYPE_UINT32_ARRAY,
116 		.hs_val = { .hs_u32a = { .ha_nval = 7,
117 		    .ha_vals = { 6, 7, 8, 9, 10, 11, 13 } } },
118 	}, {
119 		.hs_key = SPD_KEY_TAA_MIN,
120 		.hs_type = DATA_TYPE_UINT64,
121 		.hs_val = { .hs_u64 = 13125 },
122 	}, {
123 		.hs_key = SPD_KEY_TWR_MIN,
124 		.hs_type = DATA_TYPE_UINT64,
125 		.hs_val = { .hs_u64 = 15000 },
126 	}, {
127 		.hs_key = SPD_KEY_TRCD_MIN,
128 		.hs_type = DATA_TYPE_UINT64,
129 		.hs_val = { .hs_u64 = 13125 },
130 	}, {
131 		.hs_key = SPD_KEY_TRRD_L_MIN,
132 		.hs_type = DATA_TYPE_UINT64,
133 		.hs_val = { .hs_u64 = 5000 },
134 	}, {
135 		.hs_key = SPD_KEY_TRP_MIN,
136 		.hs_type = DATA_TYPE_UINT64,
137 		.hs_val = { .hs_u64 = 13125 },
138 	}, {
139 		.hs_key = SPD_KEY_TRAS_MIN,
140 		.hs_type = DATA_TYPE_UINT64,
141 		.hs_val = { .hs_u64 = 34000 },
142 	}, {
143 		.hs_key = SPD_KEY_TRC_MIN,
144 		.hs_type = DATA_TYPE_UINT64,
145 		.hs_val = { .hs_u64 = 47125 },
146 	}, {
147 		.hs_key = SPD_KEY_TRFC1_MIN,
148 		.hs_type = DATA_TYPE_UINT64,
149 		.hs_val = { .hs_u64 = 260000 },
150 	}, {
151 		.hs_key = SPD_KEY_TWTRS_MIN,
152 		.hs_type = DATA_TYPE_UINT64,
153 		.hs_val = { .hs_u64 = 7500 },
154 	}, {
155 		.hs_key = SPD_KEY_TRTP,
156 		.hs_type = DATA_TYPE_UINT64,
157 		.hs_val = { .hs_u64 = 7500 },
158 	}, {
159 		.hs_key = SPD_KEY_TFAW,
160 		.hs_type = DATA_TYPE_UINT64,
161 		.hs_val = { .hs_u64 = 27000 },
162 	}, {
163 		.hs_key = SPD_KEY_DDR3_FEAT,
164 		.hs_type = DATA_TYPE_UINT32,
165 		.hs_val = { .hs_u32 = SPD_DDR3_FEAT_DLL_OFF |
166 		    SPD_DDR3_FEAT_RZQ_7 | SPD_DDR3_FEAT_RZQ_6 },
167 	}, {
168 		.hs_key = SPD_KEY_DEVS,
169 		.hs_type = DATA_TYPE_UINT32,
170 		.hs_val = { .hs_u32 = SPD_DEVICE_SPD | SPD_DEVICE_TEMP_1 |
171 		    SPD_DEVICE_HS | SPD_DEVICE_RCD }
172 	}, {
173 		.hs_key = SPD_KEY_MOD_OPER_TEMP,
174 		.hs_type = DATA_TYPE_UINT32,
175 		.hs_val = { .hs_u32 = JEDEC_TEMP_CASE_XT },
176 	}, {
177 		.hs_key = SPD_KEY_PKG_NOT_MONO,
178 		.hs_type = DATA_TYPE_BOOLEAN,
179 		.hs_val = { .hs_bool = true }
180 	}, {
181 		.hs_key = SPD_KEY_MOD_HEIGHT,
182 		.hs_type = DATA_TYPE_UINT32,
183 		.hs_val = { .hs_u32 = 30 }
184 	}, {
185 		.hs_key = SPD_KEY_MOD_FRONT_THICK,
186 		.hs_type = DATA_TYPE_UINT32,
187 		.hs_val = { .hs_u32 = 4 }
188 	}, {
189 		.hs_key = SPD_KEY_MOD_FRONT_THICK,
190 		.hs_type = DATA_TYPE_UINT32,
191 		.hs_val = { .hs_u32 = 4 }
192 	}, {
193 		/*
194 		 * The datasheet comment has a hex value of 0x25, but says it's
195 		 * revision 1, card AB, which would have a value of 0x35. As
196 		 * such we treat this as a datasheet bug and use the hex value
197 		 * which means card F.
198 		 */
199 		.hs_key = SPD_KEY_MOD_REF_DESIGN,
200 		.hs_type = DATA_TYPE_STRING,
201 		.hs_val = { .hs_str = "F" }
202 	}, {
203 		.hs_key = SPD_KEY_MOD_DESIGN_REV,
204 		.hs_type = DATA_TYPE_UINT32,
205 		.hs_val = { .hs_u32 = 1 }
206 	}, {
207 		.hs_key = SPD_KEY_MOD_NROWS,
208 		.hs_type = DATA_TYPE_UINT32,
209 		.hs_val = { .hs_u32 = 2 }
210 	}, {
211 		.hs_key = SPD_KEY_MOD_NREGS,
212 		.hs_type = DATA_TYPE_UINT32,
213 		.hs_val = { .hs_u32 = 2 }
214 	}, {
215 		.hs_key = SPD_KEY_DEV_RCD_MFG_NAME,
216 		.hs_type = DATA_TYPE_STRING,
217 		.hs_val = { .hs_str = "Marvell (Inphi)" }
218 	}, {
219 		.hs_key = SPD_KEY_DEV_RCD_REV,
220 		.hs_type = DATA_TYPE_STRING,
221 		.hs_val = { .hs_str = "21" }
222 	}, {
223 		.hs_key = SPD_KEY_DEV_RCD_TYPE,
224 		.hs_type = DATA_TYPE_UINT32,
225 		.hs_val = { .hs_u32 = SPD_RCD_T_SSTE32882 }
226 	}, {
227 		.hs_key = SPD_KEY_DDR3_RCD_DS_CAA,
228 		.hs_type = DATA_TYPE_UINT32,
229 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE }
230 	}, {
231 		.hs_key = SPD_KEY_DDR3_RCD_DS_CAB,
232 		.hs_type = DATA_TYPE_UINT32,
233 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE }
234 	}, {
235 		.hs_key = SPD_KEY_DDR3_RCD_DS_CTLA,
236 		.hs_type = DATA_TYPE_UINT32,
237 		.hs_val = { .hs_u32 = SPD_DRIVE_LIGHT }
238 	}, {
239 		.hs_key = SPD_KEY_DDR3_RCD_DS_CTLB,
240 		.hs_type = DATA_TYPE_UINT32,
241 		.hs_val = { .hs_u32 = SPD_DRIVE_LIGHT }
242 	}, {
243 		.hs_key = SPD_KEY_DDR3_RCD_DS_Y0,
244 		.hs_type = DATA_TYPE_UINT32,
245 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE }
246 	}, {
247 		.hs_key = SPD_KEY_DDR3_RCD_DS_Y1,
248 		.hs_type = DATA_TYPE_UINT32,
249 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE }
250 	}, {
251 		.hs_key = SPD_KEY_MFG_MOD_MFG_NAME,
252 		.hs_type = DATA_TYPE_STRING,
253 		.hs_val = { .hs_str = "Samsung" }
254 	}, {
255 		.hs_key = SPD_KEY_MFG_MOD_LOC_ID,
256 		.hs_type = DATA_TYPE_UINT32,
257 		.hs_val = { .hs_u32 = 1 }
258 	}, {
259 		.hs_key = SPD_KEY_MFG_MOD_YEAR,
260 		.hs_type = DATA_TYPE_STRING,
261 		.hs_val = { .hs_str = "12" }
262 	}, {
263 		.hs_key = SPD_KEY_MFG_MOD_WEEK,
264 		.hs_type = DATA_TYPE_STRING,
265 		.hs_val = { .hs_str = "19" }
266 	}, {
267 		.hs_key = SPD_KEY_MFG_MOD_SN,
268 		.hs_type = DATA_TYPE_STRING,
269 		.hs_val = { .hs_str = "A22B2E95" }
270 	}, {
271 		.hs_key = SPD_KEY_MFG_MOD_PN,
272 		.hs_type = DATA_TYPE_STRING,
273 		.hs_val = { .hs_str = "M393B4G70BM0-CMA" }
274 	}, {
275 		.hs_key = SPD_KEY_MFG_MOD_REV,
276 		.hs_type = DATA_TYPE_STRING,
277 		.hs_val = { .hs_str = "FEEF" }
278 	}, {
279 		.hs_key = SPD_KEY_MFG_DRAM_MFG_NAME,
280 		.hs_type = DATA_TYPE_STRING,
281 		.hs_val = { .hs_str = "Samsung" }
282 	}, {
283 		.hs_key = NULL,
284 	} }
285 };
286 
287 const hex2spd_test_t micron_ddr3_lrdimm = {
288 	.ht_file = "ddr3/MT36KSZF2G72LDZ-1G6E2A7",
289 	.ht_checks = { {
290 		.hs_key = SPD_KEY_DRAM_TYPE,
291 		.hs_type = DATA_TYPE_UINT32,
292 		.hs_val = { .hs_u32 = SPD_DT_DDR3_SDRAM }
293 	}, {
294 		.hs_key = SPD_KEY_MOD_TYPE,
295 		.hs_type = DATA_TYPE_UINT32,
296 		.hs_val = { .hs_u32 = SPD_MOD_TYPE_LRDIMM }
297 	}, {
298 		.hs_key = SPD_KEY_NBYTES_TOTAL,
299 		.hs_type = DATA_TYPE_UINT32,
300 		.hs_val = { .hs_u32 = 256 }
301 	}, {
302 		.hs_key = SPD_KEY_NBYTES_USED,
303 		.hs_type = DATA_TYPE_UINT32,
304 		.hs_val = { .hs_u32 = 176 }
305 	}, {
306 		.hs_key = SPD_KEY_CRC_DDR3_LEN,
307 		.hs_type = DATA_TYPE_UINT32,
308 		.hs_val = { .hs_u32 = 117 }
309 	}, {
310 		.hs_key = SPD_KEY_REV_ENC,
311 		.hs_type = DATA_TYPE_UINT32,
312 		.hs_val = { .hs_u32 = 1 }
313 	}, {
314 		.hs_key = SPD_KEY_REV_ADD,
315 		.hs_type = DATA_TYPE_UINT32,
316 		.hs_val = { .hs_u32 = 2 }
317 	}, {
318 		.hs_key = SPD_KEY_DIE_SIZE,
319 		.hs_type = DATA_TYPE_UINT64,
320 		.hs_val = { .hs_u64 = 4ULL * 1024ULL * 1024ULL * 1024ULL }
321 	}, {
322 		.hs_key = SPD_KEY_NBGRP_BITS,
323 		.hs_type = DATA_TYPE_UINT32,
324 		.hs_val = { .hs_u32 = 0 }
325 	}, {
326 		.hs_key = SPD_KEY_NBANK_BITS,
327 		.hs_type = DATA_TYPE_UINT32,
328 		.hs_val = { .hs_u32 = 3 }
329 	}, {
330 		.hs_key = SPD_KEY_NROW_BITS,
331 		.hs_type = DATA_TYPE_UINT32,
332 		.hs_val = { .hs_u32 = 16 }
333 	}, {
334 		.hs_key = SPD_KEY_NCOL_BITS,
335 		.hs_type = DATA_TYPE_UINT32,
336 		.hs_val = { .hs_u32 = 10 }
337 	}, {
338 		.hs_key = SPD_KEY_NOM_VDD,
339 		.hs_type = DATA_TYPE_UINT32_ARRAY,
340 		.hs_val = { .hs_u32a = { .ha_nval = 2,
341 		    .ha_vals = { 1500, 1350 } } },
342 	}, {
343 		.hs_key = SPD_KEY_DRAM_WIDTH,
344 		.hs_type = DATA_TYPE_UINT32,
345 		.hs_val = { .hs_u32 = 8 }
346 	}, {
347 		.hs_key = SPD_KEY_NRANKS,
348 		.hs_type = DATA_TYPE_UINT32,
349 		.hs_val = { .hs_u32 = 4 }
350 	}, {
351 		.hs_key = SPD_KEY_NSUBCHAN,
352 		.hs_type = DATA_TYPE_UINT32,
353 		.hs_val = { .hs_u32 = 1 },
354 	}, {
355 		.hs_key = SPD_KEY_DRAM_NCHAN,
356 		.hs_type = DATA_TYPE_UINT32,
357 		.hs_val = { .hs_u32 = 1 },
358 	}, {
359 		.hs_key = SPD_KEY_DATA_WIDTH,
360 		.hs_type = DATA_TYPE_UINT32,
361 		.hs_val = { .hs_u32 = 64 },
362 	}, {
363 		.hs_key = SPD_KEY_ECC_WIDTH,
364 		.hs_type = DATA_TYPE_UINT32,
365 		.hs_val = { .hs_u32 = 8 },
366 	}, {
367 		.hs_key = SPD_KEY_FTB,
368 		.hs_type = DATA_TYPE_UINT32,
369 		.hs_val = { .hs_u32 = 1 },
370 	}, {
371 		.hs_key = SPD_KEY_MTB,
372 		.hs_type = DATA_TYPE_UINT32,
373 		.hs_val = { .hs_u32 = 125 },
374 	}, {
375 		.hs_key = SPD_KEY_TCKAVG_MIN,
376 		.hs_type = DATA_TYPE_UINT64,
377 		.hs_val = { .hs_u64 = 1250 },
378 	}, {
379 		.hs_key = SPD_KEY_CAS,
380 		.hs_type = DATA_TYPE_UINT32_ARRAY,
381 		.hs_val = { .hs_u32a = { .ha_nval = 7,
382 		    .ha_vals = { 5, 6, 7, 8, 9, 10, 11 } } },
383 	}, {
384 		.hs_key = SPD_KEY_TAA_MIN,
385 		.hs_type = DATA_TYPE_UINT64,
386 		.hs_val = { .hs_u64 = 13125 },
387 	}, {
388 		.hs_key = SPD_KEY_TWR_MIN,
389 		.hs_type = DATA_TYPE_UINT64,
390 		.hs_val = { .hs_u64 = 15000 },
391 	}, {
392 		.hs_key = SPD_KEY_TRCD_MIN,
393 		.hs_type = DATA_TYPE_UINT64,
394 		.hs_val = { .hs_u64 = 13125 },
395 	}, {
396 		.hs_key = SPD_KEY_TRRD_L_MIN,
397 		.hs_type = DATA_TYPE_UINT64,
398 		.hs_val = { .hs_u64 = 6000 },
399 	}, {
400 		.hs_key = SPD_KEY_TRP_MIN,
401 		.hs_type = DATA_TYPE_UINT64,
402 		.hs_val = { .hs_u64 = 13125 },
403 	}, {
404 		.hs_key = SPD_KEY_TRAS_MIN,
405 		.hs_type = DATA_TYPE_UINT64,
406 		.hs_val = { .hs_u64 = 35000 },
407 	}, {
408 		.hs_key = SPD_KEY_TRC_MIN,
409 		.hs_type = DATA_TYPE_UINT64,
410 		.hs_val = { .hs_u64 = 48125 },
411 	}, {
412 		.hs_key = SPD_KEY_TRFC1_MIN,
413 		.hs_type = DATA_TYPE_UINT64,
414 		.hs_val = { .hs_u64 = 260000 },
415 	}, {
416 		.hs_key = SPD_KEY_TWTRS_MIN,
417 		.hs_type = DATA_TYPE_UINT64,
418 		.hs_val = { .hs_u64 = 7500 },
419 	}, {
420 		.hs_key = SPD_KEY_TRTP,
421 		.hs_type = DATA_TYPE_UINT64,
422 		.hs_val = { .hs_u64 = 7500 },
423 	}, {
424 		.hs_key = SPD_KEY_TFAW,
425 		.hs_type = DATA_TYPE_UINT64,
426 		.hs_val = { .hs_u64 = 30000 },
427 	}, {
428 		.hs_key = SPD_KEY_DDR3_FEAT,
429 		.hs_type = DATA_TYPE_UINT32,
430 		.hs_val = { .hs_u32 = SPD_DDR3_FEAT_DLL_OFF |
431 		    SPD_DDR3_FEAT_RZQ_7 | SPD_DDR3_FEAT_RZQ_6 |
432 		    SPD_DDR3_FEAT_ASR },
433 	}, {
434 		.hs_key = SPD_KEY_DEVS,
435 		.hs_type = DATA_TYPE_UINT32,
436 		.hs_val = { .hs_u32 = SPD_DEVICE_SPD | SPD_DEVICE_TEMP_1 |
437 		    SPD_DEVICE_HS | SPD_DEVICE_DB }
438 	}, {
439 		.hs_key = SPD_KEY_MOD_OPER_TEMP,
440 		.hs_type = DATA_TYPE_UINT32,
441 		.hs_val = { .hs_u32 = JEDEC_TEMP_CASE_XT },
442 	}, {
443 		.hs_key = SPD_KEY_PKG_NOT_MONO,
444 		.hs_type = DATA_TYPE_BOOLEAN,
445 		.hs_val = { .hs_bool = false }
446 	}, {
447 		.hs_key = SPD_KEY_MAC,
448 		.hs_type = DATA_TYPE_UINT32,
449 		.hs_val = { .hs_u32 = 300000 },
450 	}, {
451 		.hs_key = SPD_KEY_MAW,
452 		.hs_type = DATA_TYPE_UINT32,
453 		.hs_val = { .hs_u32 = 8192 },
454 	}, {
455 		.hs_key = SPD_KEY_MOD_HEIGHT,
456 		.hs_type = DATA_TYPE_UINT32,
457 		.hs_val = { .hs_u32 = 31 }
458 	}, {
459 		.hs_key = SPD_KEY_MOD_FRONT_THICK,
460 		.hs_type = DATA_TYPE_UINT32,
461 		.hs_val = { .hs_u32 = 4 }
462 	}, {
463 		.hs_key = SPD_KEY_MOD_FRONT_THICK,
464 		.hs_type = DATA_TYPE_UINT32,
465 		.hs_val = { .hs_u32 = 4 }
466 	}, {
467 		.hs_key = SPD_KEY_MOD_EDGE_MIRROR,
468 		.hs_type = DATA_TYPE_BOOLEAN,
469 		.hs_val = { .hs_bool = true }
470 	}, {
471 		.hs_key = SPD_KEY_MOD_NROWS,
472 		.hs_type = DATA_TYPE_UINT32,
473 		.hs_val = { .hs_u32 = 2 }
474 	}, {
475 		.hs_key = SPD_KEY_DEV_DB_REV,
476 		.hs_type = DATA_TYPE_STRING,
477 		.hs_val = { .hs_str = "22" }
478 	}, {
479 		.hs_key = SPD_KEY_DDR3_MB_ORIENT,
480 		.hs_type = DATA_TYPE_UINT32,
481 		.hs_val = { .hs_u32 = SPD_ORNT_VERTICAL }
482 	}, {
483 		.hs_key = SPD_KEY_DEV_DB_MFG_NAME,
484 		.hs_type = DATA_TYPE_STRING,
485 		.hs_val = { .hs_str = "Marvell (Inphi)" }
486 	}, {
487 		.hs_key = SPD_KEY_DDR3_MB_DS_CA,
488 		.hs_type = DATA_TYPE_UINT32,
489 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE }
490 	}, {
491 		.hs_key = SPD_KEY_DDR3_MB_DS_CS,
492 		.hs_type = DATA_TYPE_UINT32,
493 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE }
494 	}, {
495 		.hs_key = SPD_KEY_DDR3_MB_DS_Y0,
496 		.hs_type = DATA_TYPE_UINT32,
497 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE }
498 	}, {
499 		.hs_key = SPD_KEY_DDR3_MB_DS_Y1,
500 		.hs_type = DATA_TYPE_UINT32,
501 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE }
502 	}, {
503 		.hs_key = SPD_KEY_DDR3_MB_DS_CKE,
504 		.hs_type = DATA_TYPE_UINT32,
505 		.hs_val = { .hs_u32 = SPD_DRIVE_LIGHT }
506 	}, {
507 		.hs_key = SPD_KEY_DDR3_MB_DS_ODT,
508 		.hs_type = DATA_TYPE_UINT32,
509 		.hs_val = { .hs_u32 = SPD_DRIVE_LIGHT }
510 	}, {
511 		.hs_key = SPD_KEY_DDR3_MDQ_DS,
512 		.hs_type = DATA_TYPE_UINT32_ARRAY,
513 		.hs_val = { .hs_u32a = { .ha_nval = 3,
514 		    .ha_vals = { 34, 34, 34 } } },
515 	}, {
516 		.hs_key = SPD_KEY_DDR3_MDQ_ODT,
517 		.hs_type = DATA_TYPE_UINT32_ARRAY,
518 		.hs_val = { .hs_u32a = { .ha_nval = 3,
519 		    .ha_vals = { 120, 60, 60 } } },
520 	}, {
521 		.hs_key = SPD_KEY_DDR3_MB_R0_ODT0_RD,
522 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
523 		.hs_val = { .hs_ba = { .ha_nval = 3,
524 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
525 	}, {
526 		.hs_key = SPD_KEY_DDR3_MB_R0_ODT1_RD,
527 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
528 		.hs_val = { .hs_ba = { .ha_nval = 3,
529 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
530 	}, {
531 		.hs_key = SPD_KEY_DDR3_MB_R1_ODT0_RD,
532 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
533 		.hs_val = { .hs_ba = { .ha_nval = 3,
534 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
535 	}, {
536 		.hs_key = SPD_KEY_DDR3_MB_R1_ODT1_RD,
537 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
538 		.hs_val = { .hs_ba = { .ha_nval = 3,
539 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
540 	}, {
541 		.hs_key = SPD_KEY_DDR3_MB_R0_ODT0_WR,
542 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
543 		.hs_val = { .hs_ba = { .ha_nval = 3,
544 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
545 	}, {
546 		.hs_key = SPD_KEY_DDR3_MB_R0_ODT1_WR,
547 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
548 		.hs_val = { .hs_ba = { .ha_nval = 3,
549 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
550 	}, {
551 		.hs_key = SPD_KEY_DDR3_MB_R0_ODT0_WR,
552 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
553 		.hs_val = { .hs_ba = { .ha_nval = 3,
554 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
555 	}, {
556 		.hs_key = SPD_KEY_DDR3_MB_R1_ODT0_WR,
557 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
558 		.hs_val = { .hs_ba = { .ha_nval = 3,
559 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
560 	}, {
561 		.hs_key = SPD_KEY_DDR3_MB_R2_ODT0_RD,
562 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
563 		.hs_val = { .hs_ba = { .ha_nval = 3,
564 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
565 	}, {
566 		.hs_key = SPD_KEY_DDR3_MB_R2_ODT1_RD,
567 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
568 		.hs_val = { .hs_ba = { .ha_nval = 3,
569 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
570 	}, {
571 		.hs_key = SPD_KEY_DDR3_MB_R3_ODT0_RD,
572 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
573 		.hs_val = { .hs_ba = { .ha_nval = 3,
574 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
575 	}, {
576 		.hs_key = SPD_KEY_DDR3_MB_R3_ODT1_RD,
577 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
578 		.hs_val = { .hs_ba = { .ha_nval = 3,
579 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
580 	}, {
581 		.hs_key = SPD_KEY_DDR3_MB_R2_ODT0_WR,
582 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
583 		.hs_val = { .hs_ba = { .ha_nval = 3,
584 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
585 	}, {
586 		.hs_key = SPD_KEY_DDR3_MB_R2_ODT1_WR,
587 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
588 		.hs_val = { .hs_ba = { .ha_nval = 3,
589 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
590 	}, {
591 		.hs_key = SPD_KEY_DDR3_MB_R3_ODT0_WR,
592 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
593 		.hs_val = { .hs_ba = { .ha_nval = 3,
594 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
595 	}, {
596 		.hs_key = SPD_KEY_DDR3_MB_R3_ODT1_WR,
597 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
598 		.hs_val = { .hs_ba = { .ha_nval = 3,
599 		    .ha_vals = { B_TRUE, B_TRUE, B_TRUE} } },
600 	}, {
601 		.hs_key = SPD_KEY_DDR3_MB_R4_ODT0_RD,
602 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
603 		.hs_val = { .hs_ba = { .ha_nval = 3,
604 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
605 	}, {
606 		.hs_key = SPD_KEY_DDR3_MB_R5_ODT1_RD,
607 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
608 		.hs_val = { .hs_ba = { .ha_nval = 3,
609 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
610 	}, {
611 		.hs_key = SPD_KEY_DDR3_MB_R6_ODT1_WR,
612 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
613 		.hs_val = { .hs_ba = { .ha_nval = 3,
614 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
615 	}, {
616 		.hs_key = SPD_KEY_DDR3_MB_R7_ODT0_WR,
617 		.hs_type = DATA_TYPE_BOOLEAN_ARRAY,
618 		.hs_val = { .hs_ba = { .ha_nval = 3,
619 		    .ha_vals = { B_FALSE, B_FALSE, B_FALSE } } },
620 	}, {
621 		.hs_key = SPD_KEY_DDR3_DRAM_DS,
622 		.hs_type = DATA_TYPE_UINT32_ARRAY,
623 		.hs_val = { .hs_u32a = { .ha_nval = 3,
624 		    .ha_vals = { 34, 34, 34 } } },
625 	}, {
626 		.hs_key = SPD_KEY_DDR3_RTT_NOM,
627 		.hs_type = DATA_TYPE_UINT32_ARRAY,
628 		.hs_val = { .hs_u32a = { .ha_nval = 3,
629 		    .ha_vals = { 60, 40, 40 } } },
630 	}, {
631 		.hs_key = SPD_KEY_DDR3_RTT_WRT,
632 		.hs_type = DATA_TYPE_UINT32_ARRAY,
633 		.hs_val = { .hs_u32a = { .ha_nval = 3,
634 		    .ha_vals = { 120, 120, 120 } } },
635 	}, {
636 		.hs_key = SPD_KEY_DDR3_MOD_MIN_DELAY,
637 		.hs_type = DATA_TYPE_UINT64_ARRAY,
638 		.hs_val = { .hs_u64a = { .ha_nval = 3,
639 		    .ha_vals = { 0, 8750, 8125 } } },
640 	}, {
641 		.hs_key = SPD_KEY_DDR3_MOD_MAX_DELAY,
642 		.hs_type = DATA_TYPE_UINT64_ARRAY,
643 		.hs_val = { .hs_u64a = { .ha_nval = 3,
644 		    .ha_vals = { 0, 9875, 9125 } } },
645 	}, {
646 		.hs_key = SPD_KEY_DDR3_MB_PERS,
647 		.hs_type = DATA_TYPE_UINT8_ARRAY,
648 		.hs_val = { .hs_u8a = { .ha_nval = 15,
649 		    .ha_vals = { 0x0b, 0x20, 0xe0, 0x01, 0x21, 0x20, 0x01, 0xff,
650 		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
651 	}, {
652 		.hs_key = SPD_KEY_MFG_MOD_MFG_NAME,
653 		.hs_type = DATA_TYPE_STRING,
654 		.hs_val = { .hs_str = "Micron Technology" }
655 	}, {
656 		.hs_key = SPD_KEY_MFG_MOD_LOC_ID,
657 		.hs_type = DATA_TYPE_UINT32,
658 		.hs_val = { .hs_u32 = 3 }
659 	}, {
660 		.hs_key = SPD_KEY_MFG_MOD_YEAR,
661 		.hs_type = DATA_TYPE_STRING,
662 		.hs_val = { .hs_str = "09" }
663 	}, {
664 		.hs_key = SPD_KEY_MFG_MOD_WEEK,
665 		.hs_type = DATA_TYPE_STRING,
666 		.hs_val = { .hs_str = "04" }
667 	}, {
668 		.hs_key = SPD_KEY_MFG_MOD_SN,
669 		.hs_type = DATA_TYPE_STRING,
670 		.hs_val = { .hs_str = "CC94AB07" }
671 	}, {
672 		/*
673 		 * The Micron online SPD information for this part transformed
674 		 * the part number into the form below, eliminating the hyphen,
675 		 * the leading MT, etc.
676 		 */
677 		.hs_key = SPD_KEY_MFG_MOD_PN,
678 		.hs_type = DATA_TYPE_STRING,
679 		.hs_val = { .hs_str = "36KSZ2G72LD1G6E2A7" },
680 	}, {
681 		.hs_key = SPD_KEY_MFG_MOD_REV,
682 		.hs_type = DATA_TYPE_STRING,
683 		.hs_val = { .hs_str = "4532" }
684 	}, {
685 		.hs_key = SPD_KEY_MFG_DRAM_MFG_NAME,
686 		.hs_type = DATA_TYPE_STRING,
687 		.hs_val = { .hs_str = "Micron Technology" }
688 	}, {
689 		.hs_key = NULL,
690 	} }
691 };
692