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