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 2023 Oxide Computer Company 14 */ 15 16 /* 17 * Go through and test the different versions of NPS hashing. Unlike with the 18 * COD hash, we also need to take into account socket interleaving. In addition 19 * to the basic ones, we also do a 5-channel and 6-channel variant to get 20 * various parts of the non-power of 2 forms tested. 21 */ 22 23 #include "zen_umc_test.h" 24 25 /* 26 * Start with the heavy hitter, the 2 socket, 8 channel (8/socket) configuration 27 * that does both socket interleaving and the hashing. Because this is a DFv4 28 * variant, we opt to set up the channels for DDR5. 29 */ 30 static const zen_umc_t zen_umc_nps8_2p = { 31 .umc_tom = 4ULL * 1024ULL * 1024ULL * 1024ULL, 32 .umc_tom2 = 256ULL * 1024ULL * 1024ULL * 1024ULL, 33 .umc_df_rev = DF_REV_4, 34 .umc_decomp = { 35 .dfd_sock_mask = 0x01, 36 .dfd_die_mask = 0x00, 37 .dfd_node_mask = 0x20, 38 .dfd_comp_mask = 0x1f, 39 .dfd_sock_shift = 0, 40 .dfd_die_shift = 0, 41 .dfd_node_shift = 5, 42 .dfd_comp_shift = 0 43 }, 44 .umc_ndfs = 2, 45 .umc_dfs = { { 46 .zud_dfno = 0, 47 .zud_dram_nrules = 1, 48 .zud_nchan = 8, 49 .zud_cs_nremap = 0, 50 .zud_hole_base = 0, 51 .zud_rules = { { 52 .ddr_flags = DF_DRAM_F_VALID | DF_DRAM_F_HASH_16_18 | 53 DF_DRAM_F_HASH_21_23 | DF_DRAM_F_HASH_30_32, 54 .ddr_base = 0, 55 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 1024ULL, 56 .ddr_dest_fabid = 0, 57 .ddr_sock_ileave_bits = 1, 58 .ddr_die_ileave_bits = 0, 59 .ddr_addr_start = 9, 60 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 61 } }, 62 .zud_chan = { { 63 .chan_flags = UMC_CHAN_F_ECC_EN, 64 .chan_fabid = 0, 65 .chan_instid = 0, 66 .chan_logid = 0, 67 .chan_nrules = 1, 68 .chan_type = UMC_DIMM_T_DDR5, 69 .chan_rules = { { 70 .ddr_flags = DF_DRAM_F_VALID | 71 DF_DRAM_F_HASH_16_18 | 72 DF_DRAM_F_HASH_21_23 | 73 DF_DRAM_F_HASH_30_32, 74 .ddr_base = 0, 75 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 76 1024ULL, 77 .ddr_dest_fabid = 0, 78 .ddr_sock_ileave_bits = 1, 79 .ddr_die_ileave_bits = 0, 80 .ddr_addr_start = 9, 81 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 82 } }, 83 .chan_dimms = { { 84 .ud_flags = UMC_DIMM_F_VALID, 85 .ud_width = UMC_DIMM_W_X4, 86 .ud_kind = UMC_DIMM_K_RDIMM, 87 .ud_dimmno = 0, 88 .ud_cs = { { 89 .ucs_base = { 90 .udb_base = 0, 91 .udb_valid = B_TRUE 92 }, 93 .ucs_base_mask = 0x3ffffffff, 94 .ucs_nbanks = 0x5, 95 .ucs_ncol = 0xa, 96 .ucs_nrow_lo = 0x10, 97 .ucs_nbank_groups = 0x3, 98 .ucs_row_low_bit = 0x12, 99 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 100 0xe }, 101 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 102 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 103 .ucs_subchan = 0x6 104 } } 105 } }, 106 }, { 107 .chan_flags = UMC_CHAN_F_ECC_EN, 108 .chan_fabid = 1, 109 .chan_instid = 1, 110 .chan_logid = 1, 111 .chan_nrules = 1, 112 .chan_type = UMC_DIMM_T_DDR5, 113 .chan_rules = { { 114 .ddr_flags = DF_DRAM_F_VALID | 115 DF_DRAM_F_HASH_16_18 | 116 DF_DRAM_F_HASH_21_23 | 117 DF_DRAM_F_HASH_30_32, 118 .ddr_base = 0, 119 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 120 1024ULL, 121 .ddr_dest_fabid = 0, 122 .ddr_sock_ileave_bits = 1, 123 .ddr_die_ileave_bits = 0, 124 .ddr_addr_start = 9, 125 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 126 } }, 127 .chan_dimms = { { 128 .ud_flags = UMC_DIMM_F_VALID, 129 .ud_width = UMC_DIMM_W_X4, 130 .ud_kind = UMC_DIMM_K_RDIMM, 131 .ud_dimmno = 0, 132 .ud_cs = { { 133 .ucs_base = { 134 .udb_base = 0, 135 .udb_valid = B_TRUE 136 }, 137 .ucs_base_mask = 0x3ffffffff, 138 .ucs_nbanks = 0x5, 139 .ucs_ncol = 0xa, 140 .ucs_nrow_lo = 0x10, 141 .ucs_nbank_groups = 0x3, 142 .ucs_row_low_bit = 0x12, 143 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 144 0xe }, 145 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 146 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 147 .ucs_subchan = 0x6 148 } } 149 } }, 150 }, { 151 .chan_flags = UMC_CHAN_F_ECC_EN, 152 .chan_fabid = 2, 153 .chan_instid = 2, 154 .chan_logid = 2, 155 .chan_nrules = 1, 156 .chan_type = UMC_DIMM_T_DDR5, 157 .chan_rules = { { 158 .ddr_flags = DF_DRAM_F_VALID | 159 DF_DRAM_F_HASH_16_18 | 160 DF_DRAM_F_HASH_21_23 | 161 DF_DRAM_F_HASH_30_32, 162 .ddr_base = 0, 163 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 164 1024ULL, 165 .ddr_dest_fabid = 0, 166 .ddr_sock_ileave_bits = 1, 167 .ddr_die_ileave_bits = 0, 168 .ddr_addr_start = 9, 169 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 170 } }, 171 .chan_dimms = { { 172 .ud_flags = UMC_DIMM_F_VALID, 173 .ud_width = UMC_DIMM_W_X4, 174 .ud_kind = UMC_DIMM_K_RDIMM, 175 .ud_dimmno = 0, 176 .ud_cs = { { 177 .ucs_base = { 178 .udb_base = 0, 179 .udb_valid = B_TRUE 180 }, 181 .ucs_base_mask = 0x3ffffffff, 182 .ucs_nbanks = 0x5, 183 .ucs_ncol = 0xa, 184 .ucs_nrow_lo = 0x10, 185 .ucs_nbank_groups = 0x3, 186 .ucs_row_low_bit = 0x12, 187 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 188 0xe }, 189 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 190 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 191 .ucs_subchan = 0x6 192 } } 193 } }, 194 }, { 195 .chan_flags = UMC_CHAN_F_ECC_EN, 196 .chan_fabid = 3, 197 .chan_instid = 3, 198 .chan_logid = 3, 199 .chan_nrules = 1, 200 .chan_type = UMC_DIMM_T_DDR5, 201 .chan_rules = { { 202 .ddr_flags = DF_DRAM_F_VALID | 203 DF_DRAM_F_HASH_16_18 | 204 DF_DRAM_F_HASH_21_23 | 205 DF_DRAM_F_HASH_30_32, 206 .ddr_base = 0, 207 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 208 1024ULL, 209 .ddr_dest_fabid = 0, 210 .ddr_sock_ileave_bits = 1, 211 .ddr_die_ileave_bits = 0, 212 .ddr_addr_start = 9, 213 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 214 } }, 215 .chan_dimms = { { 216 .ud_flags = UMC_DIMM_F_VALID, 217 .ud_width = UMC_DIMM_W_X4, 218 .ud_kind = UMC_DIMM_K_RDIMM, 219 .ud_dimmno = 0, 220 .ud_cs = { { 221 .ucs_base = { 222 .udb_base = 0, 223 .udb_valid = B_TRUE 224 }, 225 .ucs_base_mask = 0x3ffffffff, 226 .ucs_nbanks = 0x5, 227 .ucs_ncol = 0xa, 228 .ucs_nrow_lo = 0x10, 229 .ucs_nbank_groups = 0x3, 230 .ucs_row_low_bit = 0x12, 231 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 232 0xe }, 233 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 234 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 235 .ucs_subchan = 0x6 236 } } 237 } }, 238 }, { 239 .chan_flags = UMC_CHAN_F_ECC_EN, 240 .chan_fabid = 4, 241 .chan_instid = 4, 242 .chan_logid = 4, 243 .chan_nrules = 1, 244 .chan_type = UMC_DIMM_T_DDR5, 245 .chan_rules = { { 246 .ddr_flags = DF_DRAM_F_VALID | 247 DF_DRAM_F_HASH_16_18 | 248 DF_DRAM_F_HASH_21_23 | 249 DF_DRAM_F_HASH_30_32, 250 .ddr_base = 0, 251 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 252 1024ULL, 253 .ddr_dest_fabid = 0, 254 .ddr_sock_ileave_bits = 1, 255 .ddr_die_ileave_bits = 0, 256 .ddr_addr_start = 9, 257 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 258 } }, 259 .chan_dimms = { { 260 .ud_flags = UMC_DIMM_F_VALID, 261 .ud_width = UMC_DIMM_W_X4, 262 .ud_kind = UMC_DIMM_K_RDIMM, 263 .ud_dimmno = 0, 264 .ud_cs = { { 265 .ucs_base = { 266 .udb_base = 0, 267 .udb_valid = B_TRUE 268 }, 269 .ucs_base_mask = 0x3ffffffff, 270 .ucs_nbanks = 0x5, 271 .ucs_ncol = 0xa, 272 .ucs_nrow_lo = 0x10, 273 .ucs_nbank_groups = 0x3, 274 .ucs_row_low_bit = 0x12, 275 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 276 0xe }, 277 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 278 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 279 .ucs_subchan = 0x6 280 } } 281 } }, 282 }, { 283 .chan_flags = UMC_CHAN_F_ECC_EN, 284 .chan_fabid = 5, 285 .chan_instid = 5, 286 .chan_logid = 5, 287 .chan_nrules = 1, 288 .chan_type = UMC_DIMM_T_DDR5, 289 .chan_rules = { { 290 .ddr_flags = DF_DRAM_F_VALID | 291 DF_DRAM_F_HASH_16_18 | 292 DF_DRAM_F_HASH_21_23 | 293 DF_DRAM_F_HASH_30_32, 294 .ddr_base = 0, 295 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 296 1024ULL, 297 .ddr_dest_fabid = 0, 298 .ddr_sock_ileave_bits = 1, 299 .ddr_die_ileave_bits = 0, 300 .ddr_addr_start = 9, 301 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 302 } }, 303 .chan_dimms = { { 304 .ud_flags = UMC_DIMM_F_VALID, 305 .ud_width = UMC_DIMM_W_X4, 306 .ud_kind = UMC_DIMM_K_RDIMM, 307 .ud_dimmno = 0, 308 .ud_cs = { { 309 .ucs_base = { 310 .udb_base = 0, 311 .udb_valid = B_TRUE 312 }, 313 .ucs_base_mask = 0x3ffffffff, 314 .ucs_nbanks = 0x5, 315 .ucs_ncol = 0xa, 316 .ucs_nrow_lo = 0x10, 317 .ucs_nbank_groups = 0x3, 318 .ucs_row_low_bit = 0x12, 319 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 320 0xe }, 321 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 322 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 323 .ucs_subchan = 0x6 324 } } 325 } }, 326 }, { 327 .chan_flags = UMC_CHAN_F_ECC_EN, 328 .chan_fabid = 6, 329 .chan_instid = 6, 330 .chan_logid = 6, 331 .chan_nrules = 1, 332 .chan_type = UMC_DIMM_T_DDR5, 333 .chan_rules = { { 334 .ddr_flags = DF_DRAM_F_VALID | 335 DF_DRAM_F_HASH_16_18 | 336 DF_DRAM_F_HASH_21_23 | 337 DF_DRAM_F_HASH_30_32, 338 .ddr_base = 0, 339 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 340 1024ULL, 341 .ddr_dest_fabid = 0, 342 .ddr_sock_ileave_bits = 1, 343 .ddr_die_ileave_bits = 0, 344 .ddr_addr_start = 9, 345 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 346 } }, 347 .chan_dimms = { { 348 .ud_flags = UMC_DIMM_F_VALID, 349 .ud_width = UMC_DIMM_W_X4, 350 .ud_kind = UMC_DIMM_K_RDIMM, 351 .ud_dimmno = 0, 352 .ud_cs = { { 353 .ucs_base = { 354 .udb_base = 0, 355 .udb_valid = B_TRUE 356 }, 357 .ucs_base_mask = 0x3ffffffff, 358 .ucs_nbanks = 0x5, 359 .ucs_ncol = 0xa, 360 .ucs_nrow_lo = 0x10, 361 .ucs_nbank_groups = 0x3, 362 .ucs_row_low_bit = 0x12, 363 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 364 0xe }, 365 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 366 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 367 .ucs_subchan = 0x6 368 } } 369 } }, 370 }, { 371 .chan_flags = UMC_CHAN_F_ECC_EN, 372 .chan_fabid = 7, 373 .chan_instid = 7, 374 .chan_logid = 7, 375 .chan_nrules = 1, 376 .chan_type = UMC_DIMM_T_DDR5, 377 .chan_rules = { { 378 .ddr_flags = DF_DRAM_F_VALID | 379 DF_DRAM_F_HASH_16_18 | 380 DF_DRAM_F_HASH_21_23 | 381 DF_DRAM_F_HASH_30_32, 382 .ddr_base = 0, 383 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 384 1024ULL, 385 .ddr_dest_fabid = 0, 386 .ddr_sock_ileave_bits = 1, 387 .ddr_die_ileave_bits = 0, 388 .ddr_addr_start = 9, 389 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 390 } }, 391 .chan_dimms = { { 392 .ud_flags = UMC_DIMM_F_VALID, 393 .ud_width = UMC_DIMM_W_X4, 394 .ud_kind = UMC_DIMM_K_RDIMM, 395 .ud_dimmno = 0, 396 .ud_cs = { { 397 .ucs_base = { 398 .udb_base = 0, 399 .udb_valid = B_TRUE 400 }, 401 .ucs_base_mask = 0x3ffffffff, 402 .ucs_nbanks = 0x5, 403 .ucs_ncol = 0xa, 404 .ucs_nrow_lo = 0x10, 405 .ucs_nbank_groups = 0x3, 406 .ucs_row_low_bit = 0x12, 407 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 408 0xe }, 409 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 410 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 411 .ucs_subchan = 0x6 412 } } 413 } }, 414 } } 415 }, { 416 .zud_dfno = 1, 417 .zud_dram_nrules = 2, 418 .zud_nchan = 8, 419 .zud_cs_nremap = 0, 420 .zud_hole_base = 0, 421 .zud_rules = { { 422 .ddr_flags = DF_DRAM_F_VALID | DF_DRAM_F_HASH_16_18 | 423 DF_DRAM_F_HASH_21_23 | DF_DRAM_F_HASH_30_32, 424 .ddr_base = 0, 425 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 1024ULL, 426 .ddr_dest_fabid = 0, 427 .ddr_sock_ileave_bits = 1, 428 .ddr_die_ileave_bits = 0, 429 .ddr_addr_start = 9, 430 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 431 } }, 432 .zud_chan = { { 433 .chan_flags = UMC_CHAN_F_ECC_EN, 434 .chan_fabid = 0x20, 435 .chan_instid = 0, 436 .chan_logid = 0, 437 .chan_nrules = 1, 438 .chan_type = UMC_DIMM_T_DDR5, 439 .chan_rules = { { 440 .ddr_flags = DF_DRAM_F_VALID | 441 DF_DRAM_F_HASH_16_18 | 442 DF_DRAM_F_HASH_21_23 | 443 DF_DRAM_F_HASH_30_32, 444 .ddr_base = 0, 445 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 446 1024ULL, 447 .ddr_dest_fabid = 0, 448 .ddr_sock_ileave_bits = 1, 449 .ddr_die_ileave_bits = 0, 450 .ddr_addr_start = 9, 451 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 452 } }, 453 .chan_dimms = { { 454 .ud_flags = UMC_DIMM_F_VALID, 455 .ud_width = UMC_DIMM_W_X4, 456 .ud_kind = UMC_DIMM_K_RDIMM, 457 .ud_dimmno = 0, 458 .ud_cs = { { 459 .ucs_base = { 460 .udb_base = 0, 461 .udb_valid = B_TRUE 462 }, 463 .ucs_base_mask = 0x3ffffffff, 464 .ucs_nbanks = 0x5, 465 .ucs_ncol = 0xa, 466 .ucs_nrow_lo = 0x10, 467 .ucs_nbank_groups = 0x3, 468 .ucs_row_low_bit = 0x12, 469 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 470 0xe }, 471 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 472 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 473 .ucs_subchan = 0x6 474 } } 475 } }, 476 }, { 477 .chan_flags = UMC_CHAN_F_ECC_EN, 478 .chan_fabid = 0x21, 479 .chan_instid = 1, 480 .chan_logid = 1, 481 .chan_nrules = 1, 482 .chan_type = UMC_DIMM_T_DDR5, 483 .chan_rules = { { 484 .ddr_flags = DF_DRAM_F_VALID | 485 DF_DRAM_F_HASH_16_18 | 486 DF_DRAM_F_HASH_21_23 | 487 DF_DRAM_F_HASH_30_32, 488 .ddr_base = 0, 489 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 490 1024ULL, 491 .ddr_dest_fabid = 0, 492 .ddr_sock_ileave_bits = 1, 493 .ddr_die_ileave_bits = 0, 494 .ddr_addr_start = 9, 495 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 496 } }, 497 .chan_dimms = { { 498 .ud_flags = UMC_DIMM_F_VALID, 499 .ud_width = UMC_DIMM_W_X4, 500 .ud_kind = UMC_DIMM_K_RDIMM, 501 .ud_dimmno = 0, 502 .ud_cs = { { 503 .ucs_base = { 504 .udb_base = 0, 505 .udb_valid = B_TRUE 506 }, 507 .ucs_base_mask = 0x3ffffffff, 508 .ucs_nbanks = 0x5, 509 .ucs_ncol = 0xa, 510 .ucs_nrow_lo = 0x10, 511 .ucs_nbank_groups = 0x3, 512 .ucs_row_low_bit = 0x12, 513 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 514 0xe }, 515 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 516 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 517 .ucs_subchan = 0x6 518 } } 519 } }, 520 }, { 521 .chan_flags = UMC_CHAN_F_ECC_EN, 522 .chan_fabid = 0x22, 523 .chan_instid = 2, 524 .chan_logid = 2, 525 .chan_nrules = 1, 526 .chan_type = UMC_DIMM_T_DDR5, 527 .chan_rules = { { 528 .ddr_flags = DF_DRAM_F_VALID | 529 DF_DRAM_F_HASH_16_18 | 530 DF_DRAM_F_HASH_21_23 | 531 DF_DRAM_F_HASH_30_32, 532 .ddr_base = 0, 533 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 534 1024ULL, 535 .ddr_dest_fabid = 0, 536 .ddr_sock_ileave_bits = 1, 537 .ddr_die_ileave_bits = 0, 538 .ddr_addr_start = 9, 539 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 540 } }, 541 .chan_dimms = { { 542 .ud_flags = UMC_DIMM_F_VALID, 543 .ud_width = UMC_DIMM_W_X4, 544 .ud_kind = UMC_DIMM_K_RDIMM, 545 .ud_dimmno = 0, 546 .ud_cs = { { 547 .ucs_base = { 548 .udb_base = 0, 549 .udb_valid = B_TRUE 550 }, 551 .ucs_base_mask = 0x3ffffffff, 552 .ucs_nbanks = 0x5, 553 .ucs_ncol = 0xa, 554 .ucs_nrow_lo = 0x10, 555 .ucs_nbank_groups = 0x3, 556 .ucs_row_low_bit = 0x12, 557 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 558 0xe }, 559 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 560 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 561 .ucs_subchan = 0x6 562 } } 563 } }, 564 }, { 565 .chan_flags = UMC_CHAN_F_ECC_EN, 566 .chan_fabid = 0x23, 567 .chan_instid = 3, 568 .chan_logid = 3, 569 .chan_nrules = 1, 570 .chan_type = UMC_DIMM_T_DDR5, 571 .chan_rules = { { 572 .ddr_flags = DF_DRAM_F_VALID | 573 DF_DRAM_F_HASH_16_18 | 574 DF_DRAM_F_HASH_21_23 | 575 DF_DRAM_F_HASH_30_32, 576 .ddr_base = 0, 577 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 578 1024ULL, 579 .ddr_dest_fabid = 0, 580 .ddr_sock_ileave_bits = 1, 581 .ddr_die_ileave_bits = 0, 582 .ddr_addr_start = 9, 583 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 584 } }, 585 .chan_dimms = { { 586 .ud_flags = UMC_DIMM_F_VALID, 587 .ud_width = UMC_DIMM_W_X4, 588 .ud_kind = UMC_DIMM_K_RDIMM, 589 .ud_dimmno = 0, 590 .ud_cs = { { 591 .ucs_base = { 592 .udb_base = 0, 593 .udb_valid = B_TRUE 594 }, 595 .ucs_base_mask = 0x3ffffffff, 596 .ucs_nbanks = 0x5, 597 .ucs_ncol = 0xa, 598 .ucs_nrow_lo = 0x10, 599 .ucs_nbank_groups = 0x3, 600 .ucs_row_low_bit = 0x12, 601 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 602 0xe }, 603 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 604 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 605 .ucs_subchan = 0x6 606 } } 607 } }, 608 }, { 609 .chan_flags = UMC_CHAN_F_ECC_EN, 610 .chan_fabid = 0x24, 611 .chan_instid = 4, 612 .chan_logid = 4, 613 .chan_nrules = 1, 614 .chan_type = UMC_DIMM_T_DDR5, 615 .chan_rules = { { 616 .ddr_flags = DF_DRAM_F_VALID | 617 DF_DRAM_F_HASH_16_18 | 618 DF_DRAM_F_HASH_21_23 | 619 DF_DRAM_F_HASH_30_32, 620 .ddr_base = 0, 621 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 622 1024ULL, 623 .ddr_dest_fabid = 0, 624 .ddr_sock_ileave_bits = 1, 625 .ddr_die_ileave_bits = 0, 626 .ddr_addr_start = 9, 627 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 628 } }, 629 .chan_dimms = { { 630 .ud_flags = UMC_DIMM_F_VALID, 631 .ud_width = UMC_DIMM_W_X4, 632 .ud_kind = UMC_DIMM_K_RDIMM, 633 .ud_dimmno = 0, 634 .ud_cs = { { 635 .ucs_base = { 636 .udb_base = 0, 637 .udb_valid = B_TRUE 638 }, 639 .ucs_base_mask = 0x3ffffffff, 640 .ucs_nbanks = 0x5, 641 .ucs_ncol = 0xa, 642 .ucs_nrow_lo = 0x10, 643 .ucs_nbank_groups = 0x3, 644 .ucs_row_low_bit = 0x12, 645 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 646 0xe }, 647 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 648 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 649 .ucs_subchan = 0x6 650 } } 651 } }, 652 }, { 653 .chan_flags = UMC_CHAN_F_ECC_EN, 654 .chan_fabid = 0x25, 655 .chan_instid = 5, 656 .chan_logid = 5, 657 .chan_nrules = 1, 658 .chan_type = UMC_DIMM_T_DDR5, 659 .chan_rules = { { 660 .ddr_flags = DF_DRAM_F_VALID | 661 DF_DRAM_F_HASH_16_18 | 662 DF_DRAM_F_HASH_21_23 | 663 DF_DRAM_F_HASH_30_32, 664 .ddr_base = 0, 665 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 666 1024ULL, 667 .ddr_dest_fabid = 0, 668 .ddr_sock_ileave_bits = 1, 669 .ddr_die_ileave_bits = 0, 670 .ddr_addr_start = 9, 671 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 672 } }, 673 .chan_dimms = { { 674 .ud_flags = UMC_DIMM_F_VALID, 675 .ud_width = UMC_DIMM_W_X4, 676 .ud_kind = UMC_DIMM_K_RDIMM, 677 .ud_dimmno = 0, 678 .ud_cs = { { 679 .ucs_base = { 680 .udb_base = 0, 681 .udb_valid = B_TRUE 682 }, 683 .ucs_base_mask = 0x3ffffffff, 684 .ucs_nbanks = 0x5, 685 .ucs_ncol = 0xa, 686 .ucs_nrow_lo = 0x10, 687 .ucs_nbank_groups = 0x3, 688 .ucs_row_low_bit = 0x12, 689 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 690 0xe }, 691 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 692 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 693 .ucs_subchan = 0x6 694 } } 695 } }, 696 }, { 697 .chan_flags = UMC_CHAN_F_ECC_EN, 698 .chan_fabid = 0x26, 699 .chan_instid = 6, 700 .chan_logid = 6, 701 .chan_nrules = 1, 702 .chan_type = UMC_DIMM_T_DDR5, 703 .chan_rules = { { 704 .ddr_flags = DF_DRAM_F_VALID | 705 DF_DRAM_F_HASH_16_18 | 706 DF_DRAM_F_HASH_21_23 | 707 DF_DRAM_F_HASH_30_32, 708 .ddr_base = 0, 709 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 710 1024ULL, 711 .ddr_dest_fabid = 0, 712 .ddr_sock_ileave_bits = 1, 713 .ddr_die_ileave_bits = 0, 714 .ddr_addr_start = 9, 715 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 716 } }, 717 .chan_dimms = { { 718 .ud_flags = UMC_DIMM_F_VALID, 719 .ud_width = UMC_DIMM_W_X4, 720 .ud_kind = UMC_DIMM_K_RDIMM, 721 .ud_dimmno = 0, 722 .ud_cs = { { 723 .ucs_base = { 724 .udb_base = 0, 725 .udb_valid = B_TRUE 726 }, 727 .ucs_base_mask = 0x3ffffffff, 728 .ucs_nbanks = 0x5, 729 .ucs_ncol = 0xa, 730 .ucs_nrow_lo = 0x10, 731 .ucs_nbank_groups = 0x3, 732 .ucs_row_low_bit = 0x12, 733 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 734 0xe }, 735 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 736 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 737 .ucs_subchan = 0x6 738 } } 739 } }, 740 }, { 741 .chan_flags = UMC_CHAN_F_ECC_EN, 742 .chan_fabid = 0x27, 743 .chan_instid = 7, 744 .chan_logid = 7, 745 .chan_nrules = 1, 746 .chan_type = UMC_DIMM_T_DDR5, 747 .chan_rules = { { 748 .ddr_flags = DF_DRAM_F_VALID | 749 DF_DRAM_F_HASH_16_18 | 750 DF_DRAM_F_HASH_21_23 | 751 DF_DRAM_F_HASH_30_32, 752 .ddr_base = 0, 753 .ddr_limit = 256ULL * 1024ULL * 1024ULL * 754 1024ULL, 755 .ddr_dest_fabid = 0, 756 .ddr_sock_ileave_bits = 1, 757 .ddr_die_ileave_bits = 0, 758 .ddr_addr_start = 9, 759 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS1_8CH 760 } }, 761 .chan_dimms = { { 762 .ud_flags = UMC_DIMM_F_VALID, 763 .ud_width = UMC_DIMM_W_X4, 764 .ud_kind = UMC_DIMM_K_RDIMM, 765 .ud_dimmno = 0, 766 .ud_cs = { { 767 .ucs_base = { 768 .udb_base = 0, 769 .udb_valid = B_TRUE 770 }, 771 .ucs_base_mask = 0x3ffffffff, 772 .ucs_nbanks = 0x5, 773 .ucs_ncol = 0xa, 774 .ucs_nrow_lo = 0x10, 775 .ucs_nbank_groups = 0x3, 776 .ucs_row_low_bit = 0x12, 777 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 778 0xe }, 779 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 780 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 781 .ucs_subchan = 0x6 782 } } 783 } }, 784 } } 785 } } 786 }; 787 788 /* 789 * Here we switch back to a 1P 2-channel configuration so we can test how things 790 * change with the extra bit that is now included since we're not hashing the 791 * socket. 792 */ 793 static const zen_umc_t zen_umc_nps2_1p = { 794 .umc_tom = 4ULL * 1024ULL * 1024ULL * 1024ULL, 795 .umc_tom2 = 32ULL * 1024ULL * 1024ULL * 1024ULL, 796 .umc_df_rev = DF_REV_4, 797 .umc_decomp = { 798 .dfd_sock_mask = 0x01, 799 .dfd_die_mask = 0x00, 800 .dfd_node_mask = 0x20, 801 .dfd_comp_mask = 0x1f, 802 .dfd_sock_shift = 0, 803 .dfd_die_shift = 0, 804 .dfd_node_shift = 5, 805 .dfd_comp_shift = 0 806 }, 807 .umc_ndfs = 1, 808 .umc_dfs = { { 809 .zud_dfno = 0, 810 .zud_dram_nrules = 1, 811 .zud_nchan = 2, 812 .zud_cs_nremap = 0, 813 .zud_hole_base = 0, 814 .zud_rules = { { 815 .ddr_flags = DF_DRAM_F_VALID | DF_DRAM_F_HASH_16_18 | 816 DF_DRAM_F_HASH_21_23 | DF_DRAM_F_HASH_30_32, 817 .ddr_base = 0, 818 .ddr_limit = 32ULL * 1024ULL * 1024ULL * 1024ULL, 819 .ddr_dest_fabid = 0, 820 .ddr_sock_ileave_bits = 0, 821 .ddr_die_ileave_bits = 0, 822 .ddr_addr_start = 9, 823 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_2CH 824 } }, 825 .zud_chan = { { 826 .chan_flags = UMC_CHAN_F_ECC_EN, 827 .chan_fabid = 0, 828 .chan_instid = 0, 829 .chan_logid = 0, 830 .chan_nrules = 1, 831 .chan_type = UMC_DIMM_T_DDR5, 832 .chan_rules = { { 833 .ddr_flags = DF_DRAM_F_VALID | 834 DF_DRAM_F_HASH_16_18 | 835 DF_DRAM_F_HASH_21_23 | 836 DF_DRAM_F_HASH_30_32, 837 .ddr_base = 0, 838 .ddr_limit = 32ULL * 1024ULL * 1024ULL * 839 1024ULL, 840 .ddr_dest_fabid = 0, 841 .ddr_sock_ileave_bits = 0, 842 .ddr_die_ileave_bits = 0, 843 .ddr_addr_start = 9, 844 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_2CH 845 } }, 846 .chan_dimms = { { 847 .ud_flags = UMC_DIMM_F_VALID, 848 .ud_width = UMC_DIMM_W_X4, 849 .ud_kind = UMC_DIMM_K_RDIMM, 850 .ud_dimmno = 0, 851 .ud_cs = { { 852 .ucs_base = { 853 .udb_base = 0, 854 .udb_valid = B_TRUE 855 }, 856 .ucs_base_mask = 0x3ffffffff, 857 .ucs_nbanks = 0x5, 858 .ucs_ncol = 0xa, 859 .ucs_nrow_lo = 0x10, 860 .ucs_nbank_groups = 0x3, 861 .ucs_row_low_bit = 0x12, 862 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 863 0xe }, 864 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 865 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 866 .ucs_subchan = 0x6 867 } } 868 } }, 869 }, { 870 .chan_flags = UMC_CHAN_F_ECC_EN, 871 .chan_fabid = 1, 872 .chan_instid = 1, 873 .chan_logid = 1, 874 .chan_nrules = 1, 875 .chan_type = UMC_DIMM_T_DDR5, 876 .chan_rules = { { 877 .ddr_flags = DF_DRAM_F_VALID | 878 DF_DRAM_F_HASH_16_18 | 879 DF_DRAM_F_HASH_21_23 | 880 DF_DRAM_F_HASH_30_32, 881 .ddr_base = 0, 882 .ddr_limit = 32ULL * 1024ULL * 1024ULL * 883 1024ULL, 884 .ddr_dest_fabid = 0, 885 .ddr_sock_ileave_bits = 0, 886 .ddr_die_ileave_bits = 0, 887 .ddr_addr_start = 9, 888 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_2CH 889 } }, 890 .chan_dimms = { { 891 .ud_flags = UMC_DIMM_F_VALID, 892 .ud_width = UMC_DIMM_W_X4, 893 .ud_kind = UMC_DIMM_K_RDIMM, 894 .ud_dimmno = 0, 895 .ud_cs = { { 896 .ucs_base = { 897 .udb_base = 0, 898 .udb_valid = B_TRUE 899 }, 900 .ucs_base_mask = 0x3ffffffff, 901 .ucs_nbanks = 0x5, 902 .ucs_ncol = 0xa, 903 .ucs_nrow_lo = 0x10, 904 .ucs_nbank_groups = 0x3, 905 .ucs_row_low_bit = 0x12, 906 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 907 0xe }, 908 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 909 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 910 .ucs_subchan = 0x6 911 } } 912 } }, 913 } } 914 } } 915 }; 916 917 /* 918 * This here is a five-channel version, giving us some of our favorite non-power 919 * of 2 cases. 920 */ 921 static const zen_umc_t zen_umc_nps5_1p = { 922 .umc_tom = 4ULL * 1024ULL * 1024ULL * 1024ULL, 923 .umc_tom2 = 80ULL * 1024ULL * 1024ULL * 1024ULL, 924 .umc_df_rev = DF_REV_4, 925 .umc_decomp = { 926 .dfd_sock_mask = 0x01, 927 .dfd_die_mask = 0x00, 928 .dfd_node_mask = 0x20, 929 .dfd_comp_mask = 0x1f, 930 .dfd_sock_shift = 0, 931 .dfd_die_shift = 0, 932 .dfd_node_shift = 5, 933 .dfd_comp_shift = 0 934 }, 935 .umc_ndfs = 1, 936 .umc_dfs = { { 937 .zud_dfno = 0, 938 .zud_dram_nrules = 1, 939 .zud_nchan = 5, 940 .zud_cs_nremap = 0, 941 .zud_hole_base = 0, 942 .zud_rules = { { 943 .ddr_flags = DF_DRAM_F_VALID | DF_DRAM_F_HASH_16_18 | 944 DF_DRAM_F_HASH_21_23 | DF_DRAM_F_HASH_30_32, 945 .ddr_base = 0, 946 .ddr_limit = 80ULL * 1024ULL * 1024ULL * 1024ULL, 947 .ddr_dest_fabid = 0, 948 .ddr_sock_ileave_bits = 0, 949 .ddr_die_ileave_bits = 0, 950 .ddr_addr_start = 8, 951 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_5CH 952 } }, 953 .zud_chan = { { 954 .chan_flags = UMC_CHAN_F_ECC_EN, 955 .chan_fabid = 0, 956 .chan_instid = 0, 957 .chan_logid = 0, 958 .chan_nrules = 1, 959 .chan_type = UMC_DIMM_T_DDR5, 960 .chan_rules = { { 961 .ddr_flags = DF_DRAM_F_VALID | 962 DF_DRAM_F_HASH_16_18 | 963 DF_DRAM_F_HASH_21_23 | 964 DF_DRAM_F_HASH_30_32, 965 .ddr_base = 0, 966 .ddr_limit = 80ULL * 1024ULL * 1024ULL * 967 1024ULL, 968 .ddr_dest_fabid = 0, 969 .ddr_sock_ileave_bits = 0, 970 .ddr_die_ileave_bits = 0, 971 .ddr_addr_start = 8, 972 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_5CH 973 } }, 974 .chan_dimms = { { 975 .ud_flags = UMC_DIMM_F_VALID, 976 .ud_width = UMC_DIMM_W_X4, 977 .ud_kind = UMC_DIMM_K_RDIMM, 978 .ud_dimmno = 0, 979 .ud_cs = { { 980 .ucs_base = { 981 .udb_base = 0, 982 .udb_valid = B_TRUE 983 }, 984 .ucs_base_mask = 0x3ffffffff, 985 .ucs_nbanks = 0x5, 986 .ucs_ncol = 0xa, 987 .ucs_nrow_lo = 0x10, 988 .ucs_nbank_groups = 0x3, 989 .ucs_row_low_bit = 0x12, 990 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 991 0xe }, 992 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 993 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 994 .ucs_subchan = 0x6 995 } } 996 } }, 997 }, { 998 .chan_flags = UMC_CHAN_F_ECC_EN, 999 .chan_fabid = 1, 1000 .chan_instid = 1, 1001 .chan_logid = 1, 1002 .chan_nrules = 1, 1003 .chan_type = UMC_DIMM_T_DDR5, 1004 .chan_rules = { { 1005 .ddr_flags = DF_DRAM_F_VALID | 1006 DF_DRAM_F_HASH_16_18 | 1007 DF_DRAM_F_HASH_21_23 | 1008 DF_DRAM_F_HASH_30_32, 1009 .ddr_base = 0, 1010 .ddr_limit = 80ULL * 1024ULL * 1024ULL * 1011 1024ULL, 1012 .ddr_dest_fabid = 0, 1013 .ddr_sock_ileave_bits = 0, 1014 .ddr_die_ileave_bits = 0, 1015 .ddr_addr_start = 8, 1016 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_5CH 1017 } }, 1018 .chan_dimms = { { 1019 .ud_flags = UMC_DIMM_F_VALID, 1020 .ud_width = UMC_DIMM_W_X4, 1021 .ud_kind = UMC_DIMM_K_RDIMM, 1022 .ud_dimmno = 0, 1023 .ud_cs = { { 1024 .ucs_base = { 1025 .udb_base = 0, 1026 .udb_valid = B_TRUE 1027 }, 1028 .ucs_base_mask = 0x3ffffffff, 1029 .ucs_nbanks = 0x5, 1030 .ucs_ncol = 0xa, 1031 .ucs_nrow_lo = 0x10, 1032 .ucs_nbank_groups = 0x3, 1033 .ucs_row_low_bit = 0x12, 1034 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1035 0xe }, 1036 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1037 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1038 .ucs_subchan = 0x6 1039 } } 1040 } }, 1041 }, { 1042 .chan_flags = UMC_CHAN_F_ECC_EN, 1043 .chan_fabid = 2, 1044 .chan_instid = 2, 1045 .chan_logid = 2, 1046 .chan_nrules = 1, 1047 .chan_type = UMC_DIMM_T_DDR5, 1048 .chan_rules = { { 1049 .ddr_flags = DF_DRAM_F_VALID | 1050 DF_DRAM_F_HASH_16_18 | 1051 DF_DRAM_F_HASH_21_23 | 1052 DF_DRAM_F_HASH_30_32, 1053 .ddr_base = 0, 1054 .ddr_limit = 80ULL * 1024ULL * 1024ULL * 1055 1024ULL, 1056 .ddr_dest_fabid = 0, 1057 .ddr_sock_ileave_bits = 0, 1058 .ddr_die_ileave_bits = 0, 1059 .ddr_addr_start = 8, 1060 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_5CH 1061 } }, 1062 .chan_dimms = { { 1063 .ud_flags = UMC_DIMM_F_VALID, 1064 .ud_width = UMC_DIMM_W_X4, 1065 .ud_kind = UMC_DIMM_K_RDIMM, 1066 .ud_dimmno = 0, 1067 .ud_cs = { { 1068 .ucs_base = { 1069 .udb_base = 0, 1070 .udb_valid = B_TRUE 1071 }, 1072 .ucs_base_mask = 0x3ffffffff, 1073 .ucs_nbanks = 0x5, 1074 .ucs_ncol = 0xa, 1075 .ucs_nrow_lo = 0x10, 1076 .ucs_nbank_groups = 0x3, 1077 .ucs_row_low_bit = 0x12, 1078 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1079 0xe }, 1080 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1081 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1082 .ucs_subchan = 0x6 1083 } } 1084 } }, 1085 }, { 1086 .chan_flags = UMC_CHAN_F_ECC_EN, 1087 .chan_fabid = 3, 1088 .chan_instid = 3, 1089 .chan_logid = 3, 1090 .chan_nrules = 1, 1091 .chan_type = UMC_DIMM_T_DDR5, 1092 .chan_rules = { { 1093 .ddr_flags = DF_DRAM_F_VALID | 1094 DF_DRAM_F_HASH_16_18 | 1095 DF_DRAM_F_HASH_21_23 | 1096 DF_DRAM_F_HASH_30_32, 1097 .ddr_base = 0, 1098 .ddr_limit = 80ULL * 1024ULL * 1024ULL * 1099 1024ULL, 1100 .ddr_dest_fabid = 0, 1101 .ddr_sock_ileave_bits = 0, 1102 .ddr_die_ileave_bits = 0, 1103 .ddr_addr_start = 8, 1104 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_5CH 1105 } }, 1106 .chan_dimms = { { 1107 .ud_flags = UMC_DIMM_F_VALID, 1108 .ud_width = UMC_DIMM_W_X4, 1109 .ud_kind = UMC_DIMM_K_RDIMM, 1110 .ud_dimmno = 0, 1111 .ud_cs = { { 1112 .ucs_base = { 1113 .udb_base = 0, 1114 .udb_valid = B_TRUE 1115 }, 1116 .ucs_base_mask = 0x3ffffffff, 1117 .ucs_nbanks = 0x5, 1118 .ucs_ncol = 0xa, 1119 .ucs_nrow_lo = 0x10, 1120 .ucs_nbank_groups = 0x3, 1121 .ucs_row_low_bit = 0x12, 1122 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1123 0xe }, 1124 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1125 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1126 .ucs_subchan = 0x6 1127 } } 1128 } }, 1129 }, { 1130 .chan_flags = UMC_CHAN_F_ECC_EN, 1131 .chan_fabid = 4, 1132 .chan_instid = 4, 1133 .chan_logid = 4, 1134 .chan_nrules = 1, 1135 .chan_type = UMC_DIMM_T_DDR5, 1136 .chan_rules = { { 1137 .ddr_flags = DF_DRAM_F_VALID | 1138 DF_DRAM_F_HASH_16_18 | 1139 DF_DRAM_F_HASH_21_23 | 1140 DF_DRAM_F_HASH_30_32, 1141 .ddr_base = 0, 1142 .ddr_limit = 80ULL * 1024ULL * 1024ULL * 1143 1024ULL, 1144 .ddr_dest_fabid = 0, 1145 .ddr_sock_ileave_bits = 0, 1146 .ddr_die_ileave_bits = 0, 1147 .ddr_addr_start = 8, 1148 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_5CH 1149 } }, 1150 .chan_dimms = { { 1151 .ud_flags = UMC_DIMM_F_VALID, 1152 .ud_width = UMC_DIMM_W_X4, 1153 .ud_kind = UMC_DIMM_K_RDIMM, 1154 .ud_dimmno = 0, 1155 .ud_cs = { { 1156 .ucs_base = { 1157 .udb_base = 0, 1158 .udb_valid = B_TRUE 1159 }, 1160 .ucs_base_mask = 0x3ffffffff, 1161 .ucs_nbanks = 0x5, 1162 .ucs_ncol = 0xa, 1163 .ucs_nrow_lo = 0x10, 1164 .ucs_nbank_groups = 0x3, 1165 .ucs_row_low_bit = 0x12, 1166 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1167 0xe }, 1168 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1169 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1170 .ucs_subchan = 0x6 1171 } } 1172 } }, 1173 } } 1174 } } 1175 }; 1176 1177 /* 1178 * And now in 6-channels so we can get the spiciness of the new normalization 1179 * scheme. We've also turned off several of the hash bits on this so we can 1180 * verify that using those middle bits doesn't do anything here. 1181 */ 1182 static const zen_umc_t zen_umc_nps6_1p = { 1183 .umc_tom = 4ULL * 1024ULL * 1024ULL * 1024ULL, 1184 .umc_tom2 = 96ULL * 1024ULL * 1024ULL * 1024ULL, 1185 .umc_df_rev = DF_REV_4, 1186 .umc_decomp = { 1187 .dfd_sock_mask = 0x01, 1188 .dfd_die_mask = 0x00, 1189 .dfd_node_mask = 0x20, 1190 .dfd_comp_mask = 0x1f, 1191 .dfd_sock_shift = 0, 1192 .dfd_die_shift = 0, 1193 .dfd_node_shift = 5, 1194 .dfd_comp_shift = 0 1195 }, 1196 .umc_ndfs = 1, 1197 .umc_dfs = { { 1198 .zud_dfno = 0, 1199 .zud_dram_nrules = 1, 1200 .zud_nchan = 6, 1201 .zud_cs_nremap = 0, 1202 .zud_hole_base = 0, 1203 .zud_rules = { { 1204 .ddr_flags = DF_DRAM_F_VALID | DF_DRAM_F_HASH_30_32, 1205 .ddr_base = 0, 1206 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1024ULL, 1207 .ddr_dest_fabid = 0, 1208 .ddr_sock_ileave_bits = 0, 1209 .ddr_die_ileave_bits = 0, 1210 .ddr_addr_start = 8, 1211 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_6CH 1212 } }, 1213 .zud_chan = { { 1214 .chan_flags = UMC_CHAN_F_ECC_EN, 1215 .chan_fabid = 0, 1216 .chan_instid = 0, 1217 .chan_logid = 0, 1218 .chan_nrules = 1, 1219 .chan_type = UMC_DIMM_T_DDR5, 1220 .chan_rules = { { 1221 .ddr_flags = DF_DRAM_F_VALID | 1222 DF_DRAM_F_HASH_30_32, 1223 .ddr_base = 0, 1224 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1225 1024ULL, 1226 .ddr_dest_fabid = 0, 1227 .ddr_sock_ileave_bits = 0, 1228 .ddr_die_ileave_bits = 0, 1229 .ddr_addr_start = 8, 1230 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_6CH 1231 } }, 1232 .chan_dimms = { { 1233 .ud_flags = UMC_DIMM_F_VALID, 1234 .ud_width = UMC_DIMM_W_X4, 1235 .ud_kind = UMC_DIMM_K_RDIMM, 1236 .ud_dimmno = 0, 1237 .ud_cs = { { 1238 .ucs_base = { 1239 .udb_base = 0, 1240 .udb_valid = B_TRUE 1241 }, 1242 .ucs_base_mask = 0x3ffffffff, 1243 .ucs_nbanks = 0x5, 1244 .ucs_ncol = 0xa, 1245 .ucs_nrow_lo = 0x10, 1246 .ucs_nbank_groups = 0x3, 1247 .ucs_row_low_bit = 0x12, 1248 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1249 0xe }, 1250 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1251 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1252 .ucs_subchan = 0x6 1253 } } 1254 } }, 1255 }, { 1256 .chan_flags = UMC_CHAN_F_ECC_EN, 1257 .chan_fabid = 1, 1258 .chan_instid = 1, 1259 .chan_logid = 1, 1260 .chan_nrules = 1, 1261 .chan_type = UMC_DIMM_T_DDR5, 1262 .chan_rules = { { 1263 .ddr_flags = DF_DRAM_F_VALID | 1264 DF_DRAM_F_HASH_30_32, 1265 .ddr_base = 0, 1266 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1267 1024ULL, 1268 .ddr_dest_fabid = 0, 1269 .ddr_sock_ileave_bits = 0, 1270 .ddr_die_ileave_bits = 0, 1271 .ddr_addr_start = 8, 1272 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_6CH 1273 } }, 1274 .chan_dimms = { { 1275 .ud_flags = UMC_DIMM_F_VALID, 1276 .ud_width = UMC_DIMM_W_X4, 1277 .ud_kind = UMC_DIMM_K_RDIMM, 1278 .ud_dimmno = 0, 1279 .ud_cs = { { 1280 .ucs_base = { 1281 .udb_base = 0, 1282 .udb_valid = B_TRUE 1283 }, 1284 .ucs_base_mask = 0x3ffffffff, 1285 .ucs_nbanks = 0x5, 1286 .ucs_ncol = 0xa, 1287 .ucs_nrow_lo = 0x10, 1288 .ucs_nbank_groups = 0x3, 1289 .ucs_row_low_bit = 0x12, 1290 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1291 0xe }, 1292 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1293 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1294 .ucs_subchan = 0x6 1295 } } 1296 } }, 1297 }, { 1298 .chan_flags = UMC_CHAN_F_ECC_EN, 1299 .chan_fabid = 2, 1300 .chan_instid = 2, 1301 .chan_logid = 2, 1302 .chan_nrules = 1, 1303 .chan_type = UMC_DIMM_T_DDR5, 1304 .chan_rules = { { 1305 .ddr_flags = DF_DRAM_F_VALID | 1306 DF_DRAM_F_HASH_30_32, 1307 .ddr_base = 0, 1308 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1309 1024ULL, 1310 .ddr_dest_fabid = 0, 1311 .ddr_sock_ileave_bits = 0, 1312 .ddr_die_ileave_bits = 0, 1313 .ddr_addr_start = 8, 1314 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_6CH 1315 } }, 1316 .chan_dimms = { { 1317 .ud_flags = UMC_DIMM_F_VALID, 1318 .ud_width = UMC_DIMM_W_X4, 1319 .ud_kind = UMC_DIMM_K_RDIMM, 1320 .ud_dimmno = 0, 1321 .ud_cs = { { 1322 .ucs_base = { 1323 .udb_base = 0, 1324 .udb_valid = B_TRUE 1325 }, 1326 .ucs_base_mask = 0x3ffffffff, 1327 .ucs_nbanks = 0x5, 1328 .ucs_ncol = 0xa, 1329 .ucs_nrow_lo = 0x10, 1330 .ucs_nbank_groups = 0x3, 1331 .ucs_row_low_bit = 0x12, 1332 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1333 0xe }, 1334 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1335 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1336 .ucs_subchan = 0x6 1337 } } 1338 } }, 1339 }, { 1340 .chan_flags = UMC_CHAN_F_ECC_EN, 1341 .chan_fabid = 3, 1342 .chan_instid = 3, 1343 .chan_logid = 3, 1344 .chan_nrules = 1, 1345 .chan_type = UMC_DIMM_T_DDR5, 1346 .chan_rules = { { 1347 .ddr_flags = DF_DRAM_F_VALID | 1348 DF_DRAM_F_HASH_30_32, 1349 .ddr_base = 0, 1350 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1351 1024ULL, 1352 .ddr_dest_fabid = 0, 1353 .ddr_sock_ileave_bits = 0, 1354 .ddr_die_ileave_bits = 0, 1355 .ddr_addr_start = 8, 1356 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_6CH 1357 } }, 1358 .chan_dimms = { { 1359 .ud_flags = UMC_DIMM_F_VALID, 1360 .ud_width = UMC_DIMM_W_X4, 1361 .ud_kind = UMC_DIMM_K_RDIMM, 1362 .ud_dimmno = 0, 1363 .ud_cs = { { 1364 .ucs_base = { 1365 .udb_base = 0, 1366 .udb_valid = B_TRUE 1367 }, 1368 .ucs_base_mask = 0x3ffffffff, 1369 .ucs_nbanks = 0x5, 1370 .ucs_ncol = 0xa, 1371 .ucs_nrow_lo = 0x10, 1372 .ucs_nbank_groups = 0x3, 1373 .ucs_row_low_bit = 0x12, 1374 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1375 0xe }, 1376 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1377 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1378 .ucs_subchan = 0x6 1379 } } 1380 } }, 1381 }, { 1382 .chan_flags = UMC_CHAN_F_ECC_EN, 1383 .chan_fabid = 4, 1384 .chan_instid = 4, 1385 .chan_logid = 4, 1386 .chan_nrules = 1, 1387 .chan_type = UMC_DIMM_T_DDR5, 1388 .chan_rules = { { 1389 .ddr_flags = DF_DRAM_F_VALID | 1390 DF_DRAM_F_HASH_30_32, 1391 .ddr_base = 0, 1392 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1393 1024ULL, 1394 .ddr_dest_fabid = 0, 1395 .ddr_sock_ileave_bits = 0, 1396 .ddr_die_ileave_bits = 0, 1397 .ddr_addr_start = 8, 1398 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_6CH 1399 } }, 1400 .chan_dimms = { { 1401 .ud_flags = UMC_DIMM_F_VALID, 1402 .ud_width = UMC_DIMM_W_X4, 1403 .ud_kind = UMC_DIMM_K_RDIMM, 1404 .ud_dimmno = 0, 1405 .ud_cs = { { 1406 .ucs_base = { 1407 .udb_base = 0, 1408 .udb_valid = B_TRUE 1409 }, 1410 .ucs_base_mask = 0x3ffffffff, 1411 .ucs_nbanks = 0x5, 1412 .ucs_ncol = 0xa, 1413 .ucs_nrow_lo = 0x10, 1414 .ucs_nbank_groups = 0x3, 1415 .ucs_row_low_bit = 0x12, 1416 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1417 0xe }, 1418 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1419 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1420 .ucs_subchan = 0x6 1421 } } 1422 } }, 1423 }, { 1424 .chan_flags = UMC_CHAN_F_ECC_EN, 1425 .chan_fabid = 5, 1426 .chan_instid = 5, 1427 .chan_logid = 5, 1428 .chan_nrules = 1, 1429 .chan_type = UMC_DIMM_T_DDR5, 1430 .chan_rules = { { 1431 .ddr_flags = DF_DRAM_F_VALID | 1432 DF_DRAM_F_HASH_30_32, 1433 .ddr_base = 0, 1434 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1435 1024ULL, 1436 .ddr_dest_fabid = 0, 1437 .ddr_sock_ileave_bits = 0, 1438 .ddr_die_ileave_bits = 0, 1439 .ddr_addr_start = 8, 1440 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS2_6CH 1441 } }, 1442 .chan_dimms = { { 1443 .ud_flags = UMC_DIMM_F_VALID, 1444 .ud_width = UMC_DIMM_W_X4, 1445 .ud_kind = UMC_DIMM_K_RDIMM, 1446 .ud_dimmno = 0, 1447 .ud_cs = { { 1448 .ucs_base = { 1449 .udb_base = 0, 1450 .udb_valid = B_TRUE 1451 }, 1452 .ucs_base_mask = 0x3ffffffff, 1453 .ucs_nbanks = 0x5, 1454 .ucs_ncol = 0xa, 1455 .ucs_nrow_lo = 0x10, 1456 .ucs_nbank_groups = 0x3, 1457 .ucs_row_low_bit = 0x12, 1458 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1459 0xe }, 1460 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1461 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1462 .ucs_subchan = 0x6 1463 } } 1464 } }, 1465 } } 1466 } } 1467 }; 1468 1469 /* 1470 * Finally our last bit here is a 3-channel 2P system. This is used to test that 1471 * the variant of the normalization with socket interleaving works correctly. 1472 */ 1473 static const zen_umc_t zen_umc_nps3_2p = { 1474 .umc_tom = 4ULL * 1024ULL * 1024ULL * 1024ULL, 1475 .umc_tom2 = 96ULL * 1024ULL * 1024ULL * 1024ULL, 1476 .umc_df_rev = DF_REV_4, 1477 .umc_decomp = { 1478 .dfd_sock_mask = 0x01, 1479 .dfd_die_mask = 0x00, 1480 .dfd_node_mask = 0x20, 1481 .dfd_comp_mask = 0x1f, 1482 .dfd_sock_shift = 0, 1483 .dfd_die_shift = 0, 1484 .dfd_node_shift = 5, 1485 .dfd_comp_shift = 0 1486 }, 1487 .umc_ndfs = 2, 1488 .umc_dfs = { { 1489 .zud_dfno = 0, 1490 .zud_dram_nrules = 1, 1491 .zud_nchan = 3, 1492 .zud_cs_nremap = 0, 1493 .zud_hole_base = 0, 1494 .zud_rules = { { 1495 .ddr_flags = DF_DRAM_F_VALID | DF_DRAM_F_HASH_21_23, 1496 .ddr_base = 0, 1497 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1024ULL, 1498 .ddr_dest_fabid = 0, 1499 .ddr_sock_ileave_bits = 1, 1500 .ddr_die_ileave_bits = 0, 1501 .ddr_addr_start = 8, 1502 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_3CH 1503 } }, 1504 .zud_chan = { { 1505 .chan_flags = UMC_CHAN_F_ECC_EN, 1506 .chan_fabid = 0, 1507 .chan_instid = 0, 1508 .chan_logid = 0, 1509 .chan_nrules = 1, 1510 .chan_type = UMC_DIMM_T_DDR5, 1511 .chan_rules = { { 1512 .ddr_flags = DF_DRAM_F_VALID | 1513 DF_DRAM_F_HASH_21_23, 1514 .ddr_base = 0, 1515 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1516 1024ULL, 1517 .ddr_dest_fabid = 0, 1518 .ddr_sock_ileave_bits = 1, 1519 .ddr_die_ileave_bits = 0, 1520 .ddr_addr_start = 8, 1521 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_3CH 1522 } }, 1523 .chan_dimms = { { 1524 .ud_flags = UMC_DIMM_F_VALID, 1525 .ud_width = UMC_DIMM_W_X4, 1526 .ud_kind = UMC_DIMM_K_RDIMM, 1527 .ud_dimmno = 0, 1528 .ud_cs = { { 1529 .ucs_base = { 1530 .udb_base = 0, 1531 .udb_valid = B_TRUE 1532 }, 1533 .ucs_base_mask = 0x3ffffffff, 1534 .ucs_nbanks = 0x5, 1535 .ucs_ncol = 0xa, 1536 .ucs_nrow_lo = 0x10, 1537 .ucs_nbank_groups = 0x3, 1538 .ucs_row_low_bit = 0x12, 1539 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1540 0xe }, 1541 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1542 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1543 .ucs_subchan = 0x6 1544 } } 1545 } }, 1546 }, { 1547 .chan_flags = UMC_CHAN_F_ECC_EN, 1548 .chan_fabid = 1, 1549 .chan_instid = 1, 1550 .chan_logid = 1, 1551 .chan_nrules = 1, 1552 .chan_type = UMC_DIMM_T_DDR5, 1553 .chan_rules = { { 1554 .ddr_flags = DF_DRAM_F_VALID | 1555 DF_DRAM_F_HASH_21_23, 1556 .ddr_base = 0, 1557 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1558 1024ULL, 1559 .ddr_dest_fabid = 0, 1560 .ddr_sock_ileave_bits = 1, 1561 .ddr_die_ileave_bits = 0, 1562 .ddr_addr_start = 8, 1563 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_3CH 1564 } }, 1565 .chan_dimms = { { 1566 .ud_flags = UMC_DIMM_F_VALID, 1567 .ud_width = UMC_DIMM_W_X4, 1568 .ud_kind = UMC_DIMM_K_RDIMM, 1569 .ud_dimmno = 0, 1570 .ud_cs = { { 1571 .ucs_base = { 1572 .udb_base = 0, 1573 .udb_valid = B_TRUE 1574 }, 1575 .ucs_base_mask = 0x3ffffffff, 1576 .ucs_nbanks = 0x5, 1577 .ucs_ncol = 0xa, 1578 .ucs_nrow_lo = 0x10, 1579 .ucs_nbank_groups = 0x3, 1580 .ucs_row_low_bit = 0x12, 1581 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1582 0xe }, 1583 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1584 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1585 .ucs_subchan = 0x6 1586 } } 1587 } }, 1588 }, { 1589 .chan_flags = UMC_CHAN_F_ECC_EN, 1590 .chan_fabid = 2, 1591 .chan_instid = 2, 1592 .chan_logid = 2, 1593 .chan_nrules = 1, 1594 .chan_type = UMC_DIMM_T_DDR5, 1595 .chan_rules = { { 1596 .ddr_flags = DF_DRAM_F_VALID | 1597 DF_DRAM_F_HASH_21_23, 1598 .ddr_base = 0, 1599 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1600 1024ULL, 1601 .ddr_dest_fabid = 0, 1602 .ddr_sock_ileave_bits = 1, 1603 .ddr_die_ileave_bits = 0, 1604 .ddr_addr_start = 8, 1605 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_3CH 1606 } }, 1607 .chan_dimms = { { 1608 .ud_flags = UMC_DIMM_F_VALID, 1609 .ud_width = UMC_DIMM_W_X4, 1610 .ud_kind = UMC_DIMM_K_RDIMM, 1611 .ud_dimmno = 0, 1612 .ud_cs = { { 1613 .ucs_base = { 1614 .udb_base = 0, 1615 .udb_valid = B_TRUE 1616 }, 1617 .ucs_base_mask = 0x3ffffffff, 1618 .ucs_nbanks = 0x5, 1619 .ucs_ncol = 0xa, 1620 .ucs_nrow_lo = 0x10, 1621 .ucs_nbank_groups = 0x3, 1622 .ucs_row_low_bit = 0x12, 1623 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1624 0xe }, 1625 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1626 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1627 .ucs_subchan = 0x6 1628 } } 1629 } } 1630 } } 1631 }, { 1632 .zud_dfno = 1, 1633 .zud_dram_nrules = 1, 1634 .zud_nchan = 3, 1635 .zud_cs_nremap = 0, 1636 .zud_hole_base = 0, 1637 .zud_rules = { { 1638 .ddr_flags = DF_DRAM_F_VALID | DF_DRAM_F_HASH_21_23, 1639 .ddr_base = 0, 1640 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1024ULL, 1641 .ddr_dest_fabid = 0, 1642 .ddr_sock_ileave_bits = 1, 1643 .ddr_die_ileave_bits = 0, 1644 .ddr_addr_start = 8, 1645 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_3CH 1646 } }, 1647 .zud_chan = { { 1648 .chan_flags = UMC_CHAN_F_ECC_EN, 1649 .chan_fabid = 0x20, 1650 .chan_instid = 0, 1651 .chan_logid = 0, 1652 .chan_nrules = 1, 1653 .chan_type = UMC_DIMM_T_DDR5, 1654 .chan_rules = { { 1655 .ddr_flags = DF_DRAM_F_VALID | 1656 DF_DRAM_F_HASH_21_23, 1657 .ddr_base = 0, 1658 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1659 1024ULL, 1660 .ddr_dest_fabid = 0, 1661 .ddr_sock_ileave_bits = 1, 1662 .ddr_die_ileave_bits = 0, 1663 .ddr_addr_start = 8, 1664 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_3CH 1665 } }, 1666 .chan_dimms = { { 1667 .ud_flags = UMC_DIMM_F_VALID, 1668 .ud_width = UMC_DIMM_W_X4, 1669 .ud_kind = UMC_DIMM_K_RDIMM, 1670 .ud_dimmno = 0, 1671 .ud_cs = { { 1672 .ucs_base = { 1673 .udb_base = 0, 1674 .udb_valid = B_TRUE 1675 }, 1676 .ucs_base_mask = 0x3ffffffff, 1677 .ucs_nbanks = 0x5, 1678 .ucs_ncol = 0xa, 1679 .ucs_nrow_lo = 0x10, 1680 .ucs_nbank_groups = 0x3, 1681 .ucs_row_low_bit = 0x12, 1682 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1683 0xe }, 1684 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1685 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1686 .ucs_subchan = 0x6 1687 } } 1688 } }, 1689 }, { 1690 .chan_flags = UMC_CHAN_F_ECC_EN, 1691 .chan_fabid = 0x21, 1692 .chan_instid = 1, 1693 .chan_logid = 1, 1694 .chan_nrules = 1, 1695 .chan_type = UMC_DIMM_T_DDR5, 1696 .chan_rules = { { 1697 .ddr_flags = DF_DRAM_F_VALID | 1698 DF_DRAM_F_HASH_21_23, 1699 .ddr_base = 0, 1700 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1701 1024ULL, 1702 .ddr_dest_fabid = 0, 1703 .ddr_sock_ileave_bits = 1, 1704 .ddr_die_ileave_bits = 0, 1705 .ddr_addr_start = 8, 1706 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_3CH 1707 } }, 1708 .chan_dimms = { { 1709 .ud_flags = UMC_DIMM_F_VALID, 1710 .ud_width = UMC_DIMM_W_X4, 1711 .ud_kind = UMC_DIMM_K_RDIMM, 1712 .ud_dimmno = 0, 1713 .ud_cs = { { 1714 .ucs_base = { 1715 .udb_base = 0, 1716 .udb_valid = B_TRUE 1717 }, 1718 .ucs_base_mask = 0x3ffffffff, 1719 .ucs_nbanks = 0x5, 1720 .ucs_ncol = 0xa, 1721 .ucs_nrow_lo = 0x10, 1722 .ucs_nbank_groups = 0x3, 1723 .ucs_row_low_bit = 0x12, 1724 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1725 0xe }, 1726 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1727 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1728 .ucs_subchan = 0x6 1729 } } 1730 } }, 1731 }, { 1732 .chan_flags = UMC_CHAN_F_ECC_EN, 1733 .chan_fabid = 0x22, 1734 .chan_instid = 2, 1735 .chan_logid = 2, 1736 .chan_nrules = 1, 1737 .chan_type = UMC_DIMM_T_DDR5, 1738 .chan_rules = { { 1739 .ddr_flags = DF_DRAM_F_VALID | 1740 DF_DRAM_F_HASH_21_23, 1741 .ddr_base = 0, 1742 .ddr_limit = 96ULL * 1024ULL * 1024ULL * 1743 1024ULL, 1744 .ddr_dest_fabid = 0, 1745 .ddr_sock_ileave_bits = 1, 1746 .ddr_die_ileave_bits = 0, 1747 .ddr_addr_start = 8, 1748 .ddr_chan_ileave = DF_CHAN_ILEAVE_NPS4_3CH 1749 } }, 1750 .chan_dimms = { { 1751 .ud_flags = UMC_DIMM_F_VALID, 1752 .ud_width = UMC_DIMM_W_X4, 1753 .ud_kind = UMC_DIMM_K_RDIMM, 1754 .ud_dimmno = 0, 1755 .ud_cs = { { 1756 .ucs_base = { 1757 .udb_base = 0, 1758 .udb_valid = B_TRUE 1759 }, 1760 .ucs_base_mask = 0x3ffffffff, 1761 .ucs_nbanks = 0x5, 1762 .ucs_ncol = 0xa, 1763 .ucs_nrow_lo = 0x10, 1764 .ucs_nbank_groups = 0x3, 1765 .ucs_row_low_bit = 0x12, 1766 .ucs_bank_bits = { 0xf, 0x10, 0x11, 0xd, 1767 0xe }, 1768 .ucs_col_bits = { 0x2, 0x3, 0x4, 0x5, 1769 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }, 1770 .ucs_subchan = 0x6 1771 } } 1772 } } 1773 } } 1774 } } 1775 }; 1776 1777 const umc_decode_test_t zen_umc_test_nps[] = { { 1778 .udt_desc = "NPS 8ch, 2P ilv (0)", 1779 .udt_umc = &zen_umc_nps8_2p, 1780 .udt_pa = 0x123, 1781 .udt_pass = B_TRUE, 1782 .udt_norm_addr = 0x123, 1783 .udt_sock = 0, 1784 .udt_die = 0, 1785 .udt_comp = 0, 1786 .udt_dimm_no = 0, 1787 .udt_dimm_col = 0x28, 1788 .udt_dimm_row = 0, 1789 .udt_dimm_bank = 0, 1790 .udt_dimm_bank_group = 0, 1791 .udt_dimm_subchan = 0, 1792 .udt_dimm_rm = 0, 1793 .udt_dimm_cs = 0 1794 }, { 1795 .udt_desc = "NPS 8ch, 2P ilv (1)", 1796 .udt_umc = &zen_umc_nps8_2p, 1797 .udt_pa = 0x323, 1798 .udt_pass = B_TRUE, 1799 .udt_norm_addr = 0x123, 1800 .udt_sock = 1, 1801 .udt_die = 0, 1802 .udt_comp = 0, 1803 .udt_dimm_no = 0, 1804 .udt_dimm_col = 0x28, 1805 .udt_dimm_row = 0, 1806 .udt_dimm_bank = 0, 1807 .udt_dimm_bank_group = 0, 1808 .udt_dimm_subchan = 0, 1809 .udt_dimm_rm = 0, 1810 .udt_dimm_cs = 0 1811 }, { 1812 .udt_desc = "NPS 8ch, 2P ilv (2)", 1813 .udt_umc = &zen_umc_nps8_2p, 1814 .udt_pa = 0x1123, 1815 .udt_pass = B_TRUE, 1816 .udt_norm_addr = 0x123, 1817 .udt_sock = 0, 1818 .udt_die = 0, 1819 .udt_comp = 1, 1820 .udt_dimm_no = 0, 1821 .udt_dimm_col = 0x28, 1822 .udt_dimm_row = 0, 1823 .udt_dimm_bank = 0, 1824 .udt_dimm_bank_group = 0, 1825 .udt_dimm_subchan = 0, 1826 .udt_dimm_rm = 0, 1827 .udt_dimm_cs = 0 1828 }, { 1829 .udt_desc = "NPS 8ch, 2P ilv (3)", 1830 .udt_umc = &zen_umc_nps8_2p, 1831 .udt_pa = 0x1323, 1832 .udt_pass = B_TRUE, 1833 .udt_norm_addr = 0x123, 1834 .udt_sock = 1, 1835 .udt_die = 0, 1836 .udt_comp = 1, 1837 .udt_dimm_no = 0, 1838 .udt_dimm_col = 0x28, 1839 .udt_dimm_row = 0, 1840 .udt_dimm_bank = 0, 1841 .udt_dimm_bank_group = 0, 1842 .udt_dimm_subchan = 0, 1843 .udt_dimm_rm = 0, 1844 .udt_dimm_cs = 0 1845 }, { 1846 .udt_desc = "NPS 8ch, 2P ilv (4)", 1847 .udt_umc = &zen_umc_nps8_2p, 1848 .udt_pa = 0x2123, 1849 .udt_pass = B_TRUE, 1850 .udt_norm_addr = 0x123, 1851 .udt_sock = 0, 1852 .udt_die = 0, 1853 .udt_comp = 2, 1854 .udt_dimm_no = 0, 1855 .udt_dimm_col = 0x28, 1856 .udt_dimm_row = 0, 1857 .udt_dimm_bank = 0, 1858 .udt_dimm_bank_group = 0, 1859 .udt_dimm_subchan = 0, 1860 .udt_dimm_rm = 0, 1861 .udt_dimm_cs = 0 1862 }, { 1863 .udt_desc = "NPS 8ch, 2P ilv (5)", 1864 .udt_umc = &zen_umc_nps8_2p, 1865 .udt_pa = 0x2323, 1866 .udt_pass = B_TRUE, 1867 .udt_norm_addr = 0x123, 1868 .udt_sock = 1, 1869 .udt_die = 0, 1870 .udt_comp = 2, 1871 .udt_dimm_no = 0, 1872 .udt_dimm_col = 0x28, 1873 .udt_dimm_row = 0, 1874 .udt_dimm_bank = 0, 1875 .udt_dimm_bank_group = 0, 1876 .udt_dimm_subchan = 0, 1877 .udt_dimm_rm = 0, 1878 .udt_dimm_cs = 0 1879 }, { 1880 .udt_desc = "NPS 8ch, 2P ilv (6)", 1881 .udt_umc = &zen_umc_nps8_2p, 1882 .udt_pa = 0x3123, 1883 .udt_pass = B_TRUE, 1884 .udt_norm_addr = 0x123, 1885 .udt_sock = 0, 1886 .udt_die = 0, 1887 .udt_comp = 3, 1888 .udt_dimm_no = 0, 1889 .udt_dimm_col = 0x28, 1890 .udt_dimm_row = 0, 1891 .udt_dimm_bank = 0, 1892 .udt_dimm_bank_group = 0, 1893 .udt_dimm_subchan = 0, 1894 .udt_dimm_rm = 0, 1895 .udt_dimm_cs = 0 1896 }, { 1897 .udt_desc = "NPS 8ch, 2P ilv (7)", 1898 .udt_umc = &zen_umc_nps8_2p, 1899 .udt_pa = 0x3323, 1900 .udt_pass = B_TRUE, 1901 .udt_norm_addr = 0x123, 1902 .udt_sock = 1, 1903 .udt_die = 0, 1904 .udt_comp = 3, 1905 .udt_dimm_no = 0, 1906 .udt_dimm_col = 0x28, 1907 .udt_dimm_row = 0, 1908 .udt_dimm_bank = 0, 1909 .udt_dimm_bank_group = 0, 1910 .udt_dimm_subchan = 0, 1911 .udt_dimm_rm = 0, 1912 .udt_dimm_cs = 0 1913 }, { 1914 .udt_desc = "NPS 8ch, 2P ilv (8)", 1915 .udt_umc = &zen_umc_nps8_2p, 1916 .udt_pa = 0x4123, 1917 .udt_pass = B_TRUE, 1918 .udt_norm_addr = 0x123, 1919 .udt_sock = 0, 1920 .udt_die = 0, 1921 .udt_comp = 4, 1922 .udt_dimm_no = 0, 1923 .udt_dimm_col = 0x28, 1924 .udt_dimm_row = 0, 1925 .udt_dimm_bank = 0, 1926 .udt_dimm_bank_group = 0, 1927 .udt_dimm_subchan = 0, 1928 .udt_dimm_rm = 0, 1929 .udt_dimm_cs = 0 1930 }, { 1931 .udt_desc = "NPS 8ch, 2P ilv (9)", 1932 .udt_umc = &zen_umc_nps8_2p, 1933 .udt_pa = 0x4323, 1934 .udt_pass = B_TRUE, 1935 .udt_norm_addr = 0x123, 1936 .udt_sock = 1, 1937 .udt_die = 0, 1938 .udt_comp = 4, 1939 .udt_dimm_no = 0, 1940 .udt_dimm_col = 0x28, 1941 .udt_dimm_row = 0, 1942 .udt_dimm_bank = 0, 1943 .udt_dimm_bank_group = 0, 1944 .udt_dimm_subchan = 0, 1945 .udt_dimm_rm = 0, 1946 .udt_dimm_cs = 0 1947 }, { 1948 .udt_desc = "NPS 8ch, 2P ilv (10)", 1949 .udt_umc = &zen_umc_nps8_2p, 1950 .udt_pa = 0x5123, 1951 .udt_pass = B_TRUE, 1952 .udt_norm_addr = 0x123, 1953 .udt_sock = 0, 1954 .udt_die = 0, 1955 .udt_comp = 5, 1956 .udt_dimm_no = 0, 1957 .udt_dimm_col = 0x28, 1958 .udt_dimm_row = 0, 1959 .udt_dimm_bank = 0, 1960 .udt_dimm_bank_group = 0, 1961 .udt_dimm_subchan = 0, 1962 .udt_dimm_rm = 0, 1963 .udt_dimm_cs = 0 1964 }, { 1965 .udt_desc = "NPS 8ch, 2P ilv (11)", 1966 .udt_umc = &zen_umc_nps8_2p, 1967 .udt_pa = 0x5323, 1968 .udt_pass = B_TRUE, 1969 .udt_norm_addr = 0x123, 1970 .udt_sock = 1, 1971 .udt_die = 0, 1972 .udt_comp = 5, 1973 .udt_dimm_no = 0, 1974 .udt_dimm_col = 0x28, 1975 .udt_dimm_row = 0, 1976 .udt_dimm_bank = 0, 1977 .udt_dimm_bank_group = 0, 1978 .udt_dimm_subchan = 0, 1979 .udt_dimm_rm = 0, 1980 .udt_dimm_cs = 0 1981 }, { 1982 .udt_desc = "NPS 8ch, 2P ilv (12)", 1983 .udt_umc = &zen_umc_nps8_2p, 1984 .udt_pa = 0x6123, 1985 .udt_pass = B_TRUE, 1986 .udt_norm_addr = 0x123, 1987 .udt_sock = 0, 1988 .udt_die = 0, 1989 .udt_comp = 6, 1990 .udt_dimm_no = 0, 1991 .udt_dimm_col = 0x28, 1992 .udt_dimm_row = 0, 1993 .udt_dimm_bank = 0, 1994 .udt_dimm_bank_group = 0, 1995 .udt_dimm_subchan = 0, 1996 .udt_dimm_rm = 0, 1997 .udt_dimm_cs = 0 1998 }, { 1999 .udt_desc = "NPS 8ch, 2P ilv (13)", 2000 .udt_umc = &zen_umc_nps8_2p, 2001 .udt_pa = 0x6323, 2002 .udt_pass = B_TRUE, 2003 .udt_norm_addr = 0x123, 2004 .udt_sock = 1, 2005 .udt_die = 0, 2006 .udt_comp = 6, 2007 .udt_dimm_no = 0, 2008 .udt_dimm_col = 0x28, 2009 .udt_dimm_row = 0, 2010 .udt_dimm_bank = 0, 2011 .udt_dimm_bank_group = 0, 2012 .udt_dimm_subchan = 0, 2013 .udt_dimm_rm = 0, 2014 .udt_dimm_cs = 0 2015 }, { 2016 .udt_desc = "NPS 8ch, 2P ilv (14)", 2017 .udt_umc = &zen_umc_nps8_2p, 2018 .udt_pa = 0x7123, 2019 .udt_pass = B_TRUE, 2020 .udt_norm_addr = 0x123, 2021 .udt_sock = 0, 2022 .udt_die = 0, 2023 .udt_comp = 7, 2024 .udt_dimm_no = 0, 2025 .udt_dimm_col = 0x28, 2026 .udt_dimm_row = 0, 2027 .udt_dimm_bank = 0, 2028 .udt_dimm_bank_group = 0, 2029 .udt_dimm_subchan = 0, 2030 .udt_dimm_rm = 0, 2031 .udt_dimm_cs = 0 2032 }, { 2033 .udt_desc = "NPS 8ch, 2P ilv (15)", 2034 .udt_umc = &zen_umc_nps8_2p, 2035 .udt_pa = 0x7323, 2036 .udt_pass = B_TRUE, 2037 .udt_norm_addr = 0x123, 2038 .udt_sock = 1, 2039 .udt_die = 0, 2040 .udt_comp = 7, 2041 .udt_dimm_no = 0, 2042 .udt_dimm_col = 0x28, 2043 .udt_dimm_row = 0, 2044 .udt_dimm_bank = 0, 2045 .udt_dimm_bank_group = 0, 2046 .udt_dimm_subchan = 0, 2047 .udt_dimm_rm = 0, 2048 .udt_dimm_cs = 0 2049 }, { 2050 .udt_desc = "NPS 8ch, 2P ilv (16)", 2051 .udt_umc = &zen_umc_nps8_2p, 2052 .udt_pa = 0x17323, 2053 .udt_pass = B_TRUE, 2054 .udt_norm_addr = 0x1123, 2055 .udt_sock = 0, 2056 .udt_die = 0, 2057 .udt_comp = 7, 2058 .udt_dimm_no = 0, 2059 .udt_dimm_col = 0x228, 2060 .udt_dimm_row = 0, 2061 .udt_dimm_bank = 0, 2062 .udt_dimm_bank_group = 0, 2063 .udt_dimm_subchan = 0, 2064 .udt_dimm_rm = 0, 2065 .udt_dimm_cs = 0 2066 }, { 2067 .udt_desc = "NPS 8ch, 2P ilv (17)", 2068 .udt_umc = &zen_umc_nps8_2p, 2069 .udt_pa = 0x217323, 2070 .udt_pass = B_TRUE, 2071 .udt_norm_addr = 0x21123, 2072 .udt_sock = 1, 2073 .udt_die = 0, 2074 .udt_comp = 7, 2075 .udt_dimm_no = 0, 2076 .udt_dimm_col = 0x228, 2077 .udt_dimm_row = 0, 2078 .udt_dimm_bank = 0, 2079 .udt_dimm_bank_group = 0x4, 2080 .udt_dimm_subchan = 0, 2081 .udt_dimm_rm = 0, 2082 .udt_dimm_cs = 0 2083 }, { 2084 .udt_desc = "NPS 8ch, 2P ilv (18)", 2085 .udt_umc = &zen_umc_nps8_2p, 2086 .udt_pa = 0x40217323, 2087 .udt_pass = B_TRUE, 2088 .udt_norm_addr = 0x4021123, 2089 .udt_sock = 0, 2090 .udt_die = 0, 2091 .udt_comp = 7, 2092 .udt_dimm_no = 0, 2093 .udt_dimm_col = 0x228, 2094 .udt_dimm_row = 0x100, 2095 .udt_dimm_bank = 0, 2096 .udt_dimm_bank_group = 0x4, 2097 .udt_dimm_subchan = 0, 2098 .udt_dimm_rm = 0, 2099 .udt_dimm_cs = 0 2100 }, { 2101 .udt_desc = "NPS 8ch, 2P ilv (19)", 2102 .udt_umc = &zen_umc_nps8_2p, 2103 .udt_pa = 0x240217323, 2104 .udt_pass = B_TRUE, 2105 .udt_norm_addr = 0x24021123, 2106 .udt_sock = 0, 2107 .udt_die = 0, 2108 .udt_comp = 3, 2109 .udt_dimm_no = 0, 2110 .udt_dimm_col = 0x228, 2111 .udt_dimm_row = 0x900, 2112 .udt_dimm_bank = 0, 2113 .udt_dimm_bank_group = 0x4, 2114 .udt_dimm_subchan = 0, 2115 .udt_dimm_rm = 0, 2116 .udt_dimm_cs = 0 2117 }, { 2118 .udt_desc = "NPS 8ch, 2P ilv (20)", 2119 .udt_umc = &zen_umc_nps8_2p, 2120 .udt_pa = 0x240617323, 2121 .udt_pass = B_TRUE, 2122 .udt_norm_addr = 0x24061123, 2123 .udt_sock = 0, 2124 .udt_die = 0, 2125 .udt_comp = 2, 2126 .udt_dimm_no = 0, 2127 .udt_dimm_col = 0x228, 2128 .udt_dimm_row = 0x901, 2129 .udt_dimm_bank = 0, 2130 .udt_dimm_bank_group = 0x4, 2131 .udt_dimm_subchan = 0, 2132 .udt_dimm_rm = 0, 2133 .udt_dimm_cs = 0 2134 }, { 2135 .udt_desc = "NPS 8ch, 2P ilv (21)", 2136 .udt_umc = &zen_umc_nps8_2p, 2137 .udt_pa = 0x240617323, 2138 .udt_pass = B_TRUE, 2139 .udt_norm_addr = 0x24061123, 2140 .udt_sock = 0, 2141 .udt_die = 0, 2142 .udt_comp = 2, 2143 .udt_dimm_no = 0, 2144 .udt_dimm_col = 0x228, 2145 .udt_dimm_row = 0x901, 2146 .udt_dimm_bank = 0, 2147 .udt_dimm_bank_group = 0x4, 2148 .udt_dimm_subchan = 0, 2149 .udt_dimm_rm = 0, 2150 .udt_dimm_cs = 0 2151 }, { 2152 .udt_desc = "NPS 8ch, 2P ilv (22)", 2153 .udt_umc = &zen_umc_nps8_2p, 2154 .udt_pa = 0x240687323, 2155 .udt_pass = B_TRUE, 2156 .udt_norm_addr = 0x24068123, 2157 .udt_sock = 1, 2158 .udt_die = 0, 2159 .udt_comp = 6, 2160 .udt_dimm_no = 0, 2161 .udt_dimm_col = 0x28, 2162 .udt_dimm_row = 0x901, 2163 .udt_dimm_bank = 0, 2164 .udt_dimm_bank_group = 0x5, 2165 .udt_dimm_subchan = 0, 2166 .udt_dimm_rm = 0, 2167 .udt_dimm_cs = 0 2168 }, { 2169 .udt_desc = "NPS 8ch, 2P ilv (23)", 2170 .udt_umc = &zen_umc_nps8_2p, 2171 .udt_pa = 0x2c0687323, 2172 .udt_pass = B_TRUE, 2173 .udt_norm_addr = 0x2c068123, 2174 .udt_sock = 1, 2175 .udt_die = 0, 2176 .udt_comp = 7, 2177 .udt_dimm_no = 0, 2178 .udt_dimm_col = 0x28, 2179 .udt_dimm_row = 0xb01, 2180 .udt_dimm_bank = 0, 2181 .udt_dimm_bank_group = 0x5, 2182 .udt_dimm_subchan = 0, 2183 .udt_dimm_rm = 0, 2184 .udt_dimm_cs = 0 2185 }, { 2186 .udt_desc = "NPS 2ch, 1P (0)", 2187 .udt_umc = &zen_umc_nps2_1p, 2188 .udt_pa = 0x167, 2189 .udt_pass = B_TRUE, 2190 .udt_norm_addr = 0x167, 2191 .udt_sock = 0, 2192 .udt_die = 0, 2193 .udt_comp = 0, 2194 .udt_dimm_no = 0, 2195 .udt_dimm_col = 0x29, 2196 .udt_dimm_row = 0x0, 2197 .udt_dimm_bank = 0, 2198 .udt_dimm_bank_group = 0x0, 2199 .udt_dimm_subchan = 1, 2200 .udt_dimm_rm = 0, 2201 .udt_dimm_cs = 0 2202 }, { 2203 .udt_desc = "NPS 2ch, 1P (1)", 2204 .udt_umc = &zen_umc_nps2_1p, 2205 .udt_pa = 0x367, 2206 .udt_pass = B_TRUE, 2207 .udt_norm_addr = 0x167, 2208 .udt_sock = 0, 2209 .udt_die = 0, 2210 .udt_comp = 1, 2211 .udt_dimm_no = 0, 2212 .udt_dimm_col = 0x29, 2213 .udt_dimm_row = 0x0, 2214 .udt_dimm_bank = 0, 2215 .udt_dimm_bank_group = 0x0, 2216 .udt_dimm_subchan = 1, 2217 .udt_dimm_rm = 0, 2218 .udt_dimm_cs = 0 2219 }, { 2220 .udt_desc = "NPS 2ch, 1P (2)", 2221 .udt_umc = &zen_umc_nps2_1p, 2222 .udt_pa = 0x4167, 2223 .udt_pass = B_TRUE, 2224 .udt_norm_addr = 0x2167, 2225 .udt_sock = 0, 2226 .udt_die = 0, 2227 .udt_comp = 1, 2228 .udt_dimm_no = 0, 2229 .udt_dimm_col = 0x29, 2230 .udt_dimm_row = 0x0, 2231 .udt_dimm_bank = 1, 2232 .udt_dimm_bank_group = 0x0, 2233 .udt_dimm_subchan = 1, 2234 .udt_dimm_rm = 0, 2235 .udt_dimm_cs = 0 2236 }, { 2237 .udt_desc = "NPS 2ch, 1P (3)", 2238 .udt_umc = &zen_umc_nps2_1p, 2239 .udt_pa = 0x14167, 2240 .udt_pass = B_TRUE, 2241 .udt_norm_addr = 0xa167, 2242 .udt_sock = 0, 2243 .udt_die = 0, 2244 .udt_comp = 0, 2245 .udt_dimm_no = 0, 2246 .udt_dimm_col = 0x29, 2247 .udt_dimm_row = 0x0, 2248 .udt_dimm_bank = 1, 2249 .udt_dimm_bank_group = 0x1, 2250 .udt_dimm_subchan = 1, 2251 .udt_dimm_rm = 0, 2252 .udt_dimm_cs = 0 2253 }, { 2254 .udt_desc = "NPS 2ch, 1P (4)", 2255 .udt_umc = &zen_umc_nps2_1p, 2256 .udt_pa = 0x40014167, 2257 .udt_pass = B_TRUE, 2258 .udt_norm_addr = 0x2000a167, 2259 .udt_sock = 0, 2260 .udt_die = 0, 2261 .udt_comp = 1, 2262 .udt_dimm_no = 0, 2263 .udt_dimm_col = 0x29, 2264 .udt_dimm_row = 0x800, 2265 .udt_dimm_bank = 1, 2266 .udt_dimm_bank_group = 0x1, 2267 .udt_dimm_subchan = 1, 2268 .udt_dimm_rm = 0, 2269 .udt_dimm_cs = 0 2270 }, { 2271 .udt_desc = "NPS 2ch, 1P (5)", 2272 .udt_umc = &zen_umc_nps2_1p, 2273 .udt_pa = 0x214167, 2274 .udt_pass = B_TRUE, 2275 .udt_norm_addr = 0x10a167, 2276 .udt_sock = 0, 2277 .udt_die = 0, 2278 .udt_comp = 1, 2279 .udt_dimm_no = 0, 2280 .udt_dimm_col = 0x29, 2281 .udt_dimm_row = 0x4, 2282 .udt_dimm_bank = 1, 2283 .udt_dimm_bank_group = 0x1, 2284 .udt_dimm_subchan = 1, 2285 .udt_dimm_rm = 0, 2286 .udt_dimm_cs = 0 2287 }, { 2288 .udt_desc = "NPS 2ch, 1P (6)", 2289 .udt_umc = &zen_umc_nps2_1p, 2290 .udt_pa = 0x40214167, 2291 .udt_pass = B_TRUE, 2292 .udt_norm_addr = 0x2010a167, 2293 .udt_sock = 0, 2294 .udt_die = 0, 2295 .udt_comp = 0, 2296 .udt_dimm_no = 0, 2297 .udt_dimm_col = 0x29, 2298 .udt_dimm_row = 0x804, 2299 .udt_dimm_bank = 1, 2300 .udt_dimm_bank_group = 0x1, 2301 .udt_dimm_subchan = 1, 2302 .udt_dimm_rm = 0, 2303 .udt_dimm_cs = 0 2304 }, { 2305 .udt_desc = "NPS 5ch, 1P (0)", 2306 .udt_umc = &zen_umc_nps5_1p, 2307 .udt_pa = 0xcd, 2308 .udt_pass = B_TRUE, 2309 .udt_norm_addr = 0xcd, 2310 .udt_sock = 0, 2311 .udt_die = 0, 2312 .udt_comp = 0, 2313 .udt_dimm_no = 0, 2314 .udt_dimm_col = 0x13, 2315 .udt_dimm_row = 0x0, 2316 .udt_dimm_bank = 0, 2317 .udt_dimm_bank_group = 0x0, 2318 .udt_dimm_subchan = 1, 2319 .udt_dimm_rm = 0, 2320 .udt_dimm_cs = 0 2321 }, { 2322 .udt_desc = "NPS 5ch, 1P (1)", 2323 .udt_umc = &zen_umc_nps5_1p, 2324 .udt_pa = 0x1cd, 2325 .udt_pass = B_TRUE, 2326 .udt_norm_addr = 0x20cd, 2327 .udt_sock = 0, 2328 .udt_die = 0, 2329 .udt_comp = 1, 2330 .udt_dimm_no = 0, 2331 .udt_dimm_col = 0x13, 2332 .udt_dimm_row = 0x0, 2333 .udt_dimm_bank = 1, 2334 .udt_dimm_bank_group = 0x0, 2335 .udt_dimm_subchan = 1, 2336 .udt_dimm_rm = 0, 2337 .udt_dimm_cs = 0 2338 }, { 2339 .udt_desc = "NPS 5ch, 1P (2)", 2340 .udt_umc = &zen_umc_nps5_1p, 2341 .udt_pa = 0x2cd, 2342 .udt_pass = B_TRUE, 2343 .udt_norm_addr = 0x1cd, 2344 .udt_sock = 0, 2345 .udt_die = 0, 2346 .udt_comp = 0, 2347 .udt_dimm_no = 0, 2348 .udt_dimm_col = 0x33, 2349 .udt_dimm_row = 0x0, 2350 .udt_dimm_bank = 0, 2351 .udt_dimm_bank_group = 0x0, 2352 .udt_dimm_subchan = 1, 2353 .udt_dimm_rm = 0, 2354 .udt_dimm_cs = 0 2355 }, { 2356 .udt_desc = "NPS 5ch, 1P (3)", 2357 .udt_umc = &zen_umc_nps5_1p, 2358 .udt_pa = 0x3cd, 2359 .udt_pass = B_TRUE, 2360 .udt_norm_addr = 0x21cd, 2361 .udt_sock = 0, 2362 .udt_die = 0, 2363 .udt_comp = 1, 2364 .udt_dimm_no = 0, 2365 .udt_dimm_col = 0x33, 2366 .udt_dimm_row = 0x0, 2367 .udt_dimm_bank = 1, 2368 .udt_dimm_bank_group = 0x0, 2369 .udt_dimm_subchan = 1, 2370 .udt_dimm_rm = 0, 2371 .udt_dimm_cs = 0 2372 }, { 2373 .udt_desc = "NPS 5ch, 1P (4)", 2374 .udt_umc = &zen_umc_nps5_1p, 2375 .udt_pa = 0x4cd, 2376 .udt_pass = B_TRUE, 2377 .udt_norm_addr = 0x2cd, 2378 .udt_sock = 0, 2379 .udt_die = 0, 2380 .udt_comp = 0, 2381 .udt_dimm_no = 0, 2382 .udt_dimm_col = 0x53, 2383 .udt_dimm_row = 0x0, 2384 .udt_dimm_bank = 0, 2385 .udt_dimm_bank_group = 0x0, 2386 .udt_dimm_subchan = 1, 2387 .udt_dimm_rm = 0, 2388 .udt_dimm_cs = 0 2389 }, { 2390 .udt_desc = "NPS 5ch, 1P (5)", 2391 .udt_umc = &zen_umc_nps5_1p, 2392 .udt_pa = 0x5cd, 2393 .udt_pass = B_TRUE, 2394 .udt_norm_addr = 0x22cd, 2395 .udt_sock = 0, 2396 .udt_die = 0, 2397 .udt_comp = 1, 2398 .udt_dimm_no = 0, 2399 .udt_dimm_col = 0x53, 2400 .udt_dimm_row = 0x0, 2401 .udt_dimm_bank = 1, 2402 .udt_dimm_bank_group = 0x0, 2403 .udt_dimm_subchan = 1, 2404 .udt_dimm_rm = 0, 2405 .udt_dimm_cs = 0 2406 }, { 2407 .udt_desc = "NPS 5ch, 1P (6)", 2408 .udt_umc = &zen_umc_nps5_1p, 2409 .udt_pa = 0x6cd, 2410 .udt_pass = B_TRUE, 2411 .udt_norm_addr = 0x3cd, 2412 .udt_sock = 0, 2413 .udt_die = 0, 2414 .udt_comp = 0, 2415 .udt_dimm_no = 0, 2416 .udt_dimm_col = 0x73, 2417 .udt_dimm_row = 0x0, 2418 .udt_dimm_bank = 0, 2419 .udt_dimm_bank_group = 0x0, 2420 .udt_dimm_subchan = 1, 2421 .udt_dimm_rm = 0, 2422 .udt_dimm_cs = 0 2423 }, { 2424 .udt_desc = "NPS 5ch, 1P (7)", 2425 .udt_umc = &zen_umc_nps5_1p, 2426 .udt_pa = 0x3ecd, 2427 .udt_pass = B_TRUE, 2428 .udt_norm_addr = 0x1fcd, 2429 .udt_sock = 0, 2430 .udt_die = 0, 2431 .udt_comp = 0, 2432 .udt_dimm_no = 0, 2433 .udt_dimm_col = 0x3f3, 2434 .udt_dimm_row = 0x0, 2435 .udt_dimm_bank = 0, 2436 .udt_dimm_bank_group = 0x0, 2437 .udt_dimm_subchan = 1, 2438 .udt_dimm_rm = 0, 2439 .udt_dimm_cs = 0 2440 }, { 2441 .udt_desc = "NPS 5ch, 1P (8)", 2442 .udt_umc = &zen_umc_nps5_1p, 2443 .udt_pa = 0x3fcd, 2444 .udt_pass = B_TRUE, 2445 .udt_norm_addr = 0x3fcd, 2446 .udt_sock = 0, 2447 .udt_die = 0, 2448 .udt_comp = 1, 2449 .udt_dimm_no = 0, 2450 .udt_dimm_col = 0x3f3, 2451 .udt_dimm_row = 0x0, 2452 .udt_dimm_bank = 1, 2453 .udt_dimm_bank_group = 0x0, 2454 .udt_dimm_subchan = 1, 2455 .udt_dimm_rm = 0, 2456 .udt_dimm_cs = 0 2457 }, { 2458 .udt_desc = "NPS 5ch, 1P (9)", 2459 .udt_umc = &zen_umc_nps5_1p, 2460 .udt_pa = 0x40cd, 2461 .udt_pass = B_TRUE, 2462 .udt_norm_addr = 0x20cd, 2463 .udt_sock = 0, 2464 .udt_die = 0, 2465 .udt_comp = 2, 2466 .udt_dimm_no = 0, 2467 .udt_dimm_col = 0x13, 2468 .udt_dimm_row = 0x0, 2469 .udt_dimm_bank = 1, 2470 .udt_dimm_bank_group = 0x0, 2471 .udt_dimm_subchan = 1, 2472 .udt_dimm_rm = 0, 2473 .udt_dimm_cs = 0 2474 }, { 2475 .udt_desc = "NPS 5ch, 1P (10)", 2476 .udt_umc = &zen_umc_nps5_1p, 2477 .udt_pa = 0x41cd, 2478 .udt_pass = B_TRUE, 2479 .udt_norm_addr = 0xcd, 2480 .udt_sock = 0, 2481 .udt_die = 0, 2482 .udt_comp = 1, 2483 .udt_dimm_no = 0, 2484 .udt_dimm_col = 0x13, 2485 .udt_dimm_row = 0x0, 2486 .udt_dimm_bank = 0, 2487 .udt_dimm_bank_group = 0x0, 2488 .udt_dimm_subchan = 1, 2489 .udt_dimm_rm = 0, 2490 .udt_dimm_cs = 0 2491 }, { 2492 .udt_desc = "NPS 5ch, 1P (11)", 2493 .udt_umc = &zen_umc_nps5_1p, 2494 .udt_pa = 0x80cd, 2495 .udt_pass = B_TRUE, 2496 .udt_norm_addr = 0xcd, 2497 .udt_sock = 0, 2498 .udt_die = 0, 2499 .udt_comp = 2, 2500 .udt_dimm_no = 0, 2501 .udt_dimm_col = 0x13, 2502 .udt_dimm_row = 0x0, 2503 .udt_dimm_bank = 0, 2504 .udt_dimm_bank_group = 0x0, 2505 .udt_dimm_subchan = 1, 2506 .udt_dimm_rm = 0, 2507 .udt_dimm_cs = 0 2508 }, { 2509 .udt_desc = "NPS 5ch, 1P (12)", 2510 .udt_umc = &zen_umc_nps5_1p, 2511 .udt_pa = 0x81cd, 2512 .udt_pass = B_TRUE, 2513 .udt_norm_addr = 0x20cd, 2514 .udt_sock = 0, 2515 .udt_die = 0, 2516 .udt_comp = 3, 2517 .udt_dimm_no = 0, 2518 .udt_dimm_col = 0x13, 2519 .udt_dimm_row = 0x0, 2520 .udt_dimm_bank = 1, 2521 .udt_dimm_bank_group = 0x0, 2522 .udt_dimm_subchan = 1, 2523 .udt_dimm_rm = 0, 2524 .udt_dimm_cs = 0 2525 }, { 2526 .udt_desc = "NPS 5ch, 1P (13)", 2527 .udt_umc = &zen_umc_nps5_1p, 2528 .udt_pa = 0xc0cd, 2529 .udt_pass = B_TRUE, 2530 .udt_norm_addr = 0x20cd, 2531 .udt_sock = 0, 2532 .udt_die = 0, 2533 .udt_comp = 4, 2534 .udt_dimm_no = 0, 2535 .udt_dimm_col = 0x13, 2536 .udt_dimm_row = 0x0, 2537 .udt_dimm_bank = 1, 2538 .udt_dimm_bank_group = 0x0, 2539 .udt_dimm_subchan = 1, 2540 .udt_dimm_rm = 0, 2541 .udt_dimm_cs = 0 2542 }, { 2543 .udt_desc = "NPS 5ch, 1P (14)", 2544 .udt_umc = &zen_umc_nps5_1p, 2545 .udt_pa = 0xc1cd, 2546 .udt_pass = B_TRUE, 2547 .udt_norm_addr = 0xcd, 2548 .udt_sock = 0, 2549 .udt_die = 0, 2550 .udt_comp = 3, 2551 .udt_dimm_no = 0, 2552 .udt_dimm_col = 0x13, 2553 .udt_dimm_row = 0x0, 2554 .udt_dimm_bank = 0, 2555 .udt_dimm_bank_group = 0x0, 2556 .udt_dimm_subchan = 1, 2557 .udt_dimm_rm = 0, 2558 .udt_dimm_cs = 0 2559 }, { 2560 .udt_desc = "NPS 5ch, 1P (15)", 2561 .udt_umc = &zen_umc_nps5_1p, 2562 .udt_pa = 0x100cd, 2563 .udt_pass = B_TRUE, 2564 .udt_norm_addr = 0x20cd, 2565 .udt_sock = 0, 2566 .udt_die = 0, 2567 .udt_comp = 0, 2568 .udt_dimm_no = 0, 2569 .udt_dimm_col = 0x13, 2570 .udt_dimm_row = 0x0, 2571 .udt_dimm_bank = 1, 2572 .udt_dimm_bank_group = 0x0, 2573 .udt_dimm_subchan = 1, 2574 .udt_dimm_rm = 0, 2575 .udt_dimm_cs = 0 2576 }, { 2577 .udt_desc = "NPS 5ch, 1P (16)", 2578 .udt_umc = &zen_umc_nps5_1p, 2579 .udt_pa = 0x101cd, 2580 .udt_pass = B_TRUE, 2581 .udt_norm_addr = 0xcd, 2582 .udt_sock = 0, 2583 .udt_die = 0, 2584 .udt_comp = 4, 2585 .udt_dimm_no = 0, 2586 .udt_dimm_col = 0x13, 2587 .udt_dimm_row = 0x0, 2588 .udt_dimm_bank = 0, 2589 .udt_dimm_bank_group = 0x0, 2590 .udt_dimm_subchan = 1, 2591 .udt_dimm_rm = 0, 2592 .udt_dimm_cs = 0 2593 }, { 2594 .udt_desc = "NPS 5ch, 1P (17)", 2595 .udt_umc = &zen_umc_nps5_1p, 2596 .udt_pa = 0x140cd, 2597 .udt_pass = B_TRUE, 2598 .udt_norm_addr = 0x40cd, 2599 .udt_sock = 0, 2600 .udt_die = 0, 2601 .udt_comp = 0, 2602 .udt_dimm_no = 0, 2603 .udt_dimm_col = 0x13, 2604 .udt_dimm_row = 0x0, 2605 .udt_dimm_bank = 2, 2606 .udt_dimm_bank_group = 0x0, 2607 .udt_dimm_subchan = 1, 2608 .udt_dimm_rm = 0, 2609 .udt_dimm_cs = 0 2610 }, { 2611 .udt_desc = "NPS 5ch, 1P (18)", 2612 .udt_umc = &zen_umc_nps5_1p, 2613 .udt_pa = 0x141cd, 2614 .udt_pass = B_TRUE, 2615 .udt_norm_addr = 0x60cd, 2616 .udt_sock = 0, 2617 .udt_die = 0, 2618 .udt_comp = 1, 2619 .udt_dimm_no = 0, 2620 .udt_dimm_col = 0x13, 2621 .udt_dimm_row = 0x0, 2622 .udt_dimm_bank = 3, 2623 .udt_dimm_bank_group = 0x0, 2624 .udt_dimm_subchan = 1, 2625 .udt_dimm_rm = 0, 2626 .udt_dimm_cs = 0 2627 }, { 2628 .udt_desc = "NPS 6ch, 1P (0)", 2629 .udt_umc = &zen_umc_nps6_1p, 2630 .udt_pa = 0xbc, 2631 .udt_pass = B_TRUE, 2632 .udt_norm_addr = 0xbc, 2633 .udt_sock = 0, 2634 .udt_die = 0, 2635 .udt_comp = 0, 2636 .udt_dimm_no = 0, 2637 .udt_dimm_col = 0x1f, 2638 .udt_dimm_row = 0x0, 2639 .udt_dimm_bank = 0, 2640 .udt_dimm_bank_group = 0x0, 2641 .udt_dimm_subchan = 0, 2642 .udt_dimm_rm = 0, 2643 .udt_dimm_cs = 0 2644 }, { 2645 .udt_desc = "NPS 6ch, 1P (1)", 2646 .udt_umc = &zen_umc_nps6_1p, 2647 .udt_pa = 0x1bc, 2648 .udt_pass = B_TRUE, 2649 .udt_norm_addr = 0x10bc, 2650 .udt_sock = 0, 2651 .udt_die = 0, 2652 .udt_comp = 1, 2653 .udt_dimm_no = 0, 2654 .udt_dimm_col = 0x21f, 2655 .udt_dimm_row = 0x0, 2656 .udt_dimm_bank = 0, 2657 .udt_dimm_bank_group = 0x0, 2658 .udt_dimm_subchan = 0, 2659 .udt_dimm_rm = 0, 2660 .udt_dimm_cs = 0 2661 }, { 2662 .udt_desc = "NPS 6ch, 1P (2)", 2663 .udt_umc = &zen_umc_nps6_1p, 2664 .udt_pa = 0x20bc, 2665 .udt_pass = B_TRUE, 2666 .udt_norm_addr = 0xbc, 2667 .udt_sock = 0, 2668 .udt_die = 0, 2669 .udt_comp = 3, 2670 .udt_dimm_no = 0, 2671 .udt_dimm_col = 0x1f, 2672 .udt_dimm_row = 0x0, 2673 .udt_dimm_bank = 0, 2674 .udt_dimm_bank_group = 0x0, 2675 .udt_dimm_subchan = 0, 2676 .udt_dimm_rm = 0, 2677 .udt_dimm_cs = 0 2678 }, { 2679 .udt_desc = "NPS 6ch, 1P (3)", 2680 .udt_umc = &zen_umc_nps6_1p, 2681 .udt_pa = 0x21bc, 2682 .udt_pass = B_TRUE, 2683 .udt_norm_addr = 0x10bc, 2684 .udt_sock = 0, 2685 .udt_die = 0, 2686 .udt_comp = 4, 2687 .udt_dimm_no = 0, 2688 .udt_dimm_col = 0x21f, 2689 .udt_dimm_row = 0x0, 2690 .udt_dimm_bank = 0, 2691 .udt_dimm_bank_group = 0x0, 2692 .udt_dimm_subchan = 0, 2693 .udt_dimm_rm = 0, 2694 .udt_dimm_cs = 0 2695 }, { 2696 .udt_desc = "NPS 6ch, 1P (4)", 2697 .udt_umc = &zen_umc_nps6_1p, 2698 .udt_pa = 0x40bc, 2699 .udt_pass = B_TRUE, 2700 .udt_norm_addr = 0x10bc, 2701 .udt_sock = 0, 2702 .udt_die = 0, 2703 .udt_comp = 2, 2704 .udt_dimm_no = 0, 2705 .udt_dimm_col = 0x21f, 2706 .udt_dimm_row = 0x0, 2707 .udt_dimm_bank = 0, 2708 .udt_dimm_bank_group = 0x0, 2709 .udt_dimm_subchan = 0, 2710 .udt_dimm_rm = 0, 2711 .udt_dimm_cs = 0 2712 }, { 2713 .udt_desc = "NPS 6ch, 1P (5)", 2714 .udt_umc = &zen_umc_nps6_1p, 2715 .udt_pa = 0x41bc, 2716 .udt_pass = B_TRUE, 2717 .udt_norm_addr = 0xbc, 2718 .udt_sock = 0, 2719 .udt_die = 0, 2720 .udt_comp = 1, 2721 .udt_dimm_no = 0, 2722 .udt_dimm_col = 0x1f, 2723 .udt_dimm_row = 0x0, 2724 .udt_dimm_bank = 0, 2725 .udt_dimm_bank_group = 0x0, 2726 .udt_dimm_subchan = 0, 2727 .udt_dimm_rm = 0, 2728 .udt_dimm_cs = 0 2729 }, { 2730 .udt_desc = "NPS 6ch, 1P (6)", 2731 .udt_umc = &zen_umc_nps6_1p, 2732 .udt_pa = 0x60bc, 2733 .udt_pass = B_TRUE, 2734 .udt_norm_addr = 0x10bc, 2735 .udt_sock = 0, 2736 .udt_die = 0, 2737 .udt_comp = 5, 2738 .udt_dimm_no = 0, 2739 .udt_dimm_col = 0x21f, 2740 .udt_dimm_row = 0x0, 2741 .udt_dimm_bank = 0, 2742 .udt_dimm_bank_group = 0x0, 2743 .udt_dimm_subchan = 0, 2744 .udt_dimm_rm = 0, 2745 .udt_dimm_cs = 0 2746 }, { 2747 .udt_desc = "NPS 6ch, 1P (7)", 2748 .udt_umc = &zen_umc_nps6_1p, 2749 .udt_pa = 0x61bc, 2750 .udt_pass = B_TRUE, 2751 .udt_norm_addr = 0xbc, 2752 .udt_sock = 0, 2753 .udt_die = 0, 2754 .udt_comp = 4, 2755 .udt_dimm_no = 0, 2756 .udt_dimm_col = 0x1f, 2757 .udt_dimm_row = 0x0, 2758 .udt_dimm_bank = 0, 2759 .udt_dimm_bank_group = 0x0, 2760 .udt_dimm_subchan = 0, 2761 .udt_dimm_rm = 0, 2762 .udt_dimm_cs = 0 2763 }, { 2764 .udt_desc = "NPS 6ch, 1P (8)", 2765 .udt_umc = &zen_umc_nps6_1p, 2766 .udt_pa = 0x80bc, 2767 .udt_pass = B_TRUE, 2768 .udt_norm_addr = 0xbc, 2769 .udt_sock = 0, 2770 .udt_die = 0, 2771 .udt_comp = 2, 2772 .udt_dimm_no = 0, 2773 .udt_dimm_col = 0x1f, 2774 .udt_dimm_row = 0x0, 2775 .udt_dimm_bank = 0, 2776 .udt_dimm_bank_group = 0x0, 2777 .udt_dimm_subchan = 0, 2778 .udt_dimm_rm = 0, 2779 .udt_dimm_cs = 0 2780 }, { 2781 .udt_desc = "NPS 6ch, 1P (9)", 2782 .udt_umc = &zen_umc_nps6_1p, 2783 .udt_pa = 0x81bc, 2784 .udt_pass = B_TRUE, 2785 .udt_norm_addr = 0x10bc, 2786 .udt_sock = 0, 2787 .udt_die = 0, 2788 .udt_comp = 0, 2789 .udt_dimm_no = 0, 2790 .udt_dimm_col = 0x21f, 2791 .udt_dimm_row = 0x0, 2792 .udt_dimm_bank = 0, 2793 .udt_dimm_bank_group = 0x0, 2794 .udt_dimm_subchan = 0, 2795 .udt_dimm_rm = 0, 2796 .udt_dimm_cs = 0 2797 }, { 2798 .udt_desc = "NPS 6ch, 1P (10)", 2799 .udt_umc = &zen_umc_nps6_1p, 2800 .udt_pa = 0xa0bc, 2801 .udt_pass = B_TRUE, 2802 .udt_norm_addr = 0xbc, 2803 .udt_sock = 0, 2804 .udt_die = 0, 2805 .udt_comp = 5, 2806 .udt_dimm_no = 0, 2807 .udt_dimm_col = 0x1f, 2808 .udt_dimm_row = 0x0, 2809 .udt_dimm_bank = 0, 2810 .udt_dimm_bank_group = 0x0, 2811 .udt_dimm_subchan = 0, 2812 .udt_dimm_rm = 0, 2813 .udt_dimm_cs = 0 2814 }, { 2815 .udt_desc = "NPS 6ch, 1P (11)", 2816 .udt_umc = &zen_umc_nps6_1p, 2817 .udt_pa = 0xa1bc, 2818 .udt_pass = B_TRUE, 2819 .udt_norm_addr = 0x10bc, 2820 .udt_sock = 0, 2821 .udt_die = 0, 2822 .udt_comp = 3, 2823 .udt_dimm_no = 0, 2824 .udt_dimm_col = 0x21f, 2825 .udt_dimm_row = 0x0, 2826 .udt_dimm_bank = 0, 2827 .udt_dimm_bank_group = 0x0, 2828 .udt_dimm_subchan = 0, 2829 .udt_dimm_rm = 0, 2830 .udt_dimm_cs = 0 2831 }, 2832 /* 2833 * We don't use hashing on the 64 KiB range, but walking through it should still 2834 * change the component IDs because of how the scheme works, but it should be 2835 * more contiguous. 2836 */ 2837 { 2838 .udt_desc = "NPS 6ch, 1P (12)", 2839 .udt_umc = &zen_umc_nps6_1p, 2840 .udt_pa = 0x120bc, 2841 .udt_pass = B_TRUE, 2842 .udt_norm_addr = 0x20bc, 2843 .udt_sock = 0, 2844 .udt_die = 0, 2845 .udt_comp = 4, 2846 .udt_dimm_no = 0, 2847 .udt_dimm_col = 0x1f, 2848 .udt_dimm_row = 0x0, 2849 .udt_dimm_bank = 1, 2850 .udt_dimm_bank_group = 0x0, 2851 .udt_dimm_subchan = 0, 2852 .udt_dimm_rm = 0, 2853 .udt_dimm_cs = 0 2854 }, { 2855 .udt_desc = "NPS 6ch, 1P (13)", 2856 .udt_umc = &zen_umc_nps6_1p, 2857 .udt_pa = 0x220bc, 2858 .udt_pass = B_TRUE, 2859 .udt_norm_addr = 0x40bc, 2860 .udt_sock = 0, 2861 .udt_die = 0, 2862 .udt_comp = 5, 2863 .udt_dimm_no = 0, 2864 .udt_dimm_col = 0x1f, 2865 .udt_dimm_row = 0x0, 2866 .udt_dimm_bank = 0x2, 2867 .udt_dimm_bank_group = 0x0, 2868 .udt_dimm_subchan = 0, 2869 .udt_dimm_rm = 0, 2870 .udt_dimm_cs = 0 2871 }, { 2872 .udt_desc = "NPS 6ch, 1P (14)", 2873 .udt_umc = &zen_umc_nps6_1p, 2874 .udt_pa = 0x320bc, 2875 .udt_pass = B_TRUE, 2876 .udt_norm_addr = 0x80bc, 2877 .udt_sock = 0, 2878 .udt_die = 0, 2879 .udt_comp = 3, 2880 .udt_dimm_no = 0, 2881 .udt_dimm_col = 0x1f, 2882 .udt_dimm_row = 0x0, 2883 .udt_dimm_bank = 0x0, 2884 .udt_dimm_bank_group = 0x1, 2885 .udt_dimm_subchan = 0, 2886 .udt_dimm_rm = 0, 2887 .udt_dimm_cs = 0 2888 }, { 2889 .udt_desc = "NPS 6ch, 1P (15)", 2890 .udt_umc = &zen_umc_nps6_1p, 2891 .udt_pa = 0x420bc, 2892 .udt_pass = B_TRUE, 2893 .udt_norm_addr = 0xa0bc, 2894 .udt_sock = 0, 2895 .udt_die = 0, 2896 .udt_comp = 4, 2897 .udt_dimm_no = 0, 2898 .udt_dimm_col = 0x1f, 2899 .udt_dimm_row = 0x0, 2900 .udt_dimm_bank = 0x1, 2901 .udt_dimm_bank_group = 0x1, 2902 .udt_dimm_subchan = 0, 2903 .udt_dimm_rm = 0, 2904 .udt_dimm_cs = 0 2905 }, { 2906 .udt_desc = "NPS 6ch, 1P (16)", 2907 .udt_umc = &zen_umc_nps6_1p, 2908 .udt_pa = 0x720bc, 2909 .udt_pass = B_TRUE, 2910 .udt_norm_addr = 0x120bc, 2911 .udt_sock = 0, 2912 .udt_die = 0, 2913 .udt_comp = 4, 2914 .udt_dimm_no = 0, 2915 .udt_dimm_col = 0x1f, 2916 .udt_dimm_row = 0x0, 2917 .udt_dimm_bank = 0x1, 2918 .udt_dimm_bank_group = 0x2, 2919 .udt_dimm_subchan = 0, 2920 .udt_dimm_rm = 0, 2921 .udt_dimm_cs = 0 2922 }, { 2923 .udt_desc = "NPS 6ch, 1P (17)", 2924 .udt_umc = &zen_umc_nps6_1p, 2925 .udt_pa = 0x1000020bc, 2926 .udt_pass = B_TRUE, 2927 .udt_norm_addr = 0x2aaaa0bc, 2928 .udt_sock = 0, 2929 .udt_die = 0, 2930 .udt_comp = 1, 2931 .udt_dimm_no = 0, 2932 .udt_dimm_col = 0x1f, 2933 .udt_dimm_row = 0xaaa, 2934 .udt_dimm_bank = 0x1, 2935 .udt_dimm_bank_group = 0x5, 2936 .udt_dimm_subchan = 0, 2937 .udt_dimm_rm = 0, 2938 .udt_dimm_cs = 0 2939 }, { 2940 .udt_desc = "NPS 6ch, 1P (18)", 2941 .udt_umc = &zen_umc_nps6_1p, 2942 .udt_pa = 0x1800020bc, 2943 .udt_pass = B_TRUE, 2944 .udt_norm_addr = 0x400000bc, 2945 .udt_sock = 0, 2946 .udt_die = 0, 2947 .udt_comp = 0, 2948 .udt_dimm_no = 0, 2949 .udt_dimm_col = 0x1f, 2950 .udt_dimm_row = 0x1000, 2951 .udt_dimm_bank = 0x0, 2952 .udt_dimm_bank_group = 0x0, 2953 .udt_dimm_subchan = 0, 2954 .udt_dimm_rm = 0, 2955 .udt_dimm_cs = 0 2956 }, { 2957 .udt_desc = "NPS 6ch, 1P (19)", 2958 .udt_umc = &zen_umc_nps6_1p, 2959 .udt_pa = 0x1c00020bc, 2960 .udt_pass = B_TRUE, 2961 .udt_norm_addr = 0x4aaab0bc, 2962 .udt_sock = 0, 2963 .udt_die = 0, 2964 .udt_comp = 2, 2965 .udt_dimm_no = 0, 2966 .udt_dimm_col = 0x21f, 2967 .udt_dimm_row = 0x12aa, 2968 .udt_dimm_bank = 0x1, 2969 .udt_dimm_bank_group = 0x5, 2970 .udt_dimm_subchan = 0, 2971 .udt_dimm_rm = 0, 2972 .udt_dimm_cs = 0 2973 }, { 2974 .udt_desc = "NPS 6ch, 1P (20)", 2975 .udt_umc = &zen_umc_nps6_1p, 2976 .udt_pa = 0x1c00060bc, 2977 .udt_pass = B_TRUE, 2978 .udt_norm_addr = 0x4aaaa0bc, 2979 .udt_sock = 0, 2980 .udt_die = 0, 2981 .udt_comp = 2, 2982 .udt_dimm_no = 0, 2983 .udt_dimm_col = 0x1f, 2984 .udt_dimm_row = 0x12aa, 2985 .udt_dimm_bank = 0x1, 2986 .udt_dimm_bank_group = 0x5, 2987 .udt_dimm_subchan = 0, 2988 .udt_dimm_rm = 0, 2989 .udt_dimm_cs = 0 2990 }, { 2991 .udt_desc = "NPS 6ch, 1P (21)", 2992 .udt_umc = &zen_umc_nps6_1p, 2993 .udt_pa = 0x1c00040bc, 2994 .udt_pass = B_TRUE, 2995 .udt_norm_addr = 0x4aaaa0bc, 2996 .udt_sock = 0, 2997 .udt_die = 0, 2998 .udt_comp = 5, 2999 .udt_dimm_no = 0, 3000 .udt_dimm_col = 0x1f, 3001 .udt_dimm_row = 0x12aa, 3002 .udt_dimm_bank = 0x1, 3003 .udt_dimm_bank_group = 0x5, 3004 .udt_dimm_subchan = 0, 3005 .udt_dimm_rm = 0, 3006 .udt_dimm_cs = 0 3007 }, { 3008 .udt_desc = "NPS 6ch, 1P (22)", 3009 .udt_umc = &zen_umc_nps6_1p, 3010 .udt_pa = 0x1c00041bc, 3011 .udt_pass = B_TRUE, 3012 .udt_norm_addr = 0x4aaab0bc, 3013 .udt_sock = 0, 3014 .udt_die = 0, 3015 .udt_comp = 3, 3016 .udt_dimm_no = 0, 3017 .udt_dimm_col = 0x21f, 3018 .udt_dimm_row = 0x12aa, 3019 .udt_dimm_bank = 0x1, 3020 .udt_dimm_bank_group = 0x5, 3021 .udt_dimm_subchan = 0, 3022 .udt_dimm_rm = 0, 3023 .udt_dimm_cs = 0 3024 }, { 3025 .udt_desc = "NPS 6ch, 1P (23)", 3026 .udt_umc = &zen_umc_nps6_1p, 3027 .udt_pa = 0x1c00061bc, 3028 .udt_pass = B_TRUE, 3029 .udt_norm_addr = 0x4aaab0bc, 3030 .udt_sock = 0, 3031 .udt_die = 0, 3032 .udt_comp = 0, 3033 .udt_dimm_no = 0, 3034 .udt_dimm_col = 0x21f, 3035 .udt_dimm_row = 0x12aa, 3036 .udt_dimm_bank = 0x1, 3037 .udt_dimm_bank_group = 0x5, 3038 .udt_dimm_subchan = 0, 3039 .udt_dimm_rm = 0, 3040 .udt_dimm_cs = 0 3041 }, { 3042 .udt_desc = "NPS 3ch, 2P (0)", 3043 .udt_umc = &zen_umc_nps3_2p, 3044 .udt_pa = 0xad, 3045 .udt_pass = B_TRUE, 3046 .udt_norm_addr = 0xad, 3047 .udt_sock = 0, 3048 .udt_die = 0, 3049 .udt_comp = 0, 3050 .udt_dimm_no = 0, 3051 .udt_dimm_col = 0x1b, 3052 .udt_dimm_row = 0x0, 3053 .udt_dimm_bank = 0x0, 3054 .udt_dimm_bank_group = 0x0, 3055 .udt_dimm_subchan = 0, 3056 .udt_dimm_rm = 0, 3057 .udt_dimm_cs = 0 3058 }, { 3059 .udt_desc = "NPS 3ch, 2P (1)", 3060 .udt_umc = &zen_umc_nps3_2p, 3061 .udt_pa = 0x1ad, 3062 .udt_pass = B_TRUE, 3063 .udt_norm_addr = 0xad, 3064 .udt_sock = 1, 3065 .udt_die = 0, 3066 .udt_comp = 1, 3067 .udt_dimm_no = 0, 3068 .udt_dimm_col = 0x1b, 3069 .udt_dimm_row = 0x0, 3070 .udt_dimm_bank = 0x0, 3071 .udt_dimm_bank_group = 0x0, 3072 .udt_dimm_subchan = 0, 3073 .udt_dimm_rm = 0, 3074 .udt_dimm_cs = 0 3075 }, { 3076 .udt_desc = "NPS 3ch, 2P (2)", 3077 .udt_umc = &zen_umc_nps3_2p, 3078 .udt_pa = 0x40ad, 3079 .udt_pass = B_TRUE, 3080 .udt_norm_addr = 0xad, 3081 .udt_sock = 1, 3082 .udt_die = 0, 3083 .udt_comp = 2, 3084 .udt_dimm_no = 0, 3085 .udt_dimm_col = 0x1b, 3086 .udt_dimm_row = 0x0, 3087 .udt_dimm_bank = 0x0, 3088 .udt_dimm_bank_group = 0x0, 3089 .udt_dimm_subchan = 0, 3090 .udt_dimm_rm = 0, 3091 .udt_dimm_cs = 0 3092 }, { 3093 .udt_desc = "NPS 3ch, 2P (3)", 3094 .udt_umc = &zen_umc_nps3_2p, 3095 .udt_pa = 0x41ad, 3096 .udt_pass = B_TRUE, 3097 .udt_norm_addr = 0xad, 3098 .udt_sock = 0, 3099 .udt_die = 0, 3100 .udt_comp = 1, 3101 .udt_dimm_no = 0, 3102 .udt_dimm_col = 0x1b, 3103 .udt_dimm_row = 0x0, 3104 .udt_dimm_bank = 0x0, 3105 .udt_dimm_bank_group = 0x0, 3106 .udt_dimm_subchan = 0, 3107 .udt_dimm_rm = 0, 3108 .udt_dimm_cs = 0 3109 }, { 3110 .udt_desc = "NPS 3ch, 2P (4)", 3111 .udt_umc = &zen_umc_nps3_2p, 3112 .udt_pa = 0x80ad, 3113 .udt_pass = B_TRUE, 3114 .udt_norm_addr = 0xad, 3115 .udt_sock = 0, 3116 .udt_die = 0, 3117 .udt_comp = 2, 3118 .udt_dimm_no = 0, 3119 .udt_dimm_col = 0x1b, 3120 .udt_dimm_row = 0x0, 3121 .udt_dimm_bank = 0x0, 3122 .udt_dimm_bank_group = 0x0, 3123 .udt_dimm_subchan = 0, 3124 .udt_dimm_rm = 0, 3125 .udt_dimm_cs = 0 3126 }, { 3127 .udt_desc = "NPS 3ch, 2P (5)", 3128 .udt_umc = &zen_umc_nps3_2p, 3129 .udt_pa = 0x81ad, 3130 .udt_pass = B_TRUE, 3131 .udt_norm_addr = 0xad, 3132 .udt_sock = 1, 3133 .udt_die = 0, 3134 .udt_comp = 0, 3135 .udt_dimm_no = 0, 3136 .udt_dimm_col = 0x1b, 3137 .udt_dimm_row = 0x0, 3138 .udt_dimm_bank = 0x0, 3139 .udt_dimm_bank_group = 0x0, 3140 .udt_dimm_subchan = 0, 3141 .udt_dimm_rm = 0, 3142 .udt_dimm_cs = 0 3143 }, { 3144 .udt_desc = "NPS 3ch, 2P (6)", 3145 .udt_umc = &zen_umc_nps3_2p, 3146 .udt_pa = 0x1fc0ad, 3147 .udt_pass = B_TRUE, 3148 .udt_norm_addr = 0x540ad, 3149 .udt_sock = 1, 3150 .udt_die = 0, 3151 .udt_comp = 2, 3152 .udt_dimm_no = 0, 3153 .udt_dimm_col = 0x1b, 3154 .udt_dimm_row = 0x1, 3155 .udt_dimm_bank = 0x2, 3156 .udt_dimm_bank_group = 0x2, 3157 .udt_dimm_subchan = 0, 3158 .udt_dimm_rm = 0, 3159 .udt_dimm_cs = 0 3160 }, { 3161 .udt_desc = "NPS 3ch, 2P (7)", 3162 .udt_umc = &zen_umc_nps3_2p, 3163 .udt_pa = 0x1fc1ad, 3164 .udt_pass = B_TRUE, 3165 .udt_norm_addr = 0x540ad, 3166 .udt_sock = 0, 3167 .udt_die = 0, 3168 .udt_comp = 1, 3169 .udt_dimm_no = 0, 3170 .udt_dimm_col = 0x1b, 3171 .udt_dimm_row = 0x1, 3172 .udt_dimm_bank = 0x2, 3173 .udt_dimm_bank_group = 0x2, 3174 .udt_dimm_subchan = 0, 3175 .udt_dimm_rm = 0, 3176 .udt_dimm_cs = 0 3177 }, { 3178 .udt_desc = "NPS 3ch, 2P (8)", 3179 .udt_umc = &zen_umc_nps3_2p, 3180 .udt_pa = 0x2000ad, 3181 .udt_pass = B_TRUE, 3182 .udt_norm_addr = 0x540ad, 3183 .udt_sock = 1, 3184 .udt_die = 0, 3185 .udt_comp = 0, 3186 .udt_dimm_no = 0, 3187 .udt_dimm_col = 0x1b, 3188 .udt_dimm_row = 0x1, 3189 .udt_dimm_bank = 0x2, 3190 .udt_dimm_bank_group = 0x2, 3191 .udt_dimm_subchan = 0, 3192 .udt_dimm_rm = 0, 3193 .udt_dimm_cs = 0 3194 }, { 3195 .udt_desc = "NPS 3ch, 2P (9)", 3196 .udt_umc = &zen_umc_nps3_2p, 3197 .udt_pa = 0x2001ad, 3198 .udt_pass = B_TRUE, 3199 .udt_norm_addr = 0x540ad, 3200 .udt_sock = 0, 3201 .udt_die = 0, 3202 .udt_comp = 2, 3203 .udt_dimm_no = 0, 3204 .udt_dimm_col = 0x1b, 3205 .udt_dimm_row = 0x1, 3206 .udt_dimm_bank = 0x2, 3207 .udt_dimm_bank_group = 0x2, 3208 .udt_dimm_subchan = 0, 3209 .udt_dimm_rm = 0, 3210 .udt_dimm_cs = 0 3211 }, { 3212 .udt_desc = "NPS 3ch, 2P (10)", 3213 .udt_umc = &zen_umc_nps3_2p, 3214 .udt_pa = 0x2040ad, 3215 .udt_pass = B_TRUE, 3216 .udt_norm_addr = 0x560ad, 3217 .udt_sock = 0, 3218 .udt_die = 0, 3219 .udt_comp = 0, 3220 .udt_dimm_no = 0, 3221 .udt_dimm_col = 0x1b, 3222 .udt_dimm_row = 0x1, 3223 .udt_dimm_bank = 0x3, 3224 .udt_dimm_bank_group = 0x2, 3225 .udt_dimm_subchan = 0, 3226 .udt_dimm_rm = 0, 3227 .udt_dimm_cs = 0 3228 }, { 3229 .udt_desc = "NPS 3ch, 2P (11)", 3230 .udt_umc = &zen_umc_nps3_2p, 3231 .udt_pa = 0x2041ad, 3232 .udt_pass = B_TRUE, 3233 .udt_norm_addr = 0x560ad, 3234 .udt_sock = 1, 3235 .udt_die = 0, 3236 .udt_comp = 1, 3237 .udt_dimm_no = 0, 3238 .udt_dimm_col = 0x1b, 3239 .udt_dimm_row = 0x1, 3240 .udt_dimm_bank = 0x3, 3241 .udt_dimm_bank_group = 0x2, 3242 .udt_dimm_subchan = 0, 3243 .udt_dimm_rm = 0, 3244 .udt_dimm_cs = 0 3245 }, { 3246 .udt_desc = "NPS 3ch, 2P (12)", 3247 .udt_umc = &zen_umc_nps3_2p, 3248 .udt_pa = 0x2080ad, 3249 .udt_pass = B_TRUE, 3250 .udt_norm_addr = 0x560ad, 3251 .udt_sock = 1, 3252 .udt_die = 0, 3253 .udt_comp = 2, 3254 .udt_dimm_no = 0, 3255 .udt_dimm_col = 0x1b, 3256 .udt_dimm_row = 0x1, 3257 .udt_dimm_bank = 0x3, 3258 .udt_dimm_bank_group = 0x2, 3259 .udt_dimm_subchan = 0, 3260 .udt_dimm_rm = 0, 3261 .udt_dimm_cs = 0 3262 }, { 3263 .udt_desc = "NPS 3ch, 2P (13)", 3264 .udt_umc = &zen_umc_nps3_2p, 3265 .udt_pa = 0x2081ad, 3266 .udt_pass = B_TRUE, 3267 .udt_norm_addr = 0x560ad, 3268 .udt_sock = 0, 3269 .udt_die = 0, 3270 .udt_comp = 1, 3271 .udt_dimm_no = 0, 3272 .udt_dimm_col = 0x1b, 3273 .udt_dimm_row = 0x1, 3274 .udt_dimm_bank = 0x3, 3275 .udt_dimm_bank_group = 0x2, 3276 .udt_dimm_subchan = 0, 3277 .udt_dimm_rm = 0, 3278 .udt_dimm_cs = 0 3279 }, { 3280 .udt_desc = "NPS 3ch, 2P (14)", 3281 .udt_umc = &zen_umc_nps3_2p, 3282 .udt_pa = 0x20c0ad, 3283 .udt_pass = B_TRUE, 3284 .udt_norm_addr = 0x560ad, 3285 .udt_sock = 0, 3286 .udt_die = 0, 3287 .udt_comp = 2, 3288 .udt_dimm_no = 0, 3289 .udt_dimm_col = 0x1b, 3290 .udt_dimm_row = 0x1, 3291 .udt_dimm_bank = 0x3, 3292 .udt_dimm_bank_group = 0x2, 3293 .udt_dimm_subchan = 0, 3294 .udt_dimm_rm = 0, 3295 .udt_dimm_cs = 0 3296 }, { 3297 .udt_desc = "NPS 3ch, 2P (15)", 3298 .udt_umc = &zen_umc_nps3_2p, 3299 .udt_pa = 0x20c1ad, 3300 .udt_pass = B_TRUE, 3301 .udt_norm_addr = 0x560ad, 3302 .udt_sock = 1, 3303 .udt_die = 0, 3304 .udt_comp = 0, 3305 .udt_dimm_no = 0, 3306 .udt_dimm_col = 0x1b, 3307 .udt_dimm_row = 0x1, 3308 .udt_dimm_bank = 0x3, 3309 .udt_dimm_bank_group = 0x2, 3310 .udt_dimm_subchan = 0, 3311 .udt_dimm_rm = 0, 3312 .udt_dimm_cs = 0 3313 }, { 3314 .udt_desc = "NPS 3ch, 2P (16)", 3315 .udt_umc = &zen_umc_nps3_2p, 3316 .udt_pa = 0x10020c0ad, 3317 .udt_pass = B_TRUE, 3318 .udt_norm_addr = 0x2ab020ad, 3319 .udt_sock = 0, 3320 .udt_die = 0, 3321 .udt_comp = 0, 3322 .udt_dimm_no = 0, 3323 .udt_dimm_col = 0x1b, 3324 .udt_dimm_row = 0xaac, 3325 .udt_dimm_bank = 0x1, 3326 .udt_dimm_bank_group = 0x0, 3327 .udt_dimm_subchan = 0, 3328 .udt_dimm_rm = 0, 3329 .udt_dimm_cs = 0 3330 }, { 3331 .udt_desc = "NPS 3ch, 2P (17)", 3332 .udt_umc = &zen_umc_nps3_2p, 3333 .udt_pa = 0x10020c1ad, 3334 .udt_pass = B_TRUE, 3335 .udt_norm_addr = 0x2ab020ad, 3336 .udt_sock = 1, 3337 .udt_die = 0, 3338 .udt_comp = 1, 3339 .udt_dimm_no = 0, 3340 .udt_dimm_col = 0x1b, 3341 .udt_dimm_row = 0xaac, 3342 .udt_dimm_bank = 0x1, 3343 .udt_dimm_bank_group = 0x0, 3344 .udt_dimm_subchan = 0, 3345 .udt_dimm_rm = 0, 3346 .udt_dimm_cs = 0 3347 }, { 3348 .udt_desc = NULL 3349 } }; 3350