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