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 2022 Oxide Computer Company 14 */ 15 16 /* 17 * Test basic fabric ID composition and decomposition across a couple of 18 * different styles of fabric decomposition schemes. 19 */ 20 21 #include "zen_umc_test.h" 22 23 const df_fabric_decomp_t naples_decomp_cpu = { 24 .dfd_sock_mask = 0x04, 25 .dfd_die_mask = 0x03, 26 .dfd_node_mask = 0xe0, 27 .dfd_comp_mask = 0x07, 28 .dfd_sock_shift = 2, 29 .dfd_die_shift = 0, 30 .dfd_node_shift = 5, 31 .dfd_comp_shift = 0 32 }; 33 34 const df_fabric_decomp_t naples_decomp_apu = { 35 .dfd_sock_mask = 0x0, 36 .dfd_die_mask = 0x0, 37 .dfd_node_mask = 0x0, 38 .dfd_comp_mask = 0xf, 39 .dfd_sock_shift = 0, 40 .dfd_die_shift = 0, 41 .dfd_node_shift = 0, 42 .dfd_comp_shift = 0 43 }; 44 45 const df_fabric_decomp_t milan_decomp = { 46 .dfd_sock_mask = 0x01, 47 .dfd_die_mask = 0x00, 48 .dfd_node_mask = 0x20, 49 .dfd_comp_mask = 0x1f, 50 .dfd_sock_shift = 0, 51 .dfd_die_shift = 0, 52 .dfd_node_shift = 5, 53 .dfd_comp_shift = 0 54 }; 55 56 static const df_fabric_decomp_t contig_decomp = { 57 .dfd_sock_mask = 0x1c, 58 .dfd_die_mask = 0x3, 59 .dfd_node_mask = 0xf80, 60 .dfd_comp_mask = 0x07f, 61 .dfd_sock_shift = 2, 62 .dfd_die_shift = 0, 63 .dfd_node_shift = 7, 64 .dfd_comp_shift = 0 65 }; 66 67 const umc_fabric_test_t zen_umc_test_fabric_ids[] = { { 68 .uft_desc = "Naples CPU (0)", 69 .uft_decomp = &naples_decomp_cpu, 70 .uft_compose = B_FALSE, 71 .uft_valid = B_TRUE, 72 .uft_fabric_id = 0, 73 .uft_sock_id = 0, 74 .uft_die_id = 0, 75 .uft_comp_id = 0 76 }, { 77 .uft_desc = "Naples CPU Socket 1 (0)", 78 .uft_decomp = &naples_decomp_cpu, 79 .uft_compose = B_TRUE, 80 .uft_valid = B_TRUE, 81 .uft_fabric_id = 0x81, 82 .uft_sock_id = 1, 83 .uft_die_id = 0, 84 .uft_comp_id = 1 85 }, { 86 .uft_desc = "Naples CPU Socket 1 (1)", 87 .uft_decomp = &naples_decomp_cpu, 88 .uft_compose = B_FALSE, 89 .uft_valid = B_TRUE, 90 .uft_fabric_id = 0x87, 91 .uft_sock_id = 1, 92 .uft_die_id = 0, 93 .uft_comp_id = 7 94 }, { 95 .uft_desc = "Naples Die (0)", 96 .uft_decomp = &naples_decomp_cpu, 97 .uft_compose = B_FALSE, 98 .uft_valid = B_TRUE, 99 .uft_fabric_id = 0xa7, 100 .uft_sock_id = 1, 101 .uft_die_id = 1, 102 .uft_comp_id = 7 103 }, { 104 .uft_desc = "Naples Die (1)", 105 .uft_decomp = &naples_decomp_cpu, 106 .uft_compose = B_TRUE, 107 .uft_valid = B_TRUE, 108 .uft_fabric_id = 0xe4, 109 .uft_sock_id = 1, 110 .uft_die_id = 3, 111 .uft_comp_id = 4 112 }, { 113 .uft_desc = "Naples CPU Invalid Socket (0)", 114 .uft_decomp = &naples_decomp_cpu, 115 .uft_compose = B_TRUE, 116 .uft_valid = B_FALSE, 117 .uft_sock_id = 11, 118 .uft_die_id = 3, 119 .uft_comp_id = 4 120 }, { 121 .uft_desc = "Naples CPU Invalid Socket (1)", 122 .uft_decomp = &naples_decomp_cpu, 123 .uft_compose = B_TRUE, 124 .uft_valid = B_FALSE, 125 .uft_sock_id = 2, 126 .uft_die_id = 3, 127 .uft_comp_id = 4 128 }, { 129 .uft_desc = "Naples CPU Invalid Socket (2)", 130 .uft_decomp = &naples_decomp_cpu, 131 .uft_compose = B_FALSE, 132 .uft_valid = B_FALSE, 133 .uft_fabric_id = 0x91, 134 }, { 135 .uft_desc = "Naples CPU Invalid Die", 136 .uft_decomp = &naples_decomp_cpu, 137 .uft_compose = B_TRUE, 138 .uft_valid = B_FALSE, 139 .uft_sock_id = 0, 140 .uft_die_id = 4, 141 .uft_comp_id = 4 142 }, { 143 .uft_desc = "Naples CPU Invalid Component (0)", 144 .uft_decomp = &naples_decomp_cpu, 145 .uft_compose = B_TRUE, 146 .uft_valid = B_FALSE, 147 .uft_sock_id = 0, 148 .uft_die_id = 0, 149 .uft_comp_id = 0x34 150 }, { 151 .uft_desc = "Naples CPU Invalid Component (1)", 152 .uft_decomp = &naples_decomp_cpu, 153 .uft_compose = B_FALSE, 154 .uft_valid = B_FALSE, 155 .uft_fabric_id = 0x88, 156 }, { 157 .uft_desc = "Naples APU Invalid Socket (0)", 158 .uft_decomp = &naples_decomp_apu, 159 .uft_compose = B_TRUE, 160 .uft_valid = B_FALSE, 161 .uft_sock_id = 1, 162 .uft_die_id = 0, 163 .uft_comp_id = 4 164 }, { 165 .uft_desc = "Naples APU Invalid Socket (1)", 166 .uft_decomp = &naples_decomp_apu, 167 .uft_compose = B_TRUE, 168 .uft_valid = B_FALSE, 169 .uft_sock_id = 0x22, 170 .uft_die_id = 0, 171 .uft_comp_id = 4 172 }, { 173 .uft_desc = "Naples APU Invalid Die (0)", 174 .uft_decomp = &naples_decomp_apu, 175 .uft_compose = B_TRUE, 176 .uft_valid = B_FALSE, 177 .uft_sock_id = 0, 178 .uft_die_id = 1, 179 .uft_comp_id = 4 180 }, { 181 .uft_desc = "Naples APU Invalid Die (1)", 182 .uft_decomp = &naples_decomp_apu, 183 .uft_compose = B_TRUE, 184 .uft_valid = B_FALSE, 185 .uft_sock_id = 0, 186 .uft_die_id = 3, 187 .uft_comp_id = 4 188 }, { 189 .uft_desc = "Naples APU Invalid Components (0)", 190 .uft_decomp = &naples_decomp_apu, 191 .uft_compose = B_TRUE, 192 .uft_valid = B_FALSE, 193 .uft_sock_id = 0, 194 .uft_die_id = 0, 195 .uft_comp_id = 0x10 196 }, { 197 .uft_desc = "Naples APU Invalid Components (1)", 198 .uft_decomp = &naples_decomp_apu, 199 .uft_compose = B_TRUE, 200 .uft_valid = B_FALSE, 201 .uft_sock_id = 0, 202 .uft_die_id = 0, 203 .uft_comp_id = 0x13 204 }, { 205 .uft_desc = "Naples APU Roundtrip (0)", 206 .uft_decomp = &naples_decomp_apu, 207 .uft_compose = B_TRUE, 208 .uft_valid = B_TRUE, 209 .uft_fabric_id = 0x03, 210 .uft_sock_id = 0, 211 .uft_die_id = 0, 212 .uft_comp_id = 3 213 }, { 214 .uft_desc = "Naples APU Roundtrip (1)", 215 .uft_decomp = &naples_decomp_apu, 216 .uft_compose = B_TRUE, 217 .uft_valid = B_TRUE, 218 .uft_fabric_id = 0x00, 219 .uft_sock_id = 0, 220 .uft_die_id = 0, 221 .uft_comp_id = 0 222 }, { 223 .uft_desc = "Naples APU Roundtrip (2)", 224 .uft_decomp = &naples_decomp_apu, 225 .uft_compose = B_FALSE, 226 .uft_valid = B_TRUE, 227 .uft_fabric_id = 0x0f, 228 .uft_sock_id = 0, 229 .uft_die_id = 0, 230 .uft_comp_id = 0xf 231 }, { 232 .uft_desc = "Milan Roundtrip (0)", 233 .uft_decomp = &milan_decomp, 234 .uft_compose = B_FALSE, 235 .uft_valid = B_TRUE, 236 .uft_fabric_id = 0x00, 237 .uft_sock_id = 0, 238 .uft_die_id = 0, 239 .uft_comp_id = 0 240 }, { 241 .uft_desc = "Milan Roundtrip (1)", 242 .uft_decomp = &milan_decomp, 243 .uft_compose = B_FALSE, 244 .uft_valid = B_TRUE, 245 .uft_fabric_id = 0x13, 246 .uft_sock_id = 0, 247 .uft_die_id = 0, 248 .uft_comp_id = 0x13 249 }, { 250 .uft_desc = "Milan Roundtrip (2)", 251 .uft_decomp = &milan_decomp, 252 .uft_compose = B_TRUE, 253 .uft_valid = B_TRUE, 254 .uft_fabric_id = 0x33, 255 .uft_sock_id = 1, 256 .uft_die_id = 0, 257 .uft_comp_id = 0x13 258 }, { 259 .uft_desc = "Milan Roundtrip (3)", 260 .uft_decomp = &milan_decomp, 261 .uft_compose = B_TRUE, 262 .uft_valid = B_TRUE, 263 .uft_fabric_id = 0x20, 264 .uft_sock_id = 1, 265 .uft_die_id = 0, 266 .uft_comp_id = 0 267 }, { 268 .uft_desc = "Milan Invalid Component (0)", 269 .uft_decomp = &milan_decomp, 270 .uft_compose = B_TRUE, 271 .uft_valid = B_FALSE, 272 .uft_sock_id = 0, 273 .uft_die_id = 0, 274 .uft_comp_id = 0x20 275 }, { 276 .uft_desc = "Milan Invalid Component (1)", 277 .uft_decomp = &milan_decomp, 278 .uft_compose = B_TRUE, 279 .uft_valid = B_FALSE, 280 .uft_sock_id = 0, 281 .uft_die_id = 0, 282 .uft_comp_id = 0x2f 283 }, { 284 .uft_desc = "Milan Invalid Die", 285 .uft_decomp = &milan_decomp, 286 .uft_compose = B_TRUE, 287 .uft_valid = B_FALSE, 288 .uft_sock_id = 0, 289 .uft_die_id = 1, 290 .uft_comp_id = 0xf 291 }, { 292 .uft_desc = "Milan Invalid Socket (0)", 293 .uft_decomp = &milan_decomp, 294 .uft_compose = B_TRUE, 295 .uft_valid = B_FALSE, 296 .uft_sock_id = 2, 297 .uft_die_id = 0, 298 .uft_comp_id = 0xf 299 }, { 300 .uft_desc = "Milan Invalid Socket (1)", 301 .uft_decomp = &milan_decomp, 302 .uft_compose = B_TRUE, 303 .uft_valid = B_FALSE, 304 .uft_sock_id = 3, 305 .uft_die_id = 0, 306 .uft_comp_id = 0xf 307 }, { 308 .uft_desc = "Milan Invalid Socket (2)", 309 .uft_decomp = &milan_decomp, 310 .uft_compose = B_FALSE, 311 .uft_valid = B_FALSE, 312 .uft_fabric_id = 0x40 313 }, { 314 .uft_desc = "Milan Invalid Socket (3)", 315 .uft_decomp = &milan_decomp, 316 .uft_compose = B_FALSE, 317 .uft_valid = B_FALSE, 318 .uft_fabric_id = 0x8f 319 }, { 320 .uft_desc = "Contig Multi-Die Roundtrip (0)", 321 .uft_decomp = &contig_decomp, 322 .uft_compose = B_FALSE, 323 .uft_valid = B_TRUE, 324 .uft_fabric_id = 0, 325 .uft_sock_id = 0, 326 .uft_die_id = 0, 327 .uft_comp_id = 0 328 }, { 329 .uft_desc = "Contig Multi-Die Roundtrip (1)", 330 .uft_decomp = &contig_decomp, 331 .uft_compose = B_TRUE, 332 .uft_valid = B_TRUE, 333 .uft_fabric_id = 0xfff, 334 .uft_sock_id = 0x7, 335 .uft_die_id = 0x3, 336 .uft_comp_id = 0x7f 337 }, { 338 .uft_desc = "Contig Multi-Die Roundtrip (2)", 339 .uft_decomp = &contig_decomp, 340 .uft_compose = B_FALSE, 341 .uft_valid = B_TRUE, 342 .uft_fabric_id = 0x121, 343 .uft_sock_id = 0x0, 344 .uft_die_id = 0x2, 345 .uft_comp_id = 0x21 346 }, { 347 .uft_desc = "Contig Multi-Die Roundtrip (3)", 348 .uft_decomp = &contig_decomp, 349 .uft_compose = B_TRUE, 350 .uft_valid = B_TRUE, 351 .uft_fabric_id = 0x7f7, 352 .uft_sock_id = 0x3, 353 .uft_die_id = 0x3, 354 .uft_comp_id = 0x77 355 }, { 356 .uft_desc = "Contig Multi-Die Bad Socket", 357 .uft_decomp = &contig_decomp, 358 .uft_compose = B_TRUE, 359 .uft_valid = B_FALSE, 360 .uft_sock_id = 0x8, 361 .uft_die_id = 0x1, 362 .uft_comp_id = 0x23 363 }, { 364 .uft_desc = "Contig Multi-Die Bad Die", 365 .uft_decomp = &contig_decomp, 366 .uft_compose = B_TRUE, 367 .uft_valid = B_FALSE, 368 .uft_sock_id = 0x2, 369 .uft_die_id = 0x5, 370 .uft_comp_id = 0x23 371 }, { 372 .uft_desc = "Contig Multi-Die Bad Component", 373 .uft_decomp = &contig_decomp, 374 .uft_compose = B_TRUE, 375 .uft_valid = B_FALSE, 376 .uft_sock_id = 0x2, 377 .uft_die_id = 0x1, 378 .uft_comp_id = 0xff 379 }, { 380 .uft_desc = "Contig Multi-Die Bad Fabric", 381 .uft_decomp = &contig_decomp, 382 .uft_compose = B_FALSE, 383 .uft_valid = B_FALSE, 384 .uft_fabric_id = 0x1000 385 }, { 386 .uft_desc = NULL 387 } }; 388