xref: /illumos-gate/usr/src/test/util-tests/tests/libjedec/hex2spd/libjedec_hex2spd_ddr5.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  * DDR5 SPD tests
18  */
19 
20 #include <libjedec.h>
21 #include "libjedec_hex2spd.h"
22 
23 const hex2spd_test_t micron_ddr5_rdimm = {
24 	.ht_file = "ddr5/MTC40F2046S1RC48BA1",
25 	.ht_checks = { {
26 		.hs_key = SPD_KEY_DRAM_TYPE,
27 		.hs_type = DATA_TYPE_UINT32,
28 		.hs_val = { .hs_u32 = SPD_DT_DDR5_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 = 1024 }
37 	}, {
38 		.hs_key = SPD_KEY_REV_ENC,
39 		.hs_type = DATA_TYPE_UINT32,
40 		.hs_val = { .hs_u32 = 1 }
41 	}, {
42 		.hs_key = SPD_KEY_REV_ADD,
43 		.hs_type = DATA_TYPE_UINT32,
44 		.hs_val = { .hs_u32 = 0 }
45 	}, {
46 		.hs_key = SPD_KEY_BETA,
47 		.hs_type = DATA_TYPE_UINT32,
48 		.hs_val = { .hs_u32 = 0 }
49 	}, {
50 		.hs_key = SPD_KEY_MOD_REV_ENC,
51 		.hs_type = DATA_TYPE_UINT32,
52 		.hs_val = { .hs_u32 = 1 }
53 	}, {
54 		.hs_key = SPD_KEY_MOD_REV_ADD,
55 		.hs_type = DATA_TYPE_UINT32,
56 		.hs_val = { .hs_u32 = 0 }
57 	}, {
58 		.hs_key = SPD_KEY_PKG_NOT_MONO,
59 		.hs_type = DATA_TYPE_BOOLEAN,
60 		.hs_val = { .hs_bool = false }
61 	}, {
62 		.hs_key = SPD_KEY_NROW_BITS,
63 		.hs_type = DATA_TYPE_UINT32,
64 		.hs_val = { .hs_u32 = 16 },
65 	}, {
66 		.hs_key = SPD_KEY_NCOL_BITS,
67 		.hs_type = DATA_TYPE_UINT32,
68 		.hs_val = { .hs_u32 = 11 },
69 	}, {
70 		.hs_key = SPD_KEY_NBGRP_BITS,
71 		.hs_type = DATA_TYPE_UINT32,
72 		.hs_val = { .hs_u32 = 3 },
73 	}, {
74 		.hs_key = SPD_KEY_NBANK_BITS,
75 		.hs_type = DATA_TYPE_UINT32,
76 		.hs_val = { .hs_u32 = 2 },
77 	}, {
78 		.hs_key = SPD_KEY_DIE_SIZE,
79 		.hs_type = DATA_TYPE_UINT64,
80 		.hs_val = { .hs_u64 = 16ULL * 1024ULL * 1024ULL * 1024ULL },
81 	}, {
82 		.hs_key = SPD_KEY_DRAM_WIDTH,
83 		.hs_type = DATA_TYPE_UINT32,
84 		.hs_val = { .hs_u32 = 4 }
85 	}, {
86 		.hs_key = SPD_KEY_PPR,
87 		.hs_type = DATA_TYPE_UINT32,
88 		.hs_val = { .hs_u32 = SPD_PPR_F_HARD_PPR | SPD_PPR_F_SOFT_PPR |
89 		    SPD_PPR_F_PPR_UNDO }
90 	}, {
91 		.hs_key = SPD_KEY_PPR_GRAN,
92 		.hs_type = DATA_TYPE_UINT32,
93 		.hs_val = { .hs_u32 = SPD_PPR_GRAN_BANK },
94 	}, {
95 		.hs_key = SPD_KEY_DDR5_BL32,
96 		.hs_type = DATA_TYPE_BOOLEAN,
97 		.hs_val = { .hs_bool = false }
98 	}, {
99 		.hs_key = SPD_KEY_DDR_PASR,
100 		.hs_type = DATA_TYPE_BOOLEAN,
101 		.hs_val = { .hs_bool = false }
102 	}, {
103 		.hs_key = SPD_KEY_DDR5_DCA,
104 		.hs_type = DATA_TYPE_UINT32,
105 		.hs_val = { .hs_u32 = SPD_DCA_1_OR_2_PHASE },
106 	}, {
107 		.hs_key = SPD_KEY_DDR5_WIDE_TS,
108 		.hs_type = DATA_TYPE_BOOLEAN,
109 		.hs_val = { .hs_bool = false }
110 	}, {
111 		.hs_key = SPD_KEY_DDR5_FLT,
112 		.hs_type = DATA_TYPE_UINT32,
113 		.hs_val = { .hs_u32 = SPD_FLT_WRSUP_MR15 | SPD_FLT_BOUNDED },
114 	}, {
115 		.hs_key = SPD_KEY_NOM_VDD,
116 		.hs_type = DATA_TYPE_UINT32_ARRAY,
117 		.hs_val = { .hs_u32a = { .ha_nval = 1, .ha_vals = { 1100 } } },
118 	}, {
119 		.hs_key = SPD_KEY_NOM_VDDQ,
120 		.hs_type = DATA_TYPE_UINT32_ARRAY,
121 		.hs_val = { .hs_u32a = { .ha_nval = 1, .ha_vals = { 1100 } } },
122 	}, {
123 		.hs_key = SPD_KEY_NOM_VPP,
124 		.hs_type = DATA_TYPE_UINT32_ARRAY,
125 		.hs_val = { .hs_u32a = { .ha_nval = 1, .ha_vals = { 1800 } } },
126 	}, {
127 		.hs_key = SPD_KEY_TCKAVG_MIN,
128 		.hs_type = DATA_TYPE_UINT64,
129 		.hs_val = { .hs_u64 = 416 },
130 	}, {
131 		.hs_key = SPD_KEY_TCKAVG_MAX,
132 		.hs_type = DATA_TYPE_UINT64,
133 		.hs_val = { .hs_u64 = 1010 },
134 	}, {
135 		.hs_key = SPD_KEY_DEV_SPD_MFG_NAME,
136 		.hs_type = DATA_TYPE_STRING,
137 		.hs_val = { .hs_str = "IDT" }
138 	}, {
139 		.hs_key = SPD_KEY_DEV_SPD_TYPE,
140 		.hs_type = DATA_TYPE_UINT32,
141 		.hs_val = { .hs_u32 = SPD_SPD_T_SPD5118 },
142 	}, {
143 		.hs_key = SPD_KEY_DEV_SPD_REV,
144 		.hs_type = DATA_TYPE_STRING,
145 		.hs_val = { .hs_str = "2.1" }
146 	}, {
147 		.hs_key = SPD_KEY_DEV_PMIC0_MFG_NAME,
148 		.hs_type = DATA_TYPE_STRING,
149 		.hs_val = { .hs_str = "IDT" }
150 	}, {
151 		.hs_key = SPD_KEY_DEV_PMIC0_TYPE,
152 		.hs_type = DATA_TYPE_UINT32,
153 		.hs_val = { .hs_u32 = SPD_PMIC_T_PMIC5000 },
154 	}, {
155 		.hs_key = SPD_KEY_DEV_PMIC0_REV,
156 		.hs_type = DATA_TYPE_STRING,
157 		.hs_val = { .hs_str = "4.0" }
158 	}, {
159 		.hs_key = SPD_KEY_DEV_TEMP_MFG_NAME,
160 		.hs_type = DATA_TYPE_STRING,
161 		.hs_val = { .hs_str = "IDT" }
162 	}, {
163 		.hs_key = SPD_KEY_DEV_TEMP_TYPE,
164 		.hs_type = DATA_TYPE_UINT32,
165 		.hs_val = { .hs_u32 = SPD_TEMP_T_TS5111 },
166 	}, {
167 		.hs_key = SPD_KEY_DEV_TEMP_REV,
168 		.hs_type = DATA_TYPE_STRING,
169 		.hs_val = { .hs_str = "1.2" }
170 	}, {
171 		.hs_key = SPD_KEY_DEVS,
172 		.hs_type = DATA_TYPE_UINT32,
173 		.hs_val = { .hs_u32 = SPD_DEVICE_TEMP_1 | SPD_DEVICE_TEMP_2 |
174 		    SPD_DEVICE_PMIC_0 | SPD_DEVICE_RCD | SPD_DEVICE_SPD }
175 	}, {
176 		.hs_key = SPD_KEY_MOD_HEIGHT,
177 		.hs_type = DATA_TYPE_UINT32,
178 		.hs_val = { .hs_u32 = 32 }
179 	}, {
180 		.hs_key = SPD_KEY_MOD_FRONT_THICK,
181 		.hs_type = DATA_TYPE_UINT32,
182 		.hs_val = { .hs_u32 = 2 }
183 	}, {
184 		.hs_key = SPD_KEY_MOD_BACK_THICK,
185 		.hs_type = DATA_TYPE_UINT32,
186 		.hs_val = { .hs_u32 = 3 }
187 	}, {
188 		.hs_key = SPD_KEY_MOD_REF_DESIGN,
189 		.hs_type = DATA_TYPE_STRING,
190 		.hs_val = { .hs_str = "A" }
191 	}, {
192 		.hs_key = SPD_KEY_MOD_DESIGN_REV,
193 		.hs_type = DATA_TYPE_UINT32,
194 		.hs_val = { .hs_u32 = 0 }
195 	}, {
196 		.hs_key = SPD_KEY_MOD_OPER_TEMP,
197 		.hs_type = DATA_TYPE_UINT32,
198 		.hs_val = { .hs_u32 = JEDEC_TEMP_CASE_XT }
199 	}, {
200 		.hs_key = SPD_KEY_MOD_NROWS,
201 		.hs_type = DATA_TYPE_UINT32,
202 		.hs_val = { .hs_u32 = 2 }
203 	}, {
204 		.hs_key = SPD_KEY_NRANKS,
205 		.hs_type = DATA_TYPE_UINT32,
206 		.hs_val = { .hs_u32 = 2 }
207 	}, {
208 		.hs_key = SPD_KEY_NSUBCHAN,
209 		.hs_type = DATA_TYPE_UINT32,
210 		.hs_val = { .hs_u32 = 2 }
211 	}, {
212 		.hs_key = SPD_KEY_DATA_WIDTH,
213 		.hs_type = DATA_TYPE_UINT32,
214 		.hs_val = { .hs_u32 = 32 }
215 	}, {
216 		.hs_key = SPD_KEY_ECC_WIDTH,
217 		.hs_type = DATA_TYPE_UINT32,
218 		.hs_val = { .hs_u32 = 8 }
219 	}, {
220 		.hs_key = SPD_KEY_DEV_RCD_MFG_NAME,
221 		.hs_type = DATA_TYPE_STRING,
222 		.hs_val = { .hs_str = "Montage Technology Group" }
223 	}, {
224 		.hs_key = SPD_KEY_DEV_RCD_TYPE,
225 		.hs_type = DATA_TYPE_UINT32,
226 		.hs_val = { .hs_u32 = SPD_RCD_T_DDR5RCD01 },
227 	}, {
228 		.hs_key = SPD_KEY_DEV_RCD_REV,
229 		.hs_type = DATA_TYPE_STRING,
230 		.hs_val = { .hs_str = "2.2" }
231 	}, {
232 		.hs_key = SPD_KEY_DDR5_RCD_QACK_EN,
233 		.hs_type = DATA_TYPE_BOOLEAN,
234 		.hs_val = { .hs_bool = true }
235 	}, {
236 		.hs_key = SPD_KEY_DDR5_RCD_QBCK_EN,
237 		.hs_type = DATA_TYPE_BOOLEAN,
238 		.hs_val = { .hs_bool = true }
239 	}, {
240 		.hs_key = SPD_KEY_DDR5_RCD_QCCK_EN,
241 		.hs_type = DATA_TYPE_BOOLEAN,
242 		.hs_val = { .hs_bool = true }
243 	}, {
244 		.hs_key = SPD_KEY_DDR5_RCD_QDCK_EN,
245 		.hs_type = DATA_TYPE_BOOLEAN,
246 		.hs_val = { .hs_bool = true }
247 	}, {
248 		.hs_key = SPD_KEY_DDR5_RCD_QACK_DS,
249 		.hs_type = DATA_TYPE_UINT32,
250 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE },
251 	}, {
252 		.hs_key = SPD_KEY_DDR5_RCD_QBCK_DS,
253 		.hs_type = DATA_TYPE_UINT32,
254 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE },
255 	}, {
256 		.hs_key = SPD_KEY_DDR5_RCD_QCCK_DS,
257 		.hs_type = DATA_TYPE_UINT32,
258 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE },
259 	}, {
260 		.hs_key = SPD_KEY_DDR5_RCD_QDCK_DS,
261 		.hs_type = DATA_TYPE_UINT32,
262 		.hs_val = { .hs_u32 = SPD_DRIVE_MODERATE },
263 	}, {
264 		.hs_key = NULL
265 	} }
266 };
267 
268 const hex2spd_test_t advantech_ddr5_rdimm = {
269 	.ht_file = "ddr5/AQD-D5V16GR48-SB",
270 	.ht_checks = { {
271 		.hs_key = SPD_KEY_DRAM_TYPE,
272 		.hs_type = DATA_TYPE_UINT32,
273 		.hs_val = { .hs_u32 = SPD_DT_DDR5_SDRAM }
274 	}, {
275 		.hs_key = SPD_KEY_MOD_TYPE,
276 		.hs_type = DATA_TYPE_UINT32,
277 		.hs_val = { .hs_u32 = SPD_MOD_TYPE_RDIMM }
278 	}, {
279 		.hs_key = SPD_KEY_NBYTES_TOTAL,
280 		.hs_type = DATA_TYPE_UINT32,
281 		.hs_val = { .hs_u32 = 1024 }
282 	}, {
283 		.hs_key = SPD_KEY_REV_ENC,
284 		.hs_type = DATA_TYPE_UINT32,
285 		.hs_val = { .hs_u32 = 1 }
286 	}, {
287 		.hs_key = SPD_KEY_REV_ADD,
288 		.hs_type = DATA_TYPE_UINT32,
289 		.hs_val = { .hs_u32 = 0 }
290 	}, {
291 		.hs_key = SPD_KEY_BETA,
292 		.hs_type = DATA_TYPE_UINT32,
293 		.hs_val = { .hs_u32 = 0 }
294 	}, {
295 		.hs_key = SPD_KEY_MOD_REV_ENC,
296 		.hs_type = DATA_TYPE_UINT32,
297 		.hs_val = { .hs_u32 = 1 }
298 	}, {
299 		.hs_key = SPD_KEY_MOD_REV_ADD,
300 		.hs_type = DATA_TYPE_UINT32,
301 		.hs_val = { .hs_u32 = 0 }
302 	}, {
303 		.hs_key = SPD_KEY_PKG_NOT_MONO,
304 		.hs_type = DATA_TYPE_BOOLEAN,
305 		.hs_val = { .hs_bool = false }
306 	}, {
307 		.hs_key = SPD_KEY_NROW_BITS,
308 		.hs_type = DATA_TYPE_UINT32,
309 		.hs_val = { .hs_u32 = 16 },
310 	}, {
311 		.hs_key = SPD_KEY_NCOL_BITS,
312 		.hs_type = DATA_TYPE_UINT32,
313 		.hs_val = { .hs_u32 = 10 },
314 	}, {
315 		.hs_key = SPD_KEY_NBGRP_BITS,
316 		.hs_type = DATA_TYPE_UINT32,
317 		.hs_val = { .hs_u32 = 3 },
318 	}, {
319 		.hs_key = SPD_KEY_NBANK_BITS,
320 		.hs_type = DATA_TYPE_UINT32,
321 		.hs_val = { .hs_u32 = 2 },
322 	}, {
323 		.hs_key = SPD_KEY_DIE_SIZE,
324 		.hs_type = DATA_TYPE_UINT64,
325 		.hs_val = { .hs_u64 = 16ULL * 1024ULL * 1024ULL * 1024ULL },
326 	}, {
327 		.hs_key = SPD_KEY_DDR5_BL32,
328 		.hs_type = DATA_TYPE_BOOLEAN,
329 		.hs_val = { .hs_bool = true }
330 	}, {
331 		.hs_key = SPD_KEY_DDR_PASR,
332 		.hs_type = DATA_TYPE_BOOLEAN,
333 		.hs_val = { .hs_bool = false }
334 	}, {
335 		.hs_key = SPD_KEY_DDR5_DCA,
336 		.hs_type = DATA_TYPE_UINT32,
337 		.hs_val = { .hs_u32 = SPD_DCA_4_PHASE },
338 	}, {
339 		.hs_key = SPD_KEY_PPR,
340 		.hs_type = DATA_TYPE_UINT32,
341 		.hs_val = { .hs_u32 = SPD_PPR_F_HARD_PPR | SPD_PPR_F_SOFT_PPR }
342 	}, {
343 		.hs_key = SPD_KEY_NOM_VDD,
344 		.hs_type = DATA_TYPE_UINT32_ARRAY,
345 		.hs_val = { .hs_u32a = { .ha_nval = 1, .ha_vals = { 1100 } } },
346 	}, {
347 		.hs_key = SPD_KEY_NOM_VDDQ,
348 		.hs_type = DATA_TYPE_UINT32_ARRAY,
349 		.hs_val = { .hs_u32a = { .ha_nval = 1, .ha_vals = { 1100 } } },
350 	}, {
351 		.hs_key = SPD_KEY_NOM_VPP,
352 		.hs_type = DATA_TYPE_UINT32_ARRAY,
353 		.hs_val = { .hs_u32a = { .ha_nval = 1, .ha_vals = { 1800 } } },
354 	}, {
355 		.hs_key = SPD_KEY_TCKAVG_MIN,
356 		.hs_type = DATA_TYPE_UINT64,
357 		.hs_val = { .hs_u64 = 416 },
358 	}, {
359 		.hs_key = SPD_KEY_TCKAVG_MAX,
360 		.hs_type = DATA_TYPE_UINT64,
361 		.hs_val = { .hs_u64 = 1010 },
362 	}, {
363 		.hs_key = SPD_KEY_CAS,
364 		.hs_type = DATA_TYPE_UINT32_ARRAY,
365 		.hs_val = { .hs_u32a = { .ha_nval = 8,
366 		    .ha_vals = { 22, 26, 28, 30, 32, 36, 40, 42 } } },
367 	}, {
368 		.hs_key = SPD_KEY_TAA_MIN,
369 		.hs_type = DATA_TYPE_UINT64,
370 		.hs_val = { .hs_u64 = 16000 },
371 	}, {
372 		.hs_key = SPD_KEY_TRCD_MIN,
373 		.hs_type = DATA_TYPE_UINT64,
374 		.hs_val = { .hs_u64 = 16000 },
375 	}, {
376 		.hs_key = SPD_KEY_TRP_MIN,
377 		.hs_type = DATA_TYPE_UINT64,
378 		.hs_val = { .hs_u64 = 16000 },
379 	}, {
380 		.hs_key = SPD_KEY_TRAS_MIN,
381 		.hs_type = DATA_TYPE_UINT64,
382 		.hs_val = { .hs_u64 = 32000 },
383 	}, {
384 		.hs_key = SPD_KEY_TRC_MIN,
385 		.hs_type = DATA_TYPE_UINT64,
386 		.hs_val = { .hs_u64 = 48000 },
387 	}, {
388 		.hs_key = SPD_KEY_TWR_MIN,
389 		.hs_type = DATA_TYPE_UINT64,
390 		.hs_val = { .hs_u64 = 30000 },
391 	}, {
392 		.hs_key = SPD_KEY_TRFC1_MIN,
393 		.hs_type = DATA_TYPE_UINT64,
394 		.hs_val = { .hs_u64 = 295000 }
395 	}, {
396 		.hs_key = SPD_KEY_TRFC2_MIN,
397 		.hs_type = DATA_TYPE_UINT64,
398 		.hs_val = { .hs_u64 = 160000 }
399 	}, {
400 		.hs_key = SPD_KEY_TRFCSB,
401 		.hs_type = DATA_TYPE_UINT64,
402 		.hs_val = { .hs_u64 = 130000 }
403 	}, {
404 		.hs_key = SPD_KEY_TRRD_L_MIN,
405 		.hs_type = DATA_TYPE_UINT64,
406 		.hs_val = { .hs_u64 = 5000 }
407 	}, {
408 		.hs_key = SPD_KEY_TRRD_L_NCK,
409 		.hs_type = DATA_TYPE_UINT32,
410 		.hs_val = { .hs_u64 = 8 }
411 	}, {
412 		.hs_key = SPD_KEY_TCCD_L_MIN,
413 		.hs_type = DATA_TYPE_UINT64,
414 		.hs_val = { .hs_u64 = 5000 }
415 	}, {
416 		.hs_key = SPD_KEY_TCCD_L_NCK,
417 		.hs_type = DATA_TYPE_UINT32,
418 		.hs_val = { .hs_u64 = 8 }
419 	}, {
420 		.hs_key = SPD_KEY_TCCDLWR,
421 		.hs_type = DATA_TYPE_UINT64,
422 		.hs_val = { .hs_u64 = 20000 }
423 	}, {
424 		.hs_key = SPD_KEY_TCCDLWR_NCK,
425 		.hs_type = DATA_TYPE_UINT32,
426 		.hs_val = { .hs_u64 = 32 }
427 	}, {
428 		.hs_key = SPD_KEY_TCCDLWR2,
429 		.hs_type = DATA_TYPE_UINT64,
430 		.hs_val = { .hs_u64 = 10000 }
431 	}, {
432 		.hs_key = SPD_KEY_TCCDLWR2_NCK,
433 		.hs_type = DATA_TYPE_UINT32,
434 		.hs_val = { .hs_u64 = 16 }
435 	}, {
436 		.hs_key = SPD_KEY_TFAW,
437 		.hs_type = DATA_TYPE_UINT64,
438 		.hs_val = { .hs_u64 = 13333 }
439 	}, {
440 		.hs_key = SPD_KEY_TFAW_NCK,
441 		.hs_type = DATA_TYPE_UINT32,
442 		.hs_val = { .hs_u64 = 32 }
443 	}, {
444 		.hs_key = SPD_KEY_TCCDLWTR,
445 		.hs_type = DATA_TYPE_UINT64,
446 		.hs_val = { .hs_u64 = 10000 }
447 	}, {
448 		.hs_key = SPD_KEY_TCCDLWTR_NCK,
449 		.hs_type = DATA_TYPE_UINT32,
450 		.hs_val = { .hs_u64 = 16 }
451 	}, {
452 		.hs_key = SPD_KEY_TCCDSWTR,
453 		.hs_type = DATA_TYPE_UINT64,
454 		.hs_val = { .hs_u64 = 2500 }
455 	}, {
456 		.hs_key = SPD_KEY_TCCDSWTR_NCK,
457 		.hs_type = DATA_TYPE_UINT32,
458 		.hs_val = { .hs_u64 = 4 }
459 	}, {
460 		.hs_key = SPD_KEY_TRTP,
461 		.hs_type = DATA_TYPE_UINT64,
462 		.hs_val = { .hs_u64 = 7500 }
463 	}, {
464 		.hs_key = SPD_KEY_TRTP_NCK,
465 		.hs_type = DATA_TYPE_UINT32,
466 		.hs_val = { .hs_u64 = 12 }
467 	}, {
468 		.hs_key = SPD_KEY_DEV_SPD_MFG_NAME,
469 		.hs_type = DATA_TYPE_STRING,
470 		.hs_val = { .hs_str = "Montage Technology Group" }
471 	}, {
472 		.hs_key = SPD_KEY_DEV_SPD_TYPE,
473 		.hs_type = DATA_TYPE_UINT32,
474 		.hs_val = { .hs_u32 = SPD_SPD_T_SPD5118 },
475 	}, {
476 		.hs_key = SPD_KEY_DEV_SPD_REV,
477 		.hs_type = DATA_TYPE_STRING,
478 		.hs_val = { .hs_str = "1.5" }
479 	}, {
480 		.hs_key = SPD_KEY_DEV_PMIC0_MFG_NAME,
481 		.hs_type = DATA_TYPE_STRING,
482 		.hs_val = { .hs_str = "Montage Technology Group" }
483 	}, {
484 		.hs_key = SPD_KEY_DEV_PMIC0_TYPE,
485 		.hs_type = DATA_TYPE_UINT32,
486 		.hs_val = { .hs_u32 = SPD_PMIC_T_PMIC5010 },
487 	}, {
488 		.hs_key = SPD_KEY_DEV_PMIC0_REV,
489 		.hs_type = DATA_TYPE_STRING,
490 		.hs_val = { .hs_str = "3.3" }
491 	}, {
492 		.hs_key = SPD_KEY_DEV_TEMP_MFG_NAME,
493 		.hs_type = DATA_TYPE_STRING,
494 		.hs_val = { .hs_str = "Montage Technology Group" }
495 	}, {
496 		.hs_key = SPD_KEY_DEV_TEMP_TYPE,
497 		.hs_type = DATA_TYPE_UINT32,
498 		.hs_val = { .hs_u32 = SPD_TEMP_T_TS5110 },
499 	}, {
500 		.hs_key = SPD_KEY_DEV_TEMP_REV,
501 		.hs_type = DATA_TYPE_STRING,
502 		.hs_val = { .hs_str = "1.3" }
503 	}, {
504 		.hs_key = SPD_KEY_DEVS,
505 		.hs_type = DATA_TYPE_UINT32,
506 		.hs_val = { .hs_u32 = SPD_DEVICE_TEMP_1 | SPD_DEVICE_TEMP_2 |
507 		    SPD_DEVICE_PMIC_0 | SPD_DEVICE_RCD | SPD_DEVICE_SPD }
508 	}, {
509 		.hs_key = SPD_KEY_MOD_HEIGHT,
510 		.hs_type = DATA_TYPE_UINT32,
511 		.hs_val = { .hs_u32 = 32 }
512 	}, {
513 		.hs_key = SPD_KEY_MOD_FRONT_THICK,
514 		.hs_type = DATA_TYPE_UINT32,
515 		.hs_val = { .hs_u32 = 2 }
516 	}, {
517 		.hs_key = SPD_KEY_MOD_BACK_THICK,
518 		.hs_type = DATA_TYPE_UINT32,
519 		.hs_val = { .hs_u32 = 3 }
520 	}, {
521 		.hs_key = SPD_KEY_MOD_REF_DESIGN,
522 		.hs_type = DATA_TYPE_STRING,
523 		.hs_val = { .hs_str = "D" }
524 	}, {
525 		.hs_key = SPD_KEY_MOD_DESIGN_REV,
526 		.hs_type = DATA_TYPE_UINT32,
527 		.hs_val = { .hs_u32 = 0 }
528 	}, {
529 		.hs_key = SPD_KEY_MOD_OPER_TEMP,
530 		.hs_type = DATA_TYPE_UINT32,
531 		.hs_val = { .hs_u32 = JEDEC_TEMP_CASE_XT }
532 	}, {
533 		.hs_key = SPD_KEY_MOD_NROWS,
534 		.hs_type = DATA_TYPE_UINT32,
535 		.hs_val = { .hs_u32 = 2 }
536 	}, {
537 		.hs_key = SPD_KEY_RANK_ASYM,
538 		.hs_type = DATA_TYPE_BOOLEAN,
539 		.hs_val = { .hs_bool = false }
540 	}, {
541 		.hs_key = SPD_KEY_NRANKS,
542 		.hs_type = DATA_TYPE_UINT32,
543 		.hs_val = { .hs_u32 = 1 }
544 	}, {
545 		.hs_key = SPD_KEY_NSUBCHAN,
546 		.hs_type = DATA_TYPE_UINT32,
547 		.hs_val = { .hs_u32 = 2 }
548 	}, {
549 		.hs_key = SPD_KEY_DRAM_WIDTH,
550 		.hs_type = DATA_TYPE_UINT32,
551 		.hs_val = { .hs_u32 = 8 }
552 	}, {
553 		.hs_key = SPD_KEY_DATA_WIDTH,
554 		.hs_type = DATA_TYPE_UINT32,
555 		.hs_val = { .hs_u32 = 32 }
556 	}, {
557 		.hs_key = SPD_KEY_ECC_WIDTH,
558 		.hs_type = DATA_TYPE_UINT32,
559 		.hs_val = { .hs_u32 = 8 }
560 	}, {
561 		.hs_key = SPD_KEY_DEV_RCD_MFG_NAME,
562 		.hs_type = DATA_TYPE_STRING,
563 		.hs_val = { .hs_str = "Montage Technology Group" }
564 	}, {
565 		.hs_key = SPD_KEY_DEV_RCD_TYPE,
566 		.hs_type = DATA_TYPE_UINT32,
567 		.hs_val = { .hs_u32 = SPD_RCD_T_DDR5RCD01 },
568 	}, {
569 		.hs_key = SPD_KEY_DEV_RCD_REV,
570 		.hs_type = DATA_TYPE_STRING,
571 		.hs_val = { .hs_str = "2.2" }
572 	}, {
573 		.hs_key = SPD_KEY_DDR5_RCD_QACK_EN,
574 		.hs_type = DATA_TYPE_BOOLEAN,
575 		.hs_val = { .hs_bool = true }
576 	}, {
577 		.hs_key = SPD_KEY_DDR5_RCD_QBCK_EN,
578 		.hs_type = DATA_TYPE_BOOLEAN,
579 		.hs_val = { .hs_bool = false }
580 	}, {
581 		.hs_key = SPD_KEY_DDR5_RCD_QCCK_EN,
582 		.hs_type = DATA_TYPE_BOOLEAN,
583 		.hs_val = { .hs_bool = false }
584 	}, {
585 		.hs_key = SPD_KEY_DDR5_RCD_QDCK_EN,
586 		.hs_type = DATA_TYPE_BOOLEAN,
587 		.hs_val = { .hs_bool = false }
588 	}, {
589 		.hs_key = SPD_KEY_DDR5_RCD_QACS_EN,
590 		.hs_type = DATA_TYPE_BOOLEAN,
591 		.hs_val = { .hs_bool = true }
592 	}, {
593 		.hs_key = SPD_KEY_DDR5_RCD_QBCS_EN,
594 		.hs_type = DATA_TYPE_BOOLEAN,
595 		.hs_val = { .hs_bool = false }
596 	}, {
597 		.hs_key = SPD_KEY_DDR5_RCD_QxCA13_EN,
598 		.hs_type = DATA_TYPE_BOOLEAN,
599 		.hs_val = { .hs_bool = true }
600 	}, {
601 		.hs_key = SPD_KEY_DDR5_RCD_QACK_DS,
602 		.hs_type = DATA_TYPE_UINT32,
603 		.hs_val = { .hs_u32 = SPD_DRIVE_LIGHT },
604 	}, {
605 		.hs_key = SPD_KEY_DDR5_RCD_QCK_SLEW,
606 		.hs_type = DATA_TYPE_UINT32,
607 		.hs_val = { .hs_u32 = SPD_SLEW_MODERATE },
608 	}, {
609 		.hs_key = SPD_KEY_DDR5_RCD_QCA_SLEW,
610 		.hs_type = DATA_TYPE_UINT32,
611 		.hs_val = { .hs_u32 = SPD_SLEW_SLOW },
612 	}, {
613 		.hs_key = SPD_KEY_DDR5_RCD_QCS_SLEW,
614 		.hs_type = DATA_TYPE_UINT32,
615 		.hs_val = { .hs_u32 = SPD_SLEW_SLOW },
616 	}, {
617 		.hs_key = SPD_KEY_MFG_MOD_MFG_NAME,
618 		.hs_type = DATA_TYPE_STRING,
619 		.hs_val = { .hs_str = "A-DATA Technology" }
620 	}, {
621 		.hs_key = SPD_KEY_MFG_MOD_YEAR,
622 		.hs_type = DATA_TYPE_STRING,
623 		.hs_val = { .hs_str = "AF" }
624 	}, {
625 		.hs_key = SPD_KEY_MFG_MOD_WEEK,
626 		.hs_type = DATA_TYPE_STRING,
627 		.hs_val = { .hs_str = "82" }
628 	}, {
629 		.hs_key = SPD_KEY_MFG_MOD_SN,
630 		.hs_type = DATA_TYPE_STRING,
631 		.hs_val = { .hs_str = "13576428" }
632 	}, {
633 		.hs_key = SPD_KEY_MFG_MOD_PN,
634 		.hs_type = DATA_TYPE_STRING,
635 		.hs_val = { .hs_str = "AQD-D5V16GR48-SB" }
636 	}, {
637 		.hs_key = SPD_KEY_MFG_MOD_REV,
638 		.hs_type = DATA_TYPE_STRING,
639 		.hs_val = { .hs_str = "00" }
640 	}, {
641 		.hs_key = SPD_KEY_MFG_DRAM_MFG_NAME,
642 		.hs_type = DATA_TYPE_STRING,
643 		.hs_val = { .hs_str = "Samsung" }
644 	}, {
645 		.hs_key = SPD_KEY_TCKAVG_MIN,
646 		.hs_type = DATA_TYPE_UINT64,
647 		.hs_val = { .hs_u64 = 416 },
648 	}, {
649 		.hs_key = SPD_KEY_TCKAVG_MAX,
650 		.hs_type = DATA_TYPE_UINT64,
651 		.hs_val = { .hs_u64 = 1010 },
652 	}, {
653 		.hs_key = SPD_KEY_CAS,
654 		.hs_type = DATA_TYPE_UINT32_ARRAY,
655 		.hs_val = { .hs_u32a = { .ha_nval = 8,
656 		    .ha_vals = { 22, 26, 28, 30, 32, 36, 40, 42 } } },
657 	}, {
658 		.hs_key = SPD_KEY_TAA_MIN,
659 		.hs_type = DATA_TYPE_UINT64,
660 		.hs_val = { .hs_u64 = 16000 },
661 	}, {
662 		.hs_key = SPD_KEY_TRCD_MIN,
663 		.hs_type = DATA_TYPE_UINT64,
664 		.hs_val = { .hs_u64 = 16000 },
665 	}, {
666 		.hs_key = SPD_KEY_TRP_MIN,
667 		.hs_type = DATA_TYPE_UINT64,
668 		.hs_val = { .hs_u64 = 16000 },
669 	}, {
670 		.hs_key = SPD_KEY_TRAS_MIN,
671 		.hs_type = DATA_TYPE_UINT64,
672 		.hs_val = { .hs_u64 = 32000 },
673 	}, {
674 		.hs_key = SPD_KEY_TRC_MIN,
675 		.hs_type = DATA_TYPE_UINT64,
676 		.hs_val = { .hs_u64 = 48000 },
677 	}, {
678 		.hs_key = SPD_KEY_TWR_MIN,
679 		.hs_type = DATA_TYPE_UINT64,
680 		.hs_val = { .hs_u64 = 30000 },
681 	}, {
682 		.hs_key = SPD_KEY_TRFC1_MIN,
683 		.hs_type = DATA_TYPE_UINT64,
684 		.hs_val = { .hs_u64 = 295000 }
685 	}, {
686 		.hs_key = SPD_KEY_TRFC2_MIN,
687 		.hs_type = DATA_TYPE_UINT64,
688 		.hs_val = { .hs_u64 = 160000 }
689 	}, {
690 		.hs_key = SPD_KEY_TRFCSB,
691 		.hs_type = DATA_TYPE_UINT64,
692 		.hs_val = { .hs_u64 = 130000 }
693 	}, {
694 		.hs_key = NULL
695 	} }
696 };
697