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