xref: /illumos-gate/usr/src/test/os-tests/tests/zen_umc/zen_umc_fabric_ids.c (revision b210e77709da8e42dfe621e10ccf4be504206058)
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