xref: /illumos-gate/usr/src/test/util-tests/tests/libjedec/hex2spd/libjedec_hex2spd_ddr4.c (revision 8119dad84d6416f13557b0ba8e2aaf9064cbcfd3)
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  * DDR4 SPD tests
18  */
19 
20 #include <libjedec.h>
21 #include "libjedec_hex2spd.h"
22 
23 const hex2spd_test_t micron_ddr4_rdimm = {
24 	.ht_file = "ddr4/36ASF8G72PZ-3G2E1",
25 	.ht_checks = { {
26 		.hs_key = SPD_KEY_DRAM_TYPE,
27 		.hs_type = DATA_TYPE_UINT32,
28 		.hs_val = { .hs_u32 = SPD_DT_DDR4_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_PKG_NOT_MONO,
35 		.hs_type = DATA_TYPE_BOOLEAN,
36 		.hs_val = { .hs_bool = false }
37 	}, {
38 		.hs_key = SPD_KEY_TAA_MIN,
39 		.hs_type = DATA_TYPE_UINT64,
40 		.hs_val = { .hs_u64 = 0x35b6 }
41 	}, {
42 		.hs_key = SPD_KEY_TRC_MIN,
43 		.hs_type = DATA_TYPE_UINT64,
44 		.hs_val = { .hs_u64 = 0xb2b6 }
45 	}, {
46 		.hs_key = SPD_KEY_TRAS_MIN,
47 		.hs_type = DATA_TYPE_UINT64,
48 		.hs_val = { .hs_u64 = 0x7d00 }
49 	}, {
50 		.hs_key = SPD_KEY_TCKAVG_MAX,
51 		.hs_type = DATA_TYPE_UINT64,
52 		.hs_val = { .hs_u64 = 0x640 }
53 	}, {
54 		.hs_key = SPD_KEY_TRFC1_MIN,
55 		.hs_type = DATA_TYPE_UINT64,
56 		.hs_val = { .hs_u64 = 0x55730 }
57 	}, {
58 		.hs_key = SPD_KEY_TRFC2_MIN,
59 		.hs_type = DATA_TYPE_UINT64,
60 		.hs_val = { .hs_u64 = 0x3f7a0 }
61 	}, {
62 		.hs_key = SPD_KEY_TWTRS_MIN,
63 		.hs_type = DATA_TYPE_UINT64,
64 		.hs_val = { .hs_u64 = 0x9c4 }
65 	}, {
66 		.hs_key = SPD_KEY_TWTRL_MIN,
67 		.hs_type = DATA_TYPE_UINT64,
68 		.hs_val = { .hs_u64 = 0x1d4c }
69 	}, {
70 		.hs_key = SPD_KEY_DIE_SIZE,
71 		.hs_type = DATA_TYPE_UINT64,
72 		.hs_val = { .hs_u64 = 16ULL * 1024ULL * 1024ULL * 1024ULL }
73 	}, {
74 		.hs_key = SPD_KEY_DRAM_WIDTH,
75 		.hs_type = DATA_TYPE_UINT32,
76 		.hs_val = { .hs_u32 = 4 },
77 	}, {
78 		.hs_key = SPD_KEY_DATA_WIDTH,
79 		.hs_type = DATA_TYPE_UINT32,
80 		.hs_val = { .hs_u32 = 64 },
81 	}, {
82 		.hs_key = SPD_KEY_NSUBCHAN,
83 		.hs_type = DATA_TYPE_UINT32,
84 		.hs_val = { .hs_u32 = 1 },
85 	},  {
86 		.hs_key = SPD_KEY_ECC_WIDTH,
87 		.hs_type = DATA_TYPE_UINT32,
88 		.hs_val = { .hs_u32 = 8 },
89 	}, {
90 		.hs_key = SPD_KEY_NRANKS,
91 		.hs_type = DATA_TYPE_UINT32,
92 		.hs_val = { .hs_u32 = 2 },
93 	}, {
94 		.hs_key = SPD_KEY_DEV_TEMP_TYPE,
95 		.hs_type = DATA_TYPE_UINT32,
96 		.hs_val = { .hs_u32 = SPD_TEMP_T_TSE2004av },
97 	}, {
98 		.hs_key = SPD_KEY_MFG_MOD_MFG_NAME,
99 		.hs_type = DATA_TYPE_STRING,
100 		.hs_val = { .hs_str = "Micron Technology" }
101 	}, {
102 		.hs_key = SPD_KEY_MFG_MOD_SN,
103 		.hs_type = DATA_TYPE_STRING,
104 		.hs_val = { .hs_str = "32297BC1" }
105 	}, {
106 		.hs_key = SPD_KEY_MFG_MOD_PN,
107 		.hs_type = DATA_TYPE_STRING,
108 		.hs_val = { .hs_str = "36ASF8G72PZ-3G2E1" }
109 	}, {
110 		.hs_key = SPD_KEY_MFG_MOD_REV,
111 		.hs_type = DATA_TYPE_STRING,
112 		.hs_val = { .hs_str = "31" }
113 	}, {
114 		.hs_key = SPD_KEY_MFG_DRAM_STEP,
115 		.hs_type = DATA_TYPE_STRING,
116 		.hs_val = { .hs_str = "45" }
117 	}, {
118 		.hs_key = SPD_KEY_MOD_REF_DESIGN,
119 		.hs_type = DATA_TYPE_STRING,
120 		.hs_val = { .hs_str = "B" }
121 	}, {
122 		.hs_key = SPD_KEY_MOD_DESIGN_REV,
123 		.hs_type = DATA_TYPE_UINT32,
124 		.hs_val = { .hs_u32 = 4 }
125 	}, {
126 		.hs_key = SPD_KEY_DEV_RCD_MFG_NAME,
127 		.hs_type = DATA_TYPE_STRING,
128 		.hs_val = { .hs_str = "Montage Technology Group" }
129 	}, {
130 		.hs_key = SPD_KEY_DDR4_RCD_DS_ODT,
131 		.hs_type = DATA_TYPE_UINT32,
132 		.hs_val = { .hs_u32 = SPD_SLEW_MODERATE },
133 	}, {
134 		.hs_key = NULL,
135 	} }
136 };
137 
138 const hex2spd_test_t samsung_ddr4_lrdimm = {
139 	.ht_file = "ddr4/M386AAK40B40-CWD70",
140 	.ht_checks = { {
141 		.hs_key = SPD_KEY_DRAM_TYPE,
142 		.hs_type = DATA_TYPE_UINT32,
143 		.hs_val = { .hs_u32 = SPD_DT_DDR4_SDRAM }
144 	}, {
145 		.hs_key = SPD_KEY_MOD_TYPE,
146 		.hs_type = DATA_TYPE_UINT32,
147 		.hs_val = { .hs_u32 = SPD_MOD_TYPE_LRDIMM }
148 	}, {
149 		.hs_key = SPD_KEY_REV_ENC,
150 		.hs_type = DATA_TYPE_UINT32,
151 		.hs_val = { .hs_u32 = 1 }
152 	}, {
153 		.hs_key = SPD_KEY_REV_ADD,
154 		.hs_type = DATA_TYPE_UINT32,
155 		.hs_val = { .hs_u32 = 2 }
156 	}, {
157 		.hs_key = SPD_KEY_NROW_BITS,
158 		.hs_type = DATA_TYPE_UINT32,
159 		.hs_val = { .hs_u32 = 17 }
160 	}, {
161 		.hs_key = SPD_KEY_NCOL_BITS,
162 		.hs_type = DATA_TYPE_UINT32,
163 		.hs_val = { .hs_u32 = 10 }
164 	}, {
165 		.hs_key = SPD_KEY_NBANK_BITS,
166 		.hs_type = DATA_TYPE_UINT32,
167 		.hs_val = { .hs_u32 = 2 }
168 	}, {
169 		.hs_key = SPD_KEY_PKG_SL,
170 		.hs_type = DATA_TYPE_UINT32,
171 		.hs_val = { .hs_u32 = SPD_SL_3DS }
172 	}, {
173 		.hs_key = SPD_KEY_PKG_NDIE,
174 		.hs_type = DATA_TYPE_UINT32,
175 		.hs_val = { .hs_u32 = 4 }
176 	}, {
177 		.hs_key = SPD_KEY_NBGRP_BITS,
178 		.hs_type = DATA_TYPE_UINT32,
179 		.hs_val = { .hs_u32 = 2 }
180 	}, {
181 		.hs_key = SPD_KEY_TRFC1_MIN,
182 		.hs_type = DATA_TYPE_UINT64,
183 		.hs_val = { .hs_u64 = 0x55730 }
184 	}, {
185 		.hs_key = SPD_KEY_TRFC2_MIN,
186 		.hs_type = DATA_TYPE_UINT64,
187 		.hs_val = { .hs_u64 = 0x3f7a0 }
188 	}, {
189 		.hs_key = SPD_KEY_TRFC4_MIN,
190 		.hs_type = DATA_TYPE_UINT64,
191 		.hs_val = { .hs_u64 = 0x27100 }
192 	}, {
193 		.hs_key = SPD_KEY_TFAW,
194 		.hs_type = DATA_TYPE_UINT64,
195 		.hs_val = { .hs_u64 = 0x2ee0 }
196 	}, {
197 		.hs_key = SPD_KEY_TRRD_S_MIN,
198 		.hs_type = DATA_TYPE_UINT64,
199 		.hs_val = { .hs_u64 = 0xbb8 }
200 	}, {
201 		.hs_key = SPD_KEY_TRRD_L_MIN,
202 		.hs_type = DATA_TYPE_UINT64,
203 		.hs_val = { .hs_u64 = 0x1324 }
204 	}, {
205 		.hs_key = SPD_KEY_TCCD_L_MIN,
206 		.hs_type = DATA_TYPE_UINT64,
207 		.hs_val = { .hs_u64 = 0x1388 }
208 	}, {
209 		.hs_key = SPD_KEY_MOD_HEIGHT,
210 		.hs_type = DATA_TYPE_UINT32,
211 		.hs_val = { .hs_u32 = 32 }
212 	}, {
213 		.hs_key = SPD_KEY_MOD_FRONT_THICK,
214 		.hs_type = DATA_TYPE_UINT32,
215 		.hs_val = { .hs_u32 = 2 }
216 	}, {
217 		.hs_key = SPD_KEY_MOD_BACK_THICK,
218 		.hs_type = DATA_TYPE_UINT32,
219 		.hs_val = { .hs_u32 = 2 }
220 	}, {
221 		.hs_key = SPD_KEY_MOD_NREGS,
222 		.hs_type = DATA_TYPE_UINT32,
223 		.hs_val = { .hs_u32 = 1 }
224 	}, {
225 		.hs_key = SPD_KEY_MOD_NROWS,
226 		.hs_type = DATA_TYPE_UINT32,
227 		.hs_val = { .hs_u32 = 2 }
228 	}, {
229 		.hs_key = SPD_KEY_DEV_RCD_MFG_NAME,
230 		.hs_type = DATA_TYPE_STRING,
231 		.hs_val = { .hs_str = "IDT" }
232 	}, {
233 		.hs_key = SPD_KEY_DEV_RCD_REV,
234 		.hs_type = DATA_TYPE_STRING,
235 		.hs_val = { .hs_str = "51" }
236 	}, {
237 		.hs_key = SPD_KEY_DEV_DB_MFG_NAME,
238 		.hs_type = DATA_TYPE_STRING,
239 		.hs_val = { .hs_str = "IDT" }
240 	}, {
241 		.hs_key = SPD_KEY_DEV_DB_REV,
242 		.hs_type = DATA_TYPE_STRING,
243 		.hs_val = { .hs_str = "B0" }
244 	}, {
245 		.hs_key = SPD_KEY_DDR4_VREFDQ_R0,
246 		.hs_type = DATA_TYPE_UINT32,
247 		.hs_val = { .hs_u32 = 6975 }
248 	}, {
249 		.hs_key = SPD_KEY_DDR4_VREFDQ_R1,
250 		.hs_type = DATA_TYPE_UINT32,
251 		.hs_val = { .hs_u32 = 6975 }
252 	}, {
253 		.hs_key = SPD_KEY_DDR4_VREFDQ_R2,
254 		.hs_type = DATA_TYPE_UINT32,
255 		.hs_val = { .hs_u32 = 6000 }
256 	}, {
257 		.hs_key = SPD_KEY_DDR4_VREFDQ_R3,
258 		.hs_type = DATA_TYPE_UINT32,
259 		.hs_val = { .hs_u32 = 6000 }
260 	}, {
261 		.hs_key = SPD_KEY_DDR4_VREFDQ_DB,
262 		.hs_type = DATA_TYPE_UINT32,
263 		.hs_val = { .hs_u32 = 7170 }
264 	}, {
265 		.hs_key = SPD_KEY_DDR4_MDQ_RTT,
266 		.hs_type = DATA_TYPE_UINT32_ARRAY,
267 		.hs_val = { .hs_u32a = { .ha_nval = 3,
268 		    .ha_vals = { 48, 48, 48 } } },
269 	}, {
270 		.hs_key = SPD_KEY_DDR4_MDQ_DS,
271 		.hs_type = DATA_TYPE_UINT32_ARRAY,
272 		.hs_val = { .hs_u32a = { .ha_nval = 3,
273 		    .ha_vals = { 34, 34, 34 } } },
274 	}, {
275 		.hs_key = SPD_KEY_DDR4_DRAM_DS,
276 		.hs_type = DATA_TYPE_UINT32_ARRAY,
277 		.hs_val = { .hs_u32a = { .ha_nval = 3,
278 		    .ha_vals = { 34, 34, 34 } } },
279 	}, {
280 		.hs_key = SPD_KEY_DDR4_RTT_WR,
281 		.hs_type = DATA_TYPE_UINT32_ARRAY,
282 		.hs_val = { .hs_u32a = { .ha_nval = 3,
283 		    .ha_vals = { 240, 240, 240 } } },
284 	}, {
285 		.hs_key = SPD_KEY_DDR4_RTT_NOM,
286 		.hs_type = DATA_TYPE_UINT32_ARRAY,
287 		.hs_val = { .hs_u32a = { .ha_nval = 3,
288 		    .ha_vals = { 240, 240, 240 } } },
289 	}, {
290 		.hs_key = SPD_KEY_MFG_MOD_MFG_NAME,
291 		.hs_type = DATA_TYPE_STRING,
292 		.hs_val = { .hs_str = "Samsung" }
293 	}, {
294 		.hs_key = SPD_KEY_MFG_DRAM_MFG_NAME,
295 		.hs_type = DATA_TYPE_STRING,
296 		.hs_val = { .hs_str = "Samsung" }
297 	}, {
298 		.hs_key = SPD_KEY_MFG_MOD_YEAR,
299 		.hs_type = DATA_TYPE_STRING,
300 		.hs_val = { .hs_str = "23" }
301 	}, {
302 		.hs_key = SPD_KEY_MFG_MOD_WEEK,
303 		.hs_type = DATA_TYPE_STRING,
304 		.hs_val = { .hs_str = "24" }
305 	}, {
306 		.hs_key = SPD_KEY_MFG_MOD_PN,
307 		.hs_type = DATA_TYPE_STRING,
308 		.hs_val = { .hs_str = "M386AAK40B40-CWD" }
309 	}, {
310 		.hs_key = SPD_KEY_MFG_MOD_SN,
311 		.hs_type = DATA_TYPE_STRING,
312 		.hs_val = { .hs_str = "BAADCAFE" }
313 	}, {
314 		.hs_key = SPD_KEY_MFG_MOD_REV,
315 		.hs_type = DATA_TYPE_STRING,
316 		.hs_val = { .hs_str = "72" }
317 	}, {
318 		.hs_key = SPD_KEY_MFG_DRAM_STEP,
319 		.hs_type = DATA_TYPE_STRING,
320 		.hs_val = { .hs_str = "27" }
321 	}, {
322 		.hs_key = NULL,
323 	} }
324 };
325 
326 const hex2spd_test_t advantech_ddr4_sodimm = {
327 	.ht_file = "ddr4/AQD-SD4U16GN32-SE1",
328 	.ht_checks = { {
329 		.hs_key = SPD_KEY_DRAM_TYPE,
330 		.hs_type = DATA_TYPE_UINT32,
331 		.hs_val = { .hs_u32 = SPD_DT_DDR4_SDRAM }
332 	}, {
333 		.hs_key = SPD_KEY_MOD_TYPE,
334 		.hs_type = DATA_TYPE_UINT32,
335 		.hs_val = { .hs_u32 = SPD_MOD_TYPE_SODIMM }
336 	}, {
337 		.hs_key = SPD_KEY_DIE_SIZE,
338 		.hs_type = DATA_TYPE_UINT64,
339 		.hs_val = { .hs_u64 = 8ULL * 1024ULL * 1024ULL * 1024ULL }
340 	}, {
341 		.hs_key = SPD_KEY_NROW_BITS,
342 		.hs_type = DATA_TYPE_UINT32,
343 		.hs_val = { .hs_u32 = 16 }
344 	}, {
345 		.hs_key = SPD_KEY_NCOL_BITS,
346 		.hs_type = DATA_TYPE_UINT32,
347 		.hs_val = { .hs_u32 = 10 }
348 	}, {
349 		.hs_key = SPD_KEY_NBANK_BITS,
350 		.hs_type = DATA_TYPE_UINT32,
351 		.hs_val = { .hs_u32 = 2 }
352 	}, {
353 		.hs_key = SPD_KEY_NBGRP_BITS,
354 		.hs_type = DATA_TYPE_UINT32,
355 		.hs_val = { .hs_u32 = 2 }
356 	}, {
357 		.hs_key = SPD_KEY_NRANKS,
358 		.hs_type = DATA_TYPE_UINT32,
359 		.hs_val = { .hs_u32 = 2 }
360 	}, {
361 		.hs_key = SPD_KEY_DRAM_WIDTH,
362 		.hs_type = DATA_TYPE_UINT32,
363 		.hs_val = { .hs_u32 = 8 }
364 	}, {
365 		.hs_key = SPD_KEY_DRAM_NCHAN,
366 		.hs_type = DATA_TYPE_UINT32,
367 		.hs_val = { .hs_u32 = 1 }
368 	}, {
369 		.hs_key = SPD_KEY_DATA_WIDTH,
370 		.hs_type = DATA_TYPE_UINT32,
371 		.hs_val = { .hs_u32 = 64 }
372 	}, {
373 		.hs_key = SPD_KEY_ECC_WIDTH,
374 		.hs_type = DATA_TYPE_UINT32,
375 		.hs_val = { .hs_u32 = 0 }
376 	}, {
377 		.hs_key = SPD_KEY_CAS,
378 		.hs_type = DATA_TYPE_UINT32_ARRAY,
379 		.hs_val = { .hs_u32a = { .ha_nval = 15,
380 		    .ha_vals = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
381 		    21, 22, 23, 24 } } }
382 	}, {
383 		.hs_key = SPD_KEY_TCKAVG_MIN,
384 		.hs_type = DATA_TYPE_UINT64,
385 		.hs_val = { .hs_u64 = 625 },
386 	}, {
387 		.hs_key = SPD_KEY_TCKAVG_MAX,
388 		.hs_type = DATA_TYPE_UINT64,
389 		.hs_val = { .hs_u64 = 1600 },
390 	}, {
391 		.hs_key = SPD_KEY_TAA_MIN,
392 		.hs_type = DATA_TYPE_UINT64,
393 		.hs_val = { .hs_u64 = 13750 },
394 	}, {
395 		.hs_key = SPD_KEY_TRAS_MIN,
396 		.hs_type = DATA_TYPE_UINT64,
397 		.hs_val = { .hs_u64 = 32000 },
398 	}, {
399 		.hs_key = SPD_KEY_TRC_MIN,
400 		.hs_type = DATA_TYPE_UINT64,
401 		.hs_val = { .hs_u64 = 45750 },
402 	}, {
403 		.hs_key = SPD_KEY_DDR4_MAP_DQ0,
404 		.hs_type = DATA_TYPE_UINT32_ARRAY,
405 		.hs_val = { .hs_u32a = { .ha_nval = 4,
406 		    .ha_vals = { 1, 3, 0, 2 } } },
407 	}, {
408 		.hs_key = SPD_KEY_DDR4_MAP_DQ44,
409 		.hs_type = DATA_TYPE_UINT32_ARRAY,
410 		.hs_val = { .hs_u32a = { .ha_nval = 4,
411 		    .ha_vals = { 7, 5, 4, 6 } } },
412 	}, {
413 		.hs_key = SPD_KEY_MOD_REF_DESIGN,
414 		.hs_type = DATA_TYPE_STRING,
415 		.hs_val = { .hs_str = "E" }
416 	}, {
417 		.hs_key = SPD_KEY_MOD_EDGE_MIRROR,
418 		.hs_type = DATA_TYPE_BOOLEAN,
419 		.hs_val = { .hs_bool = true },
420 	}, {
421 		.hs_key = SPD_KEY_MFG_MOD_MFG_NAME,
422 		.hs_type = DATA_TYPE_STRING,
423 		.hs_val = { .hs_str = "Advantech Co Ltd" }
424 	}, {
425 		.hs_key = SPD_KEY_MFG_DRAM_MFG_NAME,
426 		.hs_type = DATA_TYPE_STRING,
427 		.hs_val = { .hs_str = "Advantech Co Ltd" }
428 	}, {
429 		.hs_key = NULL,
430 	} }
431 };
432 
433 const hex2spd_test_t advantech_ddr4_udimm = {
434 	.ht_file = "ddr4/AQD-D4U32N32-SBW",
435 	.ht_checks = { {
436 		.hs_key = SPD_KEY_DRAM_TYPE,
437 		.hs_type = DATA_TYPE_UINT32,
438 		.hs_val = { .hs_u32 = SPD_DT_DDR4_SDRAM }
439 	}, {
440 		.hs_key = SPD_KEY_MOD_TYPE,
441 		.hs_type = DATA_TYPE_UINT32,
442 		.hs_val = { .hs_u32 = SPD_MOD_TYPE_UDIMM }
443 	}, {
444 		.hs_key = SPD_KEY_NBYTES_USED,
445 		.hs_type = DATA_TYPE_UINT32,
446 		.hs_val = { .hs_u32 = 384 }
447 	}, {
448 		.hs_key = SPD_KEY_NBYTES_USED,
449 		.hs_type = DATA_TYPE_UINT32,
450 		.hs_val = { .hs_u32 = 384 }
451 	}, {
452 		.hs_key = SPD_KEY_DIE_SIZE,
453 		.hs_type = DATA_TYPE_UINT64,
454 		.hs_val = { .hs_u64 = 16ULL * 1024ULL * 1024ULL * 1024ULL }
455 	}, {
456 		.hs_key = SPD_KEY_REV_ENC,
457 		.hs_type = DATA_TYPE_UINT32,
458 		.hs_val = { .hs_u32 = 1 }
459 	}, {
460 		.hs_key = SPD_KEY_REV_ADD,
461 		.hs_type = DATA_TYPE_UINT32,
462 		.hs_val = { .hs_u32 = 1 }
463 	}, {
464 		.hs_key = SPD_KEY_MOD_HYBRID_TYPE,
465 		.hs_type = DATA_TYPE_UINT32,
466 		.hs_val = { .hs_u32 = SPD_MOD_NOT_HYBRID }
467 	}, {
468 		.hs_key = SPD_KEY_NROW_BITS,
469 		.hs_type = DATA_TYPE_UINT32,
470 		.hs_val = { .hs_u32 = 17 }
471 	}, {
472 		.hs_key = SPD_KEY_NCOL_BITS,
473 		.hs_type = DATA_TYPE_UINT32,
474 		.hs_val = { .hs_u32 = 10 }
475 	}, {
476 		.hs_key = SPD_KEY_NBANK_BITS,
477 		.hs_type = DATA_TYPE_UINT32,
478 		.hs_val = { .hs_u32 = 2 }
479 	}, {
480 		.hs_key = SPD_KEY_NBGRP_BITS,
481 		.hs_type = DATA_TYPE_UINT32,
482 		.hs_val = { .hs_u32 = 2 }
483 	}, {
484 		.hs_key = SPD_KEY_PPR,
485 		.hs_type = DATA_TYPE_UINT32,
486 		.hs_val = { .hs_u32 = SPD_PPR_F_HARD_PPR | SPD_PPR_F_SOFT_PPR }
487 	}, {
488 		.hs_key = SPD_KEY_NOM_VDD,
489 		.hs_type = DATA_TYPE_UINT32_ARRAY,
490 		.hs_val = { .hs_u32a = { .ha_nval = 1, .ha_vals = { 1200 } } },
491 	}, {
492 		.hs_key = SPD_KEY_NRANKS,
493 		.hs_type = DATA_TYPE_UINT32,
494 		.hs_val = { .hs_u32 = 2 }
495 	}, {
496 		.hs_key = SPD_KEY_DRAM_WIDTH,
497 		.hs_type = DATA_TYPE_UINT32,
498 		.hs_val = { .hs_u32 = 8 }
499 	}, {
500 		.hs_key = SPD_KEY_DRAM_NCHAN,
501 		.hs_type = DATA_TYPE_UINT32,
502 		.hs_val = { .hs_u32 = 1 }
503 	}, {
504 		.hs_key = SPD_KEY_DATA_WIDTH,
505 		.hs_type = DATA_TYPE_UINT32,
506 		.hs_val = { .hs_u32 = 64 }
507 	}, {
508 		.hs_key = SPD_KEY_ECC_WIDTH,
509 		.hs_type = DATA_TYPE_UINT32,
510 		.hs_val = { .hs_u32 = 0 }
511 	}, {
512 		.hs_key = SPD_KEY_TRFC1_MIN,
513 		.hs_type = DATA_TYPE_UINT64,
514 		.hs_val = { .hs_u64 = 550000 }
515 	}, {
516 		.hs_key = SPD_KEY_TRFC2_MIN,
517 		.hs_type = DATA_TYPE_UINT64,
518 		.hs_val = { .hs_u64 = 350000 }
519 	}, {
520 		.hs_key = SPD_KEY_TRFC4_MIN,
521 		.hs_type = DATA_TYPE_UINT64,
522 		.hs_val = { .hs_u64 = 260000 }
523 	}, {
524 		.hs_key = SPD_KEY_TRRD_L_MIN,
525 		.hs_type = DATA_TYPE_UINT64,
526 		.hs_val = { .hs_u64 = 4900 }
527 	}, {
528 		.hs_key = SPD_KEY_MOD_REF_DESIGN,
529 		.hs_type = DATA_TYPE_STRING,
530 		.hs_val = { .hs_str = "B" }
531 	}, {
532 		.hs_key = SPD_KEY_MOD_EDGE_MIRROR,
533 		.hs_type = DATA_TYPE_BOOLEAN,
534 		.hs_val = { .hs_bool = true },
535 	}, {
536 		.hs_key = SPD_KEY_MFG_MOD_MFG_NAME,
537 		.hs_type = DATA_TYPE_STRING,
538 		.hs_val = { .hs_str = "Apacer Technology" }
539 	}, {
540 		.hs_key = SPD_KEY_MFG_DRAM_MFG_NAME,
541 		.hs_type = DATA_TYPE_STRING,
542 		.hs_val = { .hs_str = "IBM" }
543 	}, {
544 		.hs_key = SPD_KEY_MFG_MOD_SN,
545 		.hs_type = DATA_TYPE_STRING,
546 		.hs_val = { .hs_str = "99887766" }
547 	}, {
548 		.hs_key = SPD_KEY_MFG_MOD_PN,
549 		.hs_type = DATA_TYPE_STRING,
550 		.hs_val = { .hs_str = "AQD-D4U32N32-SBW" }
551 	}, {
552 		.hs_key = SPD_KEY_MFG_MOD_REV,
553 		.hs_type = DATA_TYPE_STRING,
554 		.hs_val = { .hs_str = "2B" }
555 	}, {
556 		.hs_key = SPD_KEY_MFG_DRAM_STEP,
557 		.hs_type = DATA_TYPE_STRING,
558 		.hs_val = { .hs_str = "95" }
559 	}, {
560 		.hs_key = NULL,
561 	} }
562 };
563