1/* Autogenerated file, DO NOT EDIT manually! generated by pan_gen_perf.py
2 *
3 * Copyright © 2021 Arm Limited
4 * Copyright © 2021 Collabora Ltd.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 */
25
26#include "pan_perf_metrics.h"
27
28#include <util/macros.h>
29
30static void UNUSED
31static_asserts_tdvx(void)
32{
33   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
34   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
35   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
36   STATIC_ASSERT(57 <= PAN_PERF_MAX_COUNTERS);
37   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
38}
39
40const struct panfrost_perf_config panfrost_perf_config_tdvx = {
41   .n_categories = 4,
42   .categories = {
43      {
44         .name = "Job Manager",
45         .n_counters = 23,
46         .counters = {
47            {
48               .name = "GPU active",
49               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
50               .symbol_name = "gpu_active",
51               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
52               .offset = 6,
53               .category = &panfrost_perf_config_tdvx.categories[0],
54            }, // counter
55            {
56               .name = "Interrupt active",
57               .desc = "The number of cycles where the GPU has a pending interrupt.",
58               .symbol_name = "irq_active",
59               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
60               .offset = 7,
61               .category = &panfrost_perf_config_tdvx.categories[0],
62            }, // counter
63            {
64               .name = "Fragment jobs",
65               .desc = "The number of jobs processed by the GPU fragment queue.",
66               .symbol_name = "js0_jobs",
67               .units = PAN_PERF_COUNTER_UNITS_JOBS,
68               .offset = 8,
69               .category = &panfrost_perf_config_tdvx.categories[0],
70            }, // counter
71            {
72               .name = "Fragment tasks",
73               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
74               .symbol_name = "js0_tasks",
75               .units = PAN_PERF_COUNTER_UNITS_TASKS,
76               .offset = 9,
77               .category = &panfrost_perf_config_tdvx.categories[0],
78            }, // counter
79            {
80               .name = "Fragment queue active",
81               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
82               .symbol_name = "js0_active",
83               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
84               .offset = 10,
85               .category = &panfrost_perf_config_tdvx.categories[0],
86            }, // counter
87            {
88               .name = "Fragment descriptor reads cycles",
89               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
90               .symbol_name = "js0_wait_read",
91               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
92               .offset = 12,
93               .category = &panfrost_perf_config_tdvx.categories[0],
94            }, // counter
95            {
96               .name = "Fragment job issue cycles",
97               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
98               .symbol_name = "js0_wait_issue",
99               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
100               .offset = 13,
101               .category = &panfrost_perf_config_tdvx.categories[0],
102            }, // counter
103            {
104               .name = "Fragment job dependency cycles",
105               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
106               .symbol_name = "js0_wait_depend",
107               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
108               .offset = 14,
109               .category = &panfrost_perf_config_tdvx.categories[0],
110            }, // counter
111            {
112               .name = "Fragment job finish cycles",
113               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
114               .symbol_name = "js0_wait_finish",
115               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
116               .offset = 15,
117               .category = &panfrost_perf_config_tdvx.categories[0],
118            }, // counter
119            {
120               .name = "Non-fragment jobs",
121               .desc = "The number of jobs processed by the GPU non-fragment queue.",
122               .symbol_name = "js1_jobs",
123               .units = PAN_PERF_COUNTER_UNITS_JOBS,
124               .offset = 16,
125               .category = &panfrost_perf_config_tdvx.categories[0],
126            }, // counter
127            {
128               .name = "Non-fragment tasks",
129               .desc = "The number of tasks processed by the GPU non-fragment queue.",
130               .symbol_name = "js1_tasks",
131               .units = PAN_PERF_COUNTER_UNITS_TASKS,
132               .offset = 17,
133               .category = &panfrost_perf_config_tdvx.categories[0],
134            }, // counter
135            {
136               .name = "Non-fragment queue active",
137               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
138               .symbol_name = "js1_active",
139               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
140               .offset = 18,
141               .category = &panfrost_perf_config_tdvx.categories[0],
142            }, // counter
143            {
144               .name = "Non-fragment descriptor read cycles",
145               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
146               .symbol_name = "js1_wait_read",
147               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
148               .offset = 20,
149               .category = &panfrost_perf_config_tdvx.categories[0],
150            }, // counter
151            {
152               .name = "Non-fragment job issue cycles",
153               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
154               .symbol_name = "js1_wait_issue",
155               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
156               .offset = 21,
157               .category = &panfrost_perf_config_tdvx.categories[0],
158            }, // counter
159            {
160               .name = "Non-fragment job dependency cycles",
161               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
162               .symbol_name = "js1_wait_depend",
163               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
164               .offset = 22,
165               .category = &panfrost_perf_config_tdvx.categories[0],
166            }, // counter
167            {
168               .name = "Non-fragment job finish cycles",
169               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
170               .symbol_name = "js1_wait_finish",
171               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
172               .offset = 23,
173               .category = &panfrost_perf_config_tdvx.categories[0],
174            }, // counter
175            {
176               .name = "Reserved jobs",
177               .desc = "The number of jobs processed by the GPU reserved queue.",
178               .symbol_name = "js2_jobs",
179               .units = PAN_PERF_COUNTER_UNITS_JOBS,
180               .offset = 24,
181               .category = &panfrost_perf_config_tdvx.categories[0],
182            }, // counter
183            {
184               .name = "Reserved tasks",
185               .desc = "The number of tasks processed by the GPU reserved queue.",
186               .symbol_name = "js2_tasks",
187               .units = PAN_PERF_COUNTER_UNITS_TASKS,
188               .offset = 25,
189               .category = &panfrost_perf_config_tdvx.categories[0],
190            }, // counter
191            {
192               .name = "Reserved queue active",
193               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
194               .symbol_name = "js2_active",
195               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
196               .offset = 26,
197               .category = &panfrost_perf_config_tdvx.categories[0],
198            }, // counter
199            {
200               .name = "Reserved descriptor read cycles",
201               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
202               .symbol_name = "js2_wait_read",
203               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
204               .offset = 28,
205               .category = &panfrost_perf_config_tdvx.categories[0],
206            }, // counter
207            {
208               .name = "Reserved job issue cycles",
209               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
210               .symbol_name = "js2_wait_issue",
211               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
212               .offset = 29,
213               .category = &panfrost_perf_config_tdvx.categories[0],
214            }, // counter
215            {
216               .name = "Reserved job dependency cycles",
217               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
218               .symbol_name = "js2_wait_depend",
219               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
220               .offset = 30,
221               .category = &panfrost_perf_config_tdvx.categories[0],
222            }, // counter
223            {
224               .name = "Reserved job finish cycles",
225               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
226               .symbol_name = "js2_wait_finish",
227               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
228               .offset = 31,
229               .category = &panfrost_perf_config_tdvx.categories[0],
230            }, // counter
231         }, // counters
232      }, // category
233      {
234         .name = "Tiler",
235         .n_counters = 24,
236         .counters = {
237            {
238               .name = "Tiler active",
239               .desc = "The number of cycles where the tiler has a workload queued for processing.",
240               .symbol_name = "tiler_active",
241               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
242               .offset = 68,
243               .category = &panfrost_perf_config_tdvx.categories[1],
244            }, // counter
245            {
246               .name = "Triangle primitives",
247               .desc = "The number of input triangle primitives.",
248               .symbol_name = "triangles",
249               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
250               .offset = 70,
251               .category = &panfrost_perf_config_tdvx.categories[1],
252            }, // counter
253            {
254               .name = "Line primitives",
255               .desc = "The number of input line primitives.",
256               .symbol_name = "lines",
257               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
258               .offset = 71,
259               .category = &panfrost_perf_config_tdvx.categories[1],
260            }, // counter
261            {
262               .name = "Point primitives",
263               .desc = "The number of input point primitives.",
264               .symbol_name = "points",
265               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
266               .offset = 72,
267               .category = &panfrost_perf_config_tdvx.categories[1],
268            }, // counter
269            {
270               .name = "Front-facing primitives",
271               .desc = "The number of front-facing triangles that are visible after culling.",
272               .symbol_name = "front_facing",
273               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
274               .offset = 73,
275               .category = &panfrost_perf_config_tdvx.categories[1],
276            }, // counter
277            {
278               .name = "Back-facing primitives",
279               .desc = "The number of back-facing triangles that are visible after culling.",
280               .symbol_name = "back_facing",
281               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
282               .offset = 74,
283               .category = &panfrost_perf_config_tdvx.categories[1],
284            }, // counter
285            {
286               .name = "Visible primitives",
287               .desc = "The number of primitives that are visible after culling.",
288               .symbol_name = "prim_visible",
289               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
290               .offset = 75,
291               .category = &panfrost_perf_config_tdvx.categories[1],
292            }, // counter
293            {
294               .name = "Facing and XY plane test culled primitives",
295               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
296               .symbol_name = "prim_culled",
297               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
298               .offset = 76,
299               .category = &panfrost_perf_config_tdvx.categories[1],
300            }, // counter
301            {
302               .name = "Z plane test culled primitives",
303               .desc = "The number of primitives that are culled by frustum Z plane tests.",
304               .symbol_name = "prim_clipped",
305               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
306               .offset = 77,
307               .category = &panfrost_perf_config_tdvx.categories[1],
308            }, // counter
309            {
310               .name = "Sample test culled primitives",
311               .desc = "The number of primitives culled by the sample coverage test.",
312               .symbol_name = "prim_sat_culled",
313               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
314               .offset = 78,
315               .category = &panfrost_perf_config_tdvx.categories[1],
316            }, // counter
317            {
318               .name = "Read beats",
319               .desc = "The number of internal bus data read cycles made by the tiler.",
320               .symbol_name = "bus_read",
321               .units = PAN_PERF_COUNTER_UNITS_BEATS,
322               .offset = 81,
323               .category = &panfrost_perf_config_tdvx.categories[1],
324            }, // counter
325            {
326               .name = "Write beats",
327               .desc = "The number of internal bus data write cycles made by the tiler.",
328               .symbol_name = "bus_write",
329               .units = PAN_PERF_COUNTER_UNITS_BEATS,
330               .offset = 83,
331               .category = &panfrost_perf_config_tdvx.categories[1],
332            }, // counter
333            {
334               .name = "Position shading requests",
335               .desc = "The number of position shading requests in the IDVS flow.",
336               .symbol_name = "idvs_pos_shad_req",
337               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
338               .offset = 85,
339               .category = &panfrost_perf_config_tdvx.categories[1],
340            }, // counter
341            {
342               .name = "Position shading stall cycles",
343               .desc = "The number of cycles where the tiler has a stalled position shading request.",
344               .symbol_name = "idvs_pos_shad_stall",
345               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
346               .offset = 87,
347               .category = &panfrost_perf_config_tdvx.categories[1],
348            }, // counter
349            {
350               .name = "Position FIFO full cycles",
351               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
352               .symbol_name = "idvs_pos_fifo_full",
353               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
354               .offset = 88,
355               .category = &panfrost_perf_config_tdvx.categories[1],
356            }, // counter
357            {
358               .name = "Position cache hits",
359               .desc = "The number of position lookups that result in a hit in the vertex cache.",
360               .symbol_name = "vcache_hit",
361               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
362               .offset = 90,
363               .category = &panfrost_perf_config_tdvx.categories[1],
364            }, // counter
365            {
366               .name = "Position cache misses",
367               .desc = "The number of position lookups that miss in the vertex cache.",
368               .symbol_name = "vcache_miss",
369               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
370               .offset = 91,
371               .category = &panfrost_perf_config_tdvx.categories[1],
372            }, // counter
373            {
374               .name = "Primitive assembly busy stall cycles",
375               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
376               .symbol_name = "vfetch_stall",
377               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
378               .offset = 95,
379               .category = &panfrost_perf_config_tdvx.categories[1],
380            }, // counter
381            {
382               .name = "Varying cache hits",
383               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
384               .symbol_name = "idvs_vbu_hit",
385               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
386               .offset = 98,
387               .category = &panfrost_perf_config_tdvx.categories[1],
388            }, // counter
389            {
390               .name = "Varying cache misses",
391               .desc = "The number of varying lookups that miss in the vertex cache.",
392               .symbol_name = "idvs_vbu_miss",
393               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
394               .offset = 99,
395               .category = &panfrost_perf_config_tdvx.categories[1],
396            }, // counter
397            {
398               .name = "Varying shading requests",
399               .desc = "The number of varying shading requests in the IDVS flow.",
400               .symbol_name = "idvs_var_shad_req",
401               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
402               .offset = 101,
403               .category = &panfrost_perf_config_tdvx.categories[1],
404            }, // counter
405            {
406               .name = "Varying shading stall cycles",
407               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
408               .symbol_name = "idvs_var_shad_stall",
409               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
410               .offset = 102,
411               .category = &panfrost_perf_config_tdvx.categories[1],
412            }, // counter
413            {
414               .name = "Write buffer transaction stall cycles",
415               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
416               .symbol_name = "wrbuf_no_axi_id_stall",
417               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
418               .offset = 118,
419               .category = &panfrost_perf_config_tdvx.categories[1],
420            }, // counter
421            {
422               .name = "Write buffer write stall cycles",
423               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
424               .symbol_name = "wrbuf_axi_stall",
425               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
426               .offset = 119,
427               .category = &panfrost_perf_config_tdvx.categories[1],
428            }, // counter
429         }, // counters
430      }, // category
431      {
432         .name = "Shader Core",
433         .n_counters = 57,
434         .counters = {
435            {
436               .name = "Fragment active",
437               .desc = "The number of cycles where the shader core is processing a fragment workload.",
438               .symbol_name = "frag_active",
439               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
440               .offset = 196,
441               .category = &panfrost_perf_config_tdvx.categories[2],
442            }, // counter
443            {
444               .name = "Read primitives",
445               .desc = "The number of primitives read from the tile list by the fragment front-end.",
446               .symbol_name = "frag_primitives",
447               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
448               .offset = 197,
449               .category = &panfrost_perf_config_tdvx.categories[2],
450            }, // counter
451            {
452               .name = "Rasterized primitives",
453               .desc = "The number of primitives being rasterized.",
454               .symbol_name = "frag_prim_rast",
455               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
456               .offset = 198,
457               .category = &panfrost_perf_config_tdvx.categories[2],
458            }, // counter
459            {
460               .name = "Fragment FPKB active",
461               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
462               .symbol_name = "frag_fpk_active",
463               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
464               .offset = 199,
465               .category = &panfrost_perf_config_tdvx.categories[2],
466            }, // counter
467            {
468               .name = "Fragment warps",
469               .desc = "The number of fragment warps created.",
470               .symbol_name = "frag_warps",
471               .units = PAN_PERF_COUNTER_UNITS_WARPS,
472               .offset = 201,
473               .category = &panfrost_perf_config_tdvx.categories[2],
474            }, // counter
475            {
476               .name = "Partial fragment warps",
477               .desc = "The number of fragment warps containing helper threads that do not correspond to a hit sample point.",
478               .symbol_name = "frag_partial_warps",
479               .units = PAN_PERF_COUNTER_UNITS_WARPS,
480               .offset = 202,
481               .category = &panfrost_perf_config_tdvx.categories[2],
482            }, // counter
483            {
484               .name = "Rasterized quads",
485               .desc = "The number of quads generated by the rasterization phase.",
486               .symbol_name = "frag_quads_rast",
487               .units = PAN_PERF_COUNTER_UNITS_QUADS,
488               .offset = 203,
489               .category = &panfrost_perf_config_tdvx.categories[2],
490            }, // counter
491            {
492               .name = "Early ZS tested quads",
493               .desc = "The number of quads that are undergoing early depth and stencil testing.",
494               .symbol_name = "frag_quads_ezs_test",
495               .units = PAN_PERF_COUNTER_UNITS_QUADS,
496               .offset = 204,
497               .category = &panfrost_perf_config_tdvx.categories[2],
498            }, // counter
499            {
500               .name = "Early ZS updated quads",
501               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
502               .symbol_name = "frag_quads_ezs_update",
503               .units = PAN_PERF_COUNTER_UNITS_QUADS,
504               .offset = 205,
505               .category = &panfrost_perf_config_tdvx.categories[2],
506            }, // counter
507            {
508               .name = "Early ZS killed quads",
509               .desc = "The number of quads killed by early depth and stencil testing.",
510               .symbol_name = "frag_quads_ezs_kill",
511               .units = PAN_PERF_COUNTER_UNITS_QUADS,
512               .offset = 206,
513               .category = &panfrost_perf_config_tdvx.categories[2],
514            }, // counter
515            {
516               .name = "Late ZS tested quads",
517               .desc = "The number of quads undergoing late depth and stencil testing.",
518               .symbol_name = "frag_lzs_test",
519               .units = PAN_PERF_COUNTER_UNITS_QUADS,
520               .offset = 207,
521               .category = &panfrost_perf_config_tdvx.categories[2],
522            }, // counter
523            {
524               .name = "Late ZS killed quads",
525               .desc = "The number of quads killed by late depth and stencil testing.",
526               .symbol_name = "frag_lzs_kill",
527               .units = PAN_PERF_COUNTER_UNITS_QUADS,
528               .offset = 208,
529               .category = &panfrost_perf_config_tdvx.categories[2],
530            }, // counter
531            {
532               .name = "Tiles",
533               .desc = "The number of tiles processed by the shader core.",
534               .symbol_name = "frag_ptiles",
535               .units = PAN_PERF_COUNTER_UNITS_TILES,
536               .offset = 210,
537               .category = &panfrost_perf_config_tdvx.categories[2],
538            }, // counter
539            {
540               .name = "Constant tiles killed",
541               .desc = "The number of tiles killed by transaction elimination.",
542               .symbol_name = "frag_trans_elim",
543               .units = PAN_PERF_COUNTER_UNITS_TILES,
544               .offset = 211,
545               .category = &panfrost_perf_config_tdvx.categories[2],
546            }, // counter
547            {
548               .name = "FPK occluder quads",
549               .desc = "The number of quads that are valid occluders for hidden surface removal.",
550               .symbol_name = "quad_fpk_killer",
551               .units = PAN_PERF_COUNTER_UNITS_QUADS,
552               .offset = 212,
553               .category = &panfrost_perf_config_tdvx.categories[2],
554            }, // counter
555            {
556               .name = "Non-fragment active",
557               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
558               .symbol_name = "compute_active",
559               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
560               .offset = 214,
561               .category = &panfrost_perf_config_tdvx.categories[2],
562            }, // counter
563            {
564               .name = "Non-fragment tasks",
565               .desc = "The number of non-fragment tasks issued to the shader core.",
566               .symbol_name = "compute_tasks",
567               .units = PAN_PERF_COUNTER_UNITS_TASKS,
568               .offset = 215,
569               .category = &panfrost_perf_config_tdvx.categories[2],
570            }, // counter
571            {
572               .name = "Non-fragment warps",
573               .desc = "The number of non-fragment warps created.",
574               .symbol_name = "compute_warps",
575               .units = PAN_PERF_COUNTER_UNITS_WARPS,
576               .offset = 216,
577               .category = &panfrost_perf_config_tdvx.categories[2],
578            }, // counter
579            {
580               .name = "Non-fragment starvation cycles",
581               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
582               .symbol_name = "compute_starving",
583               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
584               .offset = 217,
585               .category = &panfrost_perf_config_tdvx.categories[2],
586            }, // counter
587            {
588               .name = "Execution core active",
589               .desc = "The number of cycles where the shader core is processing at least one warp.",
590               .symbol_name = "exec_core_active",
591               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
592               .offset = 218,
593               .category = &panfrost_perf_config_tdvx.categories[2],
594            }, // counter
595            {
596               .name = "Execution engine active",
597               .desc = "The number of cycles where the execution engine unit is processing at least one thread.",
598               .symbol_name = "exec_active",
599               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
600               .offset = 219,
601               .category = &panfrost_perf_config_tdvx.categories[2],
602            }, // counter
603            {
604               .name = "Executed instructions",
605               .desc = "The number of instructions executed per warp.",
606               .symbol_name = "exec_instr_count",
607               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
608               .offset = 220,
609               .category = &panfrost_perf_config_tdvx.categories[2],
610            }, // counter
611            {
612               .name = "Diverged instructions",
613               .desc = "The number of instructions executed per warp, that have control flow divergence.",
614               .symbol_name = "exec_instr_diverged",
615               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
616               .offset = 221,
617               .category = &panfrost_perf_config_tdvx.categories[2],
618            }, // counter
619            {
620               .name = "Execution engine starvation cycles",
621               .desc = "The number of cycles where no new threads are available for execution.",
622               .symbol_name = "exec_instr_starving",
623               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
624               .offset = 222,
625               .category = &panfrost_perf_config_tdvx.categories[2],
626            }, // counter
627            {
628               .name = "Arithmetic instructions",
629               .desc = "The number of instructions where the workload is a single FMA pipe arithmetic operation.",
630               .symbol_name = "arith_instr_single_fma",
631               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
632               .offset = 223,
633               .category = &panfrost_perf_config_tdvx.categories[2],
634            }, // counter
635            {
636               .name = "Dual Arithmetic instructions",
637               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe arithmetic operation.",
638               .symbol_name = "arith_instr_double",
639               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
640               .offset = 224,
641               .category = &panfrost_perf_config_tdvx.categories[2],
642            }, // counter
643            {
644               .name = "Arithmetic + Message instructions",
645               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe message operation",
646               .symbol_name = "arith_instr_msg",
647               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
648               .offset = 225,
649               .category = &panfrost_perf_config_tdvx.categories[2],
650            }, // counter
651            {
652               .name = "Message instructions",
653               .desc = "The number of instructions where the workload is a single ADD pipe message operation, with no FMA pipe operation",
654               .symbol_name = "arith_instr_msg_only",
655               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
656               .offset = 226,
657               .category = &panfrost_perf_config_tdvx.categories[2],
658            }, // counter
659            {
660               .name = "Texture requests",
661               .desc = "The number of quad-width texture operations processed by the texture unit.",
662               .symbol_name = "tex_msgi_num_quads",
663               .units = PAN_PERF_COUNTER_UNITS_QUADS,
664               .offset = 227,
665               .category = &panfrost_perf_config_tdvx.categories[2],
666            }, // counter
667            {
668               .name = "Texture issues",
669               .desc = "The number of quad-width filtering passes.",
670               .symbol_name = "tex_dfch_num_passes",
671               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
672               .offset = 228,
673               .category = &panfrost_perf_config_tdvx.categories[2],
674            }, // counter
675            {
676               .name = "Descriptor misses",
677               .desc = "The number of quad-width filtering passes that miss in the resource or sampler descriptor cache.",
678               .symbol_name = "tex_dfch_num_passes_miss",
679               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
680               .offset = 229,
681               .category = &panfrost_perf_config_tdvx.categories[2],
682            }, // counter
683            {
684               .name = "Mipmapped texture issues",
685               .desc = "The number of quad-width filtering passes that use a mipmapped texture.",
686               .symbol_name = "tex_dfch_num_passes_mip_map",
687               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
688               .offset = 230,
689               .category = &panfrost_perf_config_tdvx.categories[2],
690            }, // counter
691            {
692               .name = "Trilinear filtered issues",
693               .desc = "The number of quad-width filtering passes that use a trilinear filter.",
694               .symbol_name = "tex_tidx_num_split_mip_map",
695               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
696               .offset = 231,
697               .category = &panfrost_perf_config_tdvx.categories[2],
698            }, // counter
699            {
700               .name = "Line fetches",
701               .desc = "The number of texture line fetches from the L2 cache.",
702               .symbol_name = "tex_tfch_num_lines_fetched",
703               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
704               .offset = 232,
705               .category = &panfrost_perf_config_tdvx.categories[2],
706            }, // counter
707            {
708               .name = "Compressed line fetches",
709               .desc = "The number of texture line fetches from the L2 cache that are block compressed textures.",
710               .symbol_name = "tex_tfch_num_lines_fetched_block_compressed",
711               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
712               .offset = 233,
713               .category = &panfrost_perf_config_tdvx.categories[2],
714            }, // counter
715            {
716               .name = "Cache lookups",
717               .desc = "The number of texture cache lookup cycles.",
718               .symbol_name = "tex_tfch_num_operations",
719               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
720               .offset = 234,
721               .category = &panfrost_perf_config_tdvx.categories[2],
722            }, // counter
723            {
724               .name = "Texturing active",
725               .desc = "The number of texture filtering issue cycles.",
726               .symbol_name = "tex_filt_num_operations",
727               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
728               .offset = 235,
729               .category = &panfrost_perf_config_tdvx.categories[2],
730            }, // counter
731            {
732               .name = "Full read cycles",
733               .desc = "The number of full-width load/store cache reads.",
734               .symbol_name = "ls_mem_read_full",
735               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
736               .offset = 236,
737               .category = &panfrost_perf_config_tdvx.categories[2],
738            }, // counter
739            {
740               .name = "Partial read cycles",
741               .desc = "The number of partial-width load/store cache reads.",
742               .symbol_name = "ls_mem_read_short",
743               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
744               .offset = 237,
745               .category = &panfrost_perf_config_tdvx.categories[2],
746            }, // counter
747            {
748               .name = "Full write cycles",
749               .desc = "The number of full-width load/store cache writes.",
750               .symbol_name = "ls_mem_write_full",
751               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
752               .offset = 238,
753               .category = &panfrost_perf_config_tdvx.categories[2],
754            }, // counter
755            {
756               .name = "Partial write cycles",
757               .desc = "The number of partial-width load/store cache writes.",
758               .symbol_name = "ls_mem_write_short",
759               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
760               .offset = 239,
761               .category = &panfrost_perf_config_tdvx.categories[2],
762            }, // counter
763            {
764               .name = "Atomic access cycles",
765               .desc = "The number of load/store atomic accesses.",
766               .symbol_name = "ls_mem_atomic",
767               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
768               .offset = 240,
769               .category = &panfrost_perf_config_tdvx.categories[2],
770            }, // counter
771            {
772               .name = "Interpolation requests",
773               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
774               .symbol_name = "vary_instr",
775               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
776               .offset = 241,
777               .category = &panfrost_perf_config_tdvx.categories[2],
778            }, // counter
779            {
780               .name = "32-bit interpolation active",
781               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
782               .symbol_name = "vary_slot_32",
783               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
784               .offset = 242,
785               .category = &panfrost_perf_config_tdvx.categories[2],
786            }, // counter
787            {
788               .name = "16-bit interpolation active",
789               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
790               .symbol_name = "vary_slot_16",
791               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
792               .offset = 243,
793               .category = &panfrost_perf_config_tdvx.categories[2],
794            }, // counter
795            {
796               .name = "Attribute requests",
797               .desc = "The number of instructions executed by the attribute unit.",
798               .symbol_name = "attr_instr",
799               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
800               .offset = 244,
801               .category = &panfrost_perf_config_tdvx.categories[2],
802            }, // counter
803            {
804               .name = "Multiplier instructions",
805               .desc = "The number of instructions where the workload uses floating-point multiplier hardware.",
806               .symbol_name = "arith_instr_fp_mul",
807               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
808               .offset = 245,
809               .category = &panfrost_perf_config_tdvx.categories[2],
810            }, // counter
811            {
812               .name = "Fragment L2 read beats",
813               .desc = "The number of read beats received by the fixed-function fragment front-end.",
814               .symbol_name = "beats_rd_ftc",
815               .units = PAN_PERF_COUNTER_UNITS_BEATS,
816               .offset = 246,
817               .category = &panfrost_perf_config_tdvx.categories[2],
818            }, // counter
819            {
820               .name = "Fragment external read beats",
821               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
822               .symbol_name = "beats_rd_ftc_ext",
823               .units = PAN_PERF_COUNTER_UNITS_BEATS,
824               .offset = 247,
825               .category = &panfrost_perf_config_tdvx.categories[2],
826            }, // counter
827            {
828               .name = "Load/store L2 read beats",
829               .desc = "The number of read beats received by the load/store unit.",
830               .symbol_name = "beats_rd_lsc",
831               .units = PAN_PERF_COUNTER_UNITS_BEATS,
832               .offset = 248,
833               .category = &panfrost_perf_config_tdvx.categories[2],
834            }, // counter
835            {
836               .name = "Load/store external read beats",
837               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
838               .symbol_name = "beats_rd_lsc_ext",
839               .units = PAN_PERF_COUNTER_UNITS_BEATS,
840               .offset = 249,
841               .category = &panfrost_perf_config_tdvx.categories[2],
842            }, // counter
843            {
844               .name = "Texture L2 read beats",
845               .desc = "The number of read beats received by the texture unit.",
846               .symbol_name = "beats_rd_tex",
847               .units = PAN_PERF_COUNTER_UNITS_BEATS,
848               .offset = 250,
849               .category = &panfrost_perf_config_tdvx.categories[2],
850            }, // counter
851            {
852               .name = "Texture external read beats",
853               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
854               .symbol_name = "beats_rd_tex_ext",
855               .units = PAN_PERF_COUNTER_UNITS_BEATS,
856               .offset = 251,
857               .category = &panfrost_perf_config_tdvx.categories[2],
858            }, // counter
859            {
860               .name = "Other L2 read beats",
861               .desc = "The number of read beats received by a unit that is not specifically identified.",
862               .symbol_name = "beats_rd_other",
863               .units = PAN_PERF_COUNTER_UNITS_BEATS,
864               .offset = 252,
865               .category = &panfrost_perf_config_tdvx.categories[2],
866            }, // counter
867            {
868               .name = "Load/store writeback write beats",
869               .desc = "The number of write beats by the load/store unit that are due to writeback.",
870               .symbol_name = "beats_wr_lsc_wb",
871               .units = PAN_PERF_COUNTER_UNITS_BEATS,
872               .offset = 255,
873               .category = &panfrost_perf_config_tdvx.categories[2],
874            }, // counter
875            {
876               .name = "Tile buffer write beats",
877               .desc = "The number of write beats sent by the tile buffer writeback unit.",
878               .symbol_name = "beats_wr_tib",
879               .units = PAN_PERF_COUNTER_UNITS_BEATS,
880               .offset = 254,
881               .category = &panfrost_perf_config_tdvx.categories[2],
882            }, // counter
883            {
884               .name = "Load/store other write beats",
885               .desc = "The number of write beats by the load/store unit that are due to any reason other than writeback.",
886               .symbol_name = "beats_wr_lsc_other",
887               .units = PAN_PERF_COUNTER_UNITS_BEATS,
888               .offset = 253,
889               .category = &panfrost_perf_config_tdvx.categories[2],
890            }, // counter
891         }, // counters
892      }, // category
893      {
894         .name = "Memory System",
895         .n_counters = 39,
896         .counters = {
897            {
898               .name = "MMU lookups",
899               .desc = "The number of main MMU address translations performed.",
900               .symbol_name = "mmu_requests",
901               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
902               .offset = 132,
903               .category = &panfrost_perf_config_tdvx.categories[3],
904            }, // counter
905            {
906               .name = "Read requests",
907               .desc = "The number of L2 cache read requests from internal masters.",
908               .symbol_name = "l2_rd_msg_in",
909               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
910               .offset = 144,
911               .category = &panfrost_perf_config_tdvx.categories[3],
912            }, // counter
913            {
914               .name = "Read stall cycles",
915               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
916               .symbol_name = "l2_rd_msg_in_stall",
917               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
918               .offset = 145,
919               .category = &panfrost_perf_config_tdvx.categories[3],
920            }, // counter
921            {
922               .name = "Write requests",
923               .desc = "The number of L2 cache write requests from internal masters.",
924               .symbol_name = "l2_wr_msg_in",
925               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
926               .offset = 146,
927               .category = &panfrost_perf_config_tdvx.categories[3],
928            }, // counter
929            {
930               .name = "Write stall cycles",
931               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
932               .symbol_name = "l2_wr_msg_in_stall",
933               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
934               .offset = 147,
935               .category = &panfrost_perf_config_tdvx.categories[3],
936            }, // counter
937            {
938               .name = "Snoop requests",
939               .desc = "The number of L2 snoop requests from internal masters.",
940               .symbol_name = "l2_snp_msg_in",
941               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
942               .offset = 148,
943               .category = &panfrost_perf_config_tdvx.categories[3],
944            }, // counter
945            {
946               .name = "Snoop stall cycles",
947               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
948               .symbol_name = "l2_snp_msg_in_stall",
949               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
950               .offset = 149,
951               .category = &panfrost_perf_config_tdvx.categories[3],
952            }, // counter
953            {
954               .name = "L1 read requests",
955               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
956               .symbol_name = "l2_rd_msg_out",
957               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
958               .offset = 150,
959               .category = &panfrost_perf_config_tdvx.categories[3],
960            }, // counter
961            {
962               .name = "L1 read stall cycles",
963               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
964               .symbol_name = "l2_rd_msg_out_stall",
965               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
966               .offset = 151,
967               .category = &panfrost_perf_config_tdvx.categories[3],
968            }, // counter
969            {
970               .name = "L1 write requests",
971               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
972               .symbol_name = "l2_wr_msg_out",
973               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
974               .offset = 152,
975               .category = &panfrost_perf_config_tdvx.categories[3],
976            }, // counter
977            {
978               .name = "Any lookup",
979               .desc = "The number of L2 cache lookups performed.",
980               .symbol_name = "l2_any_lookup",
981               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
982               .offset = 153,
983               .category = &panfrost_perf_config_tdvx.categories[3],
984            }, // counter
985            {
986               .name = "Read lookup",
987               .desc = "The number of L2 cache read lookups performed.",
988               .symbol_name = "l2_read_lookup",
989               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
990               .offset = 154,
991               .category = &panfrost_perf_config_tdvx.categories[3],
992            }, // counter
993            {
994               .name = "Write lookup",
995               .desc = "The number of L2 cache write lookups performed.",
996               .symbol_name = "l2_write_lookup",
997               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
998               .offset = 155,
999               .category = &panfrost_perf_config_tdvx.categories[3],
1000            }, // counter
1001            {
1002               .name = "External snoop lookups",
1003               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
1004               .symbol_name = "l2_ext_snoop_lookup",
1005               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1006               .offset = 156,
1007               .category = &panfrost_perf_config_tdvx.categories[3],
1008            }, // counter
1009            {
1010               .name = "Read transaction",
1011               .desc = "The number of external read transactions.",
1012               .symbol_name = "l2_ext_read",
1013               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1014               .offset = 157,
1015               .category = &panfrost_perf_config_tdvx.categories[3],
1016            }, // counter
1017            {
1018               .name = "ReadNoSnoop transactions",
1019               .desc = "The number of external non-coherent read transactions.",
1020               .symbol_name = "l2_ext_read_nosnp",
1021               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1022               .offset = 158,
1023               .category = &panfrost_perf_config_tdvx.categories[3],
1024            }, // counter
1025            {
1026               .name = "ReadUnique transactions",
1027               .desc = "The number of external coherent read unique transactions.",
1028               .symbol_name = "l2_ext_read_unique",
1029               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1030               .offset = 159,
1031               .category = &panfrost_perf_config_tdvx.categories[3],
1032            }, // counter
1033            {
1034               .name = "Read beat",
1035               .desc = "The number of external bus data read cycles.",
1036               .symbol_name = "l2_ext_read_beats",
1037               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1038               .offset = 160,
1039               .category = &panfrost_perf_config_tdvx.categories[3],
1040            }, // counter
1041            {
1042               .name = "Read stall cycles",
1043               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
1044               .symbol_name = "l2_ext_ar_stall",
1045               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1046               .offset = 161,
1047               .category = &panfrost_perf_config_tdvx.categories[3],
1048            }, // counter
1049            {
1050               .name = "0-25% outstanding",
1051               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
1052               .symbol_name = "l2_ext_ar_cnt_q1",
1053               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1054               .offset = 162,
1055               .category = &panfrost_perf_config_tdvx.categories[3],
1056            }, // counter
1057            {
1058               .name = "25-50% outstanding",
1059               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
1060               .symbol_name = "l2_ext_ar_cnt_q2",
1061               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1062               .offset = 163,
1063               .category = &panfrost_perf_config_tdvx.categories[3],
1064            }, // counter
1065            {
1066               .name = "50-75% outstanding",
1067               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
1068               .symbol_name = "l2_ext_ar_cnt_q3",
1069               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1070               .offset = 164,
1071               .category = &panfrost_perf_config_tdvx.categories[3],
1072            }, // counter
1073            {
1074               .name = "0-127 cycles",
1075               .desc = "The number of data beats returned 0-127 cycles after the read request.",
1076               .symbol_name = "l2_ext_rresp_0_127",
1077               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1078               .offset = 165,
1079               .category = &panfrost_perf_config_tdvx.categories[3],
1080            }, // counter
1081            {
1082               .name = "128-191 cycles",
1083               .desc = "The number of data beats returned 128-191 cycles after the read request.",
1084               .symbol_name = "l2_ext_rresp_128_191",
1085               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1086               .offset = 166,
1087               .category = &panfrost_perf_config_tdvx.categories[3],
1088            }, // counter
1089            {
1090               .name = "192-255 cycles",
1091               .desc = "The number of data beats returned 192-255 cycles after the read request.",
1092               .symbol_name = "l2_ext_rresp_192_255",
1093               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1094               .offset = 167,
1095               .category = &panfrost_perf_config_tdvx.categories[3],
1096            }, // counter
1097            {
1098               .name = "256-319 cycles",
1099               .desc = "The number of data beats returned 256-319 cycles after the read request.",
1100               .symbol_name = "l2_ext_rresp_256_319",
1101               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1102               .offset = 168,
1103               .category = &panfrost_perf_config_tdvx.categories[3],
1104            }, // counter
1105            {
1106               .name = "320-383 cycles",
1107               .desc = "The number of data beats returned 320-383 cycles after the read request.",
1108               .symbol_name = "l2_ext_rresp_320_383",
1109               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1110               .offset = 169,
1111               .category = &panfrost_perf_config_tdvx.categories[3],
1112            }, // counter
1113            {
1114               .name = "Write transaction",
1115               .desc = "The number of external write transactions.",
1116               .symbol_name = "l2_ext_write",
1117               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1118               .offset = 170,
1119               .category = &panfrost_perf_config_tdvx.categories[3],
1120            }, // counter
1121            {
1122               .name = "WriteNoSnoopFull transactions",
1123               .desc = "The number of external non-coherent full write transactions.",
1124               .symbol_name = "l2_ext_write_nosnp_full",
1125               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1126               .offset = 171,
1127               .category = &panfrost_perf_config_tdvx.categories[3],
1128            }, // counter
1129            {
1130               .name = "WriteNoSnoopPartial transactions",
1131               .desc = "The number of external non-coherent partial write transactions.",
1132               .symbol_name = "l2_ext_write_nosnp_ptl",
1133               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1134               .offset = 172,
1135               .category = &panfrost_perf_config_tdvx.categories[3],
1136            }, // counter
1137            {
1138               .name = "WriteSnoopFull transactions",
1139               .desc = "The number of external coherent full write transactions.",
1140               .symbol_name = "l2_ext_write_snp_full",
1141               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1142               .offset = 173,
1143               .category = &panfrost_perf_config_tdvx.categories[3],
1144            }, // counter
1145            {
1146               .name = "WriteSnoopPartial transactions",
1147               .desc = "The number of external coherent partial write transactions.",
1148               .symbol_name = "l2_ext_write_snp_ptl",
1149               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1150               .offset = 174,
1151               .category = &panfrost_perf_config_tdvx.categories[3],
1152            }, // counter
1153            {
1154               .name = "Write beat",
1155               .desc = "The number of external bus data write cycles.",
1156               .symbol_name = "l2_ext_write_beats",
1157               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1158               .offset = 175,
1159               .category = &panfrost_perf_config_tdvx.categories[3],
1160            }, // counter
1161            {
1162               .name = "Write stall cycles",
1163               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
1164               .symbol_name = "l2_ext_w_stall",
1165               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1166               .offset = 176,
1167               .category = &panfrost_perf_config_tdvx.categories[3],
1168            }, // counter
1169            {
1170               .name = "0-25% outstanding",
1171               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
1172               .symbol_name = "l2_ext_aw_cnt_q1",
1173               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1174               .offset = 177,
1175               .category = &panfrost_perf_config_tdvx.categories[3],
1176            }, // counter
1177            {
1178               .name = "25-50% outstanding",
1179               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
1180               .symbol_name = "l2_ext_aw_cnt_q2",
1181               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1182               .offset = 178,
1183               .category = &panfrost_perf_config_tdvx.categories[3],
1184            }, // counter
1185            {
1186               .name = "50-75% outstanding",
1187               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
1188               .symbol_name = "l2_ext_aw_cnt_q3",
1189               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1190               .offset = 179,
1191               .category = &panfrost_perf_config_tdvx.categories[3],
1192            }, // counter
1193            {
1194               .name = "Snoop transactions",
1195               .desc = "The number of coherency snoops triggered by external masters.",
1196               .symbol_name = "l2_ext_snoop",
1197               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
1198               .offset = 180,
1199               .category = &panfrost_perf_config_tdvx.categories[3],
1200            }, // counter
1201            {
1202               .name = "Snoop stall cycles",
1203               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
1204               .symbol_name = "l2_ext_snoop_stall",
1205               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1206               .offset = 181,
1207               .category = &panfrost_perf_config_tdvx.categories[3],
1208            }, // counter
1209         }, // counters
1210      }, // category
1211   }, // categories
1212}; // panfrost_perf_config_tdvx
1213
1214static void UNUSED
1215static_asserts_tsix(void)
1216{
1217   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
1218   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
1219   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
1220   STATIC_ASSERT(57 <= PAN_PERF_MAX_COUNTERS);
1221   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
1222}
1223
1224const struct panfrost_perf_config panfrost_perf_config_tsix = {
1225   .n_categories = 4,
1226   .categories = {
1227      {
1228         .name = "Job Manager",
1229         .n_counters = 23,
1230         .counters = {
1231            {
1232               .name = "GPU active",
1233               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
1234               .symbol_name = "gpu_active",
1235               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1236               .offset = 6,
1237               .category = &panfrost_perf_config_tsix.categories[0],
1238            }, // counter
1239            {
1240               .name = "Interrupt active",
1241               .desc = "The number of cycles where the GPU has a pending interrupt.",
1242               .symbol_name = "irq_active",
1243               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1244               .offset = 7,
1245               .category = &panfrost_perf_config_tsix.categories[0],
1246            }, // counter
1247            {
1248               .name = "Fragment jobs",
1249               .desc = "The number of jobs processed by the GPU fragment queue.",
1250               .symbol_name = "js0_jobs",
1251               .units = PAN_PERF_COUNTER_UNITS_JOBS,
1252               .offset = 8,
1253               .category = &panfrost_perf_config_tsix.categories[0],
1254            }, // counter
1255            {
1256               .name = "Fragment tasks",
1257               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
1258               .symbol_name = "js0_tasks",
1259               .units = PAN_PERF_COUNTER_UNITS_TASKS,
1260               .offset = 9,
1261               .category = &panfrost_perf_config_tsix.categories[0],
1262            }, // counter
1263            {
1264               .name = "Fragment queue active",
1265               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
1266               .symbol_name = "js0_active",
1267               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1268               .offset = 10,
1269               .category = &panfrost_perf_config_tsix.categories[0],
1270            }, // counter
1271            {
1272               .name = "Fragment descriptor reads cycles",
1273               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
1274               .symbol_name = "js0_wait_read",
1275               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1276               .offset = 12,
1277               .category = &panfrost_perf_config_tsix.categories[0],
1278            }, // counter
1279            {
1280               .name = "Fragment job issue cycles",
1281               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
1282               .symbol_name = "js0_wait_issue",
1283               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1284               .offset = 13,
1285               .category = &panfrost_perf_config_tsix.categories[0],
1286            }, // counter
1287            {
1288               .name = "Fragment job dependency cycles",
1289               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
1290               .symbol_name = "js0_wait_depend",
1291               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1292               .offset = 14,
1293               .category = &panfrost_perf_config_tsix.categories[0],
1294            }, // counter
1295            {
1296               .name = "Fragment job finish cycles",
1297               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
1298               .symbol_name = "js0_wait_finish",
1299               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1300               .offset = 15,
1301               .category = &panfrost_perf_config_tsix.categories[0],
1302            }, // counter
1303            {
1304               .name = "Non-fragment jobs",
1305               .desc = "The number of jobs processed by the GPU non-fragment queue.",
1306               .symbol_name = "js1_jobs",
1307               .units = PAN_PERF_COUNTER_UNITS_JOBS,
1308               .offset = 16,
1309               .category = &panfrost_perf_config_tsix.categories[0],
1310            }, // counter
1311            {
1312               .name = "Non-fragment tasks",
1313               .desc = "The number of tasks processed by the GPU non-fragment queue.",
1314               .symbol_name = "js1_tasks",
1315               .units = PAN_PERF_COUNTER_UNITS_TASKS,
1316               .offset = 17,
1317               .category = &panfrost_perf_config_tsix.categories[0],
1318            }, // counter
1319            {
1320               .name = "Non-fragment queue active",
1321               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
1322               .symbol_name = "js1_active",
1323               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1324               .offset = 18,
1325               .category = &panfrost_perf_config_tsix.categories[0],
1326            }, // counter
1327            {
1328               .name = "Non-fragment descriptor read cycles",
1329               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
1330               .symbol_name = "js1_wait_read",
1331               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1332               .offset = 20,
1333               .category = &panfrost_perf_config_tsix.categories[0],
1334            }, // counter
1335            {
1336               .name = "Non-fragment job issue cycles",
1337               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
1338               .symbol_name = "js1_wait_issue",
1339               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1340               .offset = 21,
1341               .category = &panfrost_perf_config_tsix.categories[0],
1342            }, // counter
1343            {
1344               .name = "Non-fragment job dependency cycles",
1345               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
1346               .symbol_name = "js1_wait_depend",
1347               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1348               .offset = 22,
1349               .category = &panfrost_perf_config_tsix.categories[0],
1350            }, // counter
1351            {
1352               .name = "Non-fragment job finish cycles",
1353               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
1354               .symbol_name = "js1_wait_finish",
1355               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1356               .offset = 23,
1357               .category = &panfrost_perf_config_tsix.categories[0],
1358            }, // counter
1359            {
1360               .name = "Reserved jobs",
1361               .desc = "The number of jobs processed by the GPU reserved queue.",
1362               .symbol_name = "js2_jobs",
1363               .units = PAN_PERF_COUNTER_UNITS_JOBS,
1364               .offset = 24,
1365               .category = &panfrost_perf_config_tsix.categories[0],
1366            }, // counter
1367            {
1368               .name = "Reserved tasks",
1369               .desc = "The number of tasks processed by the GPU reserved queue.",
1370               .symbol_name = "js2_tasks",
1371               .units = PAN_PERF_COUNTER_UNITS_TASKS,
1372               .offset = 25,
1373               .category = &panfrost_perf_config_tsix.categories[0],
1374            }, // counter
1375            {
1376               .name = "Reserved queue active",
1377               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
1378               .symbol_name = "js2_active",
1379               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1380               .offset = 26,
1381               .category = &panfrost_perf_config_tsix.categories[0],
1382            }, // counter
1383            {
1384               .name = "Reserved descriptor read cycles",
1385               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
1386               .symbol_name = "js2_wait_read",
1387               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1388               .offset = 28,
1389               .category = &panfrost_perf_config_tsix.categories[0],
1390            }, // counter
1391            {
1392               .name = "Reserved job issue cycles",
1393               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
1394               .symbol_name = "js2_wait_issue",
1395               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1396               .offset = 29,
1397               .category = &panfrost_perf_config_tsix.categories[0],
1398            }, // counter
1399            {
1400               .name = "Reserved job dependency cycles",
1401               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
1402               .symbol_name = "js2_wait_depend",
1403               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1404               .offset = 30,
1405               .category = &panfrost_perf_config_tsix.categories[0],
1406            }, // counter
1407            {
1408               .name = "Reserved job finish cycles",
1409               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
1410               .symbol_name = "js2_wait_finish",
1411               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1412               .offset = 31,
1413               .category = &panfrost_perf_config_tsix.categories[0],
1414            }, // counter
1415         }, // counters
1416      }, // category
1417      {
1418         .name = "Tiler",
1419         .n_counters = 24,
1420         .counters = {
1421            {
1422               .name = "Tiler active",
1423               .desc = "The number of cycles where the tiler has a workload queued for processing.",
1424               .symbol_name = "tiler_active",
1425               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1426               .offset = 68,
1427               .category = &panfrost_perf_config_tsix.categories[1],
1428            }, // counter
1429            {
1430               .name = "Triangle primitives",
1431               .desc = "The number of input triangle primitives.",
1432               .symbol_name = "triangles",
1433               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1434               .offset = 70,
1435               .category = &panfrost_perf_config_tsix.categories[1],
1436            }, // counter
1437            {
1438               .name = "Line primitives",
1439               .desc = "The number of input line primitives.",
1440               .symbol_name = "lines",
1441               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1442               .offset = 71,
1443               .category = &panfrost_perf_config_tsix.categories[1],
1444            }, // counter
1445            {
1446               .name = "Point primitives",
1447               .desc = "The number of input point primitives.",
1448               .symbol_name = "points",
1449               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1450               .offset = 72,
1451               .category = &panfrost_perf_config_tsix.categories[1],
1452            }, // counter
1453            {
1454               .name = "Front-facing primitives",
1455               .desc = "The number of front-facing triangles that are visible after culling.",
1456               .symbol_name = "front_facing",
1457               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1458               .offset = 73,
1459               .category = &panfrost_perf_config_tsix.categories[1],
1460            }, // counter
1461            {
1462               .name = "Back-facing primitives",
1463               .desc = "The number of back-facing triangles that are visible after culling.",
1464               .symbol_name = "back_facing",
1465               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1466               .offset = 74,
1467               .category = &panfrost_perf_config_tsix.categories[1],
1468            }, // counter
1469            {
1470               .name = "Visible primitives",
1471               .desc = "The number of primitives that are visible after culling.",
1472               .symbol_name = "prim_visible",
1473               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1474               .offset = 75,
1475               .category = &panfrost_perf_config_tsix.categories[1],
1476            }, // counter
1477            {
1478               .name = "Facing and XY plane test culled primitives",
1479               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
1480               .symbol_name = "prim_culled",
1481               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1482               .offset = 76,
1483               .category = &panfrost_perf_config_tsix.categories[1],
1484            }, // counter
1485            {
1486               .name = "Z plane test culled primitives",
1487               .desc = "The number of primitives that are culled by frustum Z plane tests.",
1488               .symbol_name = "prim_clipped",
1489               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1490               .offset = 77,
1491               .category = &panfrost_perf_config_tsix.categories[1],
1492            }, // counter
1493            {
1494               .name = "Sample test culled primitives",
1495               .desc = "The number of primitives culled by the sample coverage test.",
1496               .symbol_name = "prim_sat_culled",
1497               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1498               .offset = 78,
1499               .category = &panfrost_perf_config_tsix.categories[1],
1500            }, // counter
1501            {
1502               .name = "Read beats",
1503               .desc = "The number of internal bus data read cycles made by the tiler.",
1504               .symbol_name = "bus_read",
1505               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1506               .offset = 81,
1507               .category = &panfrost_perf_config_tsix.categories[1],
1508            }, // counter
1509            {
1510               .name = "Write beats",
1511               .desc = "The number of internal bus data write cycles made by the tiler.",
1512               .symbol_name = "bus_write",
1513               .units = PAN_PERF_COUNTER_UNITS_BEATS,
1514               .offset = 83,
1515               .category = &panfrost_perf_config_tsix.categories[1],
1516            }, // counter
1517            {
1518               .name = "Position shading requests",
1519               .desc = "The number of position shading requests in the IDVS flow.",
1520               .symbol_name = "idvs_pos_shad_req",
1521               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1522               .offset = 85,
1523               .category = &panfrost_perf_config_tsix.categories[1],
1524            }, // counter
1525            {
1526               .name = "Position shading stall cycles",
1527               .desc = "The number of cycles where the tiler has a stalled position shading request.",
1528               .symbol_name = "idvs_pos_shad_stall",
1529               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1530               .offset = 87,
1531               .category = &panfrost_perf_config_tsix.categories[1],
1532            }, // counter
1533            {
1534               .name = "Position FIFO full cycles",
1535               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
1536               .symbol_name = "idvs_pos_fifo_full",
1537               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1538               .offset = 88,
1539               .category = &panfrost_perf_config_tsix.categories[1],
1540            }, // counter
1541            {
1542               .name = "Position cache hits",
1543               .desc = "The number of position lookups that result in a hit in the vertex cache.",
1544               .symbol_name = "vcache_hit",
1545               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1546               .offset = 90,
1547               .category = &panfrost_perf_config_tsix.categories[1],
1548            }, // counter
1549            {
1550               .name = "Position cache misses",
1551               .desc = "The number of position lookups that miss in the vertex cache.",
1552               .symbol_name = "vcache_miss",
1553               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1554               .offset = 91,
1555               .category = &panfrost_perf_config_tsix.categories[1],
1556            }, // counter
1557            {
1558               .name = "Primitive assembly busy stall cycles",
1559               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
1560               .symbol_name = "vfetch_stall",
1561               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1562               .offset = 95,
1563               .category = &panfrost_perf_config_tsix.categories[1],
1564            }, // counter
1565            {
1566               .name = "Varying cache hits",
1567               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
1568               .symbol_name = "idvs_vbu_hit",
1569               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1570               .offset = 98,
1571               .category = &panfrost_perf_config_tsix.categories[1],
1572            }, // counter
1573            {
1574               .name = "Varying cache misses",
1575               .desc = "The number of varying lookups that miss in the vertex cache.",
1576               .symbol_name = "idvs_vbu_miss",
1577               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1578               .offset = 99,
1579               .category = &panfrost_perf_config_tsix.categories[1],
1580            }, // counter
1581            {
1582               .name = "Varying shading requests",
1583               .desc = "The number of varying shading requests in the IDVS flow.",
1584               .symbol_name = "idvs_var_shad_req",
1585               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1586               .offset = 101,
1587               .category = &panfrost_perf_config_tsix.categories[1],
1588            }, // counter
1589            {
1590               .name = "Varying shading stall cycles",
1591               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
1592               .symbol_name = "idvs_var_shad_stall",
1593               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1594               .offset = 102,
1595               .category = &panfrost_perf_config_tsix.categories[1],
1596            }, // counter
1597            {
1598               .name = "Write buffer transaction stall cycles",
1599               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
1600               .symbol_name = "wrbuf_no_axi_id_stall",
1601               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1602               .offset = 118,
1603               .category = &panfrost_perf_config_tsix.categories[1],
1604            }, // counter
1605            {
1606               .name = "Write buffer write stall cycles",
1607               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
1608               .symbol_name = "wrbuf_axi_stall",
1609               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1610               .offset = 119,
1611               .category = &panfrost_perf_config_tsix.categories[1],
1612            }, // counter
1613         }, // counters
1614      }, // category
1615      {
1616         .name = "Shader Core",
1617         .n_counters = 57,
1618         .counters = {
1619            {
1620               .name = "Fragment active",
1621               .desc = "The number of cycles where the shader core is processing a fragment workload.",
1622               .symbol_name = "frag_active",
1623               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1624               .offset = 196,
1625               .category = &panfrost_perf_config_tsix.categories[2],
1626            }, // counter
1627            {
1628               .name = "Read primitives",
1629               .desc = "The number of primitives read from the tile list by the fragment front-end.",
1630               .symbol_name = "frag_primitives",
1631               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1632               .offset = 197,
1633               .category = &panfrost_perf_config_tsix.categories[2],
1634            }, // counter
1635            {
1636               .name = "Rasterized primitives",
1637               .desc = "The number of primitives being rasterized.",
1638               .symbol_name = "frag_prim_rast",
1639               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
1640               .offset = 198,
1641               .category = &panfrost_perf_config_tsix.categories[2],
1642            }, // counter
1643            {
1644               .name = "Fragment FPKB active",
1645               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
1646               .symbol_name = "frag_fpk_active",
1647               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1648               .offset = 199,
1649               .category = &panfrost_perf_config_tsix.categories[2],
1650            }, // counter
1651            {
1652               .name = "Fragment warps",
1653               .desc = "The number of fragment warps created.",
1654               .symbol_name = "frag_warps",
1655               .units = PAN_PERF_COUNTER_UNITS_WARPS,
1656               .offset = 201,
1657               .category = &panfrost_perf_config_tsix.categories[2],
1658            }, // counter
1659            {
1660               .name = "Partial fragment warps",
1661               .desc = "The number of fragment warps containing helper threads that do not correspond to a hit sample point.",
1662               .symbol_name = "frag_partial_warps",
1663               .units = PAN_PERF_COUNTER_UNITS_WARPS,
1664               .offset = 202,
1665               .category = &panfrost_perf_config_tsix.categories[2],
1666            }, // counter
1667            {
1668               .name = "Rasterized quads",
1669               .desc = "The number of quads generated by the rasterization phase.",
1670               .symbol_name = "frag_quads_rast",
1671               .units = PAN_PERF_COUNTER_UNITS_QUADS,
1672               .offset = 203,
1673               .category = &panfrost_perf_config_tsix.categories[2],
1674            }, // counter
1675            {
1676               .name = "Early ZS tested quads",
1677               .desc = "The number of quads that are undergoing early depth and stencil testing.",
1678               .symbol_name = "frag_quads_ezs_test",
1679               .units = PAN_PERF_COUNTER_UNITS_QUADS,
1680               .offset = 204,
1681               .category = &panfrost_perf_config_tsix.categories[2],
1682            }, // counter
1683            {
1684               .name = "Early ZS updated quads",
1685               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
1686               .symbol_name = "frag_quads_ezs_update",
1687               .units = PAN_PERF_COUNTER_UNITS_QUADS,
1688               .offset = 205,
1689               .category = &panfrost_perf_config_tsix.categories[2],
1690            }, // counter
1691            {
1692               .name = "Early ZS killed quads",
1693               .desc = "The number of quads killed by early depth and stencil testing.",
1694               .symbol_name = "frag_quads_ezs_kill",
1695               .units = PAN_PERF_COUNTER_UNITS_QUADS,
1696               .offset = 206,
1697               .category = &panfrost_perf_config_tsix.categories[2],
1698            }, // counter
1699            {
1700               .name = "Late ZS tested quads",
1701               .desc = "The number of quads undergoing late depth and stencil testing.",
1702               .symbol_name = "frag_lzs_test",
1703               .units = PAN_PERF_COUNTER_UNITS_QUADS,
1704               .offset = 207,
1705               .category = &panfrost_perf_config_tsix.categories[2],
1706            }, // counter
1707            {
1708               .name = "Late ZS killed quads",
1709               .desc = "The number of quads killed by late depth and stencil testing.",
1710               .symbol_name = "frag_lzs_kill",
1711               .units = PAN_PERF_COUNTER_UNITS_QUADS,
1712               .offset = 208,
1713               .category = &panfrost_perf_config_tsix.categories[2],
1714            }, // counter
1715            {
1716               .name = "Tiles",
1717               .desc = "The number of tiles processed by the shader core.",
1718               .symbol_name = "frag_ptiles",
1719               .units = PAN_PERF_COUNTER_UNITS_TILES,
1720               .offset = 210,
1721               .category = &panfrost_perf_config_tsix.categories[2],
1722            }, // counter
1723            {
1724               .name = "Constant tiles killed",
1725               .desc = "The number of tiles killed by transaction elimination.",
1726               .symbol_name = "frag_trans_elim",
1727               .units = PAN_PERF_COUNTER_UNITS_TILES,
1728               .offset = 211,
1729               .category = &panfrost_perf_config_tsix.categories[2],
1730            }, // counter
1731            {
1732               .name = "FPK occluder quads",
1733               .desc = "The number of quads that are valid occluders for hidden surface removal.",
1734               .symbol_name = "quad_fpk_killer",
1735               .units = PAN_PERF_COUNTER_UNITS_QUADS,
1736               .offset = 212,
1737               .category = &panfrost_perf_config_tsix.categories[2],
1738            }, // counter
1739            {
1740               .name = "Non-fragment active",
1741               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
1742               .symbol_name = "compute_active",
1743               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1744               .offset = 214,
1745               .category = &panfrost_perf_config_tsix.categories[2],
1746            }, // counter
1747            {
1748               .name = "Non-fragment tasks",
1749               .desc = "The number of non-fragment tasks issued to the shader core.",
1750               .symbol_name = "compute_tasks",
1751               .units = PAN_PERF_COUNTER_UNITS_TASKS,
1752               .offset = 215,
1753               .category = &panfrost_perf_config_tsix.categories[2],
1754            }, // counter
1755            {
1756               .name = "Non-fragment warps",
1757               .desc = "The number of non-fragment warps created.",
1758               .symbol_name = "compute_warps",
1759               .units = PAN_PERF_COUNTER_UNITS_WARPS,
1760               .offset = 216,
1761               .category = &panfrost_perf_config_tsix.categories[2],
1762            }, // counter
1763            {
1764               .name = "Non-fragment starvation cycles",
1765               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
1766               .symbol_name = "compute_starving",
1767               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1768               .offset = 217,
1769               .category = &panfrost_perf_config_tsix.categories[2],
1770            }, // counter
1771            {
1772               .name = "Execution core active",
1773               .desc = "The number of cycles where the shader core is processing at least one warp.",
1774               .symbol_name = "exec_core_active",
1775               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1776               .offset = 218,
1777               .category = &panfrost_perf_config_tsix.categories[2],
1778            }, // counter
1779            {
1780               .name = "Execution engine active",
1781               .desc = "The number of cycles where the execution engine unit is processing at least one thread.",
1782               .symbol_name = "exec_active",
1783               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1784               .offset = 219,
1785               .category = &panfrost_perf_config_tsix.categories[2],
1786            }, // counter
1787            {
1788               .name = "Executed instructions",
1789               .desc = "The number of instructions executed per warp.",
1790               .symbol_name = "exec_instr_count",
1791               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1792               .offset = 220,
1793               .category = &panfrost_perf_config_tsix.categories[2],
1794            }, // counter
1795            {
1796               .name = "Diverged instructions",
1797               .desc = "The number of instructions executed per warp, that have control flow divergence.",
1798               .symbol_name = "exec_instr_diverged",
1799               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1800               .offset = 221,
1801               .category = &panfrost_perf_config_tsix.categories[2],
1802            }, // counter
1803            {
1804               .name = "Execution engine starvation cycles",
1805               .desc = "The number of cycles where no new threads are available for execution.",
1806               .symbol_name = "exec_instr_starving",
1807               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1808               .offset = 222,
1809               .category = &panfrost_perf_config_tsix.categories[2],
1810            }, // counter
1811            {
1812               .name = "Arithmetic instructions",
1813               .desc = "The number of instructions where the workload is a single FMA pipe arithmetic operation.",
1814               .symbol_name = "arith_instr_single_fma",
1815               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1816               .offset = 223,
1817               .category = &panfrost_perf_config_tsix.categories[2],
1818            }, // counter
1819            {
1820               .name = "Dual Arithmetic instructions",
1821               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe arithmetic operation.",
1822               .symbol_name = "arith_instr_double",
1823               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1824               .offset = 224,
1825               .category = &panfrost_perf_config_tsix.categories[2],
1826            }, // counter
1827            {
1828               .name = "Arithmetic + Message instructions",
1829               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe message operation",
1830               .symbol_name = "arith_instr_msg",
1831               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1832               .offset = 225,
1833               .category = &panfrost_perf_config_tsix.categories[2],
1834            }, // counter
1835            {
1836               .name = "Message instructions",
1837               .desc = "The number of instructions where the workload is a single ADD pipe message operation, with no FMA pipe operation",
1838               .symbol_name = "arith_instr_msg_only",
1839               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1840               .offset = 226,
1841               .category = &panfrost_perf_config_tsix.categories[2],
1842            }, // counter
1843            {
1844               .name = "Texture requests",
1845               .desc = "The number of quad-width texture operations processed by the texture unit.",
1846               .symbol_name = "tex_msgi_num_quads",
1847               .units = PAN_PERF_COUNTER_UNITS_QUADS,
1848               .offset = 227,
1849               .category = &panfrost_perf_config_tsix.categories[2],
1850            }, // counter
1851            {
1852               .name = "Texture issues",
1853               .desc = "The number of quad-width filtering passes.",
1854               .symbol_name = "tex_dfch_num_passes",
1855               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
1856               .offset = 228,
1857               .category = &panfrost_perf_config_tsix.categories[2],
1858            }, // counter
1859            {
1860               .name = "Descriptor misses",
1861               .desc = "The number of quad-width filtering passes that miss in the resource or sampler descriptor cache.",
1862               .symbol_name = "tex_dfch_num_passes_miss",
1863               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1864               .offset = 229,
1865               .category = &panfrost_perf_config_tsix.categories[2],
1866            }, // counter
1867            {
1868               .name = "Mipmapped texture issues",
1869               .desc = "The number of quad-width filtering passes that use a mipmapped texture.",
1870               .symbol_name = "tex_dfch_num_passes_mip_map",
1871               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
1872               .offset = 230,
1873               .category = &panfrost_perf_config_tsix.categories[2],
1874            }, // counter
1875            {
1876               .name = "Trilinear filtered issues",
1877               .desc = "The number of quad-width filtering passes that use a trilinear filter.",
1878               .symbol_name = "tex_tidx_num_split_mip_map",
1879               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
1880               .offset = 231,
1881               .category = &panfrost_perf_config_tsix.categories[2],
1882            }, // counter
1883            {
1884               .name = "Line fetches",
1885               .desc = "The number of texture line fetches from the L2 cache.",
1886               .symbol_name = "tex_tfch_num_lines_fetched",
1887               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
1888               .offset = 232,
1889               .category = &panfrost_perf_config_tsix.categories[2],
1890            }, // counter
1891            {
1892               .name = "Compressed line fetches",
1893               .desc = "The number of texture line fetches from the L2 cache that are block compressed textures.",
1894               .symbol_name = "tex_tfch_num_lines_fetched_block_compressed",
1895               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
1896               .offset = 233,
1897               .category = &panfrost_perf_config_tsix.categories[2],
1898            }, // counter
1899            {
1900               .name = "Cache lookups",
1901               .desc = "The number of texture cache lookup cycles.",
1902               .symbol_name = "tex_tfch_num_operations",
1903               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
1904               .offset = 234,
1905               .category = &panfrost_perf_config_tsix.categories[2],
1906            }, // counter
1907            {
1908               .name = "Texturing active",
1909               .desc = "The number of texture filtering issue cycles.",
1910               .symbol_name = "tex_filt_num_operations",
1911               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1912               .offset = 235,
1913               .category = &panfrost_perf_config_tsix.categories[2],
1914            }, // counter
1915            {
1916               .name = "Full read cycles",
1917               .desc = "The number of full-width load/store cache reads.",
1918               .symbol_name = "ls_mem_read_full",
1919               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1920               .offset = 236,
1921               .category = &panfrost_perf_config_tsix.categories[2],
1922            }, // counter
1923            {
1924               .name = "Partial read cycles",
1925               .desc = "The number of partial-width load/store cache reads.",
1926               .symbol_name = "ls_mem_read_short",
1927               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1928               .offset = 237,
1929               .category = &panfrost_perf_config_tsix.categories[2],
1930            }, // counter
1931            {
1932               .name = "Full write cycles",
1933               .desc = "The number of full-width load/store cache writes.",
1934               .symbol_name = "ls_mem_write_full",
1935               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1936               .offset = 238,
1937               .category = &panfrost_perf_config_tsix.categories[2],
1938            }, // counter
1939            {
1940               .name = "Partial write cycles",
1941               .desc = "The number of partial-width load/store cache writes.",
1942               .symbol_name = "ls_mem_write_short",
1943               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1944               .offset = 239,
1945               .category = &panfrost_perf_config_tsix.categories[2],
1946            }, // counter
1947            {
1948               .name = "Atomic access cycles",
1949               .desc = "The number of load/store atomic accesses.",
1950               .symbol_name = "ls_mem_atomic",
1951               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1952               .offset = 240,
1953               .category = &panfrost_perf_config_tsix.categories[2],
1954            }, // counter
1955            {
1956               .name = "Interpolation requests",
1957               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
1958               .symbol_name = "vary_instr",
1959               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1960               .offset = 241,
1961               .category = &panfrost_perf_config_tsix.categories[2],
1962            }, // counter
1963            {
1964               .name = "32-bit interpolation active",
1965               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
1966               .symbol_name = "vary_slot_32",
1967               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1968               .offset = 242,
1969               .category = &panfrost_perf_config_tsix.categories[2],
1970            }, // counter
1971            {
1972               .name = "16-bit interpolation active",
1973               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
1974               .symbol_name = "vary_slot_16",
1975               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
1976               .offset = 243,
1977               .category = &panfrost_perf_config_tsix.categories[2],
1978            }, // counter
1979            {
1980               .name = "Attribute requests",
1981               .desc = "The number of instructions executed by the attribute unit.",
1982               .symbol_name = "attr_instr",
1983               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1984               .offset = 244,
1985               .category = &panfrost_perf_config_tsix.categories[2],
1986            }, // counter
1987            {
1988               .name = "Multiplier instructions",
1989               .desc = "The number of instructions where the workload uses floating-point multiplier hardware.",
1990               .symbol_name = "arith_instr_fp_mul",
1991               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
1992               .offset = 245,
1993               .category = &panfrost_perf_config_tsix.categories[2],
1994            }, // counter
1995            {
1996               .name = "Fragment L2 read beats",
1997               .desc = "The number of read beats received by the fixed-function fragment front-end.",
1998               .symbol_name = "beats_rd_ftc",
1999               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2000               .offset = 246,
2001               .category = &panfrost_perf_config_tsix.categories[2],
2002            }, // counter
2003            {
2004               .name = "Fragment external read beats",
2005               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
2006               .symbol_name = "beats_rd_ftc_ext",
2007               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2008               .offset = 247,
2009               .category = &panfrost_perf_config_tsix.categories[2],
2010            }, // counter
2011            {
2012               .name = "Load/store L2 read beats",
2013               .desc = "The number of read beats received by the load/store unit.",
2014               .symbol_name = "beats_rd_lsc",
2015               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2016               .offset = 248,
2017               .category = &panfrost_perf_config_tsix.categories[2],
2018            }, // counter
2019            {
2020               .name = "Load/store external read beats",
2021               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
2022               .symbol_name = "beats_rd_lsc_ext",
2023               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2024               .offset = 249,
2025               .category = &panfrost_perf_config_tsix.categories[2],
2026            }, // counter
2027            {
2028               .name = "Texture L2 read beats",
2029               .desc = "The number of read beats received by the texture unit.",
2030               .symbol_name = "beats_rd_tex",
2031               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2032               .offset = 250,
2033               .category = &panfrost_perf_config_tsix.categories[2],
2034            }, // counter
2035            {
2036               .name = "Texture external read beats",
2037               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
2038               .symbol_name = "beats_rd_tex_ext",
2039               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2040               .offset = 251,
2041               .category = &panfrost_perf_config_tsix.categories[2],
2042            }, // counter
2043            {
2044               .name = "Other L2 read beats",
2045               .desc = "The number of read beats received by a unit that is not specifically identified.",
2046               .symbol_name = "beats_rd_other",
2047               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2048               .offset = 252,
2049               .category = &panfrost_perf_config_tsix.categories[2],
2050            }, // counter
2051            {
2052               .name = "Load/store other write beats",
2053               .desc = "The number of write beats by the load/store unit that are due to any reason other than writeback.",
2054               .symbol_name = "beats_wr_lsc_other",
2055               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2056               .offset = 253,
2057               .category = &panfrost_perf_config_tsix.categories[2],
2058            }, // counter
2059            {
2060               .name = "Tile buffer write beats",
2061               .desc = "The number of write beats sent by the tile buffer writeback unit.",
2062               .symbol_name = "beats_wr_tib",
2063               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2064               .offset = 254,
2065               .category = &panfrost_perf_config_tsix.categories[2],
2066            }, // counter
2067            {
2068               .name = "Load/store writeback write beats",
2069               .desc = "The number of write beats by the load/store unit that are due to writeback.",
2070               .symbol_name = "beats_wr_lsc_wb",
2071               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2072               .offset = 255,
2073               .category = &panfrost_perf_config_tsix.categories[2],
2074            }, // counter
2075         }, // counters
2076      }, // category
2077      {
2078         .name = "Memory System",
2079         .n_counters = 39,
2080         .counters = {
2081            {
2082               .name = "MMU lookups",
2083               .desc = "The number of main MMU address translations performed.",
2084               .symbol_name = "mmu_requests",
2085               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2086               .offset = 132,
2087               .category = &panfrost_perf_config_tsix.categories[3],
2088            }, // counter
2089            {
2090               .name = "Read requests",
2091               .desc = "The number of L2 cache read requests from internal masters.",
2092               .symbol_name = "l2_rd_msg_in",
2093               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2094               .offset = 144,
2095               .category = &panfrost_perf_config_tsix.categories[3],
2096            }, // counter
2097            {
2098               .name = "Read stall cycles",
2099               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
2100               .symbol_name = "l2_rd_msg_in_stall",
2101               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2102               .offset = 145,
2103               .category = &panfrost_perf_config_tsix.categories[3],
2104            }, // counter
2105            {
2106               .name = "Write requests",
2107               .desc = "The number of L2 cache write requests from internal masters.",
2108               .symbol_name = "l2_wr_msg_in",
2109               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2110               .offset = 146,
2111               .category = &panfrost_perf_config_tsix.categories[3],
2112            }, // counter
2113            {
2114               .name = "Write stall cycles",
2115               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
2116               .symbol_name = "l2_wr_msg_in_stall",
2117               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2118               .offset = 147,
2119               .category = &panfrost_perf_config_tsix.categories[3],
2120            }, // counter
2121            {
2122               .name = "Snoop requests",
2123               .desc = "The number of L2 snoop requests from internal masters.",
2124               .symbol_name = "l2_snp_msg_in",
2125               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2126               .offset = 148,
2127               .category = &panfrost_perf_config_tsix.categories[3],
2128            }, // counter
2129            {
2130               .name = "Snoop stall cycles",
2131               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
2132               .symbol_name = "l2_snp_msg_in_stall",
2133               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2134               .offset = 149,
2135               .category = &panfrost_perf_config_tsix.categories[3],
2136            }, // counter
2137            {
2138               .name = "L1 read requests",
2139               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
2140               .symbol_name = "l2_rd_msg_out",
2141               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2142               .offset = 150,
2143               .category = &panfrost_perf_config_tsix.categories[3],
2144            }, // counter
2145            {
2146               .name = "L1 read stall cycles",
2147               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
2148               .symbol_name = "l2_rd_msg_out_stall",
2149               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2150               .offset = 151,
2151               .category = &panfrost_perf_config_tsix.categories[3],
2152            }, // counter
2153            {
2154               .name = "L1 write requests",
2155               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
2156               .symbol_name = "l2_wr_msg_out",
2157               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2158               .offset = 152,
2159               .category = &panfrost_perf_config_tsix.categories[3],
2160            }, // counter
2161            {
2162               .name = "Any lookup",
2163               .desc = "The number of L2 cache lookups performed.",
2164               .symbol_name = "l2_any_lookup",
2165               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2166               .offset = 153,
2167               .category = &panfrost_perf_config_tsix.categories[3],
2168            }, // counter
2169            {
2170               .name = "Read lookup",
2171               .desc = "The number of L2 cache read lookups performed.",
2172               .symbol_name = "l2_read_lookup",
2173               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2174               .offset = 154,
2175               .category = &panfrost_perf_config_tsix.categories[3],
2176            }, // counter
2177            {
2178               .name = "Write lookup",
2179               .desc = "The number of L2 cache write lookups performed.",
2180               .symbol_name = "l2_write_lookup",
2181               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2182               .offset = 155,
2183               .category = &panfrost_perf_config_tsix.categories[3],
2184            }, // counter
2185            {
2186               .name = "External snoop lookups",
2187               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
2188               .symbol_name = "l2_ext_snoop_lookup",
2189               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2190               .offset = 156,
2191               .category = &panfrost_perf_config_tsix.categories[3],
2192            }, // counter
2193            {
2194               .name = "Read transaction",
2195               .desc = "The number of external read transactions.",
2196               .symbol_name = "l2_ext_read",
2197               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2198               .offset = 157,
2199               .category = &panfrost_perf_config_tsix.categories[3],
2200            }, // counter
2201            {
2202               .name = "ReadNoSnoop transactions",
2203               .desc = "The number of external non-coherent read transactions.",
2204               .symbol_name = "l2_ext_read_nosnp",
2205               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2206               .offset = 158,
2207               .category = &panfrost_perf_config_tsix.categories[3],
2208            }, // counter
2209            {
2210               .name = "ReadUnique transactions",
2211               .desc = "The number of external coherent read unique transactions.",
2212               .symbol_name = "l2_ext_read_unique",
2213               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2214               .offset = 159,
2215               .category = &panfrost_perf_config_tsix.categories[3],
2216            }, // counter
2217            {
2218               .name = "Read beat",
2219               .desc = "The number of external bus data read cycles.",
2220               .symbol_name = "l2_ext_read_beats",
2221               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2222               .offset = 160,
2223               .category = &panfrost_perf_config_tsix.categories[3],
2224            }, // counter
2225            {
2226               .name = "Read stall cycles",
2227               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
2228               .symbol_name = "l2_ext_ar_stall",
2229               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2230               .offset = 161,
2231               .category = &panfrost_perf_config_tsix.categories[3],
2232            }, // counter
2233            {
2234               .name = "0-25% outstanding",
2235               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
2236               .symbol_name = "l2_ext_ar_cnt_q1",
2237               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2238               .offset = 162,
2239               .category = &panfrost_perf_config_tsix.categories[3],
2240            }, // counter
2241            {
2242               .name = "25-50% outstanding",
2243               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
2244               .symbol_name = "l2_ext_ar_cnt_q2",
2245               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2246               .offset = 163,
2247               .category = &panfrost_perf_config_tsix.categories[3],
2248            }, // counter
2249            {
2250               .name = "50-75% outstanding",
2251               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
2252               .symbol_name = "l2_ext_ar_cnt_q3",
2253               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2254               .offset = 164,
2255               .category = &panfrost_perf_config_tsix.categories[3],
2256            }, // counter
2257            {
2258               .name = "0-127 cycles",
2259               .desc = "The number of data beats returned 0-127 cycles after the read request.",
2260               .symbol_name = "l2_ext_rresp_0_127",
2261               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2262               .offset = 165,
2263               .category = &panfrost_perf_config_tsix.categories[3],
2264            }, // counter
2265            {
2266               .name = "128-191 cycles",
2267               .desc = "The number of data beats returned 128-191 cycles after the read request.",
2268               .symbol_name = "l2_ext_rresp_128_191",
2269               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2270               .offset = 166,
2271               .category = &panfrost_perf_config_tsix.categories[3],
2272            }, // counter
2273            {
2274               .name = "192-255 cycles",
2275               .desc = "The number of data beats returned 192-255 cycles after the read request.",
2276               .symbol_name = "l2_ext_rresp_192_255",
2277               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2278               .offset = 167,
2279               .category = &panfrost_perf_config_tsix.categories[3],
2280            }, // counter
2281            {
2282               .name = "256-319 cycles",
2283               .desc = "The number of data beats returned 256-319 cycles after the read request.",
2284               .symbol_name = "l2_ext_rresp_256_319",
2285               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2286               .offset = 168,
2287               .category = &panfrost_perf_config_tsix.categories[3],
2288            }, // counter
2289            {
2290               .name = "320-383 cycles",
2291               .desc = "The number of data beats returned 320-383 cycles after the read request.",
2292               .symbol_name = "l2_ext_rresp_320_383",
2293               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2294               .offset = 169,
2295               .category = &panfrost_perf_config_tsix.categories[3],
2296            }, // counter
2297            {
2298               .name = "Write transaction",
2299               .desc = "The number of external write transactions.",
2300               .symbol_name = "l2_ext_write",
2301               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2302               .offset = 170,
2303               .category = &panfrost_perf_config_tsix.categories[3],
2304            }, // counter
2305            {
2306               .name = "WriteNoSnoopFull transactions",
2307               .desc = "The number of external non-coherent full write transactions.",
2308               .symbol_name = "l2_ext_write_nosnp_full",
2309               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2310               .offset = 171,
2311               .category = &panfrost_perf_config_tsix.categories[3],
2312            }, // counter
2313            {
2314               .name = "WriteNoSnoopPartial transactions",
2315               .desc = "The number of external non-coherent partial write transactions.",
2316               .symbol_name = "l2_ext_write_nosnp_ptl",
2317               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2318               .offset = 172,
2319               .category = &panfrost_perf_config_tsix.categories[3],
2320            }, // counter
2321            {
2322               .name = "WriteSnoopFull transactions",
2323               .desc = "The number of external coherent full write transactions.",
2324               .symbol_name = "l2_ext_write_snp_full",
2325               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2326               .offset = 173,
2327               .category = &panfrost_perf_config_tsix.categories[3],
2328            }, // counter
2329            {
2330               .name = "WriteSnoopPartial transactions",
2331               .desc = "The number of external coherent partial write transactions.",
2332               .symbol_name = "l2_ext_write_snp_ptl",
2333               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2334               .offset = 174,
2335               .category = &panfrost_perf_config_tsix.categories[3],
2336            }, // counter
2337            {
2338               .name = "Write beat",
2339               .desc = "The number of external bus data write cycles.",
2340               .symbol_name = "l2_ext_write_beats",
2341               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2342               .offset = 175,
2343               .category = &panfrost_perf_config_tsix.categories[3],
2344            }, // counter
2345            {
2346               .name = "Write stall cycles",
2347               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
2348               .symbol_name = "l2_ext_w_stall",
2349               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2350               .offset = 176,
2351               .category = &panfrost_perf_config_tsix.categories[3],
2352            }, // counter
2353            {
2354               .name = "0-25% outstanding",
2355               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
2356               .symbol_name = "l2_ext_aw_cnt_q1",
2357               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2358               .offset = 177,
2359               .category = &panfrost_perf_config_tsix.categories[3],
2360            }, // counter
2361            {
2362               .name = "25-50% outstanding",
2363               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
2364               .symbol_name = "l2_ext_aw_cnt_q2",
2365               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2366               .offset = 178,
2367               .category = &panfrost_perf_config_tsix.categories[3],
2368            }, // counter
2369            {
2370               .name = "50-75% outstanding",
2371               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
2372               .symbol_name = "l2_ext_aw_cnt_q3",
2373               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2374               .offset = 179,
2375               .category = &panfrost_perf_config_tsix.categories[3],
2376            }, // counter
2377            {
2378               .name = "Snoop transactions",
2379               .desc = "The number of coherency snoops triggered by external masters.",
2380               .symbol_name = "l2_ext_snoop",
2381               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
2382               .offset = 180,
2383               .category = &panfrost_perf_config_tsix.categories[3],
2384            }, // counter
2385            {
2386               .name = "Snoop stall cycles",
2387               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
2388               .symbol_name = "l2_ext_snoop_stall",
2389               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2390               .offset = 181,
2391               .category = &panfrost_perf_config_tsix.categories[3],
2392            }, // counter
2393         }, // counters
2394      }, // category
2395   }, // categories
2396}; // panfrost_perf_config_tsix
2397
2398static void UNUSED
2399static_asserts_tgox(void)
2400{
2401   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
2402   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
2403   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
2404   STATIC_ASSERT(59 <= PAN_PERF_MAX_COUNTERS);
2405   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
2406}
2407
2408const struct panfrost_perf_config panfrost_perf_config_tgox = {
2409   .n_categories = 4,
2410   .categories = {
2411      {
2412         .name = "Job Manager",
2413         .n_counters = 23,
2414         .counters = {
2415            {
2416               .name = "GPU active",
2417               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
2418               .symbol_name = "gpu_active",
2419               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2420               .offset = 6,
2421               .category = &panfrost_perf_config_tgox.categories[0],
2422            }, // counter
2423            {
2424               .name = "Interrupt active",
2425               .desc = "The number of cycles where the GPU has a pending interrupt.",
2426               .symbol_name = "irq_active",
2427               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2428               .offset = 7,
2429               .category = &panfrost_perf_config_tgox.categories[0],
2430            }, // counter
2431            {
2432               .name = "Fragment jobs",
2433               .desc = "The number of jobs processed by the GPU fragment queue.",
2434               .symbol_name = "js0_jobs",
2435               .units = PAN_PERF_COUNTER_UNITS_JOBS,
2436               .offset = 8,
2437               .category = &panfrost_perf_config_tgox.categories[0],
2438            }, // counter
2439            {
2440               .name = "Fragment tasks",
2441               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
2442               .symbol_name = "js0_tasks",
2443               .units = PAN_PERF_COUNTER_UNITS_TASKS,
2444               .offset = 9,
2445               .category = &panfrost_perf_config_tgox.categories[0],
2446            }, // counter
2447            {
2448               .name = "Fragment queue active",
2449               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
2450               .symbol_name = "js0_active",
2451               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2452               .offset = 10,
2453               .category = &panfrost_perf_config_tgox.categories[0],
2454            }, // counter
2455            {
2456               .name = "Fragment descriptor reads cycles",
2457               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
2458               .symbol_name = "js0_wait_read",
2459               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2460               .offset = 12,
2461               .category = &panfrost_perf_config_tgox.categories[0],
2462            }, // counter
2463            {
2464               .name = "Fragment job issue cycles",
2465               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
2466               .symbol_name = "js0_wait_issue",
2467               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2468               .offset = 13,
2469               .category = &panfrost_perf_config_tgox.categories[0],
2470            }, // counter
2471            {
2472               .name = "Fragment job dependency cycles",
2473               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
2474               .symbol_name = "js0_wait_depend",
2475               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2476               .offset = 14,
2477               .category = &panfrost_perf_config_tgox.categories[0],
2478            }, // counter
2479            {
2480               .name = "Fragment job finish cycles",
2481               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
2482               .symbol_name = "js0_wait_finish",
2483               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2484               .offset = 15,
2485               .category = &panfrost_perf_config_tgox.categories[0],
2486            }, // counter
2487            {
2488               .name = "Non-fragment jobs",
2489               .desc = "The number of jobs processed by the GPU non-fragment queue.",
2490               .symbol_name = "js1_jobs",
2491               .units = PAN_PERF_COUNTER_UNITS_JOBS,
2492               .offset = 16,
2493               .category = &panfrost_perf_config_tgox.categories[0],
2494            }, // counter
2495            {
2496               .name = "Non-fragment tasks",
2497               .desc = "The number of tasks processed by the GPU non-fragment queue.",
2498               .symbol_name = "js1_tasks",
2499               .units = PAN_PERF_COUNTER_UNITS_TASKS,
2500               .offset = 17,
2501               .category = &panfrost_perf_config_tgox.categories[0],
2502            }, // counter
2503            {
2504               .name = "Non-fragment queue active",
2505               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
2506               .symbol_name = "js1_active",
2507               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2508               .offset = 18,
2509               .category = &panfrost_perf_config_tgox.categories[0],
2510            }, // counter
2511            {
2512               .name = "Non-fragment descriptor read cycles",
2513               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
2514               .symbol_name = "js1_wait_read",
2515               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2516               .offset = 20,
2517               .category = &panfrost_perf_config_tgox.categories[0],
2518            }, // counter
2519            {
2520               .name = "Non-fragment job issue cycles",
2521               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
2522               .symbol_name = "js1_wait_issue",
2523               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2524               .offset = 21,
2525               .category = &panfrost_perf_config_tgox.categories[0],
2526            }, // counter
2527            {
2528               .name = "Non-fragment job dependency cycles",
2529               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
2530               .symbol_name = "js1_wait_depend",
2531               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2532               .offset = 22,
2533               .category = &panfrost_perf_config_tgox.categories[0],
2534            }, // counter
2535            {
2536               .name = "Non-fragment job finish cycles",
2537               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
2538               .symbol_name = "js1_wait_finish",
2539               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2540               .offset = 23,
2541               .category = &panfrost_perf_config_tgox.categories[0],
2542            }, // counter
2543            {
2544               .name = "Reserved jobs",
2545               .desc = "The number of jobs processed by the GPU reserved queue.",
2546               .symbol_name = "js2_jobs",
2547               .units = PAN_PERF_COUNTER_UNITS_JOBS,
2548               .offset = 24,
2549               .category = &panfrost_perf_config_tgox.categories[0],
2550            }, // counter
2551            {
2552               .name = "Reserved tasks",
2553               .desc = "The number of tasks processed by the GPU reserved queue.",
2554               .symbol_name = "js2_tasks",
2555               .units = PAN_PERF_COUNTER_UNITS_TASKS,
2556               .offset = 25,
2557               .category = &panfrost_perf_config_tgox.categories[0],
2558            }, // counter
2559            {
2560               .name = "Reserved queue active",
2561               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
2562               .symbol_name = "js2_active",
2563               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2564               .offset = 26,
2565               .category = &panfrost_perf_config_tgox.categories[0],
2566            }, // counter
2567            {
2568               .name = "Reserved descriptor read cycles",
2569               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
2570               .symbol_name = "js2_wait_read",
2571               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2572               .offset = 28,
2573               .category = &panfrost_perf_config_tgox.categories[0],
2574            }, // counter
2575            {
2576               .name = "Reserved job issue cycles",
2577               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
2578               .symbol_name = "js2_wait_issue",
2579               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2580               .offset = 29,
2581               .category = &panfrost_perf_config_tgox.categories[0],
2582            }, // counter
2583            {
2584               .name = "Reserved job dependency cycles",
2585               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
2586               .symbol_name = "js2_wait_depend",
2587               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2588               .offset = 30,
2589               .category = &panfrost_perf_config_tgox.categories[0],
2590            }, // counter
2591            {
2592               .name = "Reserved job finish cycles",
2593               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
2594               .symbol_name = "js2_wait_finish",
2595               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2596               .offset = 31,
2597               .category = &panfrost_perf_config_tgox.categories[0],
2598            }, // counter
2599         }, // counters
2600      }, // category
2601      {
2602         .name = "Tiler",
2603         .n_counters = 24,
2604         .counters = {
2605            {
2606               .name = "Tiler active",
2607               .desc = "The number of cycles where the tiler has a workload queued for processing.",
2608               .symbol_name = "tiler_active",
2609               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2610               .offset = 68,
2611               .category = &panfrost_perf_config_tgox.categories[1],
2612            }, // counter
2613            {
2614               .name = "Triangle primitives",
2615               .desc = "The number of input triangle primitives.",
2616               .symbol_name = "triangles",
2617               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2618               .offset = 70,
2619               .category = &panfrost_perf_config_tgox.categories[1],
2620            }, // counter
2621            {
2622               .name = "Line primitives",
2623               .desc = "The number of input line primitives.",
2624               .symbol_name = "lines",
2625               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2626               .offset = 71,
2627               .category = &panfrost_perf_config_tgox.categories[1],
2628            }, // counter
2629            {
2630               .name = "Point primitives",
2631               .desc = "The number of input point primitives.",
2632               .symbol_name = "points",
2633               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2634               .offset = 72,
2635               .category = &panfrost_perf_config_tgox.categories[1],
2636            }, // counter
2637            {
2638               .name = "Front-facing primitives",
2639               .desc = "The number of front-facing triangles that are visible after culling.",
2640               .symbol_name = "front_facing",
2641               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2642               .offset = 73,
2643               .category = &panfrost_perf_config_tgox.categories[1],
2644            }, // counter
2645            {
2646               .name = "Back-facing primitives",
2647               .desc = "The number of back-facing triangles that are visible after culling.",
2648               .symbol_name = "back_facing",
2649               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2650               .offset = 74,
2651               .category = &panfrost_perf_config_tgox.categories[1],
2652            }, // counter
2653            {
2654               .name = "Visible primitives",
2655               .desc = "The number of primitives that are visible after culling.",
2656               .symbol_name = "prim_visible",
2657               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2658               .offset = 75,
2659               .category = &panfrost_perf_config_tgox.categories[1],
2660            }, // counter
2661            {
2662               .name = "Facing and XY plane test culled primitives",
2663               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
2664               .symbol_name = "prim_culled",
2665               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2666               .offset = 76,
2667               .category = &panfrost_perf_config_tgox.categories[1],
2668            }, // counter
2669            {
2670               .name = "Z plane test culled primitives",
2671               .desc = "The number of primitives that are culled by frustum Z plane tests.",
2672               .symbol_name = "prim_clipped",
2673               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2674               .offset = 77,
2675               .category = &panfrost_perf_config_tgox.categories[1],
2676            }, // counter
2677            {
2678               .name = "Sample test culled primitives",
2679               .desc = "The number of primitives culled by the sample coverage test.",
2680               .symbol_name = "prim_sat_culled",
2681               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2682               .offset = 78,
2683               .category = &panfrost_perf_config_tgox.categories[1],
2684            }, // counter
2685            {
2686               .name = "Read beats",
2687               .desc = "The number of internal bus data read cycles made by the tiler.",
2688               .symbol_name = "bus_read",
2689               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2690               .offset = 81,
2691               .category = &panfrost_perf_config_tgox.categories[1],
2692            }, // counter
2693            {
2694               .name = "Write beats",
2695               .desc = "The number of internal bus data write cycles made by the tiler.",
2696               .symbol_name = "bus_write",
2697               .units = PAN_PERF_COUNTER_UNITS_BEATS,
2698               .offset = 83,
2699               .category = &panfrost_perf_config_tgox.categories[1],
2700            }, // counter
2701            {
2702               .name = "Position shading requests",
2703               .desc = "The number of position shading requests in the IDVS flow.",
2704               .symbol_name = "idvs_pos_shad_req",
2705               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2706               .offset = 85,
2707               .category = &panfrost_perf_config_tgox.categories[1],
2708            }, // counter
2709            {
2710               .name = "Position shading stall cycles",
2711               .desc = "The number of cycles where the tiler has a stalled position shading request.",
2712               .symbol_name = "idvs_pos_shad_stall",
2713               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2714               .offset = 87,
2715               .category = &panfrost_perf_config_tgox.categories[1],
2716            }, // counter
2717            {
2718               .name = "Position FIFO full cycles",
2719               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
2720               .symbol_name = "idvs_pos_fifo_full",
2721               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2722               .offset = 88,
2723               .category = &panfrost_perf_config_tgox.categories[1],
2724            }, // counter
2725            {
2726               .name = "Position cache hits",
2727               .desc = "The number of position lookups that result in a hit in the vertex cache.",
2728               .symbol_name = "vcache_hit",
2729               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2730               .offset = 90,
2731               .category = &panfrost_perf_config_tgox.categories[1],
2732            }, // counter
2733            {
2734               .name = "Position cache misses",
2735               .desc = "The number of position lookups that miss in the vertex cache.",
2736               .symbol_name = "vcache_miss",
2737               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2738               .offset = 91,
2739               .category = &panfrost_perf_config_tgox.categories[1],
2740            }, // counter
2741            {
2742               .name = "Primitive assembly busy stall cycles",
2743               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
2744               .symbol_name = "vfetch_stall",
2745               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2746               .offset = 95,
2747               .category = &panfrost_perf_config_tgox.categories[1],
2748            }, // counter
2749            {
2750               .name = "Varying cache hits",
2751               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
2752               .symbol_name = "idvs_vbu_hit",
2753               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2754               .offset = 98,
2755               .category = &panfrost_perf_config_tgox.categories[1],
2756            }, // counter
2757            {
2758               .name = "Varying cache misses",
2759               .desc = "The number of varying lookups that miss in the vertex cache.",
2760               .symbol_name = "idvs_vbu_miss",
2761               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2762               .offset = 99,
2763               .category = &panfrost_perf_config_tgox.categories[1],
2764            }, // counter
2765            {
2766               .name = "Varying shading requests",
2767               .desc = "The number of varying shading requests in the IDVS flow.",
2768               .symbol_name = "idvs_var_shad_req",
2769               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
2770               .offset = 101,
2771               .category = &panfrost_perf_config_tgox.categories[1],
2772            }, // counter
2773            {
2774               .name = "Varying shading stall cycles",
2775               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
2776               .symbol_name = "idvs_var_shad_stall",
2777               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2778               .offset = 102,
2779               .category = &panfrost_perf_config_tgox.categories[1],
2780            }, // counter
2781            {
2782               .name = "Write buffer transaction stall cycles",
2783               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
2784               .symbol_name = "wrbuf_no_axi_id_stall",
2785               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2786               .offset = 118,
2787               .category = &panfrost_perf_config_tgox.categories[1],
2788            }, // counter
2789            {
2790               .name = "Write buffer write stall cycles",
2791               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
2792               .symbol_name = "wrbuf_axi_stall",
2793               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2794               .offset = 119,
2795               .category = &panfrost_perf_config_tgox.categories[1],
2796            }, // counter
2797         }, // counters
2798      }, // category
2799      {
2800         .name = "Shader Core",
2801         .n_counters = 59,
2802         .counters = {
2803            {
2804               .name = "Fragment active",
2805               .desc = "The number of cycles where the shader core is processing a fragment workload.",
2806               .symbol_name = "frag_active",
2807               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2808               .offset = 196,
2809               .category = &panfrost_perf_config_tgox.categories[2],
2810            }, // counter
2811            {
2812               .name = "Read primitives",
2813               .desc = "The number of primitives read from the tile list by the fragment front-end.",
2814               .symbol_name = "frag_primitives",
2815               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2816               .offset = 197,
2817               .category = &panfrost_perf_config_tgox.categories[2],
2818            }, // counter
2819            {
2820               .name = "Rasterized primitives",
2821               .desc = "The number of primitives being rasterized.",
2822               .symbol_name = "frag_prim_rast",
2823               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
2824               .offset = 198,
2825               .category = &panfrost_perf_config_tgox.categories[2],
2826            }, // counter
2827            {
2828               .name = "Fragment FPKB active",
2829               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
2830               .symbol_name = "frag_fpk_active",
2831               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2832               .offset = 199,
2833               .category = &panfrost_perf_config_tgox.categories[2],
2834            }, // counter
2835            {
2836               .name = "Fragment warps",
2837               .desc = "The number of fragment warps created.",
2838               .symbol_name = "frag_warps",
2839               .units = PAN_PERF_COUNTER_UNITS_WARPS,
2840               .offset = 201,
2841               .category = &panfrost_perf_config_tgox.categories[2],
2842            }, // counter
2843            {
2844               .name = "Partial fragment warps",
2845               .desc = "The number of fragment warps containing helper threads that do not correspond to a hit sample point.",
2846               .symbol_name = "frag_partial_warps",
2847               .units = PAN_PERF_COUNTER_UNITS_WARPS,
2848               .offset = 202,
2849               .category = &panfrost_perf_config_tgox.categories[2],
2850            }, // counter
2851            {
2852               .name = "Rasterized quads",
2853               .desc = "The number of quads generated by the rasterization phase.",
2854               .symbol_name = "frag_quads_rast",
2855               .units = PAN_PERF_COUNTER_UNITS_QUADS,
2856               .offset = 203,
2857               .category = &panfrost_perf_config_tgox.categories[2],
2858            }, // counter
2859            {
2860               .name = "Early ZS tested quads",
2861               .desc = "The number of quads that are undergoing early depth and stencil testing.",
2862               .symbol_name = "frag_quads_ezs_test",
2863               .units = PAN_PERF_COUNTER_UNITS_QUADS,
2864               .offset = 204,
2865               .category = &panfrost_perf_config_tgox.categories[2],
2866            }, // counter
2867            {
2868               .name = "Early ZS updated quads",
2869               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
2870               .symbol_name = "frag_quads_ezs_update",
2871               .units = PAN_PERF_COUNTER_UNITS_QUADS,
2872               .offset = 205,
2873               .category = &panfrost_perf_config_tgox.categories[2],
2874            }, // counter
2875            {
2876               .name = "Early ZS killed quads",
2877               .desc = "The number of quads killed by early depth and stencil testing.",
2878               .symbol_name = "frag_quads_ezs_kill",
2879               .units = PAN_PERF_COUNTER_UNITS_QUADS,
2880               .offset = 206,
2881               .category = &panfrost_perf_config_tgox.categories[2],
2882            }, // counter
2883            {
2884               .name = "Late ZS tested quads",
2885               .desc = "The number of quads undergoing late depth and stencil testing.",
2886               .symbol_name = "frag_lzs_test",
2887               .units = PAN_PERF_COUNTER_UNITS_QUADS,
2888               .offset = 207,
2889               .category = &panfrost_perf_config_tgox.categories[2],
2890            }, // counter
2891            {
2892               .name = "Late ZS killed quads",
2893               .desc = "The number of quads killed by late depth and stencil testing.",
2894               .symbol_name = "frag_lzs_kill",
2895               .units = PAN_PERF_COUNTER_UNITS_QUADS,
2896               .offset = 208,
2897               .category = &panfrost_perf_config_tgox.categories[2],
2898            }, // counter
2899            {
2900               .name = "All register warps",
2901               .desc = "The number of warps that require more than 32 registers.",
2902               .symbol_name = "warp_reg_size_64",
2903               .units = PAN_PERF_COUNTER_UNITS_WARPS,
2904               .offset = 209,
2905               .category = &panfrost_perf_config_tgox.categories[2],
2906            }, // counter
2907            {
2908               .name = "Tiles",
2909               .desc = "The number of tiles processed by the shader core.",
2910               .symbol_name = "frag_ptiles",
2911               .units = PAN_PERF_COUNTER_UNITS_TILES,
2912               .offset = 210,
2913               .category = &panfrost_perf_config_tgox.categories[2],
2914            }, // counter
2915            {
2916               .name = "Constant tiles killed",
2917               .desc = "The number of tiles killed by transaction elimination.",
2918               .symbol_name = "frag_trans_elim",
2919               .units = PAN_PERF_COUNTER_UNITS_TILES,
2920               .offset = 211,
2921               .category = &panfrost_perf_config_tgox.categories[2],
2922            }, // counter
2923            {
2924               .name = "FPK occluder quads",
2925               .desc = "The number of quads that are valid occluders for hidden surface removal.",
2926               .symbol_name = "quad_fpk_killer",
2927               .units = PAN_PERF_COUNTER_UNITS_QUADS,
2928               .offset = 212,
2929               .category = &panfrost_perf_config_tgox.categories[2],
2930            }, // counter
2931            {
2932               .name = "Full quad warps",
2933               .desc = "The number of warps that are fully populated with quads.",
2934               .symbol_name = "full_quad_warps",
2935               .units = PAN_PERF_COUNTER_UNITS_WARPS,
2936               .offset = 213,
2937               .category = &panfrost_perf_config_tgox.categories[2],
2938            }, // counter
2939            {
2940               .name = "Non-fragment active",
2941               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
2942               .symbol_name = "compute_active",
2943               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2944               .offset = 214,
2945               .category = &panfrost_perf_config_tgox.categories[2],
2946            }, // counter
2947            {
2948               .name = "Non-fragment tasks",
2949               .desc = "The number of non-fragment tasks issued to the shader core.",
2950               .symbol_name = "compute_tasks",
2951               .units = PAN_PERF_COUNTER_UNITS_TASKS,
2952               .offset = 215,
2953               .category = &panfrost_perf_config_tgox.categories[2],
2954            }, // counter
2955            {
2956               .name = "Non-fragment warps",
2957               .desc = "The number of non-fragment warps created.",
2958               .symbol_name = "compute_warps",
2959               .units = PAN_PERF_COUNTER_UNITS_WARPS,
2960               .offset = 216,
2961               .category = &panfrost_perf_config_tgox.categories[2],
2962            }, // counter
2963            {
2964               .name = "Non-fragment starvation cycles",
2965               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
2966               .symbol_name = "compute_starving",
2967               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2968               .offset = 217,
2969               .category = &panfrost_perf_config_tgox.categories[2],
2970            }, // counter
2971            {
2972               .name = "Execution core active",
2973               .desc = "The number of cycles where the shader core is processing at least one warp.",
2974               .symbol_name = "exec_core_active",
2975               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2976               .offset = 218,
2977               .category = &panfrost_perf_config_tgox.categories[2],
2978            }, // counter
2979            {
2980               .name = "Execution engine active",
2981               .desc = "The number of cycles where the execution engine unit is processing at least one thread.",
2982               .symbol_name = "exec_active",
2983               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
2984               .offset = 219,
2985               .category = &panfrost_perf_config_tgox.categories[2],
2986            }, // counter
2987            {
2988               .name = "Executed instructions",
2989               .desc = "The number of instructions executed per warp.",
2990               .symbol_name = "exec_instr_count",
2991               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
2992               .offset = 220,
2993               .category = &panfrost_perf_config_tgox.categories[2],
2994            }, // counter
2995            {
2996               .name = "Diverged instructions",
2997               .desc = "The number of instructions executed per warp, that have control flow divergence.",
2998               .symbol_name = "exec_instr_diverged",
2999               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
3000               .offset = 221,
3001               .category = &panfrost_perf_config_tgox.categories[2],
3002            }, // counter
3003            {
3004               .name = "Execution engine starvation cycles",
3005               .desc = "The number of cycles where no new threads are available for execution.",
3006               .symbol_name = "exec_instr_starving",
3007               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3008               .offset = 222,
3009               .category = &panfrost_perf_config_tgox.categories[2],
3010            }, // counter
3011            {
3012               .name = "Arithmetic instructions",
3013               .desc = "The number of instructions where the workload is a single FMA pipe arithmetic operation.",
3014               .symbol_name = "arith_instr_single_fma",
3015               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
3016               .offset = 223,
3017               .category = &panfrost_perf_config_tgox.categories[2],
3018            }, // counter
3019            {
3020               .name = "Dual Arithmetic instructions",
3021               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe arithmetic operation.",
3022               .symbol_name = "arith_instr_double",
3023               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
3024               .offset = 224,
3025               .category = &panfrost_perf_config_tgox.categories[2],
3026            }, // counter
3027            {
3028               .name = "Arithmetic + Message instructions",
3029               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe message operation",
3030               .symbol_name = "arith_instr_msg",
3031               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
3032               .offset = 225,
3033               .category = &panfrost_perf_config_tgox.categories[2],
3034            }, // counter
3035            {
3036               .name = "Message instructions",
3037               .desc = "The number of instructions where the workload is a single ADD pipe message operation, with no FMA pipe operation",
3038               .symbol_name = "arith_instr_msg_only",
3039               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
3040               .offset = 226,
3041               .category = &panfrost_perf_config_tgox.categories[2],
3042            }, // counter
3043            {
3044               .name = "Texture requests",
3045               .desc = "The number of quad-width texture operations processed by the texture unit.",
3046               .symbol_name = "tex_msgi_num_quads",
3047               .units = PAN_PERF_COUNTER_UNITS_QUADS,
3048               .offset = 227,
3049               .category = &panfrost_perf_config_tgox.categories[2],
3050            }, // counter
3051            {
3052               .name = "Texture issues",
3053               .desc = "The number of quad-width filtering passes.",
3054               .symbol_name = "tex_dfch_num_passes",
3055               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
3056               .offset = 228,
3057               .category = &panfrost_perf_config_tgox.categories[2],
3058            }, // counter
3059            {
3060               .name = "Descriptor misses",
3061               .desc = "The number of quad-width filtering passes that miss in the resource or sampler descriptor cache.",
3062               .symbol_name = "tex_dfch_num_passes_miss",
3063               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3064               .offset = 229,
3065               .category = &panfrost_perf_config_tgox.categories[2],
3066            }, // counter
3067            {
3068               .name = "Mipmapped texture issues",
3069               .desc = "The number of quad-width filtering passes that use a mipmapped texture.",
3070               .symbol_name = "tex_dfch_num_passes_mip_map",
3071               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
3072               .offset = 230,
3073               .category = &panfrost_perf_config_tgox.categories[2],
3074            }, // counter
3075            {
3076               .name = "Trilinear filtered issues",
3077               .desc = "The number of quad-width filtering passes that use a trilinear filter.",
3078               .symbol_name = "tex_tidx_num_split_mip_map",
3079               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
3080               .offset = 231,
3081               .category = &panfrost_perf_config_tgox.categories[2],
3082            }, // counter
3083            {
3084               .name = "Line fetches",
3085               .desc = "The number of texture line fetches from the L2 cache.",
3086               .symbol_name = "tex_tfch_num_lines_fetched",
3087               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
3088               .offset = 232,
3089               .category = &panfrost_perf_config_tgox.categories[2],
3090            }, // counter
3091            {
3092               .name = "Compressed line fetches",
3093               .desc = "The number of texture line fetches from the L2 cache that are block compressed textures.",
3094               .symbol_name = "tex_tfch_num_lines_fetched_block_compressed",
3095               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
3096               .offset = 233,
3097               .category = &panfrost_perf_config_tgox.categories[2],
3098            }, // counter
3099            {
3100               .name = "Cache lookups",
3101               .desc = "The number of texture cache lookup cycles.",
3102               .symbol_name = "tex_tfch_num_operations",
3103               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3104               .offset = 234,
3105               .category = &panfrost_perf_config_tgox.categories[2],
3106            }, // counter
3107            {
3108               .name = "Texturing active",
3109               .desc = "The number of texture filtering issue cycles.",
3110               .symbol_name = "tex_filt_num_operations",
3111               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3112               .offset = 235,
3113               .category = &panfrost_perf_config_tgox.categories[2],
3114            }, // counter
3115            {
3116               .name = "Full read cycles",
3117               .desc = "The number of full-width load/store cache reads.",
3118               .symbol_name = "ls_mem_read_full",
3119               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3120               .offset = 236,
3121               .category = &panfrost_perf_config_tgox.categories[2],
3122            }, // counter
3123            {
3124               .name = "Partial read cycles",
3125               .desc = "The number of partial-width load/store cache reads.",
3126               .symbol_name = "ls_mem_read_short",
3127               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3128               .offset = 237,
3129               .category = &panfrost_perf_config_tgox.categories[2],
3130            }, // counter
3131            {
3132               .name = "Full write cycles",
3133               .desc = "The number of full-width load/store cache writes.",
3134               .symbol_name = "ls_mem_write_full",
3135               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3136               .offset = 238,
3137               .category = &panfrost_perf_config_tgox.categories[2],
3138            }, // counter
3139            {
3140               .name = "Partial write cycles",
3141               .desc = "The number of partial-width load/store cache writes.",
3142               .symbol_name = "ls_mem_write_short",
3143               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3144               .offset = 239,
3145               .category = &panfrost_perf_config_tgox.categories[2],
3146            }, // counter
3147            {
3148               .name = "Atomic access cycles",
3149               .desc = "The number of load/store atomic accesses.",
3150               .symbol_name = "ls_mem_atomic",
3151               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3152               .offset = 240,
3153               .category = &panfrost_perf_config_tgox.categories[2],
3154            }, // counter
3155            {
3156               .name = "Interpolation requests",
3157               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
3158               .symbol_name = "vary_instr",
3159               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
3160               .offset = 241,
3161               .category = &panfrost_perf_config_tgox.categories[2],
3162            }, // counter
3163            {
3164               .name = "32-bit interpolation active",
3165               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
3166               .symbol_name = "vary_slot_32",
3167               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3168               .offset = 242,
3169               .category = &panfrost_perf_config_tgox.categories[2],
3170            }, // counter
3171            {
3172               .name = "16-bit interpolation active",
3173               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
3174               .symbol_name = "vary_slot_16",
3175               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3176               .offset = 243,
3177               .category = &panfrost_perf_config_tgox.categories[2],
3178            }, // counter
3179            {
3180               .name = "Attribute requests",
3181               .desc = "The number of instructions executed by the attribute unit.",
3182               .symbol_name = "attr_instr",
3183               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
3184               .offset = 244,
3185               .category = &panfrost_perf_config_tgox.categories[2],
3186            }, // counter
3187            {
3188               .name = "Multiplier instructions",
3189               .desc = "The number of instructions where the workload uses floating-point multiplier hardware.",
3190               .symbol_name = "arith_instr_fp_mul",
3191               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
3192               .offset = 245,
3193               .category = &panfrost_perf_config_tgox.categories[2],
3194            }, // counter
3195            {
3196               .name = "Fragment L2 read beats",
3197               .desc = "The number of read beats received by the fixed-function fragment front-end.",
3198               .symbol_name = "beats_rd_ftc",
3199               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3200               .offset = 246,
3201               .category = &panfrost_perf_config_tgox.categories[2],
3202            }, // counter
3203            {
3204               .name = "Fragment external read beats",
3205               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
3206               .symbol_name = "beats_rd_ftc_ext",
3207               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3208               .offset = 247,
3209               .category = &panfrost_perf_config_tgox.categories[2],
3210            }, // counter
3211            {
3212               .name = "Load/store L2 read beats",
3213               .desc = "The number of read beats received by the load/store unit.",
3214               .symbol_name = "beats_rd_lsc",
3215               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3216               .offset = 248,
3217               .category = &panfrost_perf_config_tgox.categories[2],
3218            }, // counter
3219            {
3220               .name = "Load/store external read beats",
3221               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
3222               .symbol_name = "beats_rd_lsc_ext",
3223               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3224               .offset = 249,
3225               .category = &panfrost_perf_config_tgox.categories[2],
3226            }, // counter
3227            {
3228               .name = "Texture L2 read beats",
3229               .desc = "The number of read beats received by the texture unit.",
3230               .symbol_name = "beats_rd_tex",
3231               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3232               .offset = 250,
3233               .category = &panfrost_perf_config_tgox.categories[2],
3234            }, // counter
3235            {
3236               .name = "Texture external read beats",
3237               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
3238               .symbol_name = "beats_rd_tex_ext",
3239               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3240               .offset = 251,
3241               .category = &panfrost_perf_config_tgox.categories[2],
3242            }, // counter
3243            {
3244               .name = "Other L2 read beats",
3245               .desc = "The number of read beats received by a unit that is not specifically identified.",
3246               .symbol_name = "beats_rd_other",
3247               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3248               .offset = 252,
3249               .category = &panfrost_perf_config_tgox.categories[2],
3250            }, // counter
3251            {
3252               .name = "Load/store writeback write beats",
3253               .desc = "The number of write beats by the load/store unit that are due to writeback.",
3254               .symbol_name = "beats_wr_lsc_wb",
3255               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3256               .offset = 253,
3257               .category = &panfrost_perf_config_tgox.categories[2],
3258            }, // counter
3259            {
3260               .name = "Tile buffer write beats",
3261               .desc = "The number of write beats sent by the tile buffer writeback unit.",
3262               .symbol_name = "beats_wr_tib",
3263               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3264               .offset = 254,
3265               .category = &panfrost_perf_config_tgox.categories[2],
3266            }, // counter
3267            {
3268               .name = "Load/store other write beats",
3269               .desc = "The number of write beats by the load/store unit that are due to any reason other than writeback.",
3270               .symbol_name = "beats_wr_lsc_other",
3271               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3272               .offset = 255,
3273               .category = &panfrost_perf_config_tgox.categories[2],
3274            }, // counter
3275         }, // counters
3276      }, // category
3277      {
3278         .name = "Memory System",
3279         .n_counters = 39,
3280         .counters = {
3281            {
3282               .name = "MMU lookups",
3283               .desc = "The number of main MMU address translations performed.",
3284               .symbol_name = "mmu_requests",
3285               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3286               .offset = 132,
3287               .category = &panfrost_perf_config_tgox.categories[3],
3288            }, // counter
3289            {
3290               .name = "Read requests",
3291               .desc = "The number of L2 cache read requests from internal masters.",
3292               .symbol_name = "l2_rd_msg_in",
3293               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3294               .offset = 144,
3295               .category = &panfrost_perf_config_tgox.categories[3],
3296            }, // counter
3297            {
3298               .name = "Read stall cycles",
3299               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
3300               .symbol_name = "l2_rd_msg_in_stall",
3301               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3302               .offset = 145,
3303               .category = &panfrost_perf_config_tgox.categories[3],
3304            }, // counter
3305            {
3306               .name = "Write requests",
3307               .desc = "The number of L2 cache write requests from internal masters.",
3308               .symbol_name = "l2_wr_msg_in",
3309               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3310               .offset = 146,
3311               .category = &panfrost_perf_config_tgox.categories[3],
3312            }, // counter
3313            {
3314               .name = "Write stall cycles",
3315               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
3316               .symbol_name = "l2_wr_msg_in_stall",
3317               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3318               .offset = 147,
3319               .category = &panfrost_perf_config_tgox.categories[3],
3320            }, // counter
3321            {
3322               .name = "Snoop requests",
3323               .desc = "The number of L2 snoop requests from internal masters.",
3324               .symbol_name = "l2_snp_msg_in",
3325               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3326               .offset = 148,
3327               .category = &panfrost_perf_config_tgox.categories[3],
3328            }, // counter
3329            {
3330               .name = "Snoop stall cycles",
3331               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
3332               .symbol_name = "l2_snp_msg_in_stall",
3333               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3334               .offset = 149,
3335               .category = &panfrost_perf_config_tgox.categories[3],
3336            }, // counter
3337            {
3338               .name = "L1 read requests",
3339               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
3340               .symbol_name = "l2_rd_msg_out",
3341               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3342               .offset = 150,
3343               .category = &panfrost_perf_config_tgox.categories[3],
3344            }, // counter
3345            {
3346               .name = "L1 read stall cycles",
3347               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
3348               .symbol_name = "l2_rd_msg_out_stall",
3349               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3350               .offset = 151,
3351               .category = &panfrost_perf_config_tgox.categories[3],
3352            }, // counter
3353            {
3354               .name = "L1 write requests",
3355               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
3356               .symbol_name = "l2_wr_msg_out",
3357               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3358               .offset = 152,
3359               .category = &panfrost_perf_config_tgox.categories[3],
3360            }, // counter
3361            {
3362               .name = "Any lookup",
3363               .desc = "The number of L2 cache lookups performed.",
3364               .symbol_name = "l2_any_lookup",
3365               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3366               .offset = 153,
3367               .category = &panfrost_perf_config_tgox.categories[3],
3368            }, // counter
3369            {
3370               .name = "Read lookup",
3371               .desc = "The number of L2 cache read lookups performed.",
3372               .symbol_name = "l2_read_lookup",
3373               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3374               .offset = 154,
3375               .category = &panfrost_perf_config_tgox.categories[3],
3376            }, // counter
3377            {
3378               .name = "Write lookup",
3379               .desc = "The number of L2 cache write lookups performed.",
3380               .symbol_name = "l2_write_lookup",
3381               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3382               .offset = 155,
3383               .category = &panfrost_perf_config_tgox.categories[3],
3384            }, // counter
3385            {
3386               .name = "External snoop lookups",
3387               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
3388               .symbol_name = "l2_ext_snoop_lookup",
3389               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3390               .offset = 156,
3391               .category = &panfrost_perf_config_tgox.categories[3],
3392            }, // counter
3393            {
3394               .name = "Read transaction",
3395               .desc = "The number of external read transactions.",
3396               .symbol_name = "l2_ext_read",
3397               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3398               .offset = 157,
3399               .category = &panfrost_perf_config_tgox.categories[3],
3400            }, // counter
3401            {
3402               .name = "ReadNoSnoop transactions",
3403               .desc = "The number of external non-coherent read transactions.",
3404               .symbol_name = "l2_ext_read_nosnp",
3405               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3406               .offset = 158,
3407               .category = &panfrost_perf_config_tgox.categories[3],
3408            }, // counter
3409            {
3410               .name = "ReadUnique transactions",
3411               .desc = "The number of external coherent read unique transactions.",
3412               .symbol_name = "l2_ext_read_unique",
3413               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3414               .offset = 159,
3415               .category = &panfrost_perf_config_tgox.categories[3],
3416            }, // counter
3417            {
3418               .name = "Read beat",
3419               .desc = "The number of external bus data read cycles.",
3420               .symbol_name = "l2_ext_read_beats",
3421               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3422               .offset = 160,
3423               .category = &panfrost_perf_config_tgox.categories[3],
3424            }, // counter
3425            {
3426               .name = "Read stall cycles",
3427               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
3428               .symbol_name = "l2_ext_ar_stall",
3429               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3430               .offset = 161,
3431               .category = &panfrost_perf_config_tgox.categories[3],
3432            }, // counter
3433            {
3434               .name = "0-25% outstanding",
3435               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
3436               .symbol_name = "l2_ext_ar_cnt_q1",
3437               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3438               .offset = 162,
3439               .category = &panfrost_perf_config_tgox.categories[3],
3440            }, // counter
3441            {
3442               .name = "25-50% outstanding",
3443               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
3444               .symbol_name = "l2_ext_ar_cnt_q2",
3445               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3446               .offset = 163,
3447               .category = &panfrost_perf_config_tgox.categories[3],
3448            }, // counter
3449            {
3450               .name = "50-75% outstanding",
3451               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
3452               .symbol_name = "l2_ext_ar_cnt_q3",
3453               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3454               .offset = 164,
3455               .category = &panfrost_perf_config_tgox.categories[3],
3456            }, // counter
3457            {
3458               .name = "0-127 cycles",
3459               .desc = "The number of data beats returned 0-127 cycles after the read request.",
3460               .symbol_name = "l2_ext_rresp_0_127",
3461               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3462               .offset = 165,
3463               .category = &panfrost_perf_config_tgox.categories[3],
3464            }, // counter
3465            {
3466               .name = "128-191 cycles",
3467               .desc = "The number of data beats returned 128-191 cycles after the read request.",
3468               .symbol_name = "l2_ext_rresp_128_191",
3469               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3470               .offset = 166,
3471               .category = &panfrost_perf_config_tgox.categories[3],
3472            }, // counter
3473            {
3474               .name = "192-255 cycles",
3475               .desc = "The number of data beats returned 192-255 cycles after the read request.",
3476               .symbol_name = "l2_ext_rresp_192_255",
3477               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3478               .offset = 167,
3479               .category = &panfrost_perf_config_tgox.categories[3],
3480            }, // counter
3481            {
3482               .name = "256-319 cycles",
3483               .desc = "The number of data beats returned 256-319 cycles after the read request.",
3484               .symbol_name = "l2_ext_rresp_256_319",
3485               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3486               .offset = 168,
3487               .category = &panfrost_perf_config_tgox.categories[3],
3488            }, // counter
3489            {
3490               .name = "320-383 cycles",
3491               .desc = "The number of data beats returned 320-383 cycles after the read request.",
3492               .symbol_name = "l2_ext_rresp_320_383",
3493               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3494               .offset = 169,
3495               .category = &panfrost_perf_config_tgox.categories[3],
3496            }, // counter
3497            {
3498               .name = "Write transaction",
3499               .desc = "The number of external write transactions.",
3500               .symbol_name = "l2_ext_write",
3501               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3502               .offset = 170,
3503               .category = &panfrost_perf_config_tgox.categories[3],
3504            }, // counter
3505            {
3506               .name = "WriteNoSnoopFull transactions",
3507               .desc = "The number of external non-coherent full write transactions.",
3508               .symbol_name = "l2_ext_write_nosnp_full",
3509               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3510               .offset = 171,
3511               .category = &panfrost_perf_config_tgox.categories[3],
3512            }, // counter
3513            {
3514               .name = "WriteNoSnoopPartial transactions",
3515               .desc = "The number of external non-coherent partial write transactions.",
3516               .symbol_name = "l2_ext_write_nosnp_ptl",
3517               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3518               .offset = 172,
3519               .category = &panfrost_perf_config_tgox.categories[3],
3520            }, // counter
3521            {
3522               .name = "WriteSnoopFull transactions",
3523               .desc = "The number of external coherent full write transactions.",
3524               .symbol_name = "l2_ext_write_snp_full",
3525               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3526               .offset = 173,
3527               .category = &panfrost_perf_config_tgox.categories[3],
3528            }, // counter
3529            {
3530               .name = "WriteSnoopPartial transactions",
3531               .desc = "The number of external coherent partial write transactions.",
3532               .symbol_name = "l2_ext_write_snp_ptl",
3533               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3534               .offset = 174,
3535               .category = &panfrost_perf_config_tgox.categories[3],
3536            }, // counter
3537            {
3538               .name = "Write beat",
3539               .desc = "The number of external bus data write cycles.",
3540               .symbol_name = "l2_ext_write_beats",
3541               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3542               .offset = 175,
3543               .category = &panfrost_perf_config_tgox.categories[3],
3544            }, // counter
3545            {
3546               .name = "Write stall cycles",
3547               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
3548               .symbol_name = "l2_ext_w_stall",
3549               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3550               .offset = 176,
3551               .category = &panfrost_perf_config_tgox.categories[3],
3552            }, // counter
3553            {
3554               .name = "0-25% outstanding",
3555               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
3556               .symbol_name = "l2_ext_aw_cnt_q1",
3557               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3558               .offset = 177,
3559               .category = &panfrost_perf_config_tgox.categories[3],
3560            }, // counter
3561            {
3562               .name = "25-50% outstanding",
3563               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
3564               .symbol_name = "l2_ext_aw_cnt_q2",
3565               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3566               .offset = 178,
3567               .category = &panfrost_perf_config_tgox.categories[3],
3568            }, // counter
3569            {
3570               .name = "50-75% outstanding",
3571               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
3572               .symbol_name = "l2_ext_aw_cnt_q3",
3573               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3574               .offset = 179,
3575               .category = &panfrost_perf_config_tgox.categories[3],
3576            }, // counter
3577            {
3578               .name = "Snoop transactions",
3579               .desc = "The number of coherency snoops triggered by external masters.",
3580               .symbol_name = "l2_ext_snoop",
3581               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3582               .offset = 180,
3583               .category = &panfrost_perf_config_tgox.categories[3],
3584            }, // counter
3585            {
3586               .name = "Snoop stall cycles",
3587               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
3588               .symbol_name = "l2_ext_snoop_stall",
3589               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3590               .offset = 181,
3591               .category = &panfrost_perf_config_tgox.categories[3],
3592            }, // counter
3593         }, // counters
3594      }, // category
3595   }, // categories
3596}; // panfrost_perf_config_tgox
3597
3598static void UNUSED
3599static_asserts_tnax(void)
3600{
3601   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
3602   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
3603   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
3604   STATIC_ASSERT(59 <= PAN_PERF_MAX_COUNTERS);
3605   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
3606}
3607
3608const struct panfrost_perf_config panfrost_perf_config_tnax = {
3609   .n_categories = 4,
3610   .categories = {
3611      {
3612         .name = "Job Manager",
3613         .n_counters = 23,
3614         .counters = {
3615            {
3616               .name = "GPU active",
3617               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
3618               .symbol_name = "gpu_active",
3619               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3620               .offset = 6,
3621               .category = &panfrost_perf_config_tnax.categories[0],
3622            }, // counter
3623            {
3624               .name = "Interrupt active",
3625               .desc = "The number of cycles where the GPU has a pending interrupt.",
3626               .symbol_name = "irq_active",
3627               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3628               .offset = 7,
3629               .category = &panfrost_perf_config_tnax.categories[0],
3630            }, // counter
3631            {
3632               .name = "Fragment jobs",
3633               .desc = "The number of jobs processed by the GPU fragment queue.",
3634               .symbol_name = "js0_jobs",
3635               .units = PAN_PERF_COUNTER_UNITS_JOBS,
3636               .offset = 8,
3637               .category = &panfrost_perf_config_tnax.categories[0],
3638            }, // counter
3639            {
3640               .name = "Fragment tasks",
3641               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
3642               .symbol_name = "js0_tasks",
3643               .units = PAN_PERF_COUNTER_UNITS_TASKS,
3644               .offset = 9,
3645               .category = &panfrost_perf_config_tnax.categories[0],
3646            }, // counter
3647            {
3648               .name = "Fragment queue active",
3649               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
3650               .symbol_name = "js0_active",
3651               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3652               .offset = 10,
3653               .category = &panfrost_perf_config_tnax.categories[0],
3654            }, // counter
3655            {
3656               .name = "Fragment descriptor reads cycles",
3657               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
3658               .symbol_name = "js0_wait_read",
3659               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3660               .offset = 12,
3661               .category = &panfrost_perf_config_tnax.categories[0],
3662            }, // counter
3663            {
3664               .name = "Fragment job issue cycles",
3665               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
3666               .symbol_name = "js0_wait_issue",
3667               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3668               .offset = 13,
3669               .category = &panfrost_perf_config_tnax.categories[0],
3670            }, // counter
3671            {
3672               .name = "Fragment job dependency cycles",
3673               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
3674               .symbol_name = "js0_wait_depend",
3675               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3676               .offset = 14,
3677               .category = &panfrost_perf_config_tnax.categories[0],
3678            }, // counter
3679            {
3680               .name = "Fragment job finish cycles",
3681               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
3682               .symbol_name = "js0_wait_finish",
3683               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3684               .offset = 15,
3685               .category = &panfrost_perf_config_tnax.categories[0],
3686            }, // counter
3687            {
3688               .name = "Non-fragment jobs",
3689               .desc = "The number of jobs processed by the GPU non-fragment queue.",
3690               .symbol_name = "js1_jobs",
3691               .units = PAN_PERF_COUNTER_UNITS_JOBS,
3692               .offset = 16,
3693               .category = &panfrost_perf_config_tnax.categories[0],
3694            }, // counter
3695            {
3696               .name = "Non-fragment tasks",
3697               .desc = "The number of tasks processed by the GPU non-fragment queue.",
3698               .symbol_name = "js1_tasks",
3699               .units = PAN_PERF_COUNTER_UNITS_TASKS,
3700               .offset = 17,
3701               .category = &panfrost_perf_config_tnax.categories[0],
3702            }, // counter
3703            {
3704               .name = "Non-fragment queue active",
3705               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
3706               .symbol_name = "js1_active",
3707               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3708               .offset = 18,
3709               .category = &panfrost_perf_config_tnax.categories[0],
3710            }, // counter
3711            {
3712               .name = "Non-fragment descriptor read cycles",
3713               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
3714               .symbol_name = "js1_wait_read",
3715               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3716               .offset = 20,
3717               .category = &panfrost_perf_config_tnax.categories[0],
3718            }, // counter
3719            {
3720               .name = "Non-fragment job issue cycles",
3721               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
3722               .symbol_name = "js1_wait_issue",
3723               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3724               .offset = 21,
3725               .category = &panfrost_perf_config_tnax.categories[0],
3726            }, // counter
3727            {
3728               .name = "Non-fragment job dependency cycles",
3729               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
3730               .symbol_name = "js1_wait_depend",
3731               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3732               .offset = 22,
3733               .category = &panfrost_perf_config_tnax.categories[0],
3734            }, // counter
3735            {
3736               .name = "Non-fragment job finish cycles",
3737               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
3738               .symbol_name = "js1_wait_finish",
3739               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3740               .offset = 23,
3741               .category = &panfrost_perf_config_tnax.categories[0],
3742            }, // counter
3743            {
3744               .name = "Reserved jobs",
3745               .desc = "The number of jobs processed by the GPU reserved queue.",
3746               .symbol_name = "js2_jobs",
3747               .units = PAN_PERF_COUNTER_UNITS_JOBS,
3748               .offset = 24,
3749               .category = &panfrost_perf_config_tnax.categories[0],
3750            }, // counter
3751            {
3752               .name = "Reserved tasks",
3753               .desc = "The number of tasks processed by the GPU reserved queue.",
3754               .symbol_name = "js2_tasks",
3755               .units = PAN_PERF_COUNTER_UNITS_TASKS,
3756               .offset = 25,
3757               .category = &panfrost_perf_config_tnax.categories[0],
3758            }, // counter
3759            {
3760               .name = "Reserved queue active",
3761               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
3762               .symbol_name = "js2_active",
3763               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3764               .offset = 26,
3765               .category = &panfrost_perf_config_tnax.categories[0],
3766            }, // counter
3767            {
3768               .name = "Reserved descriptor read cycles",
3769               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
3770               .symbol_name = "js2_wait_read",
3771               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3772               .offset = 28,
3773               .category = &panfrost_perf_config_tnax.categories[0],
3774            }, // counter
3775            {
3776               .name = "Reserved job issue cycles",
3777               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
3778               .symbol_name = "js2_wait_issue",
3779               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3780               .offset = 29,
3781               .category = &panfrost_perf_config_tnax.categories[0],
3782            }, // counter
3783            {
3784               .name = "Reserved job dependency cycles",
3785               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
3786               .symbol_name = "js2_wait_depend",
3787               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3788               .offset = 30,
3789               .category = &panfrost_perf_config_tnax.categories[0],
3790            }, // counter
3791            {
3792               .name = "Reserved job finish cycles",
3793               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
3794               .symbol_name = "js2_wait_finish",
3795               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3796               .offset = 31,
3797               .category = &panfrost_perf_config_tnax.categories[0],
3798            }, // counter
3799         }, // counters
3800      }, // category
3801      {
3802         .name = "Memory System",
3803         .n_counters = 39,
3804         .counters = {
3805            {
3806               .name = "MMU lookups",
3807               .desc = "The number of main MMU address translations performed.",
3808               .symbol_name = "mmu_requests",
3809               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3810               .offset = 196,
3811               .category = &panfrost_perf_config_tnax.categories[1],
3812            }, // counter
3813            {
3814               .name = "Read requests",
3815               .desc = "The number of L2 cache read requests from internal masters.",
3816               .symbol_name = "l2_rd_msg_in",
3817               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3818               .offset = 208,
3819               .category = &panfrost_perf_config_tnax.categories[1],
3820            }, // counter
3821            {
3822               .name = "Read stall cycles",
3823               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
3824               .symbol_name = "l2_rd_msg_in_stall",
3825               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3826               .offset = 209,
3827               .category = &panfrost_perf_config_tnax.categories[1],
3828            }, // counter
3829            {
3830               .name = "Write requests",
3831               .desc = "The number of L2 cache write requests from internal masters.",
3832               .symbol_name = "l2_wr_msg_in",
3833               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3834               .offset = 210,
3835               .category = &panfrost_perf_config_tnax.categories[1],
3836            }, // counter
3837            {
3838               .name = "Write stall cycles",
3839               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
3840               .symbol_name = "l2_wr_msg_in_stall",
3841               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3842               .offset = 211,
3843               .category = &panfrost_perf_config_tnax.categories[1],
3844            }, // counter
3845            {
3846               .name = "Snoop requests",
3847               .desc = "The number of L2 snoop requests from internal masters.",
3848               .symbol_name = "l2_snp_msg_in",
3849               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3850               .offset = 212,
3851               .category = &panfrost_perf_config_tnax.categories[1],
3852            }, // counter
3853            {
3854               .name = "Snoop stall cycles",
3855               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
3856               .symbol_name = "l2_snp_msg_in_stall",
3857               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3858               .offset = 213,
3859               .category = &panfrost_perf_config_tnax.categories[1],
3860            }, // counter
3861            {
3862               .name = "L1 read requests",
3863               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
3864               .symbol_name = "l2_rd_msg_out",
3865               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3866               .offset = 214,
3867               .category = &panfrost_perf_config_tnax.categories[1],
3868            }, // counter
3869            {
3870               .name = "L1 read stall cycles",
3871               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
3872               .symbol_name = "l2_rd_msg_out_stall",
3873               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3874               .offset = 215,
3875               .category = &panfrost_perf_config_tnax.categories[1],
3876            }, // counter
3877            {
3878               .name = "L1 write requests",
3879               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
3880               .symbol_name = "l2_wr_msg_out",
3881               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3882               .offset = 216,
3883               .category = &panfrost_perf_config_tnax.categories[1],
3884            }, // counter
3885            {
3886               .name = "Any lookup",
3887               .desc = "The number of L2 cache lookups performed.",
3888               .symbol_name = "l2_any_lookup",
3889               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3890               .offset = 217,
3891               .category = &panfrost_perf_config_tnax.categories[1],
3892            }, // counter
3893            {
3894               .name = "Read lookup",
3895               .desc = "The number of L2 cache read lookups performed.",
3896               .symbol_name = "l2_read_lookup",
3897               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3898               .offset = 218,
3899               .category = &panfrost_perf_config_tnax.categories[1],
3900            }, // counter
3901            {
3902               .name = "Write lookup",
3903               .desc = "The number of L2 cache write lookups performed.",
3904               .symbol_name = "l2_write_lookup",
3905               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3906               .offset = 219,
3907               .category = &panfrost_perf_config_tnax.categories[1],
3908            }, // counter
3909            {
3910               .name = "External snoop lookups",
3911               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
3912               .symbol_name = "l2_ext_snoop_lookup",
3913               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
3914               .offset = 220,
3915               .category = &panfrost_perf_config_tnax.categories[1],
3916            }, // counter
3917            {
3918               .name = "Read transaction",
3919               .desc = "The number of external read transactions.",
3920               .symbol_name = "l2_ext_read",
3921               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3922               .offset = 221,
3923               .category = &panfrost_perf_config_tnax.categories[1],
3924            }, // counter
3925            {
3926               .name = "ReadNoSnoop transactions",
3927               .desc = "The number of external non-coherent read transactions.",
3928               .symbol_name = "l2_ext_read_nosnp",
3929               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3930               .offset = 222,
3931               .category = &panfrost_perf_config_tnax.categories[1],
3932            }, // counter
3933            {
3934               .name = "ReadUnique transactions",
3935               .desc = "The number of external coherent read unique transactions.",
3936               .symbol_name = "l2_ext_read_unique",
3937               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3938               .offset = 223,
3939               .category = &panfrost_perf_config_tnax.categories[1],
3940            }, // counter
3941            {
3942               .name = "Read beat",
3943               .desc = "The number of external bus data read cycles.",
3944               .symbol_name = "l2_ext_read_beats",
3945               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3946               .offset = 224,
3947               .category = &panfrost_perf_config_tnax.categories[1],
3948            }, // counter
3949            {
3950               .name = "Read stall cycles",
3951               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
3952               .symbol_name = "l2_ext_ar_stall",
3953               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
3954               .offset = 225,
3955               .category = &panfrost_perf_config_tnax.categories[1],
3956            }, // counter
3957            {
3958               .name = "0-25% outstanding",
3959               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
3960               .symbol_name = "l2_ext_ar_cnt_q1",
3961               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3962               .offset = 226,
3963               .category = &panfrost_perf_config_tnax.categories[1],
3964            }, // counter
3965            {
3966               .name = "25-50% outstanding",
3967               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
3968               .symbol_name = "l2_ext_ar_cnt_q2",
3969               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3970               .offset = 227,
3971               .category = &panfrost_perf_config_tnax.categories[1],
3972            }, // counter
3973            {
3974               .name = "50-75% outstanding",
3975               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
3976               .symbol_name = "l2_ext_ar_cnt_q3",
3977               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
3978               .offset = 228,
3979               .category = &panfrost_perf_config_tnax.categories[1],
3980            }, // counter
3981            {
3982               .name = "0-127 cycles",
3983               .desc = "The number of data beats returned 0-127 cycles after the read request.",
3984               .symbol_name = "l2_ext_rresp_0_127",
3985               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3986               .offset = 229,
3987               .category = &panfrost_perf_config_tnax.categories[1],
3988            }, // counter
3989            {
3990               .name = "128-191 cycles",
3991               .desc = "The number of data beats returned 128-191 cycles after the read request.",
3992               .symbol_name = "l2_ext_rresp_128_191",
3993               .units = PAN_PERF_COUNTER_UNITS_BEATS,
3994               .offset = 230,
3995               .category = &panfrost_perf_config_tnax.categories[1],
3996            }, // counter
3997            {
3998               .name = "192-255 cycles",
3999               .desc = "The number of data beats returned 192-255 cycles after the read request.",
4000               .symbol_name = "l2_ext_rresp_192_255",
4001               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4002               .offset = 231,
4003               .category = &panfrost_perf_config_tnax.categories[1],
4004            }, // counter
4005            {
4006               .name = "256-319 cycles",
4007               .desc = "The number of data beats returned 256-319 cycles after the read request.",
4008               .symbol_name = "l2_ext_rresp_256_319",
4009               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4010               .offset = 232,
4011               .category = &panfrost_perf_config_tnax.categories[1],
4012            }, // counter
4013            {
4014               .name = "320-383 cycles",
4015               .desc = "The number of data beats returned 320-383 cycles after the read request.",
4016               .symbol_name = "l2_ext_rresp_320_383",
4017               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4018               .offset = 233,
4019               .category = &panfrost_perf_config_tnax.categories[1],
4020            }, // counter
4021            {
4022               .name = "Write transaction",
4023               .desc = "The number of external write transactions.",
4024               .symbol_name = "l2_ext_write",
4025               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4026               .offset = 234,
4027               .category = &panfrost_perf_config_tnax.categories[1],
4028            }, // counter
4029            {
4030               .name = "WriteNoSnoopFull transactions",
4031               .desc = "The number of external non-coherent full write transactions.",
4032               .symbol_name = "l2_ext_write_nosnp_full",
4033               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4034               .offset = 235,
4035               .category = &panfrost_perf_config_tnax.categories[1],
4036            }, // counter
4037            {
4038               .name = "WriteNoSnoopPartial transactions",
4039               .desc = "The number of external non-coherent partial write transactions.",
4040               .symbol_name = "l2_ext_write_nosnp_ptl",
4041               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4042               .offset = 236,
4043               .category = &panfrost_perf_config_tnax.categories[1],
4044            }, // counter
4045            {
4046               .name = "WriteSnoopFull transactions",
4047               .desc = "The number of external coherent full write transactions.",
4048               .symbol_name = "l2_ext_write_snp_full",
4049               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4050               .offset = 237,
4051               .category = &panfrost_perf_config_tnax.categories[1],
4052            }, // counter
4053            {
4054               .name = "WriteSnoopPartial transactions",
4055               .desc = "The number of external coherent partial write transactions.",
4056               .symbol_name = "l2_ext_write_snp_ptl",
4057               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4058               .offset = 238,
4059               .category = &panfrost_perf_config_tnax.categories[1],
4060            }, // counter
4061            {
4062               .name = "Write beat",
4063               .desc = "The number of external bus data write cycles.",
4064               .symbol_name = "l2_ext_write_beats",
4065               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4066               .offset = 239,
4067               .category = &panfrost_perf_config_tnax.categories[1],
4068            }, // counter
4069            {
4070               .name = "Write stall cycles",
4071               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
4072               .symbol_name = "l2_ext_w_stall",
4073               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4074               .offset = 240,
4075               .category = &panfrost_perf_config_tnax.categories[1],
4076            }, // counter
4077            {
4078               .name = "0-25% outstanding",
4079               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
4080               .symbol_name = "l2_ext_aw_cnt_q1",
4081               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4082               .offset = 241,
4083               .category = &panfrost_perf_config_tnax.categories[1],
4084            }, // counter
4085            {
4086               .name = "25-50% outstanding",
4087               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
4088               .symbol_name = "l2_ext_aw_cnt_q2",
4089               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4090               .offset = 242,
4091               .category = &panfrost_perf_config_tnax.categories[1],
4092            }, // counter
4093            {
4094               .name = "50-75% outstanding",
4095               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
4096               .symbol_name = "l2_ext_aw_cnt_q3",
4097               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4098               .offset = 243,
4099               .category = &panfrost_perf_config_tnax.categories[1],
4100            }, // counter
4101            {
4102               .name = "Snoop transactions",
4103               .desc = "The number of coherency snoops triggered by external masters.",
4104               .symbol_name = "l2_ext_snoop",
4105               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
4106               .offset = 244,
4107               .category = &panfrost_perf_config_tnax.categories[1],
4108            }, // counter
4109            {
4110               .name = "Snoop stall cycles",
4111               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
4112               .symbol_name = "l2_ext_snoop_stall",
4113               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4114               .offset = 245,
4115               .category = &panfrost_perf_config_tnax.categories[1],
4116            }, // counter
4117         }, // counters
4118      }, // category
4119      {
4120         .name = "Shader Core",
4121         .n_counters = 59,
4122         .counters = {
4123            {
4124               .name = "Fragment active",
4125               .desc = "The number of cycles where the shader core is processing a fragment workload.",
4126               .symbol_name = "frag_active",
4127               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4128               .offset = 196,
4129               .category = &panfrost_perf_config_tnax.categories[2],
4130            }, // counter
4131            {
4132               .name = "Read primitives",
4133               .desc = "The number of primitives read from the tile list by the fragment front-end.",
4134               .symbol_name = "frag_primitives_out",
4135               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4136               .offset = 197,
4137               .category = &panfrost_perf_config_tnax.categories[2],
4138            }, // counter
4139            {
4140               .name = "Rasterized primitives",
4141               .desc = "The number of primitives being rasterized.",
4142               .symbol_name = "frag_prim_rast",
4143               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4144               .offset = 198,
4145               .category = &panfrost_perf_config_tnax.categories[2],
4146            }, // counter
4147            {
4148               .name = "Fragment FPKB active",
4149               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
4150               .symbol_name = "frag_fpk_active",
4151               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4152               .offset = 199,
4153               .category = &panfrost_perf_config_tnax.categories[2],
4154            }, // counter
4155            {
4156               .name = "Fragment warps",
4157               .desc = "The number of fragment warps created.",
4158               .symbol_name = "frag_warps",
4159               .units = PAN_PERF_COUNTER_UNITS_WARPS,
4160               .offset = 201,
4161               .category = &panfrost_perf_config_tnax.categories[2],
4162            }, // counter
4163            {
4164               .name = "Partial rasterized quads",
4165               .desc = "The number of partially-rasterized fragment quads created.",
4166               .symbol_name = "frag_partial_quads_rast",
4167               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4168               .offset = 202,
4169               .category = &panfrost_perf_config_tnax.categories[2],
4170            }, // counter
4171            {
4172               .name = "Rasterized quads",
4173               .desc = "The number of quads generated by the rasterization phase.",
4174               .symbol_name = "frag_quads_rast",
4175               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4176               .offset = 203,
4177               .category = &panfrost_perf_config_tnax.categories[2],
4178            }, // counter
4179            {
4180               .name = "Early ZS tested quads",
4181               .desc = "The number of quads that are undergoing early depth and stencil testing.",
4182               .symbol_name = "frag_quads_ezs_test",
4183               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4184               .offset = 204,
4185               .category = &panfrost_perf_config_tnax.categories[2],
4186            }, // counter
4187            {
4188               .name = "Early ZS updated quads",
4189               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
4190               .symbol_name = "frag_quads_ezs_update",
4191               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4192               .offset = 205,
4193               .category = &panfrost_perf_config_tnax.categories[2],
4194            }, // counter
4195            {
4196               .name = "Early ZS killed quads",
4197               .desc = "The number of quads killed by early depth and stencil testing.",
4198               .symbol_name = "frag_quads_ezs_kill",
4199               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4200               .offset = 206,
4201               .category = &panfrost_perf_config_tnax.categories[2],
4202            }, // counter
4203            {
4204               .name = "Late ZS tested quads",
4205               .desc = "The number of quads undergoing late depth and stencil testing.",
4206               .symbol_name = "frag_lzs_test",
4207               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4208               .offset = 207,
4209               .category = &panfrost_perf_config_tnax.categories[2],
4210            }, // counter
4211            {
4212               .name = "Late ZS killed quads",
4213               .desc = "The number of quads killed by late depth and stencil testing.",
4214               .symbol_name = "frag_lzs_kill",
4215               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4216               .offset = 208,
4217               .category = &panfrost_perf_config_tnax.categories[2],
4218            }, // counter
4219            {
4220               .name = "All register warps",
4221               .desc = "The number of warps that require more than 32 registers.",
4222               .symbol_name = "warp_reg_size_64",
4223               .units = PAN_PERF_COUNTER_UNITS_WARPS,
4224               .offset = 209,
4225               .category = &panfrost_perf_config_tnax.categories[2],
4226            }, // counter
4227            {
4228               .name = "Tiles",
4229               .desc = "The number of tiles processed by the shader core.",
4230               .symbol_name = "frag_ptiles",
4231               .units = PAN_PERF_COUNTER_UNITS_TILES,
4232               .offset = 210,
4233               .category = &panfrost_perf_config_tnax.categories[2],
4234            }, // counter
4235            {
4236               .name = "Constant tiles killed",
4237               .desc = "The number of tiles killed by transaction elimination.",
4238               .symbol_name = "frag_trans_elim",
4239               .units = PAN_PERF_COUNTER_UNITS_TILES,
4240               .offset = 211,
4241               .category = &panfrost_perf_config_tnax.categories[2],
4242            }, // counter
4243            {
4244               .name = "FPK occluder quads",
4245               .desc = "The number of quads that are valid occluders for hidden surface removal.",
4246               .symbol_name = "quad_fpk_killer",
4247               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4248               .offset = 212,
4249               .category = &panfrost_perf_config_tnax.categories[2],
4250            }, // counter
4251            {
4252               .name = "Full quad warps",
4253               .desc = "The number of warps that are fully populated with quads.",
4254               .symbol_name = "full_quad_warps",
4255               .units = PAN_PERF_COUNTER_UNITS_WARPS,
4256               .offset = 213,
4257               .category = &panfrost_perf_config_tnax.categories[2],
4258            }, // counter
4259            {
4260               .name = "Non-fragment active",
4261               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
4262               .symbol_name = "compute_active",
4263               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4264               .offset = 214,
4265               .category = &panfrost_perf_config_tnax.categories[2],
4266            }, // counter
4267            {
4268               .name = "Non-fragment tasks",
4269               .desc = "The number of non-fragment tasks issued to the shader core.",
4270               .symbol_name = "compute_tasks",
4271               .units = PAN_PERF_COUNTER_UNITS_TASKS,
4272               .offset = 215,
4273               .category = &panfrost_perf_config_tnax.categories[2],
4274            }, // counter
4275            {
4276               .name = "Non-fragment warps",
4277               .desc = "The number of non-fragment warps created.",
4278               .symbol_name = "compute_warps",
4279               .units = PAN_PERF_COUNTER_UNITS_WARPS,
4280               .offset = 216,
4281               .category = &panfrost_perf_config_tnax.categories[2],
4282            }, // counter
4283            {
4284               .name = "Non-fragment starvation cycles",
4285               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
4286               .symbol_name = "compute_starving",
4287               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4288               .offset = 217,
4289               .category = &panfrost_perf_config_tnax.categories[2],
4290            }, // counter
4291            {
4292               .name = "Execution core active",
4293               .desc = "The number of cycles where the shader core is processing at least one warp.",
4294               .symbol_name = "exec_core_active",
4295               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4296               .offset = 218,
4297               .category = &panfrost_perf_config_tnax.categories[2],
4298            }, // counter
4299            {
4300               .name = "FMA instructions",
4301               .desc = "The number of instructions issued to the FMA pipe.",
4302               .symbol_name = "exec_instr_fma",
4303               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4304               .offset = 219,
4305               .category = &panfrost_perf_config_tnax.categories[2],
4306            }, // counter
4307            {
4308               .name = "CVT instructions",
4309               .desc = "The number of instructions issued to the CVT pipe.",
4310               .symbol_name = "exec_instr_cvt",
4311               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4312               .offset = 220,
4313               .category = &panfrost_perf_config_tnax.categories[2],
4314            }, // counter
4315            {
4316               .name = "SFU instructions",
4317               .desc = "The number of instructions issued to the SFU pipe.",
4318               .symbol_name = "exec_instr_sfu",
4319               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4320               .offset = 221,
4321               .category = &panfrost_perf_config_tnax.categories[2],
4322            }, // counter
4323            {
4324               .name = "Message instructions",
4325               .desc = "The number of instructions issued to the MSG pipe.",
4326               .symbol_name = "exec_instr_msg",
4327               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4328               .offset = 222,
4329               .category = &panfrost_perf_config_tnax.categories[2],
4330            }, // counter
4331            {
4332               .name = "Diverged instructions",
4333               .desc = "The number of instructions executed per warp, that have control flow divergence.",
4334               .symbol_name = "exec_instr_diverged",
4335               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4336               .offset = 223,
4337               .category = &panfrost_perf_config_tnax.categories[2],
4338            }, // counter
4339            {
4340               .name = "Instruction cache misses",
4341               .desc = "The number of instruction cache misses.",
4342               .symbol_name = "exec_icache_miss",
4343               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
4344               .offset = 224,
4345               .category = &panfrost_perf_config_tnax.categories[2],
4346            }, // counter
4347            {
4348               .name = "Execution engine starvation cycles",
4349               .desc = "The number of cycles where the processing unit is starved of work.",
4350               .symbol_name = "exec_starve_arith",
4351               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4352               .offset = 225,
4353               .category = &panfrost_perf_config_tnax.categories[2],
4354            }, // counter
4355            {
4356               .name = "Blend shader calls",
4357               .desc = "The number of blend shader invocations executed.",
4358               .symbol_name = "call_blend_shader",
4359               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4360               .offset = 226,
4361               .category = &panfrost_perf_config_tnax.categories[2],
4362            }, // counter
4363            {
4364               .name = "Input beats",
4365               .desc = "The number of texture request message data beats.",
4366               .symbol_name = "tex_msgi_num_flits",
4367               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4368               .offset = 227,
4369               .category = &panfrost_perf_config_tnax.categories[2],
4370            }, // counter
4371            {
4372               .name = "Descriptor stall cycles",
4373               .desc = "The number of cycles where a quad is stalled on texture descriptor fetch.",
4374               .symbol_name = "tex_dfch_clk_stalled",
4375               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4376               .offset = 228,
4377               .category = &panfrost_perf_config_tnax.categories[2],
4378            }, // counter
4379            {
4380               .name = "Fetch queue stall cycles",
4381               .desc = "The number of cycles where a quad is stalled on entering texture fetch because the fetch queue is full.",
4382               .symbol_name = "tex_tfch_clk_stalled",
4383               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4384               .offset = 229,
4385               .category = &panfrost_perf_config_tnax.categories[2],
4386            }, // counter
4387            {
4388               .name = "Filtering unit stall cycles",
4389               .desc = "The number of cycles where the filtering unit is idle and there is at least one quad present in the texture data fetch queue.",
4390               .symbol_name = "tex_tfch_starved_pending_data_fetch",
4391               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4392               .offset = 230,
4393               .category = &panfrost_perf_config_tnax.categories[2],
4394            }, // counter
4395            {
4396               .name = "Texturing active",
4397               .desc = "The number of texture filtering issue cycles.",
4398               .symbol_name = "tex_filt_num_operations",
4399               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4400               .offset = 231,
4401               .category = &panfrost_perf_config_tnax.categories[2],
4402            }, // counter
4403            {
4404               .name = "4x bilinear filtering active",
4405               .desc = "The number of cycles where the filtering unit uses the 4x path to implement nearest or bilinear filtering.",
4406               .symbol_name = "tex_filt_num_fxr_operations",
4407               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4408               .offset = 232,
4409               .category = &panfrost_perf_config_tnax.categories[2],
4410            }, // counter
4411            {
4412               .name = "2x trilinear filtering active",
4413               .desc = "The number of cycles where the filtering unit uses the 4x path to implement trilinear filtering.",
4414               .symbol_name = "tex_filt_num_fst_operations",
4415               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4416               .offset = 233,
4417               .category = &panfrost_perf_config_tnax.categories[2],
4418            }, // counter
4419            {
4420               .name = "Texture requests",
4421               .desc = "The number of quad-width texture operations processed by the texture unit.",
4422               .symbol_name = "tex_msgo_num_msg",
4423               .units = PAN_PERF_COUNTER_UNITS_QUADS,
4424               .offset = 234,
4425               .category = &panfrost_perf_config_tnax.categories[2],
4426            }, // counter
4427            {
4428               .name = "Output beats",
4429               .desc = "The number of texture response message data beats.",
4430               .symbol_name = "tex_msgo_num_flits",
4431               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4432               .offset = 235,
4433               .category = &panfrost_perf_config_tnax.categories[2],
4434            }, // counter
4435            {
4436               .name = "Full read cycles",
4437               .desc = "The number of full-width load/store cache reads.",
4438               .symbol_name = "ls_mem_read_full",
4439               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4440               .offset = 236,
4441               .category = &panfrost_perf_config_tnax.categories[2],
4442            }, // counter
4443            {
4444               .name = "Partial read cycles",
4445               .desc = "The number of partial-width load/store cache reads.",
4446               .symbol_name = "ls_mem_read_short",
4447               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4448               .offset = 237,
4449               .category = &panfrost_perf_config_tnax.categories[2],
4450            }, // counter
4451            {
4452               .name = "Full write cycles",
4453               .desc = "The number of full-width load/store cache writes.",
4454               .symbol_name = "ls_mem_write_full",
4455               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4456               .offset = 238,
4457               .category = &panfrost_perf_config_tnax.categories[2],
4458            }, // counter
4459            {
4460               .name = "Partial write cycles",
4461               .desc = "The number of partial-width load/store cache writes.",
4462               .symbol_name = "ls_mem_write_short",
4463               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4464               .offset = 239,
4465               .category = &panfrost_perf_config_tnax.categories[2],
4466            }, // counter
4467            {
4468               .name = "Atomic access cycles",
4469               .desc = "The number of load/store atomic accesses.",
4470               .symbol_name = "ls_mem_atomic",
4471               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4472               .offset = 240,
4473               .category = &panfrost_perf_config_tnax.categories[2],
4474            }, // counter
4475            {
4476               .name = "Interpolation requests",
4477               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
4478               .symbol_name = "vary_instr",
4479               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4480               .offset = 241,
4481               .category = &panfrost_perf_config_tnax.categories[2],
4482            }, // counter
4483            {
4484               .name = "32-bit interpolation active",
4485               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
4486               .symbol_name = "vary_slot_32",
4487               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4488               .offset = 242,
4489               .category = &panfrost_perf_config_tnax.categories[2],
4490            }, // counter
4491            {
4492               .name = "16-bit interpolation active",
4493               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
4494               .symbol_name = "vary_slot_16",
4495               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4496               .offset = 243,
4497               .category = &panfrost_perf_config_tnax.categories[2],
4498            }, // counter
4499            {
4500               .name = "Attribute requests",
4501               .desc = "The number of instructions executed by the attribute unit.",
4502               .symbol_name = "attr_instr",
4503               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4504               .offset = 244,
4505               .category = &panfrost_perf_config_tnax.categories[2],
4506            }, // counter
4507            {
4508               .name = "Multiplier instructions",
4509               .desc = "The number of instructions where the workload uses floating-point multiplier hardware.",
4510               .symbol_name = "arith_instr_fp_mul",
4511               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
4512               .offset = 245,
4513               .category = &panfrost_perf_config_tnax.categories[2],
4514            }, // counter
4515            {
4516               .name = "Fragment L2 read beats",
4517               .desc = "The number of read beats received by the fixed-function fragment front-end.",
4518               .symbol_name = "beats_rd_ftc",
4519               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4520               .offset = 246,
4521               .category = &panfrost_perf_config_tnax.categories[2],
4522            }, // counter
4523            {
4524               .name = "Fragment external read beats",
4525               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
4526               .symbol_name = "beats_rd_ftc_ext",
4527               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4528               .offset = 247,
4529               .category = &panfrost_perf_config_tnax.categories[2],
4530            }, // counter
4531            {
4532               .name = "Load/store L2 read beats",
4533               .desc = "The number of read beats received by the load/store unit.",
4534               .symbol_name = "beats_rd_lsc",
4535               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4536               .offset = 248,
4537               .category = &panfrost_perf_config_tnax.categories[2],
4538            }, // counter
4539            {
4540               .name = "Load/store external read beats",
4541               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
4542               .symbol_name = "beats_rd_lsc_ext",
4543               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4544               .offset = 249,
4545               .category = &panfrost_perf_config_tnax.categories[2],
4546            }, // counter
4547            {
4548               .name = "Texture L2 read beats",
4549               .desc = "The number of read beats received by the texture unit.",
4550               .symbol_name = "beats_rd_tex",
4551               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4552               .offset = 250,
4553               .category = &panfrost_perf_config_tnax.categories[2],
4554            }, // counter
4555            {
4556               .name = "Texture external read beats",
4557               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
4558               .symbol_name = "beats_rd_tex_ext",
4559               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4560               .offset = 251,
4561               .category = &panfrost_perf_config_tnax.categories[2],
4562            }, // counter
4563            {
4564               .name = "Other L2 read beats",
4565               .desc = "The number of read beats received by a unit that is not specifically identified.",
4566               .symbol_name = "beats_rd_other",
4567               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4568               .offset = 252,
4569               .category = &panfrost_perf_config_tnax.categories[2],
4570            }, // counter
4571            {
4572               .name = "Load/store other write beats",
4573               .desc = "The number of write beats by the load/store unit that are due to any reason other than writeback.",
4574               .symbol_name = "beats_wr_lsc_other",
4575               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4576               .offset = 253,
4577               .category = &panfrost_perf_config_tnax.categories[2],
4578            }, // counter
4579            {
4580               .name = "Tile buffer write beats",
4581               .desc = "The number of write beats sent by the tile buffer writeback unit.",
4582               .symbol_name = "beats_wr_tib",
4583               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4584               .offset = 254,
4585               .category = &panfrost_perf_config_tnax.categories[2],
4586            }, // counter
4587            {
4588               .name = "Load/store writeback write beats",
4589               .desc = "The number of write beats by the load/store unit that are due to writeback.",
4590               .symbol_name = "beats_wr_lsc_wb",
4591               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4592               .offset = 255,
4593               .category = &panfrost_perf_config_tnax.categories[2],
4594            }, // counter
4595         }, // counters
4596      }, // category
4597      {
4598         .name = "Tiler",
4599         .n_counters = 24,
4600         .counters = {
4601            {
4602               .name = "Tiler active",
4603               .desc = "The number of cycles where the tiler has a workload queued for processing.",
4604               .symbol_name = "tiler_active",
4605               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4606               .offset = 4,
4607               .category = &panfrost_perf_config_tnax.categories[3],
4608            }, // counter
4609            {
4610               .name = "Triangle primitives",
4611               .desc = "The number of input triangle primitives.",
4612               .symbol_name = "triangles",
4613               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4614               .offset = 6,
4615               .category = &panfrost_perf_config_tnax.categories[3],
4616            }, // counter
4617            {
4618               .name = "Line primitives",
4619               .desc = "The number of input line primitives.",
4620               .symbol_name = "lines",
4621               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4622               .offset = 7,
4623               .category = &panfrost_perf_config_tnax.categories[3],
4624            }, // counter
4625            {
4626               .name = "Point primitives",
4627               .desc = "The number of input point primitives.",
4628               .symbol_name = "points",
4629               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4630               .offset = 8,
4631               .category = &panfrost_perf_config_tnax.categories[3],
4632            }, // counter
4633            {
4634               .name = "Front-facing primitives",
4635               .desc = "The number of front-facing triangles that are visible after culling.",
4636               .symbol_name = "front_facing",
4637               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4638               .offset = 9,
4639               .category = &panfrost_perf_config_tnax.categories[3],
4640            }, // counter
4641            {
4642               .name = "Back-facing primitives",
4643               .desc = "The number of back-facing triangles that are visible after culling.",
4644               .symbol_name = "back_facing",
4645               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4646               .offset = 10,
4647               .category = &panfrost_perf_config_tnax.categories[3],
4648            }, // counter
4649            {
4650               .name = "Visible primitives",
4651               .desc = "The number of primitives that are visible after culling.",
4652               .symbol_name = "prim_visible",
4653               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4654               .offset = 11,
4655               .category = &panfrost_perf_config_tnax.categories[3],
4656            }, // counter
4657            {
4658               .name = "Facing and XY plane test culled primitives",
4659               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
4660               .symbol_name = "prim_culled",
4661               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4662               .offset = 12,
4663               .category = &panfrost_perf_config_tnax.categories[3],
4664            }, // counter
4665            {
4666               .name = "Z plane test culled primitives",
4667               .desc = "The number of primitives that are culled by frustum Z plane tests.",
4668               .symbol_name = "prim_clipped",
4669               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4670               .offset = 13,
4671               .category = &panfrost_perf_config_tnax.categories[3],
4672            }, // counter
4673            {
4674               .name = "Sample test culled primitives",
4675               .desc = "The number of primitives culled by the sample coverage test.",
4676               .symbol_name = "prim_sat_culled",
4677               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
4678               .offset = 14,
4679               .category = &panfrost_perf_config_tnax.categories[3],
4680            }, // counter
4681            {
4682               .name = "Read beats",
4683               .desc = "The number of internal bus data read cycles made by the tiler.",
4684               .symbol_name = "bus_read",
4685               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4686               .offset = 17,
4687               .category = &panfrost_perf_config_tnax.categories[3],
4688            }, // counter
4689            {
4690               .name = "Write beats",
4691               .desc = "The number of internal bus data write cycles made by the tiler.",
4692               .symbol_name = "bus_write",
4693               .units = PAN_PERF_COUNTER_UNITS_BEATS,
4694               .offset = 19,
4695               .category = &panfrost_perf_config_tnax.categories[3],
4696            }, // counter
4697            {
4698               .name = "Position shading requests",
4699               .desc = "The number of position shading requests in the IDVS flow.",
4700               .symbol_name = "idvs_pos_shad_req",
4701               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
4702               .offset = 21,
4703               .category = &panfrost_perf_config_tnax.categories[3],
4704            }, // counter
4705            {
4706               .name = "Position shading stall cycles",
4707               .desc = "The number of cycles where the tiler has a stalled position shading request.",
4708               .symbol_name = "idvs_pos_shad_stall",
4709               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4710               .offset = 23,
4711               .category = &panfrost_perf_config_tnax.categories[3],
4712            }, // counter
4713            {
4714               .name = "Position FIFO full cycles",
4715               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
4716               .symbol_name = "idvs_pos_fifo_full",
4717               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4718               .offset = 24,
4719               .category = &panfrost_perf_config_tnax.categories[3],
4720            }, // counter
4721            {
4722               .name = "Position cache hits",
4723               .desc = "The number of position lookups that result in a hit in the vertex cache.",
4724               .symbol_name = "vcache_hit",
4725               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
4726               .offset = 26,
4727               .category = &panfrost_perf_config_tnax.categories[3],
4728            }, // counter
4729            {
4730               .name = "Position cache misses",
4731               .desc = "The number of position lookups that miss in the vertex cache.",
4732               .symbol_name = "vcache_miss",
4733               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
4734               .offset = 27,
4735               .category = &panfrost_perf_config_tnax.categories[3],
4736            }, // counter
4737            {
4738               .name = "Primitive assembly busy stall cycles",
4739               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
4740               .symbol_name = "vfetch_stall",
4741               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4742               .offset = 31,
4743               .category = &panfrost_perf_config_tnax.categories[3],
4744            }, // counter
4745            {
4746               .name = "Varying cache hits",
4747               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
4748               .symbol_name = "idvs_vbu_hit",
4749               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
4750               .offset = 34,
4751               .category = &panfrost_perf_config_tnax.categories[3],
4752            }, // counter
4753            {
4754               .name = "Varying cache misses",
4755               .desc = "The number of varying lookups that miss in the vertex cache.",
4756               .symbol_name = "idvs_vbu_miss",
4757               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
4758               .offset = 35,
4759               .category = &panfrost_perf_config_tnax.categories[3],
4760            }, // counter
4761            {
4762               .name = "Varying shading requests",
4763               .desc = "The number of varying shading requests in the IDVS flow.",
4764               .symbol_name = "idvs_var_shad_req",
4765               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
4766               .offset = 37,
4767               .category = &panfrost_perf_config_tnax.categories[3],
4768            }, // counter
4769            {
4770               .name = "Varying shading stall cycles",
4771               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
4772               .symbol_name = "idvs_var_shad_stall",
4773               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4774               .offset = 38,
4775               .category = &panfrost_perf_config_tnax.categories[3],
4776            }, // counter
4777            {
4778               .name = "Write buffer transaction stall cycles",
4779               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
4780               .symbol_name = "wrbuf_no_axi_id_stall",
4781               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4782               .offset = 54,
4783               .category = &panfrost_perf_config_tnax.categories[3],
4784            }, // counter
4785            {
4786               .name = "Write buffer write stall cycles",
4787               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
4788               .symbol_name = "wrbuf_axi_stall",
4789               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4790               .offset = 55,
4791               .category = &panfrost_perf_config_tnax.categories[3],
4792            }, // counter
4793         }, // counters
4794      }, // category
4795   }, // categories
4796}; // panfrost_perf_config_tnax
4797
4798static void UNUSED
4799static_asserts_totx(void)
4800{
4801   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
4802   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
4803   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
4804   STATIC_ASSERT(59 <= PAN_PERF_MAX_COUNTERS);
4805   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
4806}
4807
4808const struct panfrost_perf_config panfrost_perf_config_totx = {
4809   .n_categories = 4,
4810   .categories = {
4811      {
4812         .name = "Job Manager",
4813         .n_counters = 23,
4814         .counters = {
4815            {
4816               .name = "GPU active",
4817               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
4818               .symbol_name = "gpu_active",
4819               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4820               .offset = 6,
4821               .category = &panfrost_perf_config_totx.categories[0],
4822            }, // counter
4823            {
4824               .name = "Interrupt active",
4825               .desc = "The number of cycles where the GPU has a pending interrupt.",
4826               .symbol_name = "irq_active",
4827               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4828               .offset = 7,
4829               .category = &panfrost_perf_config_totx.categories[0],
4830            }, // counter
4831            {
4832               .name = "Fragment jobs",
4833               .desc = "The number of jobs processed by the GPU fragment queue.",
4834               .symbol_name = "js0_jobs",
4835               .units = PAN_PERF_COUNTER_UNITS_JOBS,
4836               .offset = 8,
4837               .category = &panfrost_perf_config_totx.categories[0],
4838            }, // counter
4839            {
4840               .name = "Fragment tasks",
4841               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
4842               .symbol_name = "js0_tasks",
4843               .units = PAN_PERF_COUNTER_UNITS_TASKS,
4844               .offset = 9,
4845               .category = &panfrost_perf_config_totx.categories[0],
4846            }, // counter
4847            {
4848               .name = "Fragment queue active",
4849               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
4850               .symbol_name = "js0_active",
4851               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4852               .offset = 10,
4853               .category = &panfrost_perf_config_totx.categories[0],
4854            }, // counter
4855            {
4856               .name = "Fragment descriptor reads cycles",
4857               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
4858               .symbol_name = "js0_wait_read",
4859               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4860               .offset = 12,
4861               .category = &panfrost_perf_config_totx.categories[0],
4862            }, // counter
4863            {
4864               .name = "Fragment job issue cycles",
4865               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
4866               .symbol_name = "js0_wait_issue",
4867               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4868               .offset = 13,
4869               .category = &panfrost_perf_config_totx.categories[0],
4870            }, // counter
4871            {
4872               .name = "Fragment job dependency cycles",
4873               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
4874               .symbol_name = "js0_wait_depend",
4875               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4876               .offset = 14,
4877               .category = &panfrost_perf_config_totx.categories[0],
4878            }, // counter
4879            {
4880               .name = "Fragment job finish cycles",
4881               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
4882               .symbol_name = "js0_wait_finish",
4883               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4884               .offset = 15,
4885               .category = &panfrost_perf_config_totx.categories[0],
4886            }, // counter
4887            {
4888               .name = "Non-fragment jobs",
4889               .desc = "The number of jobs processed by the GPU non-fragment queue.",
4890               .symbol_name = "js1_jobs",
4891               .units = PAN_PERF_COUNTER_UNITS_JOBS,
4892               .offset = 16,
4893               .category = &panfrost_perf_config_totx.categories[0],
4894            }, // counter
4895            {
4896               .name = "Non-fragment tasks",
4897               .desc = "The number of tasks processed by the GPU non-fragment queue.",
4898               .symbol_name = "js1_tasks",
4899               .units = PAN_PERF_COUNTER_UNITS_TASKS,
4900               .offset = 17,
4901               .category = &panfrost_perf_config_totx.categories[0],
4902            }, // counter
4903            {
4904               .name = "Non-fragment queue active",
4905               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
4906               .symbol_name = "js1_active",
4907               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4908               .offset = 18,
4909               .category = &panfrost_perf_config_totx.categories[0],
4910            }, // counter
4911            {
4912               .name = "Non-fragment descriptor read cycles",
4913               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
4914               .symbol_name = "js1_wait_read",
4915               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4916               .offset = 20,
4917               .category = &panfrost_perf_config_totx.categories[0],
4918            }, // counter
4919            {
4920               .name = "Non-fragment job issue cycles",
4921               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
4922               .symbol_name = "js1_wait_issue",
4923               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4924               .offset = 21,
4925               .category = &panfrost_perf_config_totx.categories[0],
4926            }, // counter
4927            {
4928               .name = "Non-fragment job dependency cycles",
4929               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
4930               .symbol_name = "js1_wait_depend",
4931               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4932               .offset = 22,
4933               .category = &panfrost_perf_config_totx.categories[0],
4934            }, // counter
4935            {
4936               .name = "Non-fragment job finish cycles",
4937               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
4938               .symbol_name = "js1_wait_finish",
4939               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4940               .offset = 23,
4941               .category = &panfrost_perf_config_totx.categories[0],
4942            }, // counter
4943            {
4944               .name = "Reserved jobs",
4945               .desc = "The number of jobs processed by the GPU reserved queue.",
4946               .symbol_name = "js2_jobs",
4947               .units = PAN_PERF_COUNTER_UNITS_JOBS,
4948               .offset = 24,
4949               .category = &panfrost_perf_config_totx.categories[0],
4950            }, // counter
4951            {
4952               .name = "Reserved tasks",
4953               .desc = "The number of tasks processed by the GPU reserved queue.",
4954               .symbol_name = "js2_tasks",
4955               .units = PAN_PERF_COUNTER_UNITS_TASKS,
4956               .offset = 25,
4957               .category = &panfrost_perf_config_totx.categories[0],
4958            }, // counter
4959            {
4960               .name = "Reserved queue active",
4961               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
4962               .symbol_name = "js2_active",
4963               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4964               .offset = 26,
4965               .category = &panfrost_perf_config_totx.categories[0],
4966            }, // counter
4967            {
4968               .name = "Reserved descriptor read cycles",
4969               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
4970               .symbol_name = "js2_wait_read",
4971               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4972               .offset = 28,
4973               .category = &panfrost_perf_config_totx.categories[0],
4974            }, // counter
4975            {
4976               .name = "Reserved job issue cycles",
4977               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
4978               .symbol_name = "js2_wait_issue",
4979               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4980               .offset = 29,
4981               .category = &panfrost_perf_config_totx.categories[0],
4982            }, // counter
4983            {
4984               .name = "Reserved job dependency cycles",
4985               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
4986               .symbol_name = "js2_wait_depend",
4987               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4988               .offset = 30,
4989               .category = &panfrost_perf_config_totx.categories[0],
4990            }, // counter
4991            {
4992               .name = "Reserved job finish cycles",
4993               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
4994               .symbol_name = "js2_wait_finish",
4995               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
4996               .offset = 31,
4997               .category = &panfrost_perf_config_totx.categories[0],
4998            }, // counter
4999         }, // counters
5000      }, // category
5001      {
5002         .name = "Memory System",
5003         .n_counters = 39,
5004         .counters = {
5005            {
5006               .name = "MMU lookups",
5007               .desc = "The number of main MMU address translations performed.",
5008               .symbol_name = "mmu_requests",
5009               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5010               .offset = 196,
5011               .category = &panfrost_perf_config_totx.categories[1],
5012            }, // counter
5013            {
5014               .name = "Read requests",
5015               .desc = "The number of L2 cache read requests from internal masters.",
5016               .symbol_name = "l2_rd_msg_in",
5017               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5018               .offset = 208,
5019               .category = &panfrost_perf_config_totx.categories[1],
5020            }, // counter
5021            {
5022               .name = "Read stall cycles",
5023               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
5024               .symbol_name = "l2_rd_msg_in_stall",
5025               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5026               .offset = 209,
5027               .category = &panfrost_perf_config_totx.categories[1],
5028            }, // counter
5029            {
5030               .name = "Write requests",
5031               .desc = "The number of L2 cache write requests from internal masters.",
5032               .symbol_name = "l2_wr_msg_in",
5033               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5034               .offset = 210,
5035               .category = &panfrost_perf_config_totx.categories[1],
5036            }, // counter
5037            {
5038               .name = "Write stall cycles",
5039               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
5040               .symbol_name = "l2_wr_msg_in_stall",
5041               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5042               .offset = 211,
5043               .category = &panfrost_perf_config_totx.categories[1],
5044            }, // counter
5045            {
5046               .name = "Snoop requests",
5047               .desc = "The number of L2 snoop requests from internal masters.",
5048               .symbol_name = "l2_snp_msg_in",
5049               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5050               .offset = 212,
5051               .category = &panfrost_perf_config_totx.categories[1],
5052            }, // counter
5053            {
5054               .name = "Snoop stall cycles",
5055               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
5056               .symbol_name = "l2_snp_msg_in_stall",
5057               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5058               .offset = 213,
5059               .category = &panfrost_perf_config_totx.categories[1],
5060            }, // counter
5061            {
5062               .name = "L1 read requests",
5063               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
5064               .symbol_name = "l2_rd_msg_out",
5065               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5066               .offset = 214,
5067               .category = &panfrost_perf_config_totx.categories[1],
5068            }, // counter
5069            {
5070               .name = "L1 read stall cycles",
5071               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
5072               .symbol_name = "l2_rd_msg_out_stall",
5073               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5074               .offset = 215,
5075               .category = &panfrost_perf_config_totx.categories[1],
5076            }, // counter
5077            {
5078               .name = "L1 write requests",
5079               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
5080               .symbol_name = "l2_wr_msg_out",
5081               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5082               .offset = 216,
5083               .category = &panfrost_perf_config_totx.categories[1],
5084            }, // counter
5085            {
5086               .name = "Any lookup",
5087               .desc = "The number of L2 cache lookups performed.",
5088               .symbol_name = "l2_any_lookup",
5089               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5090               .offset = 217,
5091               .category = &panfrost_perf_config_totx.categories[1],
5092            }, // counter
5093            {
5094               .name = "Read lookup",
5095               .desc = "The number of L2 cache read lookups performed.",
5096               .symbol_name = "l2_read_lookup",
5097               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5098               .offset = 218,
5099               .category = &panfrost_perf_config_totx.categories[1],
5100            }, // counter
5101            {
5102               .name = "Write lookup",
5103               .desc = "The number of L2 cache write lookups performed.",
5104               .symbol_name = "l2_write_lookup",
5105               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5106               .offset = 219,
5107               .category = &panfrost_perf_config_totx.categories[1],
5108            }, // counter
5109            {
5110               .name = "External snoop lookups",
5111               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
5112               .symbol_name = "l2_ext_snoop_lookup",
5113               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5114               .offset = 220,
5115               .category = &panfrost_perf_config_totx.categories[1],
5116            }, // counter
5117            {
5118               .name = "Read transaction",
5119               .desc = "The number of external read transactions.",
5120               .symbol_name = "l2_ext_read",
5121               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5122               .offset = 221,
5123               .category = &panfrost_perf_config_totx.categories[1],
5124            }, // counter
5125            {
5126               .name = "ReadNoSnoop transactions",
5127               .desc = "The number of external non-coherent read transactions.",
5128               .symbol_name = "l2_ext_read_nosnp",
5129               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5130               .offset = 222,
5131               .category = &panfrost_perf_config_totx.categories[1],
5132            }, // counter
5133            {
5134               .name = "ReadUnique transactions",
5135               .desc = "The number of external coherent read unique transactions.",
5136               .symbol_name = "l2_ext_read_unique",
5137               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5138               .offset = 223,
5139               .category = &panfrost_perf_config_totx.categories[1],
5140            }, // counter
5141            {
5142               .name = "Read beat",
5143               .desc = "The number of external bus data read cycles.",
5144               .symbol_name = "l2_ext_read_beats",
5145               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5146               .offset = 224,
5147               .category = &panfrost_perf_config_totx.categories[1],
5148            }, // counter
5149            {
5150               .name = "Read stall cycles",
5151               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
5152               .symbol_name = "l2_ext_ar_stall",
5153               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5154               .offset = 225,
5155               .category = &panfrost_perf_config_totx.categories[1],
5156            }, // counter
5157            {
5158               .name = "0-25% outstanding",
5159               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
5160               .symbol_name = "l2_ext_ar_cnt_q1",
5161               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5162               .offset = 226,
5163               .category = &panfrost_perf_config_totx.categories[1],
5164            }, // counter
5165            {
5166               .name = "25-50% outstanding",
5167               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
5168               .symbol_name = "l2_ext_ar_cnt_q2",
5169               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5170               .offset = 227,
5171               .category = &panfrost_perf_config_totx.categories[1],
5172            }, // counter
5173            {
5174               .name = "50-75% outstanding",
5175               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
5176               .symbol_name = "l2_ext_ar_cnt_q3",
5177               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5178               .offset = 228,
5179               .category = &panfrost_perf_config_totx.categories[1],
5180            }, // counter
5181            {
5182               .name = "0-127 cycles",
5183               .desc = "The number of data beats returned 0-127 cycles after the read request.",
5184               .symbol_name = "l2_ext_rresp_0_127",
5185               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5186               .offset = 229,
5187               .category = &panfrost_perf_config_totx.categories[1],
5188            }, // counter
5189            {
5190               .name = "128-191 cycles",
5191               .desc = "The number of data beats returned 128-191 cycles after the read request.",
5192               .symbol_name = "l2_ext_rresp_128_191",
5193               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5194               .offset = 230,
5195               .category = &panfrost_perf_config_totx.categories[1],
5196            }, // counter
5197            {
5198               .name = "192-255 cycles",
5199               .desc = "The number of data beats returned 192-255 cycles after the read request.",
5200               .symbol_name = "l2_ext_rresp_192_255",
5201               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5202               .offset = 231,
5203               .category = &panfrost_perf_config_totx.categories[1],
5204            }, // counter
5205            {
5206               .name = "256-319 cycles",
5207               .desc = "The number of data beats returned 256-319 cycles after the read request.",
5208               .symbol_name = "l2_ext_rresp_256_319",
5209               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5210               .offset = 232,
5211               .category = &panfrost_perf_config_totx.categories[1],
5212            }, // counter
5213            {
5214               .name = "320-383 cycles",
5215               .desc = "The number of data beats returned 320-383 cycles after the read request.",
5216               .symbol_name = "l2_ext_rresp_320_383",
5217               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5218               .offset = 233,
5219               .category = &panfrost_perf_config_totx.categories[1],
5220            }, // counter
5221            {
5222               .name = "Write transaction",
5223               .desc = "The number of external write transactions.",
5224               .symbol_name = "l2_ext_write",
5225               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5226               .offset = 234,
5227               .category = &panfrost_perf_config_totx.categories[1],
5228            }, // counter
5229            {
5230               .name = "WriteNoSnoopFull transactions",
5231               .desc = "The number of external non-coherent full write transactions.",
5232               .symbol_name = "l2_ext_write_nosnp_full",
5233               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5234               .offset = 235,
5235               .category = &panfrost_perf_config_totx.categories[1],
5236            }, // counter
5237            {
5238               .name = "WriteNoSnoopPartial transactions",
5239               .desc = "The number of external non-coherent partial write transactions.",
5240               .symbol_name = "l2_ext_write_nosnp_ptl",
5241               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5242               .offset = 236,
5243               .category = &panfrost_perf_config_totx.categories[1],
5244            }, // counter
5245            {
5246               .name = "WriteSnoopFull transactions",
5247               .desc = "The number of external coherent full write transactions.",
5248               .symbol_name = "l2_ext_write_snp_full",
5249               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5250               .offset = 237,
5251               .category = &panfrost_perf_config_totx.categories[1],
5252            }, // counter
5253            {
5254               .name = "WriteSnoopPartial transactions",
5255               .desc = "The number of external coherent partial write transactions.",
5256               .symbol_name = "l2_ext_write_snp_ptl",
5257               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5258               .offset = 238,
5259               .category = &panfrost_perf_config_totx.categories[1],
5260            }, // counter
5261            {
5262               .name = "Write beat",
5263               .desc = "The number of external bus data write cycles.",
5264               .symbol_name = "l2_ext_write_beats",
5265               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5266               .offset = 239,
5267               .category = &panfrost_perf_config_totx.categories[1],
5268            }, // counter
5269            {
5270               .name = "Write stall cycles",
5271               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
5272               .symbol_name = "l2_ext_w_stall",
5273               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5274               .offset = 240,
5275               .category = &panfrost_perf_config_totx.categories[1],
5276            }, // counter
5277            {
5278               .name = "0-25% outstanding",
5279               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
5280               .symbol_name = "l2_ext_aw_cnt_q1",
5281               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5282               .offset = 241,
5283               .category = &panfrost_perf_config_totx.categories[1],
5284            }, // counter
5285            {
5286               .name = "25-50% outstanding",
5287               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
5288               .symbol_name = "l2_ext_aw_cnt_q2",
5289               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5290               .offset = 242,
5291               .category = &panfrost_perf_config_totx.categories[1],
5292            }, // counter
5293            {
5294               .name = "50-75% outstanding",
5295               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
5296               .symbol_name = "l2_ext_aw_cnt_q3",
5297               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5298               .offset = 243,
5299               .category = &panfrost_perf_config_totx.categories[1],
5300            }, // counter
5301            {
5302               .name = "Snoop transactions",
5303               .desc = "The number of coherency snoops triggered by external masters.",
5304               .symbol_name = "l2_ext_snoop",
5305               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
5306               .offset = 244,
5307               .category = &panfrost_perf_config_totx.categories[1],
5308            }, // counter
5309            {
5310               .name = "Snoop stall cycles",
5311               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
5312               .symbol_name = "l2_ext_snoop_stall",
5313               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5314               .offset = 245,
5315               .category = &panfrost_perf_config_totx.categories[1],
5316            }, // counter
5317         }, // counters
5318      }, // category
5319      {
5320         .name = "Shader Core",
5321         .n_counters = 59,
5322         .counters = {
5323            {
5324               .name = "Fragment active",
5325               .desc = "The number of cycles where the shader core is processing a fragment workload.",
5326               .symbol_name = "frag_active",
5327               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5328               .offset = 196,
5329               .category = &panfrost_perf_config_totx.categories[2],
5330            }, // counter
5331            {
5332               .name = "Read primitives",
5333               .desc = "The number of primitives read from the tile list by the fragment front-end.",
5334               .symbol_name = "frag_primitives_out",
5335               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5336               .offset = 197,
5337               .category = &panfrost_perf_config_totx.categories[2],
5338            }, // counter
5339            {
5340               .name = "Rasterized primitives",
5341               .desc = "The number of primitives being rasterized.",
5342               .symbol_name = "frag_prim_rast",
5343               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5344               .offset = 198,
5345               .category = &panfrost_perf_config_totx.categories[2],
5346            }, // counter
5347            {
5348               .name = "Fragment FPKB active",
5349               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
5350               .symbol_name = "frag_fpk_active",
5351               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5352               .offset = 199,
5353               .category = &panfrost_perf_config_totx.categories[2],
5354            }, // counter
5355            {
5356               .name = "Fragment warps",
5357               .desc = "The number of fragment warps created.",
5358               .symbol_name = "frag_warps",
5359               .units = PAN_PERF_COUNTER_UNITS_WARPS,
5360               .offset = 201,
5361               .category = &panfrost_perf_config_totx.categories[2],
5362            }, // counter
5363            {
5364               .name = "Partial rasterized quads",
5365               .desc = "The number of partially-rasterized fragment quads created.",
5366               .symbol_name = "frag_partial_quads_rast",
5367               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5368               .offset = 202,
5369               .category = &panfrost_perf_config_totx.categories[2],
5370            }, // counter
5371            {
5372               .name = "Rasterized quads",
5373               .desc = "The number of quads generated by the rasterization phase.",
5374               .symbol_name = "frag_quads_rast",
5375               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5376               .offset = 203,
5377               .category = &panfrost_perf_config_totx.categories[2],
5378            }, // counter
5379            {
5380               .name = "Early ZS tested quads",
5381               .desc = "The number of quads that are undergoing early depth and stencil testing.",
5382               .symbol_name = "frag_quads_ezs_test",
5383               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5384               .offset = 204,
5385               .category = &panfrost_perf_config_totx.categories[2],
5386            }, // counter
5387            {
5388               .name = "Early ZS updated quads",
5389               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
5390               .symbol_name = "frag_quads_ezs_update",
5391               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5392               .offset = 205,
5393               .category = &panfrost_perf_config_totx.categories[2],
5394            }, // counter
5395            {
5396               .name = "Early ZS killed quads",
5397               .desc = "The number of quads killed by early depth and stencil testing.",
5398               .symbol_name = "frag_quads_ezs_kill",
5399               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5400               .offset = 206,
5401               .category = &panfrost_perf_config_totx.categories[2],
5402            }, // counter
5403            {
5404               .name = "Late ZS tested quads",
5405               .desc = "The number of quads undergoing late depth and stencil testing.",
5406               .symbol_name = "frag_lzs_test",
5407               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5408               .offset = 207,
5409               .category = &panfrost_perf_config_totx.categories[2],
5410            }, // counter
5411            {
5412               .name = "Late ZS killed quads",
5413               .desc = "The number of quads killed by late depth and stencil testing.",
5414               .symbol_name = "frag_lzs_kill",
5415               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5416               .offset = 208,
5417               .category = &panfrost_perf_config_totx.categories[2],
5418            }, // counter
5419            {
5420               .name = "All register warps",
5421               .desc = "The number of warps that require more than 32 registers.",
5422               .symbol_name = "warp_reg_size_64",
5423               .units = PAN_PERF_COUNTER_UNITS_WARPS,
5424               .offset = 209,
5425               .category = &panfrost_perf_config_totx.categories[2],
5426            }, // counter
5427            {
5428               .name = "Tiles",
5429               .desc = "The number of tiles processed by the shader core.",
5430               .symbol_name = "frag_ptiles",
5431               .units = PAN_PERF_COUNTER_UNITS_TILES,
5432               .offset = 210,
5433               .category = &panfrost_perf_config_totx.categories[2],
5434            }, // counter
5435            {
5436               .name = "Constant tiles killed",
5437               .desc = "The number of tiles killed by transaction elimination.",
5438               .symbol_name = "frag_trans_elim",
5439               .units = PAN_PERF_COUNTER_UNITS_TILES,
5440               .offset = 211,
5441               .category = &panfrost_perf_config_totx.categories[2],
5442            }, // counter
5443            {
5444               .name = "FPK occluder quads",
5445               .desc = "The number of quads that are valid occluders for hidden surface removal.",
5446               .symbol_name = "quad_fpk_killer",
5447               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5448               .offset = 212,
5449               .category = &panfrost_perf_config_totx.categories[2],
5450            }, // counter
5451            {
5452               .name = "Full quad warps",
5453               .desc = "The number of warps that are fully populated with quads.",
5454               .symbol_name = "full_quad_warps",
5455               .units = PAN_PERF_COUNTER_UNITS_WARPS,
5456               .offset = 213,
5457               .category = &panfrost_perf_config_totx.categories[2],
5458            }, // counter
5459            {
5460               .name = "Non-fragment active",
5461               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
5462               .symbol_name = "compute_active",
5463               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5464               .offset = 214,
5465               .category = &panfrost_perf_config_totx.categories[2],
5466            }, // counter
5467            {
5468               .name = "Non-fragment tasks",
5469               .desc = "The number of non-fragment tasks issued to the shader core.",
5470               .symbol_name = "compute_tasks",
5471               .units = PAN_PERF_COUNTER_UNITS_TASKS,
5472               .offset = 215,
5473               .category = &panfrost_perf_config_totx.categories[2],
5474            }, // counter
5475            {
5476               .name = "Non-fragment warps",
5477               .desc = "The number of non-fragment warps created.",
5478               .symbol_name = "compute_warps",
5479               .units = PAN_PERF_COUNTER_UNITS_WARPS,
5480               .offset = 216,
5481               .category = &panfrost_perf_config_totx.categories[2],
5482            }, // counter
5483            {
5484               .name = "Non-fragment starvation cycles",
5485               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
5486               .symbol_name = "compute_starving",
5487               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5488               .offset = 217,
5489               .category = &panfrost_perf_config_totx.categories[2],
5490            }, // counter
5491            {
5492               .name = "Execution core active",
5493               .desc = "The number of cycles where the shader core is processing at least one warp.",
5494               .symbol_name = "exec_core_active",
5495               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5496               .offset = 218,
5497               .category = &panfrost_perf_config_totx.categories[2],
5498            }, // counter
5499            {
5500               .name = "FMA instructions",
5501               .desc = "The number of instructions issued to the FMA pipe.",
5502               .symbol_name = "exec_instr_fma",
5503               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
5504               .offset = 219,
5505               .category = &panfrost_perf_config_totx.categories[2],
5506            }, // counter
5507            {
5508               .name = "CVT instructions",
5509               .desc = "The number of instructions issued to the CVT pipe.",
5510               .symbol_name = "exec_instr_cvt",
5511               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
5512               .offset = 220,
5513               .category = &panfrost_perf_config_totx.categories[2],
5514            }, // counter
5515            {
5516               .name = "SFU instructions",
5517               .desc = "The number of instructions issued to the SFU pipe.",
5518               .symbol_name = "exec_instr_sfu",
5519               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
5520               .offset = 221,
5521               .category = &panfrost_perf_config_totx.categories[2],
5522            }, // counter
5523            {
5524               .name = "Message instructions",
5525               .desc = "The number of instructions issued to the MSG pipe.",
5526               .symbol_name = "exec_instr_msg",
5527               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
5528               .offset = 222,
5529               .category = &panfrost_perf_config_totx.categories[2],
5530            }, // counter
5531            {
5532               .name = "Diverged instructions",
5533               .desc = "The number of instructions executed per warp, that have control flow divergence.",
5534               .symbol_name = "exec_instr_diverged",
5535               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
5536               .offset = 223,
5537               .category = &panfrost_perf_config_totx.categories[2],
5538            }, // counter
5539            {
5540               .name = "Instruction cache misses",
5541               .desc = "The number of instruction cache misses.",
5542               .symbol_name = "exec_icache_miss",
5543               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5544               .offset = 224,
5545               .category = &panfrost_perf_config_totx.categories[2],
5546            }, // counter
5547            {
5548               .name = "Execution engine starvation cycles",
5549               .desc = "The number of cycles where the processing unit is starved of work.",
5550               .symbol_name = "exec_starve_arith",
5551               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5552               .offset = 225,
5553               .category = &panfrost_perf_config_totx.categories[2],
5554            }, // counter
5555            {
5556               .name = "Blend shader calls",
5557               .desc = "The number of blend shader invocations executed.",
5558               .symbol_name = "call_blend_shader",
5559               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
5560               .offset = 226,
5561               .category = &panfrost_perf_config_totx.categories[2],
5562            }, // counter
5563            {
5564               .name = "Input beats",
5565               .desc = "The number of texture request message data beats.",
5566               .symbol_name = "tex_msgi_num_flits",
5567               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5568               .offset = 227,
5569               .category = &panfrost_perf_config_totx.categories[2],
5570            }, // counter
5571            {
5572               .name = "Descriptor stall cycles",
5573               .desc = "The number of cycles where a quad is stalled on texture descriptor fetch.",
5574               .symbol_name = "tex_dfch_clk_stalled",
5575               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5576               .offset = 228,
5577               .category = &panfrost_perf_config_totx.categories[2],
5578            }, // counter
5579            {
5580               .name = "Fetch queue stall cycles",
5581               .desc = "The number of cycles where a quad is stalled on entering texture fetch because the fetch queue is full.",
5582               .symbol_name = "tex_tfch_clk_stalled",
5583               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5584               .offset = 229,
5585               .category = &panfrost_perf_config_totx.categories[2],
5586            }, // counter
5587            {
5588               .name = "Filtering unit stall cycles",
5589               .desc = "The number of cycles where the filtering unit is idle and there is at least one quad present in the texture data fetch queue.",
5590               .symbol_name = "tex_tfch_starved_pending_data_fetch",
5591               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5592               .offset = 230,
5593               .category = &panfrost_perf_config_totx.categories[2],
5594            }, // counter
5595            {
5596               .name = "Texturing active",
5597               .desc = "The number of texture filtering issue cycles.",
5598               .symbol_name = "tex_filt_num_operations",
5599               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5600               .offset = 231,
5601               .category = &panfrost_perf_config_totx.categories[2],
5602            }, // counter
5603            {
5604               .name = "4x bilinear filtering active",
5605               .desc = "The number of cycles where the filtering unit uses the 4x path to implement nearest or bilinear filtering.",
5606               .symbol_name = "tex_filt_num_fxr_operations",
5607               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5608               .offset = 232,
5609               .category = &panfrost_perf_config_totx.categories[2],
5610            }, // counter
5611            {
5612               .name = "2x trilinear filtering active",
5613               .desc = "The number of cycles where the filtering unit uses the 4x path to implement trilinear filtering.",
5614               .symbol_name = "tex_filt_num_fst_operations",
5615               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5616               .offset = 233,
5617               .category = &panfrost_perf_config_totx.categories[2],
5618            }, // counter
5619            {
5620               .name = "Texture requests",
5621               .desc = "The number of quad-width texture operations processed by the texture unit.",
5622               .symbol_name = "tex_msgo_num_msg",
5623               .units = PAN_PERF_COUNTER_UNITS_QUADS,
5624               .offset = 234,
5625               .category = &panfrost_perf_config_totx.categories[2],
5626            }, // counter
5627            {
5628               .name = "Output beats",
5629               .desc = "The number of texture response message data beats.",
5630               .symbol_name = "tex_msgo_num_flits",
5631               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5632               .offset = 235,
5633               .category = &panfrost_perf_config_totx.categories[2],
5634            }, // counter
5635            {
5636               .name = "Full read cycles",
5637               .desc = "The number of full-width load/store cache reads.",
5638               .symbol_name = "ls_mem_read_full",
5639               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5640               .offset = 236,
5641               .category = &panfrost_perf_config_totx.categories[2],
5642            }, // counter
5643            {
5644               .name = "Partial read cycles",
5645               .desc = "The number of partial-width load/store cache reads.",
5646               .symbol_name = "ls_mem_read_short",
5647               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5648               .offset = 237,
5649               .category = &panfrost_perf_config_totx.categories[2],
5650            }, // counter
5651            {
5652               .name = "Full write cycles",
5653               .desc = "The number of full-width load/store cache writes.",
5654               .symbol_name = "ls_mem_write_full",
5655               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5656               .offset = 238,
5657               .category = &panfrost_perf_config_totx.categories[2],
5658            }, // counter
5659            {
5660               .name = "Partial write cycles",
5661               .desc = "The number of partial-width load/store cache writes.",
5662               .symbol_name = "ls_mem_write_short",
5663               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5664               .offset = 239,
5665               .category = &panfrost_perf_config_totx.categories[2],
5666            }, // counter
5667            {
5668               .name = "Atomic access cycles",
5669               .desc = "The number of load/store atomic accesses.",
5670               .symbol_name = "ls_mem_atomic",
5671               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5672               .offset = 240,
5673               .category = &panfrost_perf_config_totx.categories[2],
5674            }, // counter
5675            {
5676               .name = "Interpolation requests",
5677               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
5678               .symbol_name = "vary_instr",
5679               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
5680               .offset = 241,
5681               .category = &panfrost_perf_config_totx.categories[2],
5682            }, // counter
5683            {
5684               .name = "32-bit interpolation active",
5685               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
5686               .symbol_name = "vary_slot_32",
5687               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5688               .offset = 242,
5689               .category = &panfrost_perf_config_totx.categories[2],
5690            }, // counter
5691            {
5692               .name = "16-bit interpolation active",
5693               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
5694               .symbol_name = "vary_slot_16",
5695               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5696               .offset = 243,
5697               .category = &panfrost_perf_config_totx.categories[2],
5698            }, // counter
5699            {
5700               .name = "Attribute requests",
5701               .desc = "The number of instructions executed by the attribute unit.",
5702               .symbol_name = "attr_instr",
5703               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
5704               .offset = 244,
5705               .category = &panfrost_perf_config_totx.categories[2],
5706            }, // counter
5707            {
5708               .name = "Any active",
5709               .desc = "The number of cycles where the shader core is processing either a non-fragment workload or a fragment workload.",
5710               .symbol_name = "shader_core_active",
5711               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5712               .offset = 245,
5713               .category = &panfrost_perf_config_totx.categories[2],
5714            }, // counter
5715            {
5716               .name = "Fragment L2 read beats",
5717               .desc = "The number of read beats received by the fixed-function fragment front-end.",
5718               .symbol_name = "beats_rd_ftc",
5719               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5720               .offset = 246,
5721               .category = &panfrost_perf_config_totx.categories[2],
5722            }, // counter
5723            {
5724               .name = "Fragment external read beats",
5725               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
5726               .symbol_name = "beats_rd_ftc_ext",
5727               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5728               .offset = 247,
5729               .category = &panfrost_perf_config_totx.categories[2],
5730            }, // counter
5731            {
5732               .name = "Load/store L2 read beats",
5733               .desc = "The number of read beats received by the load/store unit.",
5734               .symbol_name = "beats_rd_lsc",
5735               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5736               .offset = 248,
5737               .category = &panfrost_perf_config_totx.categories[2],
5738            }, // counter
5739            {
5740               .name = "Load/store external read beats",
5741               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
5742               .symbol_name = "beats_rd_lsc_ext",
5743               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5744               .offset = 249,
5745               .category = &panfrost_perf_config_totx.categories[2],
5746            }, // counter
5747            {
5748               .name = "Texture L2 read beats",
5749               .desc = "The number of read beats received by the texture unit.",
5750               .symbol_name = "beats_rd_tex",
5751               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5752               .offset = 250,
5753               .category = &panfrost_perf_config_totx.categories[2],
5754            }, // counter
5755            {
5756               .name = "Texture external read beats",
5757               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
5758               .symbol_name = "beats_rd_tex_ext",
5759               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5760               .offset = 251,
5761               .category = &panfrost_perf_config_totx.categories[2],
5762            }, // counter
5763            {
5764               .name = "Other L2 read beats",
5765               .desc = "The number of read beats received by a unit that is not specifically identified.",
5766               .symbol_name = "beats_rd_other",
5767               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5768               .offset = 252,
5769               .category = &panfrost_perf_config_totx.categories[2],
5770            }, // counter
5771            {
5772               .name = "Load/store other write beats",
5773               .desc = "The number of write beats by the load/store unit that are due to any reason other than writeback.",
5774               .symbol_name = "beats_wr_lsc_other",
5775               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5776               .offset = 253,
5777               .category = &panfrost_perf_config_totx.categories[2],
5778            }, // counter
5779            {
5780               .name = "Tile buffer write beats",
5781               .desc = "The number of write beats sent by the tile buffer writeback unit.",
5782               .symbol_name = "beats_wr_tib",
5783               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5784               .offset = 254,
5785               .category = &panfrost_perf_config_totx.categories[2],
5786            }, // counter
5787            {
5788               .name = "Load/store writeback write beats",
5789               .desc = "The number of write beats by the load/store unit that are due to writeback.",
5790               .symbol_name = "beats_wr_lsc_wb",
5791               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5792               .offset = 255,
5793               .category = &panfrost_perf_config_totx.categories[2],
5794            }, // counter
5795         }, // counters
5796      }, // category
5797      {
5798         .name = "Tiler",
5799         .n_counters = 24,
5800         .counters = {
5801            {
5802               .name = "Tiler active",
5803               .desc = "The number of cycles where the tiler has a workload queued for processing.",
5804               .symbol_name = "tiler_active",
5805               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5806               .offset = 4,
5807               .category = &panfrost_perf_config_totx.categories[3],
5808            }, // counter
5809            {
5810               .name = "Triangle primitives",
5811               .desc = "The number of input triangle primitives.",
5812               .symbol_name = "triangles",
5813               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5814               .offset = 6,
5815               .category = &panfrost_perf_config_totx.categories[3],
5816            }, // counter
5817            {
5818               .name = "Line primitives",
5819               .desc = "The number of input line primitives.",
5820               .symbol_name = "lines",
5821               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5822               .offset = 7,
5823               .category = &panfrost_perf_config_totx.categories[3],
5824            }, // counter
5825            {
5826               .name = "Point primitives",
5827               .desc = "The number of input point primitives.",
5828               .symbol_name = "points",
5829               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5830               .offset = 8,
5831               .category = &panfrost_perf_config_totx.categories[3],
5832            }, // counter
5833            {
5834               .name = "Front-facing primitives",
5835               .desc = "The number of front-facing triangles that are visible after culling.",
5836               .symbol_name = "front_facing",
5837               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5838               .offset = 9,
5839               .category = &panfrost_perf_config_totx.categories[3],
5840            }, // counter
5841            {
5842               .name = "Back-facing primitives",
5843               .desc = "The number of back-facing triangles that are visible after culling.",
5844               .symbol_name = "back_facing",
5845               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5846               .offset = 10,
5847               .category = &panfrost_perf_config_totx.categories[3],
5848            }, // counter
5849            {
5850               .name = "Visible primitives",
5851               .desc = "The number of primitives that are visible after culling.",
5852               .symbol_name = "prim_visible",
5853               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5854               .offset = 11,
5855               .category = &panfrost_perf_config_totx.categories[3],
5856            }, // counter
5857            {
5858               .name = "Facing and XY plane test culled primitives",
5859               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
5860               .symbol_name = "prim_culled",
5861               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5862               .offset = 12,
5863               .category = &panfrost_perf_config_totx.categories[3],
5864            }, // counter
5865            {
5866               .name = "Z plane test culled primitives",
5867               .desc = "The number of primitives that are culled by frustum Z plane tests.",
5868               .symbol_name = "prim_clipped",
5869               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5870               .offset = 13,
5871               .category = &panfrost_perf_config_totx.categories[3],
5872            }, // counter
5873            {
5874               .name = "Sample test culled primitives",
5875               .desc = "The number of primitives culled by the sample coverage test.",
5876               .symbol_name = "prim_sat_culled",
5877               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
5878               .offset = 14,
5879               .category = &panfrost_perf_config_totx.categories[3],
5880            }, // counter
5881            {
5882               .name = "Read beats",
5883               .desc = "The number of internal bus data read cycles made by the tiler.",
5884               .symbol_name = "bus_read",
5885               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5886               .offset = 17,
5887               .category = &panfrost_perf_config_totx.categories[3],
5888            }, // counter
5889            {
5890               .name = "Write beats",
5891               .desc = "The number of internal bus data write cycles made by the tiler.",
5892               .symbol_name = "bus_write",
5893               .units = PAN_PERF_COUNTER_UNITS_BEATS,
5894               .offset = 19,
5895               .category = &panfrost_perf_config_totx.categories[3],
5896            }, // counter
5897            {
5898               .name = "Position shading requests",
5899               .desc = "The number of position shading requests in the IDVS flow.",
5900               .symbol_name = "idvs_pos_shad_req",
5901               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5902               .offset = 21,
5903               .category = &panfrost_perf_config_totx.categories[3],
5904            }, // counter
5905            {
5906               .name = "Position shading stall cycles",
5907               .desc = "The number of cycles where the tiler has a stalled position shading request.",
5908               .symbol_name = "idvs_pos_shad_stall",
5909               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5910               .offset = 23,
5911               .category = &panfrost_perf_config_totx.categories[3],
5912            }, // counter
5913            {
5914               .name = "Position FIFO full cycles",
5915               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
5916               .symbol_name = "idvs_pos_fifo_full",
5917               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5918               .offset = 24,
5919               .category = &panfrost_perf_config_totx.categories[3],
5920            }, // counter
5921            {
5922               .name = "Position cache hits",
5923               .desc = "The number of position lookups that result in a hit in the vertex cache.",
5924               .symbol_name = "vcache_hit",
5925               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5926               .offset = 26,
5927               .category = &panfrost_perf_config_totx.categories[3],
5928            }, // counter
5929            {
5930               .name = "Position cache misses",
5931               .desc = "The number of position lookups that miss in the vertex cache.",
5932               .symbol_name = "vcache_miss",
5933               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5934               .offset = 27,
5935               .category = &panfrost_perf_config_totx.categories[3],
5936            }, // counter
5937            {
5938               .name = "Primitive assembly busy stall cycles",
5939               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
5940               .symbol_name = "vfetch_stall",
5941               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5942               .offset = 31,
5943               .category = &panfrost_perf_config_totx.categories[3],
5944            }, // counter
5945            {
5946               .name = "Varying cache hits",
5947               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
5948               .symbol_name = "idvs_vbu_hit",
5949               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5950               .offset = 34,
5951               .category = &panfrost_perf_config_totx.categories[3],
5952            }, // counter
5953            {
5954               .name = "Varying cache misses",
5955               .desc = "The number of varying lookups that miss in the vertex cache.",
5956               .symbol_name = "idvs_vbu_miss",
5957               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5958               .offset = 35,
5959               .category = &panfrost_perf_config_totx.categories[3],
5960            }, // counter
5961            {
5962               .name = "Varying shading requests",
5963               .desc = "The number of varying shading requests in the IDVS flow.",
5964               .symbol_name = "idvs_var_shad_req",
5965               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
5966               .offset = 37,
5967               .category = &panfrost_perf_config_totx.categories[3],
5968            }, // counter
5969            {
5970               .name = "Varying shading stall cycles",
5971               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
5972               .symbol_name = "idvs_var_shad_stall",
5973               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5974               .offset = 38,
5975               .category = &panfrost_perf_config_totx.categories[3],
5976            }, // counter
5977            {
5978               .name = "Write buffer transaction stall cycles",
5979               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
5980               .symbol_name = "wrbuf_no_axi_id_stall",
5981               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5982               .offset = 54,
5983               .category = &panfrost_perf_config_totx.categories[3],
5984            }, // counter
5985            {
5986               .name = "Write buffer write stall cycles",
5987               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
5988               .symbol_name = "wrbuf_axi_stall",
5989               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
5990               .offset = 55,
5991               .category = &panfrost_perf_config_totx.categories[3],
5992            }, // counter
5993         }, // counters
5994      }, // category
5995   }, // categories
5996}; // panfrost_perf_config_totx
5997
5998static void UNUSED
5999static_asserts_tmix(void)
6000{
6001   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
6002   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
6003   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
6004   STATIC_ASSERT(57 <= PAN_PERF_MAX_COUNTERS);
6005   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
6006}
6007
6008const struct panfrost_perf_config panfrost_perf_config_tmix = {
6009   .n_categories = 4,
6010   .categories = {
6011      {
6012         .name = "Job Manager",
6013         .n_counters = 23,
6014         .counters = {
6015            {
6016               .name = "GPU active",
6017               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
6018               .symbol_name = "gpu_active",
6019               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6020               .offset = 6,
6021               .category = &panfrost_perf_config_tmix.categories[0],
6022            }, // counter
6023            {
6024               .name = "Interrupt active",
6025               .desc = "The number of cycles where the GPU has a pending interrupt.",
6026               .symbol_name = "irq_active",
6027               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6028               .offset = 7,
6029               .category = &panfrost_perf_config_tmix.categories[0],
6030            }, // counter
6031            {
6032               .name = "Fragment jobs",
6033               .desc = "The number of jobs processed by the GPU fragment queue.",
6034               .symbol_name = "js0_jobs",
6035               .units = PAN_PERF_COUNTER_UNITS_JOBS,
6036               .offset = 8,
6037               .category = &panfrost_perf_config_tmix.categories[0],
6038            }, // counter
6039            {
6040               .name = "Fragment tasks",
6041               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
6042               .symbol_name = "js0_tasks",
6043               .units = PAN_PERF_COUNTER_UNITS_TASKS,
6044               .offset = 9,
6045               .category = &panfrost_perf_config_tmix.categories[0],
6046            }, // counter
6047            {
6048               .name = "Fragment queue active",
6049               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
6050               .symbol_name = "js0_active",
6051               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6052               .offset = 10,
6053               .category = &panfrost_perf_config_tmix.categories[0],
6054            }, // counter
6055            {
6056               .name = "Fragment descriptor reads cycles",
6057               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
6058               .symbol_name = "js0_wait_read",
6059               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6060               .offset = 12,
6061               .category = &panfrost_perf_config_tmix.categories[0],
6062            }, // counter
6063            {
6064               .name = "Fragment job issue cycles",
6065               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
6066               .symbol_name = "js0_wait_issue",
6067               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6068               .offset = 13,
6069               .category = &panfrost_perf_config_tmix.categories[0],
6070            }, // counter
6071            {
6072               .name = "Fragment job dependency cycles",
6073               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
6074               .symbol_name = "js0_wait_depend",
6075               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6076               .offset = 14,
6077               .category = &panfrost_perf_config_tmix.categories[0],
6078            }, // counter
6079            {
6080               .name = "Fragment job finish cycles",
6081               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
6082               .symbol_name = "js0_wait_finish",
6083               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6084               .offset = 15,
6085               .category = &panfrost_perf_config_tmix.categories[0],
6086            }, // counter
6087            {
6088               .name = "Non-fragment jobs",
6089               .desc = "The number of jobs processed by the GPU non-fragment queue.",
6090               .symbol_name = "js1_jobs",
6091               .units = PAN_PERF_COUNTER_UNITS_JOBS,
6092               .offset = 16,
6093               .category = &panfrost_perf_config_tmix.categories[0],
6094            }, // counter
6095            {
6096               .name = "Non-fragment tasks",
6097               .desc = "The number of tasks processed by the GPU non-fragment queue.",
6098               .symbol_name = "js1_tasks",
6099               .units = PAN_PERF_COUNTER_UNITS_TASKS,
6100               .offset = 17,
6101               .category = &panfrost_perf_config_tmix.categories[0],
6102            }, // counter
6103            {
6104               .name = "Non-fragment queue active",
6105               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
6106               .symbol_name = "js1_active",
6107               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6108               .offset = 18,
6109               .category = &panfrost_perf_config_tmix.categories[0],
6110            }, // counter
6111            {
6112               .name = "Non-fragment descriptor read cycles",
6113               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
6114               .symbol_name = "js1_wait_read",
6115               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6116               .offset = 20,
6117               .category = &panfrost_perf_config_tmix.categories[0],
6118            }, // counter
6119            {
6120               .name = "Non-fragment job issue cycles",
6121               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
6122               .symbol_name = "js1_wait_issue",
6123               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6124               .offset = 21,
6125               .category = &panfrost_perf_config_tmix.categories[0],
6126            }, // counter
6127            {
6128               .name = "Non-fragment job dependency cycles",
6129               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
6130               .symbol_name = "js1_wait_depend",
6131               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6132               .offset = 22,
6133               .category = &panfrost_perf_config_tmix.categories[0],
6134            }, // counter
6135            {
6136               .name = "Non-fragment job finish cycles",
6137               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
6138               .symbol_name = "js1_wait_finish",
6139               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6140               .offset = 23,
6141               .category = &panfrost_perf_config_tmix.categories[0],
6142            }, // counter
6143            {
6144               .name = "Reserved jobs",
6145               .desc = "The number of jobs processed by the GPU reserved queue.",
6146               .symbol_name = "js2_jobs",
6147               .units = PAN_PERF_COUNTER_UNITS_JOBS,
6148               .offset = 24,
6149               .category = &panfrost_perf_config_tmix.categories[0],
6150            }, // counter
6151            {
6152               .name = "Reserved tasks",
6153               .desc = "The number of tasks processed by the GPU reserved queue.",
6154               .symbol_name = "js2_tasks",
6155               .units = PAN_PERF_COUNTER_UNITS_TASKS,
6156               .offset = 25,
6157               .category = &panfrost_perf_config_tmix.categories[0],
6158            }, // counter
6159            {
6160               .name = "Reserved queue active",
6161               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
6162               .symbol_name = "js2_active",
6163               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6164               .offset = 26,
6165               .category = &panfrost_perf_config_tmix.categories[0],
6166            }, // counter
6167            {
6168               .name = "Reserved descriptor read cycles",
6169               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
6170               .symbol_name = "js2_wait_read",
6171               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6172               .offset = 28,
6173               .category = &panfrost_perf_config_tmix.categories[0],
6174            }, // counter
6175            {
6176               .name = "Reserved job issue cycles",
6177               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
6178               .symbol_name = "js2_wait_issue",
6179               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6180               .offset = 29,
6181               .category = &panfrost_perf_config_tmix.categories[0],
6182            }, // counter
6183            {
6184               .name = "Reserved job dependency cycles",
6185               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
6186               .symbol_name = "js2_wait_depend",
6187               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6188               .offset = 30,
6189               .category = &panfrost_perf_config_tmix.categories[0],
6190            }, // counter
6191            {
6192               .name = "Reserved job finish cycles",
6193               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
6194               .symbol_name = "js2_wait_finish",
6195               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6196               .offset = 31,
6197               .category = &panfrost_perf_config_tmix.categories[0],
6198            }, // counter
6199         }, // counters
6200      }, // category
6201      {
6202         .name = "Tiler",
6203         .n_counters = 24,
6204         .counters = {
6205            {
6206               .name = "Tiler active",
6207               .desc = "The number of cycles where the tiler has a workload queued for processing.",
6208               .symbol_name = "tiler_active",
6209               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6210               .offset = 68,
6211               .category = &panfrost_perf_config_tmix.categories[1],
6212            }, // counter
6213            {
6214               .name = "Triangle primitives",
6215               .desc = "The number of input triangle primitives.",
6216               .symbol_name = "triangles",
6217               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6218               .offset = 70,
6219               .category = &panfrost_perf_config_tmix.categories[1],
6220            }, // counter
6221            {
6222               .name = "Line primitives",
6223               .desc = "The number of input line primitives.",
6224               .symbol_name = "lines",
6225               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6226               .offset = 71,
6227               .category = &panfrost_perf_config_tmix.categories[1],
6228            }, // counter
6229            {
6230               .name = "Point primitives",
6231               .desc = "The number of input point primitives.",
6232               .symbol_name = "points",
6233               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6234               .offset = 72,
6235               .category = &panfrost_perf_config_tmix.categories[1],
6236            }, // counter
6237            {
6238               .name = "Front-facing primitives",
6239               .desc = "The number of front-facing triangles that are visible after culling.",
6240               .symbol_name = "front_facing",
6241               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6242               .offset = 73,
6243               .category = &panfrost_perf_config_tmix.categories[1],
6244            }, // counter
6245            {
6246               .name = "Back-facing primitives",
6247               .desc = "The number of back-facing triangles that are visible after culling.",
6248               .symbol_name = "back_facing",
6249               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6250               .offset = 74,
6251               .category = &panfrost_perf_config_tmix.categories[1],
6252            }, // counter
6253            {
6254               .name = "Visible primitives",
6255               .desc = "The number of primitives that are visible after culling.",
6256               .symbol_name = "prim_visible",
6257               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6258               .offset = 75,
6259               .category = &panfrost_perf_config_tmix.categories[1],
6260            }, // counter
6261            {
6262               .name = "Facing and XY plane test culled primitives",
6263               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
6264               .symbol_name = "prim_culled",
6265               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6266               .offset = 76,
6267               .category = &panfrost_perf_config_tmix.categories[1],
6268            }, // counter
6269            {
6270               .name = "Z plane test culled primitives",
6271               .desc = "The number of primitives that are culled by frustum Z plane tests.",
6272               .symbol_name = "prim_clipped",
6273               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6274               .offset = 77,
6275               .category = &panfrost_perf_config_tmix.categories[1],
6276            }, // counter
6277            {
6278               .name = "Sample test culled primitives",
6279               .desc = "The number of primitives culled by the sample coverage test.",
6280               .symbol_name = "prim_sat_culled",
6281               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6282               .offset = 78,
6283               .category = &panfrost_perf_config_tmix.categories[1],
6284            }, // counter
6285            {
6286               .name = "Read beats",
6287               .desc = "The number of internal bus data read cycles made by the tiler.",
6288               .symbol_name = "bus_read",
6289               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6290               .offset = 81,
6291               .category = &panfrost_perf_config_tmix.categories[1],
6292            }, // counter
6293            {
6294               .name = "Write beats",
6295               .desc = "The number of internal bus data write cycles made by the tiler.",
6296               .symbol_name = "bus_write",
6297               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6298               .offset = 83,
6299               .category = &panfrost_perf_config_tmix.categories[1],
6300            }, // counter
6301            {
6302               .name = "Position shading requests",
6303               .desc = "The number of position shading requests in the IDVS flow.",
6304               .symbol_name = "idvs_pos_shad_req",
6305               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6306               .offset = 85,
6307               .category = &panfrost_perf_config_tmix.categories[1],
6308            }, // counter
6309            {
6310               .name = "Position shading stall cycles",
6311               .desc = "The number of cycles where the tiler has a stalled position shading request.",
6312               .symbol_name = "idvs_pos_shad_stall",
6313               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6314               .offset = 87,
6315               .category = &panfrost_perf_config_tmix.categories[1],
6316            }, // counter
6317            {
6318               .name = "Position FIFO full cycles",
6319               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
6320               .symbol_name = "idvs_pos_fifo_full",
6321               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6322               .offset = 88,
6323               .category = &panfrost_perf_config_tmix.categories[1],
6324            }, // counter
6325            {
6326               .name = "Position cache hits",
6327               .desc = "The number of position lookups that result in a hit in the vertex cache.",
6328               .symbol_name = "vcache_hit",
6329               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6330               .offset = 90,
6331               .category = &panfrost_perf_config_tmix.categories[1],
6332            }, // counter
6333            {
6334               .name = "Position cache misses",
6335               .desc = "The number of position lookups that miss in the vertex cache.",
6336               .symbol_name = "vcache_miss",
6337               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6338               .offset = 91,
6339               .category = &panfrost_perf_config_tmix.categories[1],
6340            }, // counter
6341            {
6342               .name = "Primitive assembly busy stall cycles",
6343               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
6344               .symbol_name = "vfetch_stall",
6345               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6346               .offset = 95,
6347               .category = &panfrost_perf_config_tmix.categories[1],
6348            }, // counter
6349            {
6350               .name = "Varying cache hits",
6351               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
6352               .symbol_name = "idvs_vbu_hit",
6353               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6354               .offset = 98,
6355               .category = &panfrost_perf_config_tmix.categories[1],
6356            }, // counter
6357            {
6358               .name = "Varying cache misses",
6359               .desc = "The number of varying lookups that miss in the vertex cache.",
6360               .symbol_name = "idvs_vbu_miss",
6361               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6362               .offset = 99,
6363               .category = &panfrost_perf_config_tmix.categories[1],
6364            }, // counter
6365            {
6366               .name = "Varying shading requests",
6367               .desc = "The number of varying shading requests in the IDVS flow.",
6368               .symbol_name = "idvs_var_shad_req",
6369               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6370               .offset = 101,
6371               .category = &panfrost_perf_config_tmix.categories[1],
6372            }, // counter
6373            {
6374               .name = "Varying shading stall cycles",
6375               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
6376               .symbol_name = "idvs_var_shad_stall",
6377               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6378               .offset = 102,
6379               .category = &panfrost_perf_config_tmix.categories[1],
6380            }, // counter
6381            {
6382               .name = "Write buffer transaction stall cycles",
6383               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
6384               .symbol_name = "wrbuf_no_axi_id_stall",
6385               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6386               .offset = 118,
6387               .category = &panfrost_perf_config_tmix.categories[1],
6388            }, // counter
6389            {
6390               .name = "Write buffer write stall cycles",
6391               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
6392               .symbol_name = "wrbuf_axi_stall",
6393               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6394               .offset = 119,
6395               .category = &panfrost_perf_config_tmix.categories[1],
6396            }, // counter
6397         }, // counters
6398      }, // category
6399      {
6400         .name = "Shader Core",
6401         .n_counters = 57,
6402         .counters = {
6403            {
6404               .name = "Fragment active",
6405               .desc = "The number of cycles where the shader core is processing a fragment workload.",
6406               .symbol_name = "frag_active",
6407               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6408               .offset = 196,
6409               .category = &panfrost_perf_config_tmix.categories[2],
6410            }, // counter
6411            {
6412               .name = "Read primitives",
6413               .desc = "The number of primitives read from the tile list by the fragment front-end.",
6414               .symbol_name = "frag_primitives",
6415               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6416               .offset = 197,
6417               .category = &panfrost_perf_config_tmix.categories[2],
6418            }, // counter
6419            {
6420               .name = "Rasterized primitives",
6421               .desc = "The number of primitives being rasterized.",
6422               .symbol_name = "frag_prim_rast",
6423               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
6424               .offset = 198,
6425               .category = &panfrost_perf_config_tmix.categories[2],
6426            }, // counter
6427            {
6428               .name = "Fragment FPKB active",
6429               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
6430               .symbol_name = "frag_fpk_active",
6431               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6432               .offset = 199,
6433               .category = &panfrost_perf_config_tmix.categories[2],
6434            }, // counter
6435            {
6436               .name = "Fragment warps",
6437               .desc = "The number of fragment warps created.",
6438               .symbol_name = "frag_warps",
6439               .units = PAN_PERF_COUNTER_UNITS_WARPS,
6440               .offset = 201,
6441               .category = &panfrost_perf_config_tmix.categories[2],
6442            }, // counter
6443            {
6444               .name = "Partial fragment warps",
6445               .desc = "The number of fragment warps containing helper threads that do not correspond to a hit sample point.",
6446               .symbol_name = "frag_partial_warps",
6447               .units = PAN_PERF_COUNTER_UNITS_WARPS,
6448               .offset = 202,
6449               .category = &panfrost_perf_config_tmix.categories[2],
6450            }, // counter
6451            {
6452               .name = "Rasterized quads",
6453               .desc = "The number of quads generated by the rasterization phase.",
6454               .symbol_name = "frag_quads_rast",
6455               .units = PAN_PERF_COUNTER_UNITS_QUADS,
6456               .offset = 203,
6457               .category = &panfrost_perf_config_tmix.categories[2],
6458            }, // counter
6459            {
6460               .name = "Early ZS tested quads",
6461               .desc = "The number of quads that are undergoing early depth and stencil testing.",
6462               .symbol_name = "frag_quads_ezs_test",
6463               .units = PAN_PERF_COUNTER_UNITS_QUADS,
6464               .offset = 204,
6465               .category = &panfrost_perf_config_tmix.categories[2],
6466            }, // counter
6467            {
6468               .name = "Early ZS updated quads",
6469               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
6470               .symbol_name = "frag_quads_ezs_update",
6471               .units = PAN_PERF_COUNTER_UNITS_QUADS,
6472               .offset = 205,
6473               .category = &panfrost_perf_config_tmix.categories[2],
6474            }, // counter
6475            {
6476               .name = "Early ZS killed quads",
6477               .desc = "The number of quads killed by early depth and stencil testing.",
6478               .symbol_name = "frag_quads_ezs_kill",
6479               .units = PAN_PERF_COUNTER_UNITS_QUADS,
6480               .offset = 206,
6481               .category = &panfrost_perf_config_tmix.categories[2],
6482            }, // counter
6483            {
6484               .name = "Late ZS tested quads",
6485               .desc = "The number of quads undergoing late depth and stencil testing.",
6486               .symbol_name = "frag_lzs_test",
6487               .units = PAN_PERF_COUNTER_UNITS_QUADS,
6488               .offset = 207,
6489               .category = &panfrost_perf_config_tmix.categories[2],
6490            }, // counter
6491            {
6492               .name = "Late ZS killed quads",
6493               .desc = "The number of quads killed by late depth and stencil testing.",
6494               .symbol_name = "frag_lzs_kill",
6495               .units = PAN_PERF_COUNTER_UNITS_QUADS,
6496               .offset = 208,
6497               .category = &panfrost_perf_config_tmix.categories[2],
6498            }, // counter
6499            {
6500               .name = "Tiles",
6501               .desc = "The number of tiles processed by the shader core.",
6502               .symbol_name = "frag_ptiles",
6503               .units = PAN_PERF_COUNTER_UNITS_TILES,
6504               .offset = 210,
6505               .category = &panfrost_perf_config_tmix.categories[2],
6506            }, // counter
6507            {
6508               .name = "Constant tiles killed",
6509               .desc = "The number of tiles killed by transaction elimination.",
6510               .symbol_name = "frag_trans_elim",
6511               .units = PAN_PERF_COUNTER_UNITS_TILES,
6512               .offset = 211,
6513               .category = &panfrost_perf_config_tmix.categories[2],
6514            }, // counter
6515            {
6516               .name = "FPK occluder quads",
6517               .desc = "The number of quads that are valid occluders for hidden surface removal.",
6518               .symbol_name = "quad_fpk_killer",
6519               .units = PAN_PERF_COUNTER_UNITS_QUADS,
6520               .offset = 212,
6521               .category = &panfrost_perf_config_tmix.categories[2],
6522            }, // counter
6523            {
6524               .name = "Non-fragment active",
6525               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
6526               .symbol_name = "compute_active",
6527               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6528               .offset = 214,
6529               .category = &panfrost_perf_config_tmix.categories[2],
6530            }, // counter
6531            {
6532               .name = "Non-fragment tasks",
6533               .desc = "The number of non-fragment tasks issued to the shader core.",
6534               .symbol_name = "compute_tasks",
6535               .units = PAN_PERF_COUNTER_UNITS_TASKS,
6536               .offset = 215,
6537               .category = &panfrost_perf_config_tmix.categories[2],
6538            }, // counter
6539            {
6540               .name = "Non-fragment warps",
6541               .desc = "The number of non-fragment warps created.",
6542               .symbol_name = "compute_warps",
6543               .units = PAN_PERF_COUNTER_UNITS_WARPS,
6544               .offset = 216,
6545               .category = &panfrost_perf_config_tmix.categories[2],
6546            }, // counter
6547            {
6548               .name = "Non-fragment starvation cycles",
6549               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
6550               .symbol_name = "compute_starving",
6551               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6552               .offset = 217,
6553               .category = &panfrost_perf_config_tmix.categories[2],
6554            }, // counter
6555            {
6556               .name = "Execution core active",
6557               .desc = "The number of cycles where the shader core is processing at least one warp.",
6558               .symbol_name = "exec_core_active",
6559               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6560               .offset = 218,
6561               .category = &panfrost_perf_config_tmix.categories[2],
6562            }, // counter
6563            {
6564               .name = "Execution engine active",
6565               .desc = "The number of cycles where the execution engine unit is processing at least one thread.",
6566               .symbol_name = "exec_active",
6567               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6568               .offset = 219,
6569               .category = &panfrost_perf_config_tmix.categories[2],
6570            }, // counter
6571            {
6572               .name = "Executed instructions",
6573               .desc = "The number of instructions executed per warp.",
6574               .symbol_name = "exec_instr_count",
6575               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6576               .offset = 220,
6577               .category = &panfrost_perf_config_tmix.categories[2],
6578            }, // counter
6579            {
6580               .name = "Diverged instructions",
6581               .desc = "The number of instructions executed per warp, that have control flow divergence.",
6582               .symbol_name = "exec_instr_diverged",
6583               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6584               .offset = 221,
6585               .category = &panfrost_perf_config_tmix.categories[2],
6586            }, // counter
6587            {
6588               .name = "Execution engine starvation cycles",
6589               .desc = "The number of cycles where no new threads are available for execution.",
6590               .symbol_name = "exec_instr_starving",
6591               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6592               .offset = 222,
6593               .category = &panfrost_perf_config_tmix.categories[2],
6594            }, // counter
6595            {
6596               .name = "Arithmetic instructions",
6597               .desc = "The number of instructions where the workload is a single FMA pipe arithmetic operation.",
6598               .symbol_name = "arith_instr_single_fma",
6599               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6600               .offset = 223,
6601               .category = &panfrost_perf_config_tmix.categories[2],
6602            }, // counter
6603            {
6604               .name = "Dual Arithmetic instructions",
6605               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe arithmetic operation.",
6606               .symbol_name = "arith_instr_double",
6607               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6608               .offset = 224,
6609               .category = &panfrost_perf_config_tmix.categories[2],
6610            }, // counter
6611            {
6612               .name = "Arithmetic + Message instructions",
6613               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe message operation",
6614               .symbol_name = "arith_instr_msg",
6615               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6616               .offset = 225,
6617               .category = &panfrost_perf_config_tmix.categories[2],
6618            }, // counter
6619            {
6620               .name = "Message instructions",
6621               .desc = "The number of instructions where the workload is a single ADD pipe message operation, with no FMA pipe operation",
6622               .symbol_name = "arith_instr_msg_only",
6623               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6624               .offset = 226,
6625               .category = &panfrost_perf_config_tmix.categories[2],
6626            }, // counter
6627            {
6628               .name = "Texture requests",
6629               .desc = "The number of thread-width texture operations processed.",
6630               .symbol_name = "tex_instr",
6631               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6632               .offset = 227,
6633               .category = &panfrost_perf_config_tmix.categories[2],
6634            }, // counter
6635            {
6636               .name = "Mipmapped texture request",
6637               .desc = "The number of texture operations that act on a mipmapped texture.",
6638               .symbol_name = "tex_instr_mipmap",
6639               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6640               .offset = 228,
6641               .category = &panfrost_perf_config_tmix.categories[2],
6642            }, // counter
6643            {
6644               .name = "Compressed texture requests",
6645               .desc = "The number of texture operations acting on a compressed texture.",
6646               .symbol_name = "tex_instr_compressed",
6647               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6648               .offset = 229,
6649               .category = &panfrost_perf_config_tmix.categories[2],
6650            }, // counter
6651            {
6652               .name = "3D texture requests",
6653               .desc = "The number of texture operations acting on a 3D texture.",
6654               .symbol_name = "tex_instr_3d",
6655               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6656               .offset = 230,
6657               .category = &panfrost_perf_config_tmix.categories[2],
6658            }, // counter
6659            {
6660               .name = "Trilinear filtered requests",
6661               .desc = "The number of texture operations using a trilinear texture filter.",
6662               .symbol_name = "tex_instr_trilinear",
6663               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6664               .offset = 231,
6665               .category = &panfrost_perf_config_tmix.categories[2],
6666            }, // counter
6667            {
6668               .name = "Texturing active",
6669               .desc = "The number of texture filtering issue cycles.",
6670               .symbol_name = "tex_coord_issue",
6671               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6672               .offset = 232,
6673               .category = &panfrost_perf_config_tmix.categories[2],
6674            }, // counter
6675            {
6676               .name = "Coordinate stall cycles",
6677               .desc = "The number of clock cycles where threads are stalled at the texel coordinate calculation stage.",
6678               .symbol_name = "tex_coord_stall",
6679               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6680               .offset = 233,
6681               .category = &panfrost_perf_config_tmix.categories[2],
6682            }, // counter
6683            {
6684               .name = "Line fill stall cycles",
6685               .desc = "The number of clock cycles where at least one thread is waiting for data from the texture cache, but no lookup is completed.",
6686               .symbol_name = "tex_starve_cache",
6687               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6688               .offset = 234,
6689               .category = &panfrost_perf_config_tmix.categories[2],
6690            }, // counter
6691            {
6692               .name = "Partial data stall cycles",
6693               .desc = "The number of clock cycles where at least one thread fetched some data from the texture cache, but no filtering operation is started.",
6694               .symbol_name = "tex_starve_filter",
6695               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6696               .offset = 235,
6697               .category = &panfrost_perf_config_tmix.categories[2],
6698            }, // counter
6699            {
6700               .name = "Full read cycles",
6701               .desc = "The number of full-width load/store cache reads.",
6702               .symbol_name = "ls_mem_read_full",
6703               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6704               .offset = 236,
6705               .category = &panfrost_perf_config_tmix.categories[2],
6706            }, // counter
6707            {
6708               .name = "Partial read cycles",
6709               .desc = "The number of partial-width load/store cache reads.",
6710               .symbol_name = "ls_mem_read_short",
6711               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6712               .offset = 237,
6713               .category = &panfrost_perf_config_tmix.categories[2],
6714            }, // counter
6715            {
6716               .name = "Full write cycles",
6717               .desc = "The number of full-width load/store cache writes.",
6718               .symbol_name = "ls_mem_write_full",
6719               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6720               .offset = 238,
6721               .category = &panfrost_perf_config_tmix.categories[2],
6722            }, // counter
6723            {
6724               .name = "Partial write cycles",
6725               .desc = "The number of partial-width load/store cache writes.",
6726               .symbol_name = "ls_mem_write_short",
6727               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6728               .offset = 239,
6729               .category = &panfrost_perf_config_tmix.categories[2],
6730            }, // counter
6731            {
6732               .name = "Atomic access cycles",
6733               .desc = "The number of load/store atomic accesses.",
6734               .symbol_name = "ls_mem_atomic",
6735               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6736               .offset = 240,
6737               .category = &panfrost_perf_config_tmix.categories[2],
6738            }, // counter
6739            {
6740               .name = "Interpolation requests",
6741               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
6742               .symbol_name = "vary_instr",
6743               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6744               .offset = 241,
6745               .category = &panfrost_perf_config_tmix.categories[2],
6746            }, // counter
6747            {
6748               .name = "32-bit interpolation active",
6749               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
6750               .symbol_name = "vary_slot_32",
6751               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6752               .offset = 242,
6753               .category = &panfrost_perf_config_tmix.categories[2],
6754            }, // counter
6755            {
6756               .name = "16-bit interpolation active",
6757               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
6758               .symbol_name = "vary_slot_16",
6759               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6760               .offset = 243,
6761               .category = &panfrost_perf_config_tmix.categories[2],
6762            }, // counter
6763            {
6764               .name = "Attribute requests",
6765               .desc = "The number of instructions executed by the attribute unit.",
6766               .symbol_name = "attr_instr",
6767               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6768               .offset = 244,
6769               .category = &panfrost_perf_config_tmix.categories[2],
6770            }, // counter
6771            {
6772               .name = "Multiplier instructions",
6773               .desc = "The number of instructions where the workload uses floating-point multiplier hardware.",
6774               .symbol_name = "arith_instr_fp_mul",
6775               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
6776               .offset = 245,
6777               .category = &panfrost_perf_config_tmix.categories[2],
6778            }, // counter
6779            {
6780               .name = "Fragment L2 read beats",
6781               .desc = "The number of read beats received by the fixed-function fragment front-end.",
6782               .symbol_name = "beats_rd_ftc",
6783               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6784               .offset = 246,
6785               .category = &panfrost_perf_config_tmix.categories[2],
6786            }, // counter
6787            {
6788               .name = "Fragment external read beats",
6789               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
6790               .symbol_name = "beats_rd_ftc_ext",
6791               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6792               .offset = 247,
6793               .category = &panfrost_perf_config_tmix.categories[2],
6794            }, // counter
6795            {
6796               .name = "Load/store L2 read beats",
6797               .desc = "The number of read beats received by the load/store unit.",
6798               .symbol_name = "beats_rd_lsc",
6799               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6800               .offset = 248,
6801               .category = &panfrost_perf_config_tmix.categories[2],
6802            }, // counter
6803            {
6804               .name = "Load/store external read beats",
6805               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
6806               .symbol_name = "beats_rd_lsc_ext",
6807               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6808               .offset = 249,
6809               .category = &panfrost_perf_config_tmix.categories[2],
6810            }, // counter
6811            {
6812               .name = "Texture L2 read beats",
6813               .desc = "The number of read beats received by the texture unit.",
6814               .symbol_name = "beats_rd_tex",
6815               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6816               .offset = 250,
6817               .category = &panfrost_perf_config_tmix.categories[2],
6818            }, // counter
6819            {
6820               .name = "Texture external read beats",
6821               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
6822               .symbol_name = "beats_rd_tex_ext",
6823               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6824               .offset = 251,
6825               .category = &panfrost_perf_config_tmix.categories[2],
6826            }, // counter
6827            {
6828               .name = "Other L2 read beats",
6829               .desc = "The number of read beats received by a unit that is not specifically identified.",
6830               .symbol_name = "beats_rd_other",
6831               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6832               .offset = 252,
6833               .category = &panfrost_perf_config_tmix.categories[2],
6834            }, // counter
6835            {
6836               .name = "Load/store write beats",
6837               .desc = "The number of write beats sent by the load/store unit.",
6838               .symbol_name = "beats_wr_lsc",
6839               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6840               .offset = 253,
6841               .category = &panfrost_perf_config_tmix.categories[2],
6842            }, // counter
6843            {
6844               .name = "Tile buffer write beats",
6845               .desc = "The number of write beats sent by the tile buffer writeback unit.",
6846               .symbol_name = "beats_wr_tib",
6847               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6848               .offset = 254,
6849               .category = &panfrost_perf_config_tmix.categories[2],
6850            }, // counter
6851            {
6852               .name = "Other write beats",
6853               .desc = "The number of write beats sent by any unit that is not specifically identified.",
6854               .symbol_name = "beats_wr_other",
6855               .units = PAN_PERF_COUNTER_UNITS_BEATS,
6856               .offset = 255,
6857               .category = &panfrost_perf_config_tmix.categories[2],
6858            }, // counter
6859         }, // counters
6860      }, // category
6861      {
6862         .name = "Memory System",
6863         .n_counters = 39,
6864         .counters = {
6865            {
6866               .name = "MMU lookups",
6867               .desc = "The number of main MMU address translations performed.",
6868               .symbol_name = "mmu_requests",
6869               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6870               .offset = 132,
6871               .category = &panfrost_perf_config_tmix.categories[3],
6872            }, // counter
6873            {
6874               .name = "Read requests",
6875               .desc = "The number of L2 cache read requests from internal masters.",
6876               .symbol_name = "l2_rd_msg_in",
6877               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6878               .offset = 144,
6879               .category = &panfrost_perf_config_tmix.categories[3],
6880            }, // counter
6881            {
6882               .name = "Read stall cycles",
6883               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
6884               .symbol_name = "l2_rd_msg_in_stall",
6885               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6886               .offset = 145,
6887               .category = &panfrost_perf_config_tmix.categories[3],
6888            }, // counter
6889            {
6890               .name = "Write requests",
6891               .desc = "The number of L2 cache write requests from internal masters.",
6892               .symbol_name = "l2_wr_msg_in",
6893               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6894               .offset = 146,
6895               .category = &panfrost_perf_config_tmix.categories[3],
6896            }, // counter
6897            {
6898               .name = "Write stall cycles",
6899               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
6900               .symbol_name = "l2_wr_msg_in_stall",
6901               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6902               .offset = 147,
6903               .category = &panfrost_perf_config_tmix.categories[3],
6904            }, // counter
6905            {
6906               .name = "Snoop requests",
6907               .desc = "The number of L2 snoop requests from internal masters.",
6908               .symbol_name = "l2_snp_msg_in",
6909               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6910               .offset = 148,
6911               .category = &panfrost_perf_config_tmix.categories[3],
6912            }, // counter
6913            {
6914               .name = "Snoop stall cycles",
6915               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
6916               .symbol_name = "l2_snp_msg_in_stall",
6917               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6918               .offset = 149,
6919               .category = &panfrost_perf_config_tmix.categories[3],
6920            }, // counter
6921            {
6922               .name = "L1 read requests",
6923               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
6924               .symbol_name = "l2_rd_msg_out",
6925               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6926               .offset = 150,
6927               .category = &panfrost_perf_config_tmix.categories[3],
6928            }, // counter
6929            {
6930               .name = "L1 read stall cycles",
6931               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
6932               .symbol_name = "l2_rd_msg_out_stall",
6933               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
6934               .offset = 151,
6935               .category = &panfrost_perf_config_tmix.categories[3],
6936            }, // counter
6937            {
6938               .name = "L1 write requests",
6939               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
6940               .symbol_name = "l2_wr_msg_out",
6941               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6942               .offset = 152,
6943               .category = &panfrost_perf_config_tmix.categories[3],
6944            }, // counter
6945            {
6946               .name = "Any lookup",
6947               .desc = "The number of L2 cache lookups performed.",
6948               .symbol_name = "l2_any_lookup",
6949               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6950               .offset = 153,
6951               .category = &panfrost_perf_config_tmix.categories[3],
6952            }, // counter
6953            {
6954               .name = "Read lookup",
6955               .desc = "The number of L2 cache read lookups performed.",
6956               .symbol_name = "l2_read_lookup",
6957               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6958               .offset = 154,
6959               .category = &panfrost_perf_config_tmix.categories[3],
6960            }, // counter
6961            {
6962               .name = "Write lookup",
6963               .desc = "The number of L2 cache write lookups performed.",
6964               .symbol_name = "l2_write_lookup",
6965               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6966               .offset = 155,
6967               .category = &panfrost_perf_config_tmix.categories[3],
6968            }, // counter
6969            {
6970               .name = "External snoop lookups",
6971               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
6972               .symbol_name = "l2_ext_snoop_lookup",
6973               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
6974               .offset = 156,
6975               .category = &panfrost_perf_config_tmix.categories[3],
6976            }, // counter
6977            {
6978               .name = "Read transaction",
6979               .desc = "The number of external read transactions.",
6980               .symbol_name = "l2_ext_read",
6981               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
6982               .offset = 157,
6983               .category = &panfrost_perf_config_tmix.categories[3],
6984            }, // counter
6985            {
6986               .name = "ReadNoSnoop transactions",
6987               .desc = "The number of external non-coherent read transactions.",
6988               .symbol_name = "l2_ext_read_nosnp",
6989               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
6990               .offset = 158,
6991               .category = &panfrost_perf_config_tmix.categories[3],
6992            }, // counter
6993            {
6994               .name = "ReadUnique transactions",
6995               .desc = "The number of external coherent read unique transactions.",
6996               .symbol_name = "l2_ext_read_unique",
6997               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
6998               .offset = 159,
6999               .category = &panfrost_perf_config_tmix.categories[3],
7000            }, // counter
7001            {
7002               .name = "Read beat",
7003               .desc = "The number of external bus data read cycles.",
7004               .symbol_name = "l2_ext_read_beats",
7005               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7006               .offset = 160,
7007               .category = &panfrost_perf_config_tmix.categories[3],
7008            }, // counter
7009            {
7010               .name = "Read stall cycles",
7011               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
7012               .symbol_name = "l2_ext_ar_stall",
7013               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7014               .offset = 161,
7015               .category = &panfrost_perf_config_tmix.categories[3],
7016            }, // counter
7017            {
7018               .name = "0-25% outstanding",
7019               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
7020               .symbol_name = "l2_ext_ar_cnt_q1",
7021               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7022               .offset = 162,
7023               .category = &panfrost_perf_config_tmix.categories[3],
7024            }, // counter
7025            {
7026               .name = "25-50% outstanding",
7027               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
7028               .symbol_name = "l2_ext_ar_cnt_q2",
7029               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7030               .offset = 163,
7031               .category = &panfrost_perf_config_tmix.categories[3],
7032            }, // counter
7033            {
7034               .name = "50-75% outstanding",
7035               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
7036               .symbol_name = "l2_ext_ar_cnt_q3",
7037               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7038               .offset = 164,
7039               .category = &panfrost_perf_config_tmix.categories[3],
7040            }, // counter
7041            {
7042               .name = "0-127 cycles",
7043               .desc = "The number of data beats returned 0-127 cycles after the read request.",
7044               .symbol_name = "l2_ext_rresp_0_127",
7045               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7046               .offset = 165,
7047               .category = &panfrost_perf_config_tmix.categories[3],
7048            }, // counter
7049            {
7050               .name = "128-191 cycles",
7051               .desc = "The number of data beats returned 128-191 cycles after the read request.",
7052               .symbol_name = "l2_ext_rresp_128_191",
7053               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7054               .offset = 166,
7055               .category = &panfrost_perf_config_tmix.categories[3],
7056            }, // counter
7057            {
7058               .name = "192-255 cycles",
7059               .desc = "The number of data beats returned 192-255 cycles after the read request.",
7060               .symbol_name = "l2_ext_rresp_192_255",
7061               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7062               .offset = 167,
7063               .category = &panfrost_perf_config_tmix.categories[3],
7064            }, // counter
7065            {
7066               .name = "256-319 cycles",
7067               .desc = "The number of data beats returned 256-319 cycles after the read request.",
7068               .symbol_name = "l2_ext_rresp_256_319",
7069               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7070               .offset = 168,
7071               .category = &panfrost_perf_config_tmix.categories[3],
7072            }, // counter
7073            {
7074               .name = "320-383 cycles",
7075               .desc = "The number of data beats returned 320-383 cycles after the read request.",
7076               .symbol_name = "l2_ext_rresp_320_383",
7077               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7078               .offset = 169,
7079               .category = &panfrost_perf_config_tmix.categories[3],
7080            }, // counter
7081            {
7082               .name = "Write transaction",
7083               .desc = "The number of external write transactions.",
7084               .symbol_name = "l2_ext_write",
7085               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7086               .offset = 170,
7087               .category = &panfrost_perf_config_tmix.categories[3],
7088            }, // counter
7089            {
7090               .name = "WriteNoSnoopFull transactions",
7091               .desc = "The number of external non-coherent full write transactions.",
7092               .symbol_name = "l2_ext_write_nosnp_full",
7093               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7094               .offset = 171,
7095               .category = &panfrost_perf_config_tmix.categories[3],
7096            }, // counter
7097            {
7098               .name = "WriteNoSnoopPartial transactions",
7099               .desc = "The number of external non-coherent partial write transactions.",
7100               .symbol_name = "l2_ext_write_nosnp_ptl",
7101               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7102               .offset = 172,
7103               .category = &panfrost_perf_config_tmix.categories[3],
7104            }, // counter
7105            {
7106               .name = "WriteSnoopFull transactions",
7107               .desc = "The number of external coherent full write transactions.",
7108               .symbol_name = "l2_ext_write_snp_full",
7109               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7110               .offset = 173,
7111               .category = &panfrost_perf_config_tmix.categories[3],
7112            }, // counter
7113            {
7114               .name = "WriteSnoopPartial transactions",
7115               .desc = "The number of external coherent partial write transactions.",
7116               .symbol_name = "l2_ext_write_snp_ptl",
7117               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7118               .offset = 174,
7119               .category = &panfrost_perf_config_tmix.categories[3],
7120            }, // counter
7121            {
7122               .name = "Write beat",
7123               .desc = "The number of external bus data write cycles.",
7124               .symbol_name = "l2_ext_write_beats",
7125               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7126               .offset = 175,
7127               .category = &panfrost_perf_config_tmix.categories[3],
7128            }, // counter
7129            {
7130               .name = "Write stall cycles",
7131               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
7132               .symbol_name = "l2_ext_w_stall",
7133               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7134               .offset = 176,
7135               .category = &panfrost_perf_config_tmix.categories[3],
7136            }, // counter
7137            {
7138               .name = "0-25% outstanding",
7139               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
7140               .symbol_name = "l2_ext_aw_cnt_q1",
7141               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7142               .offset = 177,
7143               .category = &panfrost_perf_config_tmix.categories[3],
7144            }, // counter
7145            {
7146               .name = "25-50% outstanding",
7147               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
7148               .symbol_name = "l2_ext_aw_cnt_q2",
7149               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7150               .offset = 178,
7151               .category = &panfrost_perf_config_tmix.categories[3],
7152            }, // counter
7153            {
7154               .name = "50-75% outstanding",
7155               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
7156               .symbol_name = "l2_ext_aw_cnt_q3",
7157               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7158               .offset = 179,
7159               .category = &panfrost_perf_config_tmix.categories[3],
7160            }, // counter
7161            {
7162               .name = "Snoop transactions",
7163               .desc = "The number of coherency snoops triggered by external masters.",
7164               .symbol_name = "l2_ext_snoop",
7165               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
7166               .offset = 180,
7167               .category = &panfrost_perf_config_tmix.categories[3],
7168            }, // counter
7169            {
7170               .name = "Snoop stall cycles",
7171               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
7172               .symbol_name = "l2_ext_snoop_stall",
7173               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7174               .offset = 181,
7175               .category = &panfrost_perf_config_tmix.categories[3],
7176            }, // counter
7177         }, // counters
7178      }, // category
7179   }, // categories
7180}; // panfrost_perf_config_tmix
7181
7182static void UNUSED
7183static_asserts_thex(void)
7184{
7185   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
7186   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
7187   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
7188   STATIC_ASSERT(57 <= PAN_PERF_MAX_COUNTERS);
7189   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
7190}
7191
7192const struct panfrost_perf_config panfrost_perf_config_thex = {
7193   .n_categories = 4,
7194   .categories = {
7195      {
7196         .name = "Job Manager",
7197         .n_counters = 23,
7198         .counters = {
7199            {
7200               .name = "GPU active",
7201               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
7202               .symbol_name = "gpu_active",
7203               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7204               .offset = 6,
7205               .category = &panfrost_perf_config_thex.categories[0],
7206            }, // counter
7207            {
7208               .name = "Interrupt active",
7209               .desc = "The number of cycles where the GPU has a pending interrupt.",
7210               .symbol_name = "irq_active",
7211               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7212               .offset = 7,
7213               .category = &panfrost_perf_config_thex.categories[0],
7214            }, // counter
7215            {
7216               .name = "Fragment jobs",
7217               .desc = "The number of jobs processed by the GPU fragment queue.",
7218               .symbol_name = "js0_jobs",
7219               .units = PAN_PERF_COUNTER_UNITS_JOBS,
7220               .offset = 8,
7221               .category = &panfrost_perf_config_thex.categories[0],
7222            }, // counter
7223            {
7224               .name = "Fragment tasks",
7225               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
7226               .symbol_name = "js0_tasks",
7227               .units = PAN_PERF_COUNTER_UNITS_TASKS,
7228               .offset = 9,
7229               .category = &panfrost_perf_config_thex.categories[0],
7230            }, // counter
7231            {
7232               .name = "Fragment queue active",
7233               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
7234               .symbol_name = "js0_active",
7235               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7236               .offset = 10,
7237               .category = &panfrost_perf_config_thex.categories[0],
7238            }, // counter
7239            {
7240               .name = "Fragment descriptor reads cycles",
7241               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
7242               .symbol_name = "js0_wait_read",
7243               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7244               .offset = 12,
7245               .category = &panfrost_perf_config_thex.categories[0],
7246            }, // counter
7247            {
7248               .name = "Fragment job issue cycles",
7249               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
7250               .symbol_name = "js0_wait_issue",
7251               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7252               .offset = 13,
7253               .category = &panfrost_perf_config_thex.categories[0],
7254            }, // counter
7255            {
7256               .name = "Fragment job dependency cycles",
7257               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
7258               .symbol_name = "js0_wait_depend",
7259               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7260               .offset = 14,
7261               .category = &panfrost_perf_config_thex.categories[0],
7262            }, // counter
7263            {
7264               .name = "Fragment job finish cycles",
7265               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
7266               .symbol_name = "js0_wait_finish",
7267               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7268               .offset = 15,
7269               .category = &panfrost_perf_config_thex.categories[0],
7270            }, // counter
7271            {
7272               .name = "Non-fragment jobs",
7273               .desc = "The number of jobs processed by the GPU non-fragment queue.",
7274               .symbol_name = "js1_jobs",
7275               .units = PAN_PERF_COUNTER_UNITS_JOBS,
7276               .offset = 16,
7277               .category = &panfrost_perf_config_thex.categories[0],
7278            }, // counter
7279            {
7280               .name = "Non-fragment tasks",
7281               .desc = "The number of tasks processed by the GPU non-fragment queue.",
7282               .symbol_name = "js1_tasks",
7283               .units = PAN_PERF_COUNTER_UNITS_TASKS,
7284               .offset = 17,
7285               .category = &panfrost_perf_config_thex.categories[0],
7286            }, // counter
7287            {
7288               .name = "Non-fragment queue active",
7289               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
7290               .symbol_name = "js1_active",
7291               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7292               .offset = 18,
7293               .category = &panfrost_perf_config_thex.categories[0],
7294            }, // counter
7295            {
7296               .name = "Non-fragment descriptor read cycles",
7297               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
7298               .symbol_name = "js1_wait_read",
7299               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7300               .offset = 20,
7301               .category = &panfrost_perf_config_thex.categories[0],
7302            }, // counter
7303            {
7304               .name = "Non-fragment job issue cycles",
7305               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
7306               .symbol_name = "js1_wait_issue",
7307               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7308               .offset = 21,
7309               .category = &panfrost_perf_config_thex.categories[0],
7310            }, // counter
7311            {
7312               .name = "Non-fragment job dependency cycles",
7313               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
7314               .symbol_name = "js1_wait_depend",
7315               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7316               .offset = 22,
7317               .category = &panfrost_perf_config_thex.categories[0],
7318            }, // counter
7319            {
7320               .name = "Non-fragment job finish cycles",
7321               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
7322               .symbol_name = "js1_wait_finish",
7323               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7324               .offset = 23,
7325               .category = &panfrost_perf_config_thex.categories[0],
7326            }, // counter
7327            {
7328               .name = "Reserved jobs",
7329               .desc = "The number of jobs processed by the GPU reserved queue.",
7330               .symbol_name = "js2_jobs",
7331               .units = PAN_PERF_COUNTER_UNITS_JOBS,
7332               .offset = 24,
7333               .category = &panfrost_perf_config_thex.categories[0],
7334            }, // counter
7335            {
7336               .name = "Reserved tasks",
7337               .desc = "The number of tasks processed by the GPU reserved queue.",
7338               .symbol_name = "js2_tasks",
7339               .units = PAN_PERF_COUNTER_UNITS_TASKS,
7340               .offset = 25,
7341               .category = &panfrost_perf_config_thex.categories[0],
7342            }, // counter
7343            {
7344               .name = "Reserved queue active",
7345               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
7346               .symbol_name = "js2_active",
7347               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7348               .offset = 26,
7349               .category = &panfrost_perf_config_thex.categories[0],
7350            }, // counter
7351            {
7352               .name = "Reserved descriptor read cycles",
7353               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
7354               .symbol_name = "js2_wait_read",
7355               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7356               .offset = 28,
7357               .category = &panfrost_perf_config_thex.categories[0],
7358            }, // counter
7359            {
7360               .name = "Reserved job issue cycles",
7361               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
7362               .symbol_name = "js2_wait_issue",
7363               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7364               .offset = 29,
7365               .category = &panfrost_perf_config_thex.categories[0],
7366            }, // counter
7367            {
7368               .name = "Reserved job dependency cycles",
7369               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
7370               .symbol_name = "js2_wait_depend",
7371               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7372               .offset = 30,
7373               .category = &panfrost_perf_config_thex.categories[0],
7374            }, // counter
7375            {
7376               .name = "Reserved job finish cycles",
7377               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
7378               .symbol_name = "js2_wait_finish",
7379               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7380               .offset = 31,
7381               .category = &panfrost_perf_config_thex.categories[0],
7382            }, // counter
7383         }, // counters
7384      }, // category
7385      {
7386         .name = "Tiler",
7387         .n_counters = 24,
7388         .counters = {
7389            {
7390               .name = "Tiler active",
7391               .desc = "The number of cycles where the tiler has a workload queued for processing.",
7392               .symbol_name = "tiler_active",
7393               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7394               .offset = 68,
7395               .category = &panfrost_perf_config_thex.categories[1],
7396            }, // counter
7397            {
7398               .name = "Triangle primitives",
7399               .desc = "The number of input triangle primitives.",
7400               .symbol_name = "triangles",
7401               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7402               .offset = 70,
7403               .category = &panfrost_perf_config_thex.categories[1],
7404            }, // counter
7405            {
7406               .name = "Line primitives",
7407               .desc = "The number of input line primitives.",
7408               .symbol_name = "lines",
7409               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7410               .offset = 71,
7411               .category = &panfrost_perf_config_thex.categories[1],
7412            }, // counter
7413            {
7414               .name = "Point primitives",
7415               .desc = "The number of input point primitives.",
7416               .symbol_name = "points",
7417               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7418               .offset = 72,
7419               .category = &panfrost_perf_config_thex.categories[1],
7420            }, // counter
7421            {
7422               .name = "Front-facing primitives",
7423               .desc = "The number of front-facing triangles that are visible after culling.",
7424               .symbol_name = "front_facing",
7425               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7426               .offset = 73,
7427               .category = &panfrost_perf_config_thex.categories[1],
7428            }, // counter
7429            {
7430               .name = "Back-facing primitives",
7431               .desc = "The number of back-facing triangles that are visible after culling.",
7432               .symbol_name = "back_facing",
7433               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7434               .offset = 74,
7435               .category = &panfrost_perf_config_thex.categories[1],
7436            }, // counter
7437            {
7438               .name = "Visible primitives",
7439               .desc = "The number of primitives that are visible after culling.",
7440               .symbol_name = "prim_visible",
7441               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7442               .offset = 75,
7443               .category = &panfrost_perf_config_thex.categories[1],
7444            }, // counter
7445            {
7446               .name = "Facing and XY plane test culled primitives",
7447               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
7448               .symbol_name = "prim_culled",
7449               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7450               .offset = 76,
7451               .category = &panfrost_perf_config_thex.categories[1],
7452            }, // counter
7453            {
7454               .name = "Z plane test culled primitives",
7455               .desc = "The number of primitives that are culled by frustum Z plane tests.",
7456               .symbol_name = "prim_clipped",
7457               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7458               .offset = 77,
7459               .category = &panfrost_perf_config_thex.categories[1],
7460            }, // counter
7461            {
7462               .name = "Sample test culled primitives",
7463               .desc = "The number of primitives culled by the sample coverage test.",
7464               .symbol_name = "prim_sat_culled",
7465               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7466               .offset = 78,
7467               .category = &panfrost_perf_config_thex.categories[1],
7468            }, // counter
7469            {
7470               .name = "Read beats",
7471               .desc = "The number of internal bus data read cycles made by the tiler.",
7472               .symbol_name = "bus_read",
7473               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7474               .offset = 81,
7475               .category = &panfrost_perf_config_thex.categories[1],
7476            }, // counter
7477            {
7478               .name = "Write beats",
7479               .desc = "The number of internal bus data write cycles made by the tiler.",
7480               .symbol_name = "bus_write",
7481               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7482               .offset = 83,
7483               .category = &panfrost_perf_config_thex.categories[1],
7484            }, // counter
7485            {
7486               .name = "Position shading requests",
7487               .desc = "The number of position shading requests in the IDVS flow.",
7488               .symbol_name = "idvs_pos_shad_req",
7489               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
7490               .offset = 85,
7491               .category = &panfrost_perf_config_thex.categories[1],
7492            }, // counter
7493            {
7494               .name = "Position shading stall cycles",
7495               .desc = "The number of cycles where the tiler has a stalled position shading request.",
7496               .symbol_name = "idvs_pos_shad_stall",
7497               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7498               .offset = 87,
7499               .category = &panfrost_perf_config_thex.categories[1],
7500            }, // counter
7501            {
7502               .name = "Position FIFO full cycles",
7503               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
7504               .symbol_name = "idvs_pos_fifo_full",
7505               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7506               .offset = 88,
7507               .category = &panfrost_perf_config_thex.categories[1],
7508            }, // counter
7509            {
7510               .name = "Position cache hits",
7511               .desc = "The number of position lookups that result in a hit in the vertex cache.",
7512               .symbol_name = "vcache_hit",
7513               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
7514               .offset = 90,
7515               .category = &panfrost_perf_config_thex.categories[1],
7516            }, // counter
7517            {
7518               .name = "Position cache misses",
7519               .desc = "The number of position lookups that miss in the vertex cache.",
7520               .symbol_name = "vcache_miss",
7521               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
7522               .offset = 91,
7523               .category = &panfrost_perf_config_thex.categories[1],
7524            }, // counter
7525            {
7526               .name = "Primitive assembly busy stall cycles",
7527               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
7528               .symbol_name = "vfetch_stall",
7529               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7530               .offset = 95,
7531               .category = &panfrost_perf_config_thex.categories[1],
7532            }, // counter
7533            {
7534               .name = "Varying cache hits",
7535               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
7536               .symbol_name = "idvs_vbu_hit",
7537               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
7538               .offset = 98,
7539               .category = &panfrost_perf_config_thex.categories[1],
7540            }, // counter
7541            {
7542               .name = "Varying cache misses",
7543               .desc = "The number of varying lookups that miss in the vertex cache.",
7544               .symbol_name = "idvs_vbu_miss",
7545               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
7546               .offset = 99,
7547               .category = &panfrost_perf_config_thex.categories[1],
7548            }, // counter
7549            {
7550               .name = "Varying shading requests",
7551               .desc = "The number of varying shading requests in the IDVS flow.",
7552               .symbol_name = "idvs_var_shad_req",
7553               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
7554               .offset = 101,
7555               .category = &panfrost_perf_config_thex.categories[1],
7556            }, // counter
7557            {
7558               .name = "Varying shading stall cycles",
7559               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
7560               .symbol_name = "idvs_var_shad_stall",
7561               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7562               .offset = 102,
7563               .category = &panfrost_perf_config_thex.categories[1],
7564            }, // counter
7565            {
7566               .name = "Write buffer transaction stall cycles",
7567               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
7568               .symbol_name = "wrbuf_no_axi_id_stall",
7569               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7570               .offset = 118,
7571               .category = &panfrost_perf_config_thex.categories[1],
7572            }, // counter
7573            {
7574               .name = "Write buffer write stall cycles",
7575               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
7576               .symbol_name = "wrbuf_axi_stall",
7577               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7578               .offset = 119,
7579               .category = &panfrost_perf_config_thex.categories[1],
7580            }, // counter
7581         }, // counters
7582      }, // category
7583      {
7584         .name = "Shader Core",
7585         .n_counters = 57,
7586         .counters = {
7587            {
7588               .name = "Fragment active",
7589               .desc = "The number of cycles where the shader core is processing a fragment workload.",
7590               .symbol_name = "frag_active",
7591               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7592               .offset = 196,
7593               .category = &panfrost_perf_config_thex.categories[2],
7594            }, // counter
7595            {
7596               .name = "Read primitives",
7597               .desc = "The number of primitives read from the tile list by the fragment front-end.",
7598               .symbol_name = "frag_primitives",
7599               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7600               .offset = 197,
7601               .category = &panfrost_perf_config_thex.categories[2],
7602            }, // counter
7603            {
7604               .name = "Rasterized primitives",
7605               .desc = "The number of primitives being rasterized.",
7606               .symbol_name = "frag_prim_rast",
7607               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
7608               .offset = 198,
7609               .category = &panfrost_perf_config_thex.categories[2],
7610            }, // counter
7611            {
7612               .name = "Fragment FPKB active",
7613               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
7614               .symbol_name = "frag_fpk_active",
7615               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7616               .offset = 199,
7617               .category = &panfrost_perf_config_thex.categories[2],
7618            }, // counter
7619            {
7620               .name = "Fragment warps",
7621               .desc = "The number of fragment warps created.",
7622               .symbol_name = "frag_warps",
7623               .units = PAN_PERF_COUNTER_UNITS_WARPS,
7624               .offset = 201,
7625               .category = &panfrost_perf_config_thex.categories[2],
7626            }, // counter
7627            {
7628               .name = "Partial fragment warps",
7629               .desc = "The number of fragment warps containing helper threads that do not correspond to a hit sample point.",
7630               .symbol_name = "frag_partial_warps",
7631               .units = PAN_PERF_COUNTER_UNITS_WARPS,
7632               .offset = 202,
7633               .category = &panfrost_perf_config_thex.categories[2],
7634            }, // counter
7635            {
7636               .name = "Rasterized quads",
7637               .desc = "The number of quads generated by the rasterization phase.",
7638               .symbol_name = "frag_quads_rast",
7639               .units = PAN_PERF_COUNTER_UNITS_QUADS,
7640               .offset = 203,
7641               .category = &panfrost_perf_config_thex.categories[2],
7642            }, // counter
7643            {
7644               .name = "Early ZS tested quads",
7645               .desc = "The number of quads that are undergoing early depth and stencil testing.",
7646               .symbol_name = "frag_quads_ezs_test",
7647               .units = PAN_PERF_COUNTER_UNITS_QUADS,
7648               .offset = 204,
7649               .category = &panfrost_perf_config_thex.categories[2],
7650            }, // counter
7651            {
7652               .name = "Early ZS updated quads",
7653               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
7654               .symbol_name = "frag_quads_ezs_update",
7655               .units = PAN_PERF_COUNTER_UNITS_QUADS,
7656               .offset = 205,
7657               .category = &panfrost_perf_config_thex.categories[2],
7658            }, // counter
7659            {
7660               .name = "Early ZS killed quads",
7661               .desc = "The number of quads killed by early depth and stencil testing.",
7662               .symbol_name = "frag_quads_ezs_kill",
7663               .units = PAN_PERF_COUNTER_UNITS_QUADS,
7664               .offset = 206,
7665               .category = &panfrost_perf_config_thex.categories[2],
7666            }, // counter
7667            {
7668               .name = "Late ZS tested quads",
7669               .desc = "The number of quads undergoing late depth and stencil testing.",
7670               .symbol_name = "frag_lzs_test",
7671               .units = PAN_PERF_COUNTER_UNITS_QUADS,
7672               .offset = 207,
7673               .category = &panfrost_perf_config_thex.categories[2],
7674            }, // counter
7675            {
7676               .name = "Late ZS killed quads",
7677               .desc = "The number of quads killed by late depth and stencil testing.",
7678               .symbol_name = "frag_lzs_kill",
7679               .units = PAN_PERF_COUNTER_UNITS_QUADS,
7680               .offset = 208,
7681               .category = &panfrost_perf_config_thex.categories[2],
7682            }, // counter
7683            {
7684               .name = "Tiles",
7685               .desc = "The number of tiles processed by the shader core.",
7686               .symbol_name = "frag_ptiles",
7687               .units = PAN_PERF_COUNTER_UNITS_TILES,
7688               .offset = 210,
7689               .category = &panfrost_perf_config_thex.categories[2],
7690            }, // counter
7691            {
7692               .name = "Constant tiles killed",
7693               .desc = "The number of tiles killed by transaction elimination.",
7694               .symbol_name = "frag_trans_elim",
7695               .units = PAN_PERF_COUNTER_UNITS_TILES,
7696               .offset = 211,
7697               .category = &panfrost_perf_config_thex.categories[2],
7698            }, // counter
7699            {
7700               .name = "FPK occluder quads",
7701               .desc = "The number of quads that are valid occluders for hidden surface removal.",
7702               .symbol_name = "quad_fpk_killer",
7703               .units = PAN_PERF_COUNTER_UNITS_QUADS,
7704               .offset = 212,
7705               .category = &panfrost_perf_config_thex.categories[2],
7706            }, // counter
7707            {
7708               .name = "Non-fragment active",
7709               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
7710               .symbol_name = "compute_active",
7711               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7712               .offset = 214,
7713               .category = &panfrost_perf_config_thex.categories[2],
7714            }, // counter
7715            {
7716               .name = "Non-fragment tasks",
7717               .desc = "The number of non-fragment tasks issued to the shader core.",
7718               .symbol_name = "compute_tasks",
7719               .units = PAN_PERF_COUNTER_UNITS_TASKS,
7720               .offset = 215,
7721               .category = &panfrost_perf_config_thex.categories[2],
7722            }, // counter
7723            {
7724               .name = "Non-fragment warps",
7725               .desc = "The number of non-fragment warps created.",
7726               .symbol_name = "compute_warps",
7727               .units = PAN_PERF_COUNTER_UNITS_WARPS,
7728               .offset = 216,
7729               .category = &panfrost_perf_config_thex.categories[2],
7730            }, // counter
7731            {
7732               .name = "Non-fragment starvation cycles",
7733               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
7734               .symbol_name = "compute_starving",
7735               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7736               .offset = 217,
7737               .category = &panfrost_perf_config_thex.categories[2],
7738            }, // counter
7739            {
7740               .name = "Execution core active",
7741               .desc = "The number of cycles where the shader core is processing at least one warp.",
7742               .symbol_name = "exec_core_active",
7743               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7744               .offset = 218,
7745               .category = &panfrost_perf_config_thex.categories[2],
7746            }, // counter
7747            {
7748               .name = "Execution engine active",
7749               .desc = "The number of cycles where the execution engine unit is processing at least one thread.",
7750               .symbol_name = "exec_active",
7751               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7752               .offset = 219,
7753               .category = &panfrost_perf_config_thex.categories[2],
7754            }, // counter
7755            {
7756               .name = "Executed instructions",
7757               .desc = "The number of instructions executed per warp.",
7758               .symbol_name = "exec_instr_count",
7759               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7760               .offset = 220,
7761               .category = &panfrost_perf_config_thex.categories[2],
7762            }, // counter
7763            {
7764               .name = "Diverged instructions",
7765               .desc = "The number of instructions executed per warp, that have control flow divergence.",
7766               .symbol_name = "exec_instr_diverged",
7767               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7768               .offset = 221,
7769               .category = &panfrost_perf_config_thex.categories[2],
7770            }, // counter
7771            {
7772               .name = "Execution engine starvation cycles",
7773               .desc = "The number of cycles where no new threads are available for execution.",
7774               .symbol_name = "exec_instr_starving",
7775               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7776               .offset = 222,
7777               .category = &panfrost_perf_config_thex.categories[2],
7778            }, // counter
7779            {
7780               .name = "Arithmetic instructions",
7781               .desc = "The number of instructions where the workload is a single FMA pipe arithmetic operation.",
7782               .symbol_name = "arith_instr_single_fma",
7783               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7784               .offset = 223,
7785               .category = &panfrost_perf_config_thex.categories[2],
7786            }, // counter
7787            {
7788               .name = "Dual Arithmetic instructions",
7789               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe arithmetic operation.",
7790               .symbol_name = "arith_instr_double",
7791               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7792               .offset = 224,
7793               .category = &panfrost_perf_config_thex.categories[2],
7794            }, // counter
7795            {
7796               .name = "Arithmetic + Message instructions",
7797               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe message operation",
7798               .symbol_name = "arith_instr_msg",
7799               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7800               .offset = 225,
7801               .category = &panfrost_perf_config_thex.categories[2],
7802            }, // counter
7803            {
7804               .name = "Message instructions",
7805               .desc = "The number of instructions where the workload is a single ADD pipe message operation, with no FMA pipe operation",
7806               .symbol_name = "arith_instr_msg_only",
7807               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7808               .offset = 226,
7809               .category = &panfrost_perf_config_thex.categories[2],
7810            }, // counter
7811            {
7812               .name = "Texture requests",
7813               .desc = "The number of thread-width texture operations processed.",
7814               .symbol_name = "tex_instr",
7815               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7816               .offset = 227,
7817               .category = &panfrost_perf_config_thex.categories[2],
7818            }, // counter
7819            {
7820               .name = "Mipmapped texture request",
7821               .desc = "The number of texture operations that act on a mipmapped texture.",
7822               .symbol_name = "tex_instr_mipmap",
7823               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7824               .offset = 228,
7825               .category = &panfrost_perf_config_thex.categories[2],
7826            }, // counter
7827            {
7828               .name = "Compressed texture requests",
7829               .desc = "The number of texture operations acting on a compressed texture.",
7830               .symbol_name = "tex_instr_compressed",
7831               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7832               .offset = 229,
7833               .category = &panfrost_perf_config_thex.categories[2],
7834            }, // counter
7835            {
7836               .name = "3D texture requests",
7837               .desc = "The number of texture operations acting on a 3D texture.",
7838               .symbol_name = "tex_instr_3d",
7839               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7840               .offset = 230,
7841               .category = &panfrost_perf_config_thex.categories[2],
7842            }, // counter
7843            {
7844               .name = "Trilinear filtered requests",
7845               .desc = "The number of texture operations using a trilinear texture filter.",
7846               .symbol_name = "tex_instr_trilinear",
7847               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7848               .offset = 231,
7849               .category = &panfrost_perf_config_thex.categories[2],
7850            }, // counter
7851            {
7852               .name = "Texturing active",
7853               .desc = "The number of texture filtering issue cycles.",
7854               .symbol_name = "tex_coord_issue",
7855               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7856               .offset = 232,
7857               .category = &panfrost_perf_config_thex.categories[2],
7858            }, // counter
7859            {
7860               .name = "Coordinate stall cycles",
7861               .desc = "The number of clock cycles where threads are stalled at the texel coordinate calculation stage.",
7862               .symbol_name = "tex_coord_stall",
7863               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7864               .offset = 233,
7865               .category = &panfrost_perf_config_thex.categories[2],
7866            }, // counter
7867            {
7868               .name = "Line fill stall cycles",
7869               .desc = "The number of clock cycles where at least one thread is waiting for data from the texture cache, but no lookup is completed.",
7870               .symbol_name = "tex_starve_cache",
7871               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7872               .offset = 234,
7873               .category = &panfrost_perf_config_thex.categories[2],
7874            }, // counter
7875            {
7876               .name = "Partial data stall cycles",
7877               .desc = "The number of clock cycles where at least one thread fetched some data from the texture cache, but no filtering operation is started.",
7878               .symbol_name = "tex_starve_filter",
7879               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7880               .offset = 235,
7881               .category = &panfrost_perf_config_thex.categories[2],
7882            }, // counter
7883            {
7884               .name = "Full read cycles",
7885               .desc = "The number of full-width load/store cache reads.",
7886               .symbol_name = "ls_mem_read_full",
7887               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7888               .offset = 236,
7889               .category = &panfrost_perf_config_thex.categories[2],
7890            }, // counter
7891            {
7892               .name = "Partial read cycles",
7893               .desc = "The number of partial-width load/store cache reads.",
7894               .symbol_name = "ls_mem_read_short",
7895               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7896               .offset = 237,
7897               .category = &panfrost_perf_config_thex.categories[2],
7898            }, // counter
7899            {
7900               .name = "Full write cycles",
7901               .desc = "The number of full-width load/store cache writes.",
7902               .symbol_name = "ls_mem_write_full",
7903               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7904               .offset = 238,
7905               .category = &panfrost_perf_config_thex.categories[2],
7906            }, // counter
7907            {
7908               .name = "Partial write cycles",
7909               .desc = "The number of partial-width load/store cache writes.",
7910               .symbol_name = "ls_mem_write_short",
7911               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7912               .offset = 239,
7913               .category = &panfrost_perf_config_thex.categories[2],
7914            }, // counter
7915            {
7916               .name = "Atomic access cycles",
7917               .desc = "The number of load/store atomic accesses.",
7918               .symbol_name = "ls_mem_atomic",
7919               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7920               .offset = 240,
7921               .category = &panfrost_perf_config_thex.categories[2],
7922            }, // counter
7923            {
7924               .name = "Interpolation requests",
7925               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
7926               .symbol_name = "vary_instr",
7927               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7928               .offset = 241,
7929               .category = &panfrost_perf_config_thex.categories[2],
7930            }, // counter
7931            {
7932               .name = "32-bit interpolation active",
7933               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
7934               .symbol_name = "vary_slot_32",
7935               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7936               .offset = 242,
7937               .category = &panfrost_perf_config_thex.categories[2],
7938            }, // counter
7939            {
7940               .name = "16-bit interpolation active",
7941               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
7942               .symbol_name = "vary_slot_16",
7943               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
7944               .offset = 243,
7945               .category = &panfrost_perf_config_thex.categories[2],
7946            }, // counter
7947            {
7948               .name = "Attribute requests",
7949               .desc = "The number of instructions executed by the attribute unit.",
7950               .symbol_name = "attr_instr",
7951               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7952               .offset = 244,
7953               .category = &panfrost_perf_config_thex.categories[2],
7954            }, // counter
7955            {
7956               .name = "Multiplier instructions",
7957               .desc = "The number of instructions where the workload uses floating-point multiplier hardware.",
7958               .symbol_name = "arith_instr_fp_mul",
7959               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
7960               .offset = 245,
7961               .category = &panfrost_perf_config_thex.categories[2],
7962            }, // counter
7963            {
7964               .name = "Fragment L2 read beats",
7965               .desc = "The number of read beats received by the fixed-function fragment front-end.",
7966               .symbol_name = "beats_rd_ftc",
7967               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7968               .offset = 246,
7969               .category = &panfrost_perf_config_thex.categories[2],
7970            }, // counter
7971            {
7972               .name = "Fragment external read beats",
7973               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
7974               .symbol_name = "beats_rd_ftc_ext",
7975               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7976               .offset = 247,
7977               .category = &panfrost_perf_config_thex.categories[2],
7978            }, // counter
7979            {
7980               .name = "Load/store L2 read beats",
7981               .desc = "The number of read beats received by the load/store unit.",
7982               .symbol_name = "beats_rd_lsc",
7983               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7984               .offset = 248,
7985               .category = &panfrost_perf_config_thex.categories[2],
7986            }, // counter
7987            {
7988               .name = "Load/store external read beats",
7989               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
7990               .symbol_name = "beats_rd_lsc_ext",
7991               .units = PAN_PERF_COUNTER_UNITS_BEATS,
7992               .offset = 249,
7993               .category = &panfrost_perf_config_thex.categories[2],
7994            }, // counter
7995            {
7996               .name = "Texture L2 read beats",
7997               .desc = "The number of read beats received by the texture unit.",
7998               .symbol_name = "beats_rd_tex",
7999               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8000               .offset = 250,
8001               .category = &panfrost_perf_config_thex.categories[2],
8002            }, // counter
8003            {
8004               .name = "Texture external read beats",
8005               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
8006               .symbol_name = "beats_rd_tex_ext",
8007               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8008               .offset = 251,
8009               .category = &panfrost_perf_config_thex.categories[2],
8010            }, // counter
8011            {
8012               .name = "Other L2 read beats",
8013               .desc = "The number of read beats received by a unit that is not specifically identified.",
8014               .symbol_name = "beats_rd_other",
8015               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8016               .offset = 252,
8017               .category = &panfrost_perf_config_thex.categories[2],
8018            }, // counter
8019            {
8020               .name = "Load/store write beats",
8021               .desc = "The number of write beats sent by the load/store unit.",
8022               .symbol_name = "beats_wr_lsc",
8023               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8024               .offset = 253,
8025               .category = &panfrost_perf_config_thex.categories[2],
8026            }, // counter
8027            {
8028               .name = "Tile buffer write beats",
8029               .desc = "The number of write beats sent by the tile buffer writeback unit.",
8030               .symbol_name = "beats_wr_tib",
8031               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8032               .offset = 254,
8033               .category = &panfrost_perf_config_thex.categories[2],
8034            }, // counter
8035            {
8036               .name = "Other write beats",
8037               .desc = "The number of write beats sent by any unit that is not specifically identified.",
8038               .symbol_name = "beats_wr_other",
8039               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8040               .offset = 255,
8041               .category = &panfrost_perf_config_thex.categories[2],
8042            }, // counter
8043         }, // counters
8044      }, // category
8045      {
8046         .name = "Memory System",
8047         .n_counters = 39,
8048         .counters = {
8049            {
8050               .name = "MMU lookups",
8051               .desc = "The number of main MMU address translations performed.",
8052               .symbol_name = "mmu_requests",
8053               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8054               .offset = 132,
8055               .category = &panfrost_perf_config_thex.categories[3],
8056            }, // counter
8057            {
8058               .name = "Read requests",
8059               .desc = "The number of L2 cache read requests from internal masters.",
8060               .symbol_name = "l2_rd_msg_in",
8061               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8062               .offset = 144,
8063               .category = &panfrost_perf_config_thex.categories[3],
8064            }, // counter
8065            {
8066               .name = "Read stall cycles",
8067               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
8068               .symbol_name = "l2_rd_msg_in_stall",
8069               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8070               .offset = 145,
8071               .category = &panfrost_perf_config_thex.categories[3],
8072            }, // counter
8073            {
8074               .name = "Write requests",
8075               .desc = "The number of L2 cache write requests from internal masters.",
8076               .symbol_name = "l2_wr_msg_in",
8077               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8078               .offset = 146,
8079               .category = &panfrost_perf_config_thex.categories[3],
8080            }, // counter
8081            {
8082               .name = "Write stall cycles",
8083               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
8084               .symbol_name = "l2_wr_msg_in_stall",
8085               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8086               .offset = 147,
8087               .category = &panfrost_perf_config_thex.categories[3],
8088            }, // counter
8089            {
8090               .name = "Snoop requests",
8091               .desc = "The number of L2 snoop requests from internal masters.",
8092               .symbol_name = "l2_snp_msg_in",
8093               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8094               .offset = 148,
8095               .category = &panfrost_perf_config_thex.categories[3],
8096            }, // counter
8097            {
8098               .name = "Snoop stall cycles",
8099               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
8100               .symbol_name = "l2_snp_msg_in_stall",
8101               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8102               .offset = 149,
8103               .category = &panfrost_perf_config_thex.categories[3],
8104            }, // counter
8105            {
8106               .name = "L1 read requests",
8107               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
8108               .symbol_name = "l2_rd_msg_out",
8109               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8110               .offset = 150,
8111               .category = &panfrost_perf_config_thex.categories[3],
8112            }, // counter
8113            {
8114               .name = "L1 read stall cycles",
8115               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
8116               .symbol_name = "l2_rd_msg_out_stall",
8117               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8118               .offset = 151,
8119               .category = &panfrost_perf_config_thex.categories[3],
8120            }, // counter
8121            {
8122               .name = "L1 write requests",
8123               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
8124               .symbol_name = "l2_wr_msg_out",
8125               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8126               .offset = 152,
8127               .category = &panfrost_perf_config_thex.categories[3],
8128            }, // counter
8129            {
8130               .name = "Any lookup",
8131               .desc = "The number of L2 cache lookups performed.",
8132               .symbol_name = "l2_any_lookup",
8133               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8134               .offset = 153,
8135               .category = &panfrost_perf_config_thex.categories[3],
8136            }, // counter
8137            {
8138               .name = "Read lookup",
8139               .desc = "The number of L2 cache read lookups performed.",
8140               .symbol_name = "l2_read_lookup",
8141               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8142               .offset = 154,
8143               .category = &panfrost_perf_config_thex.categories[3],
8144            }, // counter
8145            {
8146               .name = "Write lookup",
8147               .desc = "The number of L2 cache write lookups performed.",
8148               .symbol_name = "l2_write_lookup",
8149               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8150               .offset = 155,
8151               .category = &panfrost_perf_config_thex.categories[3],
8152            }, // counter
8153            {
8154               .name = "External snoop lookups",
8155               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
8156               .symbol_name = "l2_ext_snoop_lookup",
8157               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8158               .offset = 156,
8159               .category = &panfrost_perf_config_thex.categories[3],
8160            }, // counter
8161            {
8162               .name = "Read transaction",
8163               .desc = "The number of external read transactions.",
8164               .symbol_name = "l2_ext_read",
8165               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8166               .offset = 157,
8167               .category = &panfrost_perf_config_thex.categories[3],
8168            }, // counter
8169            {
8170               .name = "ReadNoSnoop transactions",
8171               .desc = "The number of external non-coherent read transactions.",
8172               .symbol_name = "l2_ext_read_nosnp",
8173               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8174               .offset = 158,
8175               .category = &panfrost_perf_config_thex.categories[3],
8176            }, // counter
8177            {
8178               .name = "ReadUnique transactions",
8179               .desc = "The number of external coherent read unique transactions.",
8180               .symbol_name = "l2_ext_read_unique",
8181               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8182               .offset = 159,
8183               .category = &panfrost_perf_config_thex.categories[3],
8184            }, // counter
8185            {
8186               .name = "Read beat",
8187               .desc = "The number of external bus data read cycles.",
8188               .symbol_name = "l2_ext_read_beats",
8189               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8190               .offset = 160,
8191               .category = &panfrost_perf_config_thex.categories[3],
8192            }, // counter
8193            {
8194               .name = "Read stall cycles",
8195               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
8196               .symbol_name = "l2_ext_ar_stall",
8197               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8198               .offset = 161,
8199               .category = &panfrost_perf_config_thex.categories[3],
8200            }, // counter
8201            {
8202               .name = "0-25% outstanding",
8203               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
8204               .symbol_name = "l2_ext_ar_cnt_q1",
8205               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8206               .offset = 162,
8207               .category = &panfrost_perf_config_thex.categories[3],
8208            }, // counter
8209            {
8210               .name = "25-50% outstanding",
8211               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
8212               .symbol_name = "l2_ext_ar_cnt_q2",
8213               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8214               .offset = 163,
8215               .category = &panfrost_perf_config_thex.categories[3],
8216            }, // counter
8217            {
8218               .name = "50-75% outstanding",
8219               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
8220               .symbol_name = "l2_ext_ar_cnt_q3",
8221               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8222               .offset = 164,
8223               .category = &panfrost_perf_config_thex.categories[3],
8224            }, // counter
8225            {
8226               .name = "0-127 cycles",
8227               .desc = "The number of data beats returned 0-127 cycles after the read request.",
8228               .symbol_name = "l2_ext_rresp_0_127",
8229               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8230               .offset = 165,
8231               .category = &panfrost_perf_config_thex.categories[3],
8232            }, // counter
8233            {
8234               .name = "128-191 cycles",
8235               .desc = "The number of data beats returned 128-191 cycles after the read request.",
8236               .symbol_name = "l2_ext_rresp_128_191",
8237               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8238               .offset = 166,
8239               .category = &panfrost_perf_config_thex.categories[3],
8240            }, // counter
8241            {
8242               .name = "192-255 cycles",
8243               .desc = "The number of data beats returned 192-255 cycles after the read request.",
8244               .symbol_name = "l2_ext_rresp_192_255",
8245               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8246               .offset = 167,
8247               .category = &panfrost_perf_config_thex.categories[3],
8248            }, // counter
8249            {
8250               .name = "256-319 cycles",
8251               .desc = "The number of data beats returned 256-319 cycles after the read request.",
8252               .symbol_name = "l2_ext_rresp_256_319",
8253               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8254               .offset = 168,
8255               .category = &panfrost_perf_config_thex.categories[3],
8256            }, // counter
8257            {
8258               .name = "320-383 cycles",
8259               .desc = "The number of data beats returned 320-383 cycles after the read request.",
8260               .symbol_name = "l2_ext_rresp_320_383",
8261               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8262               .offset = 169,
8263               .category = &panfrost_perf_config_thex.categories[3],
8264            }, // counter
8265            {
8266               .name = "Write transaction",
8267               .desc = "The number of external write transactions.",
8268               .symbol_name = "l2_ext_write",
8269               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8270               .offset = 170,
8271               .category = &panfrost_perf_config_thex.categories[3],
8272            }, // counter
8273            {
8274               .name = "WriteNoSnoopFull transactions",
8275               .desc = "The number of external non-coherent full write transactions.",
8276               .symbol_name = "l2_ext_write_nosnp_full",
8277               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8278               .offset = 171,
8279               .category = &panfrost_perf_config_thex.categories[3],
8280            }, // counter
8281            {
8282               .name = "WriteNoSnoopPartial transactions",
8283               .desc = "The number of external non-coherent partial write transactions.",
8284               .symbol_name = "l2_ext_write_nosnp_ptl",
8285               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8286               .offset = 172,
8287               .category = &panfrost_perf_config_thex.categories[3],
8288            }, // counter
8289            {
8290               .name = "WriteSnoopFull transactions",
8291               .desc = "The number of external coherent full write transactions.",
8292               .symbol_name = "l2_ext_write_snp_full",
8293               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8294               .offset = 173,
8295               .category = &panfrost_perf_config_thex.categories[3],
8296            }, // counter
8297            {
8298               .name = "WriteSnoopPartial transactions",
8299               .desc = "The number of external coherent partial write transactions.",
8300               .symbol_name = "l2_ext_write_snp_ptl",
8301               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8302               .offset = 174,
8303               .category = &panfrost_perf_config_thex.categories[3],
8304            }, // counter
8305            {
8306               .name = "Write beat",
8307               .desc = "The number of external bus data write cycles.",
8308               .symbol_name = "l2_ext_write_beats",
8309               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8310               .offset = 175,
8311               .category = &panfrost_perf_config_thex.categories[3],
8312            }, // counter
8313            {
8314               .name = "Write stall cycles",
8315               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
8316               .symbol_name = "l2_ext_w_stall",
8317               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8318               .offset = 176,
8319               .category = &panfrost_perf_config_thex.categories[3],
8320            }, // counter
8321            {
8322               .name = "0-25% outstanding",
8323               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
8324               .symbol_name = "l2_ext_aw_cnt_q1",
8325               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8326               .offset = 177,
8327               .category = &panfrost_perf_config_thex.categories[3],
8328            }, // counter
8329            {
8330               .name = "25-50% outstanding",
8331               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
8332               .symbol_name = "l2_ext_aw_cnt_q2",
8333               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8334               .offset = 178,
8335               .category = &panfrost_perf_config_thex.categories[3],
8336            }, // counter
8337            {
8338               .name = "50-75% outstanding",
8339               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
8340               .symbol_name = "l2_ext_aw_cnt_q3",
8341               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8342               .offset = 179,
8343               .category = &panfrost_perf_config_thex.categories[3],
8344            }, // counter
8345            {
8346               .name = "Snoop transactions",
8347               .desc = "The number of coherency snoops triggered by external masters.",
8348               .symbol_name = "l2_ext_snoop",
8349               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
8350               .offset = 180,
8351               .category = &panfrost_perf_config_thex.categories[3],
8352            }, // counter
8353            {
8354               .name = "Snoop stall cycles",
8355               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
8356               .symbol_name = "l2_ext_snoop_stall",
8357               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8358               .offset = 181,
8359               .category = &panfrost_perf_config_thex.categories[3],
8360            }, // counter
8361         }, // counters
8362      }, // category
8363   }, // categories
8364}; // panfrost_perf_config_thex
8365
8366static void UNUSED
8367static_asserts_tnox(void)
8368{
8369   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
8370   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
8371   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
8372   STATIC_ASSERT(59 <= PAN_PERF_MAX_COUNTERS);
8373   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
8374}
8375
8376const struct panfrost_perf_config panfrost_perf_config_tnox = {
8377   .n_categories = 4,
8378   .categories = {
8379      {
8380         .name = "Job Manager",
8381         .n_counters = 23,
8382         .counters = {
8383            {
8384               .name = "GPU active",
8385               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
8386               .symbol_name = "gpu_active",
8387               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8388               .offset = 6,
8389               .category = &panfrost_perf_config_tnox.categories[0],
8390            }, // counter
8391            {
8392               .name = "Interrupt active",
8393               .desc = "The number of cycles where the GPU has a pending interrupt.",
8394               .symbol_name = "irq_active",
8395               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8396               .offset = 7,
8397               .category = &panfrost_perf_config_tnox.categories[0],
8398            }, // counter
8399            {
8400               .name = "Fragment jobs",
8401               .desc = "The number of jobs processed by the GPU fragment queue.",
8402               .symbol_name = "js0_jobs",
8403               .units = PAN_PERF_COUNTER_UNITS_JOBS,
8404               .offset = 8,
8405               .category = &panfrost_perf_config_tnox.categories[0],
8406            }, // counter
8407            {
8408               .name = "Fragment tasks",
8409               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
8410               .symbol_name = "js0_tasks",
8411               .units = PAN_PERF_COUNTER_UNITS_TASKS,
8412               .offset = 9,
8413               .category = &panfrost_perf_config_tnox.categories[0],
8414            }, // counter
8415            {
8416               .name = "Fragment queue active",
8417               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
8418               .symbol_name = "js0_active",
8419               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8420               .offset = 10,
8421               .category = &panfrost_perf_config_tnox.categories[0],
8422            }, // counter
8423            {
8424               .name = "Fragment descriptor reads cycles",
8425               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
8426               .symbol_name = "js0_wait_read",
8427               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8428               .offset = 12,
8429               .category = &panfrost_perf_config_tnox.categories[0],
8430            }, // counter
8431            {
8432               .name = "Fragment job issue cycles",
8433               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
8434               .symbol_name = "js0_wait_issue",
8435               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8436               .offset = 13,
8437               .category = &panfrost_perf_config_tnox.categories[0],
8438            }, // counter
8439            {
8440               .name = "Fragment job dependency cycles",
8441               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
8442               .symbol_name = "js0_wait_depend",
8443               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8444               .offset = 14,
8445               .category = &panfrost_perf_config_tnox.categories[0],
8446            }, // counter
8447            {
8448               .name = "Fragment job finish cycles",
8449               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
8450               .symbol_name = "js0_wait_finish",
8451               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8452               .offset = 15,
8453               .category = &panfrost_perf_config_tnox.categories[0],
8454            }, // counter
8455            {
8456               .name = "Non-fragment jobs",
8457               .desc = "The number of jobs processed by the GPU non-fragment queue.",
8458               .symbol_name = "js1_jobs",
8459               .units = PAN_PERF_COUNTER_UNITS_JOBS,
8460               .offset = 16,
8461               .category = &panfrost_perf_config_tnox.categories[0],
8462            }, // counter
8463            {
8464               .name = "Non-fragment tasks",
8465               .desc = "The number of tasks processed by the GPU non-fragment queue.",
8466               .symbol_name = "js1_tasks",
8467               .units = PAN_PERF_COUNTER_UNITS_TASKS,
8468               .offset = 17,
8469               .category = &panfrost_perf_config_tnox.categories[0],
8470            }, // counter
8471            {
8472               .name = "Non-fragment queue active",
8473               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
8474               .symbol_name = "js1_active",
8475               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8476               .offset = 18,
8477               .category = &panfrost_perf_config_tnox.categories[0],
8478            }, // counter
8479            {
8480               .name = "Non-fragment descriptor read cycles",
8481               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
8482               .symbol_name = "js1_wait_read",
8483               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8484               .offset = 20,
8485               .category = &panfrost_perf_config_tnox.categories[0],
8486            }, // counter
8487            {
8488               .name = "Non-fragment job issue cycles",
8489               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
8490               .symbol_name = "js1_wait_issue",
8491               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8492               .offset = 21,
8493               .category = &panfrost_perf_config_tnox.categories[0],
8494            }, // counter
8495            {
8496               .name = "Non-fragment job dependency cycles",
8497               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
8498               .symbol_name = "js1_wait_depend",
8499               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8500               .offset = 22,
8501               .category = &panfrost_perf_config_tnox.categories[0],
8502            }, // counter
8503            {
8504               .name = "Non-fragment job finish cycles",
8505               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
8506               .symbol_name = "js1_wait_finish",
8507               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8508               .offset = 23,
8509               .category = &panfrost_perf_config_tnox.categories[0],
8510            }, // counter
8511            {
8512               .name = "Reserved jobs",
8513               .desc = "The number of jobs processed by the GPU reserved queue.",
8514               .symbol_name = "js2_jobs",
8515               .units = PAN_PERF_COUNTER_UNITS_JOBS,
8516               .offset = 24,
8517               .category = &panfrost_perf_config_tnox.categories[0],
8518            }, // counter
8519            {
8520               .name = "Reserved tasks",
8521               .desc = "The number of tasks processed by the GPU reserved queue.",
8522               .symbol_name = "js2_tasks",
8523               .units = PAN_PERF_COUNTER_UNITS_TASKS,
8524               .offset = 25,
8525               .category = &panfrost_perf_config_tnox.categories[0],
8526            }, // counter
8527            {
8528               .name = "Reserved queue active",
8529               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
8530               .symbol_name = "js2_active",
8531               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8532               .offset = 26,
8533               .category = &panfrost_perf_config_tnox.categories[0],
8534            }, // counter
8535            {
8536               .name = "Reserved descriptor read cycles",
8537               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
8538               .symbol_name = "js2_wait_read",
8539               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8540               .offset = 28,
8541               .category = &panfrost_perf_config_tnox.categories[0],
8542            }, // counter
8543            {
8544               .name = "Reserved job issue cycles",
8545               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
8546               .symbol_name = "js2_wait_issue",
8547               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8548               .offset = 29,
8549               .category = &panfrost_perf_config_tnox.categories[0],
8550            }, // counter
8551            {
8552               .name = "Reserved job dependency cycles",
8553               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
8554               .symbol_name = "js2_wait_depend",
8555               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8556               .offset = 30,
8557               .category = &panfrost_perf_config_tnox.categories[0],
8558            }, // counter
8559            {
8560               .name = "Reserved job finish cycles",
8561               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
8562               .symbol_name = "js2_wait_finish",
8563               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8564               .offset = 31,
8565               .category = &panfrost_perf_config_tnox.categories[0],
8566            }, // counter
8567         }, // counters
8568      }, // category
8569      {
8570         .name = "Tiler",
8571         .n_counters = 24,
8572         .counters = {
8573            {
8574               .name = "Tiler active",
8575               .desc = "The number of cycles where the tiler has a workload queued for processing.",
8576               .symbol_name = "tiler_active",
8577               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8578               .offset = 68,
8579               .category = &panfrost_perf_config_tnox.categories[1],
8580            }, // counter
8581            {
8582               .name = "Triangle primitives",
8583               .desc = "The number of input triangle primitives.",
8584               .symbol_name = "triangles",
8585               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8586               .offset = 70,
8587               .category = &panfrost_perf_config_tnox.categories[1],
8588            }, // counter
8589            {
8590               .name = "Line primitives",
8591               .desc = "The number of input line primitives.",
8592               .symbol_name = "lines",
8593               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8594               .offset = 71,
8595               .category = &panfrost_perf_config_tnox.categories[1],
8596            }, // counter
8597            {
8598               .name = "Point primitives",
8599               .desc = "The number of input point primitives.",
8600               .symbol_name = "points",
8601               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8602               .offset = 72,
8603               .category = &panfrost_perf_config_tnox.categories[1],
8604            }, // counter
8605            {
8606               .name = "Front-facing primitives",
8607               .desc = "The number of front-facing triangles that are visible after culling.",
8608               .symbol_name = "front_facing",
8609               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8610               .offset = 73,
8611               .category = &panfrost_perf_config_tnox.categories[1],
8612            }, // counter
8613            {
8614               .name = "Back-facing primitives",
8615               .desc = "The number of back-facing triangles that are visible after culling.",
8616               .symbol_name = "back_facing",
8617               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8618               .offset = 74,
8619               .category = &panfrost_perf_config_tnox.categories[1],
8620            }, // counter
8621            {
8622               .name = "Visible primitives",
8623               .desc = "The number of primitives that are visible after culling.",
8624               .symbol_name = "prim_visible",
8625               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8626               .offset = 75,
8627               .category = &panfrost_perf_config_tnox.categories[1],
8628            }, // counter
8629            {
8630               .name = "Facing and XY plane test culled primitives",
8631               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
8632               .symbol_name = "prim_culled",
8633               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8634               .offset = 76,
8635               .category = &panfrost_perf_config_tnox.categories[1],
8636            }, // counter
8637            {
8638               .name = "Z plane test culled primitives",
8639               .desc = "The number of primitives that are culled by frustum Z plane tests.",
8640               .symbol_name = "prim_clipped",
8641               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8642               .offset = 77,
8643               .category = &panfrost_perf_config_tnox.categories[1],
8644            }, // counter
8645            {
8646               .name = "Sample test culled primitives",
8647               .desc = "The number of primitives culled by the sample coverage test.",
8648               .symbol_name = "prim_sat_culled",
8649               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8650               .offset = 78,
8651               .category = &panfrost_perf_config_tnox.categories[1],
8652            }, // counter
8653            {
8654               .name = "Read beats",
8655               .desc = "The number of internal bus data read cycles made by the tiler.",
8656               .symbol_name = "bus_read",
8657               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8658               .offset = 81,
8659               .category = &panfrost_perf_config_tnox.categories[1],
8660            }, // counter
8661            {
8662               .name = "Write beats",
8663               .desc = "The number of internal bus data write cycles made by the tiler.",
8664               .symbol_name = "bus_write",
8665               .units = PAN_PERF_COUNTER_UNITS_BEATS,
8666               .offset = 83,
8667               .category = &panfrost_perf_config_tnox.categories[1],
8668            }, // counter
8669            {
8670               .name = "Position shading requests",
8671               .desc = "The number of position shading requests in the IDVS flow.",
8672               .symbol_name = "idvs_pos_shad_req",
8673               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8674               .offset = 85,
8675               .category = &panfrost_perf_config_tnox.categories[1],
8676            }, // counter
8677            {
8678               .name = "Position shading stall cycles",
8679               .desc = "The number of cycles where the tiler has a stalled position shading request.",
8680               .symbol_name = "idvs_pos_shad_stall",
8681               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8682               .offset = 87,
8683               .category = &panfrost_perf_config_tnox.categories[1],
8684            }, // counter
8685            {
8686               .name = "Position FIFO full cycles",
8687               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
8688               .symbol_name = "idvs_pos_fifo_full",
8689               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8690               .offset = 88,
8691               .category = &panfrost_perf_config_tnox.categories[1],
8692            }, // counter
8693            {
8694               .name = "Position cache hits",
8695               .desc = "The number of position lookups that result in a hit in the vertex cache.",
8696               .symbol_name = "vcache_hit",
8697               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8698               .offset = 90,
8699               .category = &panfrost_perf_config_tnox.categories[1],
8700            }, // counter
8701            {
8702               .name = "Position cache misses",
8703               .desc = "The number of position lookups that miss in the vertex cache.",
8704               .symbol_name = "vcache_miss",
8705               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8706               .offset = 91,
8707               .category = &panfrost_perf_config_tnox.categories[1],
8708            }, // counter
8709            {
8710               .name = "Primitive assembly busy stall cycles",
8711               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
8712               .symbol_name = "vfetch_stall",
8713               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8714               .offset = 95,
8715               .category = &panfrost_perf_config_tnox.categories[1],
8716            }, // counter
8717            {
8718               .name = "Varying cache hits",
8719               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
8720               .symbol_name = "idvs_vbu_hit",
8721               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8722               .offset = 98,
8723               .category = &panfrost_perf_config_tnox.categories[1],
8724            }, // counter
8725            {
8726               .name = "Varying cache misses",
8727               .desc = "The number of varying lookups that miss in the vertex cache.",
8728               .symbol_name = "idvs_vbu_miss",
8729               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8730               .offset = 99,
8731               .category = &panfrost_perf_config_tnox.categories[1],
8732            }, // counter
8733            {
8734               .name = "Varying shading requests",
8735               .desc = "The number of varying shading requests in the IDVS flow.",
8736               .symbol_name = "idvs_var_shad_req",
8737               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
8738               .offset = 101,
8739               .category = &panfrost_perf_config_tnox.categories[1],
8740            }, // counter
8741            {
8742               .name = "Varying shading stall cycles",
8743               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
8744               .symbol_name = "idvs_var_shad_stall",
8745               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8746               .offset = 102,
8747               .category = &panfrost_perf_config_tnox.categories[1],
8748            }, // counter
8749            {
8750               .name = "Write buffer transaction stall cycles",
8751               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
8752               .symbol_name = "wrbuf_no_axi_id_stall",
8753               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8754               .offset = 118,
8755               .category = &panfrost_perf_config_tnox.categories[1],
8756            }, // counter
8757            {
8758               .name = "Write buffer write stall cycles",
8759               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
8760               .symbol_name = "wrbuf_axi_stall",
8761               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8762               .offset = 119,
8763               .category = &panfrost_perf_config_tnox.categories[1],
8764            }, // counter
8765         }, // counters
8766      }, // category
8767      {
8768         .name = "Shader Core",
8769         .n_counters = 59,
8770         .counters = {
8771            {
8772               .name = "Fragment active",
8773               .desc = "The number of cycles where the shader core is processing a fragment workload.",
8774               .symbol_name = "frag_active",
8775               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8776               .offset = 196,
8777               .category = &panfrost_perf_config_tnox.categories[2],
8778            }, // counter
8779            {
8780               .name = "Read primitives",
8781               .desc = "The number of primitives read from the tile list by the fragment front-end.",
8782               .symbol_name = "frag_primitives",
8783               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8784               .offset = 197,
8785               .category = &panfrost_perf_config_tnox.categories[2],
8786            }, // counter
8787            {
8788               .name = "Rasterized primitives",
8789               .desc = "The number of primitives being rasterized.",
8790               .symbol_name = "frag_prim_rast",
8791               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
8792               .offset = 198,
8793               .category = &panfrost_perf_config_tnox.categories[2],
8794            }, // counter
8795            {
8796               .name = "Fragment FPKB active",
8797               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
8798               .symbol_name = "frag_fpk_active",
8799               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8800               .offset = 199,
8801               .category = &panfrost_perf_config_tnox.categories[2],
8802            }, // counter
8803            {
8804               .name = "Fragment warps",
8805               .desc = "The number of fragment warps created.",
8806               .symbol_name = "frag_warps",
8807               .units = PAN_PERF_COUNTER_UNITS_WARPS,
8808               .offset = 201,
8809               .category = &panfrost_perf_config_tnox.categories[2],
8810            }, // counter
8811            {
8812               .name = "Partial fragment warps",
8813               .desc = "The number of fragment warps containing helper threads that do not correspond to a hit sample point.",
8814               .symbol_name = "frag_partial_warps",
8815               .units = PAN_PERF_COUNTER_UNITS_WARPS,
8816               .offset = 202,
8817               .category = &panfrost_perf_config_tnox.categories[2],
8818            }, // counter
8819            {
8820               .name = "Rasterized quads",
8821               .desc = "The number of quads generated by the rasterization phase.",
8822               .symbol_name = "frag_quads_rast",
8823               .units = PAN_PERF_COUNTER_UNITS_QUADS,
8824               .offset = 203,
8825               .category = &panfrost_perf_config_tnox.categories[2],
8826            }, // counter
8827            {
8828               .name = "Early ZS tested quads",
8829               .desc = "The number of quads that are undergoing early depth and stencil testing.",
8830               .symbol_name = "frag_quads_ezs_test",
8831               .units = PAN_PERF_COUNTER_UNITS_QUADS,
8832               .offset = 204,
8833               .category = &panfrost_perf_config_tnox.categories[2],
8834            }, // counter
8835            {
8836               .name = "Early ZS updated quads",
8837               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
8838               .symbol_name = "frag_quads_ezs_update",
8839               .units = PAN_PERF_COUNTER_UNITS_QUADS,
8840               .offset = 205,
8841               .category = &panfrost_perf_config_tnox.categories[2],
8842            }, // counter
8843            {
8844               .name = "Early ZS killed quads",
8845               .desc = "The number of quads killed by early depth and stencil testing.",
8846               .symbol_name = "frag_quads_ezs_kill",
8847               .units = PAN_PERF_COUNTER_UNITS_QUADS,
8848               .offset = 206,
8849               .category = &panfrost_perf_config_tnox.categories[2],
8850            }, // counter
8851            {
8852               .name = "Late ZS tested quads",
8853               .desc = "The number of quads undergoing late depth and stencil testing.",
8854               .symbol_name = "frag_lzs_test",
8855               .units = PAN_PERF_COUNTER_UNITS_QUADS,
8856               .offset = 207,
8857               .category = &panfrost_perf_config_tnox.categories[2],
8858            }, // counter
8859            {
8860               .name = "Late ZS killed quads",
8861               .desc = "The number of quads killed by late depth and stencil testing.",
8862               .symbol_name = "frag_lzs_kill",
8863               .units = PAN_PERF_COUNTER_UNITS_QUADS,
8864               .offset = 208,
8865               .category = &panfrost_perf_config_tnox.categories[2],
8866            }, // counter
8867            {
8868               .name = "All register warps",
8869               .desc = "The number of warps that require more than 32 registers.",
8870               .symbol_name = "warp_reg_size_64",
8871               .units = PAN_PERF_COUNTER_UNITS_WARPS,
8872               .offset = 209,
8873               .category = &panfrost_perf_config_tnox.categories[2],
8874            }, // counter
8875            {
8876               .name = "Tiles",
8877               .desc = "The number of tiles processed by the shader core.",
8878               .symbol_name = "frag_ptiles",
8879               .units = PAN_PERF_COUNTER_UNITS_TILES,
8880               .offset = 210,
8881               .category = &panfrost_perf_config_tnox.categories[2],
8882            }, // counter
8883            {
8884               .name = "Constant tiles killed",
8885               .desc = "The number of tiles killed by transaction elimination.",
8886               .symbol_name = "frag_trans_elim",
8887               .units = PAN_PERF_COUNTER_UNITS_TILES,
8888               .offset = 211,
8889               .category = &panfrost_perf_config_tnox.categories[2],
8890            }, // counter
8891            {
8892               .name = "FPK occluder quads",
8893               .desc = "The number of quads that are valid occluders for hidden surface removal.",
8894               .symbol_name = "quad_fpk_killer",
8895               .units = PAN_PERF_COUNTER_UNITS_QUADS,
8896               .offset = 212,
8897               .category = &panfrost_perf_config_tnox.categories[2],
8898            }, // counter
8899            {
8900               .name = "Full quad warps",
8901               .desc = "The number of warps that are fully populated with quads.",
8902               .symbol_name = "full_quad_warps",
8903               .units = PAN_PERF_COUNTER_UNITS_WARPS,
8904               .offset = 213,
8905               .category = &panfrost_perf_config_tnox.categories[2],
8906            }, // counter
8907            {
8908               .name = "Non-fragment active",
8909               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
8910               .symbol_name = "compute_active",
8911               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8912               .offset = 214,
8913               .category = &panfrost_perf_config_tnox.categories[2],
8914            }, // counter
8915            {
8916               .name = "Non-fragment tasks",
8917               .desc = "The number of non-fragment tasks issued to the shader core.",
8918               .symbol_name = "compute_tasks",
8919               .units = PAN_PERF_COUNTER_UNITS_TASKS,
8920               .offset = 215,
8921               .category = &panfrost_perf_config_tnox.categories[2],
8922            }, // counter
8923            {
8924               .name = "Non-fragment warps",
8925               .desc = "The number of non-fragment warps created.",
8926               .symbol_name = "compute_warps",
8927               .units = PAN_PERF_COUNTER_UNITS_WARPS,
8928               .offset = 216,
8929               .category = &panfrost_perf_config_tnox.categories[2],
8930            }, // counter
8931            {
8932               .name = "Non-fragment starvation cycles",
8933               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
8934               .symbol_name = "compute_starving",
8935               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8936               .offset = 217,
8937               .category = &panfrost_perf_config_tnox.categories[2],
8938            }, // counter
8939            {
8940               .name = "Execution core active",
8941               .desc = "The number of cycles where the shader core is processing at least one warp.",
8942               .symbol_name = "exec_core_active",
8943               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8944               .offset = 218,
8945               .category = &panfrost_perf_config_tnox.categories[2],
8946            }, // counter
8947            {
8948               .name = "Execution engine active",
8949               .desc = "The number of cycles where the execution engine unit is processing at least one thread.",
8950               .symbol_name = "exec_active",
8951               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8952               .offset = 219,
8953               .category = &panfrost_perf_config_tnox.categories[2],
8954            }, // counter
8955            {
8956               .name = "Executed instructions",
8957               .desc = "The number of instructions executed per warp.",
8958               .symbol_name = "exec_instr_count",
8959               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
8960               .offset = 220,
8961               .category = &panfrost_perf_config_tnox.categories[2],
8962            }, // counter
8963            {
8964               .name = "Diverged instructions",
8965               .desc = "The number of instructions executed per warp, that have control flow divergence.",
8966               .symbol_name = "exec_instr_diverged",
8967               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
8968               .offset = 221,
8969               .category = &panfrost_perf_config_tnox.categories[2],
8970            }, // counter
8971            {
8972               .name = "Execution engine starvation cycles",
8973               .desc = "The number of cycles where no new threads are available for execution.",
8974               .symbol_name = "exec_instr_starving",
8975               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
8976               .offset = 222,
8977               .category = &panfrost_perf_config_tnox.categories[2],
8978            }, // counter
8979            {
8980               .name = "Arithmetic instructions",
8981               .desc = "The number of instructions where the workload is a single FMA pipe arithmetic operation.",
8982               .symbol_name = "arith_instr_single_fma",
8983               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
8984               .offset = 223,
8985               .category = &panfrost_perf_config_tnox.categories[2],
8986            }, // counter
8987            {
8988               .name = "Dual Arithmetic instructions",
8989               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe arithmetic operation.",
8990               .symbol_name = "arith_instr_double",
8991               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
8992               .offset = 224,
8993               .category = &panfrost_perf_config_tnox.categories[2],
8994            }, // counter
8995            {
8996               .name = "Arithmetic + Message instructions",
8997               .desc = "The number of instructions where the workload is one FMA pipe arithmetic operation and one ADD pipe message operation",
8998               .symbol_name = "arith_instr_msg",
8999               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
9000               .offset = 225,
9001               .category = &panfrost_perf_config_tnox.categories[2],
9002            }, // counter
9003            {
9004               .name = "Message instructions",
9005               .desc = "The number of instructions where the workload is a single ADD pipe message operation, with no FMA pipe operation",
9006               .symbol_name = "arith_instr_msg_only",
9007               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
9008               .offset = 226,
9009               .category = &panfrost_perf_config_tnox.categories[2],
9010            }, // counter
9011            {
9012               .name = "Texture requests",
9013               .desc = "The number of quad-width texture operations processed by the texture unit.",
9014               .symbol_name = "tex_msgi_num_quads",
9015               .units = PAN_PERF_COUNTER_UNITS_QUADS,
9016               .offset = 227,
9017               .category = &panfrost_perf_config_tnox.categories[2],
9018            }, // counter
9019            {
9020               .name = "Texture issues",
9021               .desc = "The number of quad-width filtering passes.",
9022               .symbol_name = "tex_dfch_num_passes",
9023               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
9024               .offset = 228,
9025               .category = &panfrost_perf_config_tnox.categories[2],
9026            }, // counter
9027            {
9028               .name = "Descriptor misses",
9029               .desc = "The number of quad-width filtering passes that miss in the resource or sampler descriptor cache.",
9030               .symbol_name = "tex_dfch_num_passes_miss",
9031               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9032               .offset = 229,
9033               .category = &panfrost_perf_config_tnox.categories[2],
9034            }, // counter
9035            {
9036               .name = "Mipmapped texture issues",
9037               .desc = "The number of quad-width filtering passes that use a mipmapped texture.",
9038               .symbol_name = "tex_dfch_num_passes_mip_map",
9039               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
9040               .offset = 230,
9041               .category = &panfrost_perf_config_tnox.categories[2],
9042            }, // counter
9043            {
9044               .name = "Trilinear filtered issues",
9045               .desc = "The number of quad-width filtering passes that use a trilinear filter.",
9046               .symbol_name = "tex_tidx_num_split_mip_map",
9047               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
9048               .offset = 231,
9049               .category = &panfrost_perf_config_tnox.categories[2],
9050            }, // counter
9051            {
9052               .name = "Line fetches",
9053               .desc = "The number of texture line fetches from the L2 cache.",
9054               .symbol_name = "tex_tfch_num_lines_fetched",
9055               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
9056               .offset = 232,
9057               .category = &panfrost_perf_config_tnox.categories[2],
9058            }, // counter
9059            {
9060               .name = "Compressed line fetches",
9061               .desc = "The number of texture line fetches from the L2 cache that are block compressed textures.",
9062               .symbol_name = "tex_tfch_num_lines_fetched_block_compressed",
9063               .units = PAN_PERF_COUNTER_UNITS_ISSUES,
9064               .offset = 233,
9065               .category = &panfrost_perf_config_tnox.categories[2],
9066            }, // counter
9067            {
9068               .name = "Cache lookups",
9069               .desc = "The number of texture cache lookup cycles.",
9070               .symbol_name = "tex_tfch_num_operations",
9071               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9072               .offset = 234,
9073               .category = &panfrost_perf_config_tnox.categories[2],
9074            }, // counter
9075            {
9076               .name = "Texturing active",
9077               .desc = "The number of texture filtering issue cycles.",
9078               .symbol_name = "tex_filt_num_operations",
9079               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9080               .offset = 235,
9081               .category = &panfrost_perf_config_tnox.categories[2],
9082            }, // counter
9083            {
9084               .name = "Full read cycles",
9085               .desc = "The number of full-width load/store cache reads.",
9086               .symbol_name = "ls_mem_read_full",
9087               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9088               .offset = 236,
9089               .category = &panfrost_perf_config_tnox.categories[2],
9090            }, // counter
9091            {
9092               .name = "Partial read cycles",
9093               .desc = "The number of partial-width load/store cache reads.",
9094               .symbol_name = "ls_mem_read_short",
9095               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9096               .offset = 237,
9097               .category = &panfrost_perf_config_tnox.categories[2],
9098            }, // counter
9099            {
9100               .name = "Full write cycles",
9101               .desc = "The number of full-width load/store cache writes.",
9102               .symbol_name = "ls_mem_write_full",
9103               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9104               .offset = 238,
9105               .category = &panfrost_perf_config_tnox.categories[2],
9106            }, // counter
9107            {
9108               .name = "Partial write cycles",
9109               .desc = "The number of partial-width load/store cache writes.",
9110               .symbol_name = "ls_mem_write_short",
9111               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9112               .offset = 239,
9113               .category = &panfrost_perf_config_tnox.categories[2],
9114            }, // counter
9115            {
9116               .name = "Atomic access cycles",
9117               .desc = "The number of load/store atomic accesses.",
9118               .symbol_name = "ls_mem_atomic",
9119               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9120               .offset = 240,
9121               .category = &panfrost_perf_config_tnox.categories[2],
9122            }, // counter
9123            {
9124               .name = "Interpolation requests",
9125               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
9126               .symbol_name = "vary_instr",
9127               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
9128               .offset = 241,
9129               .category = &panfrost_perf_config_tnox.categories[2],
9130            }, // counter
9131            {
9132               .name = "32-bit interpolation active",
9133               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
9134               .symbol_name = "vary_slot_32",
9135               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9136               .offset = 242,
9137               .category = &panfrost_perf_config_tnox.categories[2],
9138            }, // counter
9139            {
9140               .name = "16-bit interpolation active",
9141               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
9142               .symbol_name = "vary_slot_16",
9143               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9144               .offset = 243,
9145               .category = &panfrost_perf_config_tnox.categories[2],
9146            }, // counter
9147            {
9148               .name = "Attribute requests",
9149               .desc = "The number of instructions executed by the attribute unit.",
9150               .symbol_name = "attr_instr",
9151               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
9152               .offset = 244,
9153               .category = &panfrost_perf_config_tnox.categories[2],
9154            }, // counter
9155            {
9156               .name = "Multiplier instructions",
9157               .desc = "The number of instructions where the workload uses floating-point multiplier hardware.",
9158               .symbol_name = "arith_instr_fp_mul",
9159               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
9160               .offset = 245,
9161               .category = &panfrost_perf_config_tnox.categories[2],
9162            }, // counter
9163            {
9164               .name = "Fragment L2 read beats",
9165               .desc = "The number of read beats received by the fixed-function fragment front-end.",
9166               .symbol_name = "beats_rd_ftc",
9167               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9168               .offset = 246,
9169               .category = &panfrost_perf_config_tnox.categories[2],
9170            }, // counter
9171            {
9172               .name = "Fragment external read beats",
9173               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
9174               .symbol_name = "beats_rd_ftc_ext",
9175               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9176               .offset = 247,
9177               .category = &panfrost_perf_config_tnox.categories[2],
9178            }, // counter
9179            {
9180               .name = "Load/store L2 read beats",
9181               .desc = "The number of read beats received by the load/store unit.",
9182               .symbol_name = "beats_rd_lsc",
9183               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9184               .offset = 248,
9185               .category = &panfrost_perf_config_tnox.categories[2],
9186            }, // counter
9187            {
9188               .name = "Load/store external read beats",
9189               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
9190               .symbol_name = "beats_rd_lsc_ext",
9191               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9192               .offset = 249,
9193               .category = &panfrost_perf_config_tnox.categories[2],
9194            }, // counter
9195            {
9196               .name = "Texture L2 read beats",
9197               .desc = "The number of read beats received by the texture unit.",
9198               .symbol_name = "beats_rd_tex",
9199               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9200               .offset = 250,
9201               .category = &panfrost_perf_config_tnox.categories[2],
9202            }, // counter
9203            {
9204               .name = "Texture external read beats",
9205               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
9206               .symbol_name = "beats_rd_tex_ext",
9207               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9208               .offset = 251,
9209               .category = &panfrost_perf_config_tnox.categories[2],
9210            }, // counter
9211            {
9212               .name = "Other L2 read beats",
9213               .desc = "The number of read beats received by a unit that is not specifically identified.",
9214               .symbol_name = "beats_rd_other",
9215               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9216               .offset = 252,
9217               .category = &panfrost_perf_config_tnox.categories[2],
9218            }, // counter
9219            {
9220               .name = "Load/store other write beats",
9221               .desc = "The number of write beats by the load/store unit that are due to any reason other than writeback.",
9222               .symbol_name = "beats_wr_lsc_other",
9223               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9224               .offset = 253,
9225               .category = &panfrost_perf_config_tnox.categories[2],
9226            }, // counter
9227            {
9228               .name = "Tile buffer write beats",
9229               .desc = "The number of write beats sent by the tile buffer writeback unit.",
9230               .symbol_name = "beats_wr_tib",
9231               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9232               .offset = 254,
9233               .category = &panfrost_perf_config_tnox.categories[2],
9234            }, // counter
9235            {
9236               .name = "Load/store writeback write beats",
9237               .desc = "The number of write beats by the load/store unit that are due to writeback.",
9238               .symbol_name = "beats_wr_lsc_wb",
9239               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9240               .offset = 255,
9241               .category = &panfrost_perf_config_tnox.categories[2],
9242            }, // counter
9243         }, // counters
9244      }, // category
9245      {
9246         .name = "Memory System",
9247         .n_counters = 39,
9248         .counters = {
9249            {
9250               .name = "MMU lookups",
9251               .desc = "The number of main MMU address translations performed.",
9252               .symbol_name = "mmu_requests",
9253               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9254               .offset = 132,
9255               .category = &panfrost_perf_config_tnox.categories[3],
9256            }, // counter
9257            {
9258               .name = "Read requests",
9259               .desc = "The number of L2 cache read requests from internal masters.",
9260               .symbol_name = "l2_rd_msg_in",
9261               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9262               .offset = 144,
9263               .category = &panfrost_perf_config_tnox.categories[3],
9264            }, // counter
9265            {
9266               .name = "Read stall cycles",
9267               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
9268               .symbol_name = "l2_rd_msg_in_stall",
9269               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9270               .offset = 145,
9271               .category = &panfrost_perf_config_tnox.categories[3],
9272            }, // counter
9273            {
9274               .name = "Write requests",
9275               .desc = "The number of L2 cache write requests from internal masters.",
9276               .symbol_name = "l2_wr_msg_in",
9277               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9278               .offset = 146,
9279               .category = &panfrost_perf_config_tnox.categories[3],
9280            }, // counter
9281            {
9282               .name = "Write stall cycles",
9283               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
9284               .symbol_name = "l2_wr_msg_in_stall",
9285               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9286               .offset = 147,
9287               .category = &panfrost_perf_config_tnox.categories[3],
9288            }, // counter
9289            {
9290               .name = "Snoop requests",
9291               .desc = "The number of L2 snoop requests from internal masters.",
9292               .symbol_name = "l2_snp_msg_in",
9293               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9294               .offset = 148,
9295               .category = &panfrost_perf_config_tnox.categories[3],
9296            }, // counter
9297            {
9298               .name = "Snoop stall cycles",
9299               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
9300               .symbol_name = "l2_snp_msg_in_stall",
9301               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9302               .offset = 149,
9303               .category = &panfrost_perf_config_tnox.categories[3],
9304            }, // counter
9305            {
9306               .name = "L1 read requests",
9307               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
9308               .symbol_name = "l2_rd_msg_out",
9309               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9310               .offset = 150,
9311               .category = &panfrost_perf_config_tnox.categories[3],
9312            }, // counter
9313            {
9314               .name = "L1 read stall cycles",
9315               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
9316               .symbol_name = "l2_rd_msg_out_stall",
9317               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9318               .offset = 151,
9319               .category = &panfrost_perf_config_tnox.categories[3],
9320            }, // counter
9321            {
9322               .name = "L1 write requests",
9323               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
9324               .symbol_name = "l2_wr_msg_out",
9325               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9326               .offset = 152,
9327               .category = &panfrost_perf_config_tnox.categories[3],
9328            }, // counter
9329            {
9330               .name = "Any lookup",
9331               .desc = "The number of L2 cache lookups performed.",
9332               .symbol_name = "l2_any_lookup",
9333               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9334               .offset = 153,
9335               .category = &panfrost_perf_config_tnox.categories[3],
9336            }, // counter
9337            {
9338               .name = "Read lookup",
9339               .desc = "The number of L2 cache read lookups performed.",
9340               .symbol_name = "l2_read_lookup",
9341               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9342               .offset = 154,
9343               .category = &panfrost_perf_config_tnox.categories[3],
9344            }, // counter
9345            {
9346               .name = "Write lookup",
9347               .desc = "The number of L2 cache write lookups performed.",
9348               .symbol_name = "l2_write_lookup",
9349               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9350               .offset = 155,
9351               .category = &panfrost_perf_config_tnox.categories[3],
9352            }, // counter
9353            {
9354               .name = "External snoop lookups",
9355               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
9356               .symbol_name = "l2_ext_snoop_lookup",
9357               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9358               .offset = 156,
9359               .category = &panfrost_perf_config_tnox.categories[3],
9360            }, // counter
9361            {
9362               .name = "Read transaction",
9363               .desc = "The number of external read transactions.",
9364               .symbol_name = "l2_ext_read",
9365               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9366               .offset = 157,
9367               .category = &panfrost_perf_config_tnox.categories[3],
9368            }, // counter
9369            {
9370               .name = "ReadNoSnoop transactions",
9371               .desc = "The number of external non-coherent read transactions.",
9372               .symbol_name = "l2_ext_read_nosnp",
9373               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9374               .offset = 158,
9375               .category = &panfrost_perf_config_tnox.categories[3],
9376            }, // counter
9377            {
9378               .name = "ReadUnique transactions",
9379               .desc = "The number of external coherent read unique transactions.",
9380               .symbol_name = "l2_ext_read_unique",
9381               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9382               .offset = 159,
9383               .category = &panfrost_perf_config_tnox.categories[3],
9384            }, // counter
9385            {
9386               .name = "Read beat",
9387               .desc = "The number of external bus data read cycles.",
9388               .symbol_name = "l2_ext_read_beats",
9389               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9390               .offset = 160,
9391               .category = &panfrost_perf_config_tnox.categories[3],
9392            }, // counter
9393            {
9394               .name = "Read stall cycles",
9395               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
9396               .symbol_name = "l2_ext_ar_stall",
9397               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9398               .offset = 161,
9399               .category = &panfrost_perf_config_tnox.categories[3],
9400            }, // counter
9401            {
9402               .name = "0-25% outstanding",
9403               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
9404               .symbol_name = "l2_ext_ar_cnt_q1",
9405               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9406               .offset = 162,
9407               .category = &panfrost_perf_config_tnox.categories[3],
9408            }, // counter
9409            {
9410               .name = "25-50% outstanding",
9411               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
9412               .symbol_name = "l2_ext_ar_cnt_q2",
9413               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9414               .offset = 163,
9415               .category = &panfrost_perf_config_tnox.categories[3],
9416            }, // counter
9417            {
9418               .name = "50-75% outstanding",
9419               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
9420               .symbol_name = "l2_ext_ar_cnt_q3",
9421               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9422               .offset = 164,
9423               .category = &panfrost_perf_config_tnox.categories[3],
9424            }, // counter
9425            {
9426               .name = "0-127 cycles",
9427               .desc = "The number of data beats returned 0-127 cycles after the read request.",
9428               .symbol_name = "l2_ext_rresp_0_127",
9429               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9430               .offset = 165,
9431               .category = &panfrost_perf_config_tnox.categories[3],
9432            }, // counter
9433            {
9434               .name = "128-191 cycles",
9435               .desc = "The number of data beats returned 128-191 cycles after the read request.",
9436               .symbol_name = "l2_ext_rresp_128_191",
9437               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9438               .offset = 166,
9439               .category = &panfrost_perf_config_tnox.categories[3],
9440            }, // counter
9441            {
9442               .name = "192-255 cycles",
9443               .desc = "The number of data beats returned 192-255 cycles after the read request.",
9444               .symbol_name = "l2_ext_rresp_192_255",
9445               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9446               .offset = 167,
9447               .category = &panfrost_perf_config_tnox.categories[3],
9448            }, // counter
9449            {
9450               .name = "256-319 cycles",
9451               .desc = "The number of data beats returned 256-319 cycles after the read request.",
9452               .symbol_name = "l2_ext_rresp_256_319",
9453               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9454               .offset = 168,
9455               .category = &panfrost_perf_config_tnox.categories[3],
9456            }, // counter
9457            {
9458               .name = "320-383 cycles",
9459               .desc = "The number of data beats returned 320-383 cycles after the read request.",
9460               .symbol_name = "l2_ext_rresp_320_383",
9461               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9462               .offset = 169,
9463               .category = &panfrost_perf_config_tnox.categories[3],
9464            }, // counter
9465            {
9466               .name = "Write transaction",
9467               .desc = "The number of external write transactions.",
9468               .symbol_name = "l2_ext_write",
9469               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9470               .offset = 170,
9471               .category = &panfrost_perf_config_tnox.categories[3],
9472            }, // counter
9473            {
9474               .name = "WriteNoSnoopFull transactions",
9475               .desc = "The number of external non-coherent full write transactions.",
9476               .symbol_name = "l2_ext_write_nosnp_full",
9477               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9478               .offset = 171,
9479               .category = &panfrost_perf_config_tnox.categories[3],
9480            }, // counter
9481            {
9482               .name = "WriteNoSnoopPartial transactions",
9483               .desc = "The number of external non-coherent partial write transactions.",
9484               .symbol_name = "l2_ext_write_nosnp_ptl",
9485               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9486               .offset = 172,
9487               .category = &panfrost_perf_config_tnox.categories[3],
9488            }, // counter
9489            {
9490               .name = "WriteSnoopFull transactions",
9491               .desc = "The number of external coherent full write transactions.",
9492               .symbol_name = "l2_ext_write_snp_full",
9493               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9494               .offset = 173,
9495               .category = &panfrost_perf_config_tnox.categories[3],
9496            }, // counter
9497            {
9498               .name = "WriteSnoopPartial transactions",
9499               .desc = "The number of external coherent partial write transactions.",
9500               .symbol_name = "l2_ext_write_snp_ptl",
9501               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9502               .offset = 174,
9503               .category = &panfrost_perf_config_tnox.categories[3],
9504            }, // counter
9505            {
9506               .name = "Write beat",
9507               .desc = "The number of external bus data write cycles.",
9508               .symbol_name = "l2_ext_write_beats",
9509               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9510               .offset = 175,
9511               .category = &panfrost_perf_config_tnox.categories[3],
9512            }, // counter
9513            {
9514               .name = "Write stall cycles",
9515               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
9516               .symbol_name = "l2_ext_w_stall",
9517               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9518               .offset = 176,
9519               .category = &panfrost_perf_config_tnox.categories[3],
9520            }, // counter
9521            {
9522               .name = "0-25% outstanding",
9523               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
9524               .symbol_name = "l2_ext_aw_cnt_q1",
9525               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9526               .offset = 177,
9527               .category = &panfrost_perf_config_tnox.categories[3],
9528            }, // counter
9529            {
9530               .name = "25-50% outstanding",
9531               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
9532               .symbol_name = "l2_ext_aw_cnt_q2",
9533               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9534               .offset = 178,
9535               .category = &panfrost_perf_config_tnox.categories[3],
9536            }, // counter
9537            {
9538               .name = "50-75% outstanding",
9539               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
9540               .symbol_name = "l2_ext_aw_cnt_q3",
9541               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9542               .offset = 179,
9543               .category = &panfrost_perf_config_tnox.categories[3],
9544            }, // counter
9545            {
9546               .name = "Snoop transactions",
9547               .desc = "The number of coherency snoops triggered by external masters.",
9548               .symbol_name = "l2_ext_snoop",
9549               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9550               .offset = 180,
9551               .category = &panfrost_perf_config_tnox.categories[3],
9552            }, // counter
9553            {
9554               .name = "Snoop stall cycles",
9555               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
9556               .symbol_name = "l2_ext_snoop_stall",
9557               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9558               .offset = 181,
9559               .category = &panfrost_perf_config_tnox.categories[3],
9560            }, // counter
9561         }, // counters
9562      }, // category
9563   }, // categories
9564}; // panfrost_perf_config_tnox
9565
9566static void UNUSED
9567static_asserts_ttrx(void)
9568{
9569   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
9570   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
9571   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
9572   STATIC_ASSERT(59 <= PAN_PERF_MAX_COUNTERS);
9573   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
9574}
9575
9576const struct panfrost_perf_config panfrost_perf_config_ttrx = {
9577   .n_categories = 4,
9578   .categories = {
9579      {
9580         .name = "Job Manager",
9581         .n_counters = 23,
9582         .counters = {
9583            {
9584               .name = "GPU active",
9585               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
9586               .symbol_name = "gpu_active",
9587               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9588               .offset = 6,
9589               .category = &panfrost_perf_config_ttrx.categories[0],
9590            }, // counter
9591            {
9592               .name = "Interrupt active",
9593               .desc = "The number of cycles where the GPU has a pending interrupt.",
9594               .symbol_name = "irq_active",
9595               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9596               .offset = 7,
9597               .category = &panfrost_perf_config_ttrx.categories[0],
9598            }, // counter
9599            {
9600               .name = "Fragment jobs",
9601               .desc = "The number of jobs processed by the GPU fragment queue.",
9602               .symbol_name = "js0_jobs",
9603               .units = PAN_PERF_COUNTER_UNITS_JOBS,
9604               .offset = 8,
9605               .category = &panfrost_perf_config_ttrx.categories[0],
9606            }, // counter
9607            {
9608               .name = "Fragment tasks",
9609               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
9610               .symbol_name = "js0_tasks",
9611               .units = PAN_PERF_COUNTER_UNITS_TASKS,
9612               .offset = 9,
9613               .category = &panfrost_perf_config_ttrx.categories[0],
9614            }, // counter
9615            {
9616               .name = "Fragment queue active",
9617               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
9618               .symbol_name = "js0_active",
9619               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9620               .offset = 10,
9621               .category = &panfrost_perf_config_ttrx.categories[0],
9622            }, // counter
9623            {
9624               .name = "Fragment descriptor reads cycles",
9625               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
9626               .symbol_name = "js0_wait_read",
9627               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9628               .offset = 12,
9629               .category = &panfrost_perf_config_ttrx.categories[0],
9630            }, // counter
9631            {
9632               .name = "Fragment job issue cycles",
9633               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
9634               .symbol_name = "js0_wait_issue",
9635               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9636               .offset = 13,
9637               .category = &panfrost_perf_config_ttrx.categories[0],
9638            }, // counter
9639            {
9640               .name = "Fragment job dependency cycles",
9641               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
9642               .symbol_name = "js0_wait_depend",
9643               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9644               .offset = 14,
9645               .category = &panfrost_perf_config_ttrx.categories[0],
9646            }, // counter
9647            {
9648               .name = "Fragment job finish cycles",
9649               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
9650               .symbol_name = "js0_wait_finish",
9651               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9652               .offset = 15,
9653               .category = &panfrost_perf_config_ttrx.categories[0],
9654            }, // counter
9655            {
9656               .name = "Non-fragment jobs",
9657               .desc = "The number of jobs processed by the GPU non-fragment queue.",
9658               .symbol_name = "js1_jobs",
9659               .units = PAN_PERF_COUNTER_UNITS_JOBS,
9660               .offset = 16,
9661               .category = &panfrost_perf_config_ttrx.categories[0],
9662            }, // counter
9663            {
9664               .name = "Non-fragment tasks",
9665               .desc = "The number of tasks processed by the GPU non-fragment queue.",
9666               .symbol_name = "js1_tasks",
9667               .units = PAN_PERF_COUNTER_UNITS_TASKS,
9668               .offset = 17,
9669               .category = &panfrost_perf_config_ttrx.categories[0],
9670            }, // counter
9671            {
9672               .name = "Non-fragment queue active",
9673               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
9674               .symbol_name = "js1_active",
9675               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9676               .offset = 18,
9677               .category = &panfrost_perf_config_ttrx.categories[0],
9678            }, // counter
9679            {
9680               .name = "Non-fragment descriptor read cycles",
9681               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
9682               .symbol_name = "js1_wait_read",
9683               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9684               .offset = 20,
9685               .category = &panfrost_perf_config_ttrx.categories[0],
9686            }, // counter
9687            {
9688               .name = "Non-fragment job issue cycles",
9689               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
9690               .symbol_name = "js1_wait_issue",
9691               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9692               .offset = 21,
9693               .category = &panfrost_perf_config_ttrx.categories[0],
9694            }, // counter
9695            {
9696               .name = "Non-fragment job dependency cycles",
9697               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
9698               .symbol_name = "js1_wait_depend",
9699               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9700               .offset = 22,
9701               .category = &panfrost_perf_config_ttrx.categories[0],
9702            }, // counter
9703            {
9704               .name = "Non-fragment job finish cycles",
9705               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
9706               .symbol_name = "js1_wait_finish",
9707               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9708               .offset = 23,
9709               .category = &panfrost_perf_config_ttrx.categories[0],
9710            }, // counter
9711            {
9712               .name = "Reserved jobs",
9713               .desc = "The number of jobs processed by the GPU reserved queue.",
9714               .symbol_name = "js2_jobs",
9715               .units = PAN_PERF_COUNTER_UNITS_JOBS,
9716               .offset = 24,
9717               .category = &panfrost_perf_config_ttrx.categories[0],
9718            }, // counter
9719            {
9720               .name = "Reserved tasks",
9721               .desc = "The number of tasks processed by the GPU reserved queue.",
9722               .symbol_name = "js2_tasks",
9723               .units = PAN_PERF_COUNTER_UNITS_TASKS,
9724               .offset = 25,
9725               .category = &panfrost_perf_config_ttrx.categories[0],
9726            }, // counter
9727            {
9728               .name = "Reserved queue active",
9729               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
9730               .symbol_name = "js2_active",
9731               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9732               .offset = 26,
9733               .category = &panfrost_perf_config_ttrx.categories[0],
9734            }, // counter
9735            {
9736               .name = "Reserved descriptor read cycles",
9737               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
9738               .symbol_name = "js2_wait_read",
9739               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9740               .offset = 28,
9741               .category = &panfrost_perf_config_ttrx.categories[0],
9742            }, // counter
9743            {
9744               .name = "Reserved job issue cycles",
9745               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
9746               .symbol_name = "js2_wait_issue",
9747               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9748               .offset = 29,
9749               .category = &panfrost_perf_config_ttrx.categories[0],
9750            }, // counter
9751            {
9752               .name = "Reserved job dependency cycles",
9753               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
9754               .symbol_name = "js2_wait_depend",
9755               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9756               .offset = 30,
9757               .category = &panfrost_perf_config_ttrx.categories[0],
9758            }, // counter
9759            {
9760               .name = "Reserved job finish cycles",
9761               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
9762               .symbol_name = "js2_wait_finish",
9763               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9764               .offset = 31,
9765               .category = &panfrost_perf_config_ttrx.categories[0],
9766            }, // counter
9767         }, // counters
9768      }, // category
9769      {
9770         .name = "Memory System",
9771         .n_counters = 39,
9772         .counters = {
9773            {
9774               .name = "MMU lookups",
9775               .desc = "The number of main MMU address translations performed.",
9776               .symbol_name = "mmu_requests",
9777               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9778               .offset = 196,
9779               .category = &panfrost_perf_config_ttrx.categories[1],
9780            }, // counter
9781            {
9782               .name = "Read requests",
9783               .desc = "The number of L2 cache read requests from internal masters.",
9784               .symbol_name = "l2_rd_msg_in",
9785               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9786               .offset = 208,
9787               .category = &panfrost_perf_config_ttrx.categories[1],
9788            }, // counter
9789            {
9790               .name = "Read stall cycles",
9791               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
9792               .symbol_name = "l2_rd_msg_in_stall",
9793               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9794               .offset = 209,
9795               .category = &panfrost_perf_config_ttrx.categories[1],
9796            }, // counter
9797            {
9798               .name = "Write requests",
9799               .desc = "The number of L2 cache write requests from internal masters.",
9800               .symbol_name = "l2_wr_msg_in",
9801               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9802               .offset = 210,
9803               .category = &panfrost_perf_config_ttrx.categories[1],
9804            }, // counter
9805            {
9806               .name = "Write stall cycles",
9807               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
9808               .symbol_name = "l2_wr_msg_in_stall",
9809               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9810               .offset = 211,
9811               .category = &panfrost_perf_config_ttrx.categories[1],
9812            }, // counter
9813            {
9814               .name = "Snoop requests",
9815               .desc = "The number of L2 snoop requests from internal masters.",
9816               .symbol_name = "l2_snp_msg_in",
9817               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9818               .offset = 212,
9819               .category = &panfrost_perf_config_ttrx.categories[1],
9820            }, // counter
9821            {
9822               .name = "Snoop stall cycles",
9823               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
9824               .symbol_name = "l2_snp_msg_in_stall",
9825               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9826               .offset = 213,
9827               .category = &panfrost_perf_config_ttrx.categories[1],
9828            }, // counter
9829            {
9830               .name = "L1 read requests",
9831               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
9832               .symbol_name = "l2_rd_msg_out",
9833               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9834               .offset = 214,
9835               .category = &panfrost_perf_config_ttrx.categories[1],
9836            }, // counter
9837            {
9838               .name = "L1 read stall cycles",
9839               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
9840               .symbol_name = "l2_rd_msg_out_stall",
9841               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9842               .offset = 215,
9843               .category = &panfrost_perf_config_ttrx.categories[1],
9844            }, // counter
9845            {
9846               .name = "L1 write requests",
9847               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
9848               .symbol_name = "l2_wr_msg_out",
9849               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9850               .offset = 216,
9851               .category = &panfrost_perf_config_ttrx.categories[1],
9852            }, // counter
9853            {
9854               .name = "Any lookup",
9855               .desc = "The number of L2 cache lookups performed.",
9856               .symbol_name = "l2_any_lookup",
9857               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9858               .offset = 217,
9859               .category = &panfrost_perf_config_ttrx.categories[1],
9860            }, // counter
9861            {
9862               .name = "Read lookup",
9863               .desc = "The number of L2 cache read lookups performed.",
9864               .symbol_name = "l2_read_lookup",
9865               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9866               .offset = 218,
9867               .category = &panfrost_perf_config_ttrx.categories[1],
9868            }, // counter
9869            {
9870               .name = "Write lookup",
9871               .desc = "The number of L2 cache write lookups performed.",
9872               .symbol_name = "l2_write_lookup",
9873               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9874               .offset = 219,
9875               .category = &panfrost_perf_config_ttrx.categories[1],
9876            }, // counter
9877            {
9878               .name = "External snoop lookups",
9879               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
9880               .symbol_name = "l2_ext_snoop_lookup",
9881               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
9882               .offset = 220,
9883               .category = &panfrost_perf_config_ttrx.categories[1],
9884            }, // counter
9885            {
9886               .name = "Read transaction",
9887               .desc = "The number of external read transactions.",
9888               .symbol_name = "l2_ext_read",
9889               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9890               .offset = 221,
9891               .category = &panfrost_perf_config_ttrx.categories[1],
9892            }, // counter
9893            {
9894               .name = "ReadNoSnoop transactions",
9895               .desc = "The number of external non-coherent read transactions.",
9896               .symbol_name = "l2_ext_read_nosnp",
9897               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9898               .offset = 222,
9899               .category = &panfrost_perf_config_ttrx.categories[1],
9900            }, // counter
9901            {
9902               .name = "ReadUnique transactions",
9903               .desc = "The number of external coherent read unique transactions.",
9904               .symbol_name = "l2_ext_read_unique",
9905               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9906               .offset = 223,
9907               .category = &panfrost_perf_config_ttrx.categories[1],
9908            }, // counter
9909            {
9910               .name = "Read beat",
9911               .desc = "The number of external bus data read cycles.",
9912               .symbol_name = "l2_ext_read_beats",
9913               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9914               .offset = 224,
9915               .category = &panfrost_perf_config_ttrx.categories[1],
9916            }, // counter
9917            {
9918               .name = "Read stall cycles",
9919               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
9920               .symbol_name = "l2_ext_ar_stall",
9921               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
9922               .offset = 225,
9923               .category = &panfrost_perf_config_ttrx.categories[1],
9924            }, // counter
9925            {
9926               .name = "0-25% outstanding",
9927               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
9928               .symbol_name = "l2_ext_ar_cnt_q1",
9929               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9930               .offset = 226,
9931               .category = &panfrost_perf_config_ttrx.categories[1],
9932            }, // counter
9933            {
9934               .name = "25-50% outstanding",
9935               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
9936               .symbol_name = "l2_ext_ar_cnt_q2",
9937               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9938               .offset = 227,
9939               .category = &panfrost_perf_config_ttrx.categories[1],
9940            }, // counter
9941            {
9942               .name = "50-75% outstanding",
9943               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
9944               .symbol_name = "l2_ext_ar_cnt_q3",
9945               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9946               .offset = 228,
9947               .category = &panfrost_perf_config_ttrx.categories[1],
9948            }, // counter
9949            {
9950               .name = "0-127 cycles",
9951               .desc = "The number of data beats returned 0-127 cycles after the read request.",
9952               .symbol_name = "l2_ext_rresp_0_127",
9953               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9954               .offset = 229,
9955               .category = &panfrost_perf_config_ttrx.categories[1],
9956            }, // counter
9957            {
9958               .name = "128-191 cycles",
9959               .desc = "The number of data beats returned 128-191 cycles after the read request.",
9960               .symbol_name = "l2_ext_rresp_128_191",
9961               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9962               .offset = 230,
9963               .category = &panfrost_perf_config_ttrx.categories[1],
9964            }, // counter
9965            {
9966               .name = "192-255 cycles",
9967               .desc = "The number of data beats returned 192-255 cycles after the read request.",
9968               .symbol_name = "l2_ext_rresp_192_255",
9969               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9970               .offset = 231,
9971               .category = &panfrost_perf_config_ttrx.categories[1],
9972            }, // counter
9973            {
9974               .name = "256-319 cycles",
9975               .desc = "The number of data beats returned 256-319 cycles after the read request.",
9976               .symbol_name = "l2_ext_rresp_256_319",
9977               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9978               .offset = 232,
9979               .category = &panfrost_perf_config_ttrx.categories[1],
9980            }, // counter
9981            {
9982               .name = "320-383 cycles",
9983               .desc = "The number of data beats returned 320-383 cycles after the read request.",
9984               .symbol_name = "l2_ext_rresp_320_383",
9985               .units = PAN_PERF_COUNTER_UNITS_BEATS,
9986               .offset = 233,
9987               .category = &panfrost_perf_config_ttrx.categories[1],
9988            }, // counter
9989            {
9990               .name = "Write transaction",
9991               .desc = "The number of external write transactions.",
9992               .symbol_name = "l2_ext_write",
9993               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
9994               .offset = 234,
9995               .category = &panfrost_perf_config_ttrx.categories[1],
9996            }, // counter
9997            {
9998               .name = "WriteNoSnoopFull transactions",
9999               .desc = "The number of external non-coherent full write transactions.",
10000               .symbol_name = "l2_ext_write_nosnp_full",
10001               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
10002               .offset = 235,
10003               .category = &panfrost_perf_config_ttrx.categories[1],
10004            }, // counter
10005            {
10006               .name = "WriteNoSnoopPartial transactions",
10007               .desc = "The number of external non-coherent partial write transactions.",
10008               .symbol_name = "l2_ext_write_nosnp_ptl",
10009               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
10010               .offset = 236,
10011               .category = &panfrost_perf_config_ttrx.categories[1],
10012            }, // counter
10013            {
10014               .name = "WriteSnoopFull transactions",
10015               .desc = "The number of external coherent full write transactions.",
10016               .symbol_name = "l2_ext_write_snp_full",
10017               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
10018               .offset = 237,
10019               .category = &panfrost_perf_config_ttrx.categories[1],
10020            }, // counter
10021            {
10022               .name = "WriteSnoopPartial transactions",
10023               .desc = "The number of external coherent partial write transactions.",
10024               .symbol_name = "l2_ext_write_snp_ptl",
10025               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
10026               .offset = 238,
10027               .category = &panfrost_perf_config_ttrx.categories[1],
10028            }, // counter
10029            {
10030               .name = "Write beat",
10031               .desc = "The number of external bus data write cycles.",
10032               .symbol_name = "l2_ext_write_beats",
10033               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10034               .offset = 239,
10035               .category = &panfrost_perf_config_ttrx.categories[1],
10036            }, // counter
10037            {
10038               .name = "Write stall cycles",
10039               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
10040               .symbol_name = "l2_ext_w_stall",
10041               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10042               .offset = 240,
10043               .category = &panfrost_perf_config_ttrx.categories[1],
10044            }, // counter
10045            {
10046               .name = "0-25% outstanding",
10047               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
10048               .symbol_name = "l2_ext_aw_cnt_q1",
10049               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
10050               .offset = 241,
10051               .category = &panfrost_perf_config_ttrx.categories[1],
10052            }, // counter
10053            {
10054               .name = "25-50% outstanding",
10055               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
10056               .symbol_name = "l2_ext_aw_cnt_q2",
10057               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
10058               .offset = 242,
10059               .category = &panfrost_perf_config_ttrx.categories[1],
10060            }, // counter
10061            {
10062               .name = "50-75% outstanding",
10063               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
10064               .symbol_name = "l2_ext_aw_cnt_q3",
10065               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
10066               .offset = 243,
10067               .category = &panfrost_perf_config_ttrx.categories[1],
10068            }, // counter
10069            {
10070               .name = "Snoop transactions",
10071               .desc = "The number of coherency snoops triggered by external masters.",
10072               .symbol_name = "l2_ext_snoop",
10073               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
10074               .offset = 244,
10075               .category = &panfrost_perf_config_ttrx.categories[1],
10076            }, // counter
10077            {
10078               .name = "Snoop stall cycles",
10079               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
10080               .symbol_name = "l2_ext_snoop_stall",
10081               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10082               .offset = 245,
10083               .category = &panfrost_perf_config_ttrx.categories[1],
10084            }, // counter
10085         }, // counters
10086      }, // category
10087      {
10088         .name = "Shader Core",
10089         .n_counters = 59,
10090         .counters = {
10091            {
10092               .name = "Fragment active",
10093               .desc = "The number of cycles where the shader core is processing a fragment workload.",
10094               .symbol_name = "frag_active",
10095               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10096               .offset = 196,
10097               .category = &panfrost_perf_config_ttrx.categories[2],
10098            }, // counter
10099            {
10100               .name = "Read primitives",
10101               .desc = "The number of primitives read from the tile list by the fragment front-end.",
10102               .symbol_name = "frag_primitives_out",
10103               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10104               .offset = 197,
10105               .category = &panfrost_perf_config_ttrx.categories[2],
10106            }, // counter
10107            {
10108               .name = "Rasterized primitives",
10109               .desc = "The number of primitives being rasterized.",
10110               .symbol_name = "frag_prim_rast",
10111               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10112               .offset = 198,
10113               .category = &panfrost_perf_config_ttrx.categories[2],
10114            }, // counter
10115            {
10116               .name = "Fragment FPKB active",
10117               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
10118               .symbol_name = "frag_fpk_active",
10119               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10120               .offset = 199,
10121               .category = &panfrost_perf_config_ttrx.categories[2],
10122            }, // counter
10123            {
10124               .name = "Fragment warps",
10125               .desc = "The number of fragment warps created.",
10126               .symbol_name = "frag_warps",
10127               .units = PAN_PERF_COUNTER_UNITS_WARPS,
10128               .offset = 201,
10129               .category = &panfrost_perf_config_ttrx.categories[2],
10130            }, // counter
10131            {
10132               .name = "Partial rasterized quads",
10133               .desc = "The number of partially-rasterized fragment quads created.",
10134               .symbol_name = "frag_partial_quads_rast",
10135               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10136               .offset = 202,
10137               .category = &panfrost_perf_config_ttrx.categories[2],
10138            }, // counter
10139            {
10140               .name = "Rasterized quads",
10141               .desc = "The number of quads generated by the rasterization phase.",
10142               .symbol_name = "frag_quads_rast",
10143               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10144               .offset = 203,
10145               .category = &panfrost_perf_config_ttrx.categories[2],
10146            }, // counter
10147            {
10148               .name = "Early ZS tested quads",
10149               .desc = "The number of quads that are undergoing early depth and stencil testing.",
10150               .symbol_name = "frag_quads_ezs_test",
10151               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10152               .offset = 204,
10153               .category = &panfrost_perf_config_ttrx.categories[2],
10154            }, // counter
10155            {
10156               .name = "Early ZS updated quads",
10157               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
10158               .symbol_name = "frag_quads_ezs_update",
10159               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10160               .offset = 205,
10161               .category = &panfrost_perf_config_ttrx.categories[2],
10162            }, // counter
10163            {
10164               .name = "Early ZS killed quads",
10165               .desc = "The number of quads killed by early depth and stencil testing.",
10166               .symbol_name = "frag_quads_ezs_kill",
10167               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10168               .offset = 206,
10169               .category = &panfrost_perf_config_ttrx.categories[2],
10170            }, // counter
10171            {
10172               .name = "Late ZS tested quads",
10173               .desc = "The number of quads undergoing late depth and stencil testing.",
10174               .symbol_name = "frag_lzs_test",
10175               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10176               .offset = 207,
10177               .category = &panfrost_perf_config_ttrx.categories[2],
10178            }, // counter
10179            {
10180               .name = "Late ZS killed quads",
10181               .desc = "The number of quads killed by late depth and stencil testing.",
10182               .symbol_name = "frag_lzs_kill",
10183               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10184               .offset = 208,
10185               .category = &panfrost_perf_config_ttrx.categories[2],
10186            }, // counter
10187            {
10188               .name = "All register warps",
10189               .desc = "The number of warps that require more than 32 registers.",
10190               .symbol_name = "warp_reg_size_64",
10191               .units = PAN_PERF_COUNTER_UNITS_WARPS,
10192               .offset = 209,
10193               .category = &panfrost_perf_config_ttrx.categories[2],
10194            }, // counter
10195            {
10196               .name = "Tiles",
10197               .desc = "The number of tiles processed by the shader core.",
10198               .symbol_name = "frag_ptiles",
10199               .units = PAN_PERF_COUNTER_UNITS_TILES,
10200               .offset = 210,
10201               .category = &panfrost_perf_config_ttrx.categories[2],
10202            }, // counter
10203            {
10204               .name = "Constant tiles killed",
10205               .desc = "The number of tiles killed by transaction elimination.",
10206               .symbol_name = "frag_trans_elim",
10207               .units = PAN_PERF_COUNTER_UNITS_TILES,
10208               .offset = 211,
10209               .category = &panfrost_perf_config_ttrx.categories[2],
10210            }, // counter
10211            {
10212               .name = "FPK occluder quads",
10213               .desc = "The number of quads that are valid occluders for hidden surface removal.",
10214               .symbol_name = "quad_fpk_killer",
10215               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10216               .offset = 212,
10217               .category = &panfrost_perf_config_ttrx.categories[2],
10218            }, // counter
10219            {
10220               .name = "Full quad warps",
10221               .desc = "The number of warps that are fully populated with quads.",
10222               .symbol_name = "full_quad_warps",
10223               .units = PAN_PERF_COUNTER_UNITS_WARPS,
10224               .offset = 213,
10225               .category = &panfrost_perf_config_ttrx.categories[2],
10226            }, // counter
10227            {
10228               .name = "Non-fragment active",
10229               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
10230               .symbol_name = "compute_active",
10231               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10232               .offset = 214,
10233               .category = &panfrost_perf_config_ttrx.categories[2],
10234            }, // counter
10235            {
10236               .name = "Non-fragment tasks",
10237               .desc = "The number of non-fragment tasks issued to the shader core.",
10238               .symbol_name = "compute_tasks",
10239               .units = PAN_PERF_COUNTER_UNITS_TASKS,
10240               .offset = 215,
10241               .category = &panfrost_perf_config_ttrx.categories[2],
10242            }, // counter
10243            {
10244               .name = "Non-fragment warps",
10245               .desc = "The number of non-fragment warps created.",
10246               .symbol_name = "compute_warps",
10247               .units = PAN_PERF_COUNTER_UNITS_WARPS,
10248               .offset = 216,
10249               .category = &panfrost_perf_config_ttrx.categories[2],
10250            }, // counter
10251            {
10252               .name = "Non-fragment starvation cycles",
10253               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
10254               .symbol_name = "compute_starving",
10255               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10256               .offset = 217,
10257               .category = &panfrost_perf_config_ttrx.categories[2],
10258            }, // counter
10259            {
10260               .name = "Execution core active",
10261               .desc = "The number of cycles where the shader core is processing at least one warp.",
10262               .symbol_name = "exec_core_active",
10263               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10264               .offset = 218,
10265               .category = &panfrost_perf_config_ttrx.categories[2],
10266            }, // counter
10267            {
10268               .name = "FMA instructions",
10269               .desc = "The number of instructions issued to the FMA pipe.",
10270               .symbol_name = "exec_instr_fma",
10271               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10272               .offset = 219,
10273               .category = &panfrost_perf_config_ttrx.categories[2],
10274            }, // counter
10275            {
10276               .name = "CVT instructions",
10277               .desc = "The number of instructions issued to the CVT pipe.",
10278               .symbol_name = "exec_instr_cvt",
10279               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10280               .offset = 220,
10281               .category = &panfrost_perf_config_ttrx.categories[2],
10282            }, // counter
10283            {
10284               .name = "SFU instructions",
10285               .desc = "The number of instructions issued to the SFU pipe.",
10286               .symbol_name = "exec_instr_sfu",
10287               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10288               .offset = 221,
10289               .category = &panfrost_perf_config_ttrx.categories[2],
10290            }, // counter
10291            {
10292               .name = "Message instructions",
10293               .desc = "The number of instructions issued to the MSG pipe.",
10294               .symbol_name = "exec_instr_msg",
10295               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10296               .offset = 222,
10297               .category = &panfrost_perf_config_ttrx.categories[2],
10298            }, // counter
10299            {
10300               .name = "Diverged instructions",
10301               .desc = "The number of instructions executed per warp, that have control flow divergence.",
10302               .symbol_name = "exec_instr_diverged",
10303               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10304               .offset = 223,
10305               .category = &panfrost_perf_config_ttrx.categories[2],
10306            }, // counter
10307            {
10308               .name = "Instruction cache misses",
10309               .desc = "The number of instruction cache misses.",
10310               .symbol_name = "exec_icache_miss",
10311               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10312               .offset = 224,
10313               .category = &panfrost_perf_config_ttrx.categories[2],
10314            }, // counter
10315            {
10316               .name = "Execution engine starvation cycles",
10317               .desc = "The number of cycles where the processing unit is starved of work.",
10318               .symbol_name = "exec_starve_arith",
10319               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10320               .offset = 225,
10321               .category = &panfrost_perf_config_ttrx.categories[2],
10322            }, // counter
10323            {
10324               .name = "Blend shader calls",
10325               .desc = "The number of blend shader invocations executed.",
10326               .symbol_name = "call_blend_shader",
10327               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10328               .offset = 226,
10329               .category = &panfrost_perf_config_ttrx.categories[2],
10330            }, // counter
10331            {
10332               .name = "Input beats",
10333               .desc = "The number of texture request message data beats.",
10334               .symbol_name = "tex_msgi_num_flits",
10335               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10336               .offset = 227,
10337               .category = &panfrost_perf_config_ttrx.categories[2],
10338            }, // counter
10339            {
10340               .name = "Descriptor stall cycles",
10341               .desc = "The number of cycles where a quad is stalled on texture descriptor fetch.",
10342               .symbol_name = "tex_dfch_clk_stalled",
10343               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10344               .offset = 228,
10345               .category = &panfrost_perf_config_ttrx.categories[2],
10346            }, // counter
10347            {
10348               .name = "Fetch queue stall cycles",
10349               .desc = "The number of cycles where a quad is stalled on entering texture fetch because the fetch queue is full.",
10350               .symbol_name = "tex_tfch_clk_stalled",
10351               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10352               .offset = 229,
10353               .category = &panfrost_perf_config_ttrx.categories[2],
10354            }, // counter
10355            {
10356               .name = "Filtering unit stall cycles",
10357               .desc = "The number of cycles where the filtering unit is idle and there is at least one quad present in the texture data fetch queue.",
10358               .symbol_name = "tex_tfch_starved_pending_data_fetch",
10359               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10360               .offset = 230,
10361               .category = &panfrost_perf_config_ttrx.categories[2],
10362            }, // counter
10363            {
10364               .name = "Texturing active",
10365               .desc = "The number of texture filtering issue cycles.",
10366               .symbol_name = "tex_filt_num_operations",
10367               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10368               .offset = 231,
10369               .category = &panfrost_perf_config_ttrx.categories[2],
10370            }, // counter
10371            {
10372               .name = "4x bilinear filtering active",
10373               .desc = "The number of cycles where the filtering unit uses the 4x path to implement nearest or bilinear filtering.",
10374               .symbol_name = "tex_filt_num_fxr_operations",
10375               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10376               .offset = 232,
10377               .category = &panfrost_perf_config_ttrx.categories[2],
10378            }, // counter
10379            {
10380               .name = "2x trilinear filtering active",
10381               .desc = "The number of cycles where the filtering unit uses the 4x path to implement trilinear filtering.",
10382               .symbol_name = "tex_filt_num_fst_operations",
10383               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10384               .offset = 233,
10385               .category = &panfrost_perf_config_ttrx.categories[2],
10386            }, // counter
10387            {
10388               .name = "Texture requests",
10389               .desc = "The number of quad-width texture operations processed by the texture unit.",
10390               .symbol_name = "tex_msgo_num_msg",
10391               .units = PAN_PERF_COUNTER_UNITS_QUADS,
10392               .offset = 234,
10393               .category = &panfrost_perf_config_ttrx.categories[2],
10394            }, // counter
10395            {
10396               .name = "Output beats",
10397               .desc = "The number of texture response message data beats.",
10398               .symbol_name = "tex_msgo_num_flits",
10399               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10400               .offset = 235,
10401               .category = &panfrost_perf_config_ttrx.categories[2],
10402            }, // counter
10403            {
10404               .name = "Full read cycles",
10405               .desc = "The number of full-width load/store cache reads.",
10406               .symbol_name = "ls_mem_read_full",
10407               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10408               .offset = 236,
10409               .category = &panfrost_perf_config_ttrx.categories[2],
10410            }, // counter
10411            {
10412               .name = "Partial read cycles",
10413               .desc = "The number of partial-width load/store cache reads.",
10414               .symbol_name = "ls_mem_read_short",
10415               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10416               .offset = 237,
10417               .category = &panfrost_perf_config_ttrx.categories[2],
10418            }, // counter
10419            {
10420               .name = "Full write cycles",
10421               .desc = "The number of full-width load/store cache writes.",
10422               .symbol_name = "ls_mem_write_full",
10423               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10424               .offset = 238,
10425               .category = &panfrost_perf_config_ttrx.categories[2],
10426            }, // counter
10427            {
10428               .name = "Partial write cycles",
10429               .desc = "The number of partial-width load/store cache writes.",
10430               .symbol_name = "ls_mem_write_short",
10431               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10432               .offset = 239,
10433               .category = &panfrost_perf_config_ttrx.categories[2],
10434            }, // counter
10435            {
10436               .name = "Atomic access cycles",
10437               .desc = "The number of load/store atomic accesses.",
10438               .symbol_name = "ls_mem_atomic",
10439               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10440               .offset = 240,
10441               .category = &panfrost_perf_config_ttrx.categories[2],
10442            }, // counter
10443            {
10444               .name = "Interpolation requests",
10445               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
10446               .symbol_name = "vary_instr",
10447               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10448               .offset = 241,
10449               .category = &panfrost_perf_config_ttrx.categories[2],
10450            }, // counter
10451            {
10452               .name = "32-bit interpolation active",
10453               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
10454               .symbol_name = "vary_slot_32",
10455               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10456               .offset = 242,
10457               .category = &panfrost_perf_config_ttrx.categories[2],
10458            }, // counter
10459            {
10460               .name = "16-bit interpolation active",
10461               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
10462               .symbol_name = "vary_slot_16",
10463               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10464               .offset = 243,
10465               .category = &panfrost_perf_config_ttrx.categories[2],
10466            }, // counter
10467            {
10468               .name = "Attribute requests",
10469               .desc = "The number of instructions executed by the attribute unit.",
10470               .symbol_name = "attr_instr",
10471               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10472               .offset = 244,
10473               .category = &panfrost_perf_config_ttrx.categories[2],
10474            }, // counter
10475            {
10476               .name = "Multiplier instructions",
10477               .desc = "The number of instructions where the workload uses floating-point multiplier hardware.",
10478               .symbol_name = "arith_instr_fp_mul",
10479               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
10480               .offset = 245,
10481               .category = &panfrost_perf_config_ttrx.categories[2],
10482            }, // counter
10483            {
10484               .name = "Fragment L2 read beats",
10485               .desc = "The number of read beats received by the fixed-function fragment front-end.",
10486               .symbol_name = "beats_rd_ftc",
10487               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10488               .offset = 246,
10489               .category = &panfrost_perf_config_ttrx.categories[2],
10490            }, // counter
10491            {
10492               .name = "Fragment external read beats",
10493               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
10494               .symbol_name = "beats_rd_ftc_ext",
10495               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10496               .offset = 247,
10497               .category = &panfrost_perf_config_ttrx.categories[2],
10498            }, // counter
10499            {
10500               .name = "Load/store L2 read beats",
10501               .desc = "The number of read beats received by the load/store unit.",
10502               .symbol_name = "beats_rd_lsc",
10503               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10504               .offset = 248,
10505               .category = &panfrost_perf_config_ttrx.categories[2],
10506            }, // counter
10507            {
10508               .name = "Load/store external read beats",
10509               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
10510               .symbol_name = "beats_rd_lsc_ext",
10511               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10512               .offset = 249,
10513               .category = &panfrost_perf_config_ttrx.categories[2],
10514            }, // counter
10515            {
10516               .name = "Texture L2 read beats",
10517               .desc = "The number of read beats received by the texture unit.",
10518               .symbol_name = "beats_rd_tex",
10519               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10520               .offset = 250,
10521               .category = &panfrost_perf_config_ttrx.categories[2],
10522            }, // counter
10523            {
10524               .name = "Texture external read beats",
10525               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
10526               .symbol_name = "beats_rd_tex_ext",
10527               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10528               .offset = 251,
10529               .category = &panfrost_perf_config_ttrx.categories[2],
10530            }, // counter
10531            {
10532               .name = "Other L2 read beats",
10533               .desc = "The number of read beats received by a unit that is not specifically identified.",
10534               .symbol_name = "beats_rd_other",
10535               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10536               .offset = 252,
10537               .category = &panfrost_perf_config_ttrx.categories[2],
10538            }, // counter
10539            {
10540               .name = "Load/store other write beats",
10541               .desc = "The number of write beats by the load/store unit that are due to any reason other than writeback.",
10542               .symbol_name = "beats_wr_lsc_other",
10543               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10544               .offset = 253,
10545               .category = &panfrost_perf_config_ttrx.categories[2],
10546            }, // counter
10547            {
10548               .name = "Tile buffer write beats",
10549               .desc = "The number of write beats sent by the tile buffer writeback unit.",
10550               .symbol_name = "beats_wr_tib",
10551               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10552               .offset = 254,
10553               .category = &panfrost_perf_config_ttrx.categories[2],
10554            }, // counter
10555            {
10556               .name = "Load/store writeback write beats",
10557               .desc = "The number of write beats by the load/store unit that are due to writeback.",
10558               .symbol_name = "beats_wr_lsc_wb",
10559               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10560               .offset = 255,
10561               .category = &panfrost_perf_config_ttrx.categories[2],
10562            }, // counter
10563         }, // counters
10564      }, // category
10565      {
10566         .name = "Tiler",
10567         .n_counters = 24,
10568         .counters = {
10569            {
10570               .name = "Tiler active",
10571               .desc = "The number of cycles where the tiler has a workload queued for processing.",
10572               .symbol_name = "tiler_active",
10573               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10574               .offset = 4,
10575               .category = &panfrost_perf_config_ttrx.categories[3],
10576            }, // counter
10577            {
10578               .name = "Triangle primitives",
10579               .desc = "The number of input triangle primitives.",
10580               .symbol_name = "triangles",
10581               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10582               .offset = 6,
10583               .category = &panfrost_perf_config_ttrx.categories[3],
10584            }, // counter
10585            {
10586               .name = "Line primitives",
10587               .desc = "The number of input line primitives.",
10588               .symbol_name = "lines",
10589               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10590               .offset = 7,
10591               .category = &panfrost_perf_config_ttrx.categories[3],
10592            }, // counter
10593            {
10594               .name = "Point primitives",
10595               .desc = "The number of input point primitives.",
10596               .symbol_name = "points",
10597               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10598               .offset = 8,
10599               .category = &panfrost_perf_config_ttrx.categories[3],
10600            }, // counter
10601            {
10602               .name = "Front-facing primitives",
10603               .desc = "The number of front-facing triangles that are visible after culling.",
10604               .symbol_name = "front_facing",
10605               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10606               .offset = 9,
10607               .category = &panfrost_perf_config_ttrx.categories[3],
10608            }, // counter
10609            {
10610               .name = "Back-facing primitives",
10611               .desc = "The number of back-facing triangles that are visible after culling.",
10612               .symbol_name = "back_facing",
10613               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10614               .offset = 10,
10615               .category = &panfrost_perf_config_ttrx.categories[3],
10616            }, // counter
10617            {
10618               .name = "Visible primitives",
10619               .desc = "The number of primitives that are visible after culling.",
10620               .symbol_name = "prim_visible",
10621               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10622               .offset = 11,
10623               .category = &panfrost_perf_config_ttrx.categories[3],
10624            }, // counter
10625            {
10626               .name = "Facing and XY plane test culled primitives",
10627               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
10628               .symbol_name = "prim_culled",
10629               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10630               .offset = 12,
10631               .category = &panfrost_perf_config_ttrx.categories[3],
10632            }, // counter
10633            {
10634               .name = "Z plane test culled primitives",
10635               .desc = "The number of primitives that are culled by frustum Z plane tests.",
10636               .symbol_name = "prim_clipped",
10637               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10638               .offset = 13,
10639               .category = &panfrost_perf_config_ttrx.categories[3],
10640            }, // counter
10641            {
10642               .name = "Sample test culled primitives",
10643               .desc = "The number of primitives culled by the sample coverage test.",
10644               .symbol_name = "prim_sat_culled",
10645               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
10646               .offset = 14,
10647               .category = &panfrost_perf_config_ttrx.categories[3],
10648            }, // counter
10649            {
10650               .name = "Read beats",
10651               .desc = "The number of internal bus data read cycles made by the tiler.",
10652               .symbol_name = "bus_read",
10653               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10654               .offset = 17,
10655               .category = &panfrost_perf_config_ttrx.categories[3],
10656            }, // counter
10657            {
10658               .name = "Write beats",
10659               .desc = "The number of internal bus data write cycles made by the tiler.",
10660               .symbol_name = "bus_write",
10661               .units = PAN_PERF_COUNTER_UNITS_BEATS,
10662               .offset = 19,
10663               .category = &panfrost_perf_config_ttrx.categories[3],
10664            }, // counter
10665            {
10666               .name = "Position shading requests",
10667               .desc = "The number of position shading requests in the IDVS flow.",
10668               .symbol_name = "idvs_pos_shad_req",
10669               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10670               .offset = 21,
10671               .category = &panfrost_perf_config_ttrx.categories[3],
10672            }, // counter
10673            {
10674               .name = "Position shading stall cycles",
10675               .desc = "The number of cycles where the tiler has a stalled position shading request.",
10676               .symbol_name = "idvs_pos_shad_stall",
10677               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10678               .offset = 23,
10679               .category = &panfrost_perf_config_ttrx.categories[3],
10680            }, // counter
10681            {
10682               .name = "Position FIFO full cycles",
10683               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
10684               .symbol_name = "idvs_pos_fifo_full",
10685               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10686               .offset = 24,
10687               .category = &panfrost_perf_config_ttrx.categories[3],
10688            }, // counter
10689            {
10690               .name = "Position cache hits",
10691               .desc = "The number of position lookups that result in a hit in the vertex cache.",
10692               .symbol_name = "vcache_hit",
10693               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10694               .offset = 26,
10695               .category = &panfrost_perf_config_ttrx.categories[3],
10696            }, // counter
10697            {
10698               .name = "Position cache misses",
10699               .desc = "The number of position lookups that miss in the vertex cache.",
10700               .symbol_name = "vcache_miss",
10701               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10702               .offset = 27,
10703               .category = &panfrost_perf_config_ttrx.categories[3],
10704            }, // counter
10705            {
10706               .name = "Primitive assembly busy stall cycles",
10707               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
10708               .symbol_name = "vfetch_stall",
10709               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10710               .offset = 31,
10711               .category = &panfrost_perf_config_ttrx.categories[3],
10712            }, // counter
10713            {
10714               .name = "Varying cache hits",
10715               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
10716               .symbol_name = "idvs_vbu_hit",
10717               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10718               .offset = 34,
10719               .category = &panfrost_perf_config_ttrx.categories[3],
10720            }, // counter
10721            {
10722               .name = "Varying cache misses",
10723               .desc = "The number of varying lookups that miss in the vertex cache.",
10724               .symbol_name = "idvs_vbu_miss",
10725               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10726               .offset = 35,
10727               .category = &panfrost_perf_config_ttrx.categories[3],
10728            }, // counter
10729            {
10730               .name = "Varying shading requests",
10731               .desc = "The number of varying shading requests in the IDVS flow.",
10732               .symbol_name = "idvs_var_shad_req",
10733               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10734               .offset = 37,
10735               .category = &panfrost_perf_config_ttrx.categories[3],
10736            }, // counter
10737            {
10738               .name = "Varying shading stall cycles",
10739               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
10740               .symbol_name = "idvs_var_shad_stall",
10741               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10742               .offset = 38,
10743               .category = &panfrost_perf_config_ttrx.categories[3],
10744            }, // counter
10745            {
10746               .name = "Write buffer transaction stall cycles",
10747               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
10748               .symbol_name = "wrbuf_no_axi_id_stall",
10749               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10750               .offset = 54,
10751               .category = &panfrost_perf_config_ttrx.categories[3],
10752            }, // counter
10753            {
10754               .name = "Write buffer write stall cycles",
10755               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
10756               .symbol_name = "wrbuf_axi_stall",
10757               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10758               .offset = 55,
10759               .category = &panfrost_perf_config_ttrx.categories[3],
10760            }, // counter
10761         }, // counters
10762      }, // category
10763   }, // categories
10764}; // panfrost_perf_config_ttrx
10765
10766static void UNUSED
10767static_asserts_tbox(void)
10768{
10769   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
10770   STATIC_ASSERT(23 <= PAN_PERF_MAX_COUNTERS);
10771   STATIC_ASSERT(39 <= PAN_PERF_MAX_COUNTERS);
10772   STATIC_ASSERT(59 <= PAN_PERF_MAX_COUNTERS);
10773   STATIC_ASSERT(24 <= PAN_PERF_MAX_COUNTERS);
10774}
10775
10776const struct panfrost_perf_config panfrost_perf_config_tbox = {
10777   .n_categories = 4,
10778   .categories = {
10779      {
10780         .name = "Job Manager",
10781         .n_counters = 23,
10782         .counters = {
10783            {
10784               .name = "GPU active",
10785               .desc = "The number of cycles where the GPU has a workload of any type queued for processing.",
10786               .symbol_name = "gpu_active",
10787               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10788               .offset = 6,
10789               .category = &panfrost_perf_config_tbox.categories[0],
10790            }, // counter
10791            {
10792               .name = "Interrupt active",
10793               .desc = "The number of cycles where the GPU has a pending interrupt.",
10794               .symbol_name = "irq_active",
10795               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10796               .offset = 7,
10797               .category = &panfrost_perf_config_tbox.categories[0],
10798            }, // counter
10799            {
10800               .name = "Fragment jobs",
10801               .desc = "The number of jobs processed by the GPU fragment queue.",
10802               .symbol_name = "js0_jobs",
10803               .units = PAN_PERF_COUNTER_UNITS_JOBS,
10804               .offset = 8,
10805               .category = &panfrost_perf_config_tbox.categories[0],
10806            }, // counter
10807            {
10808               .name = "Fragment tasks",
10809               .desc = "The number of 32x32 pixel tasks processed by the GPU fragment queue.",
10810               .symbol_name = "js0_tasks",
10811               .units = PAN_PERF_COUNTER_UNITS_TASKS,
10812               .offset = 9,
10813               .category = &panfrost_perf_config_tbox.categories[0],
10814            }, // counter
10815            {
10816               .name = "Fragment queue active",
10817               .desc = "The number of cycles where work is queued for processing in the GPU fragment queue.",
10818               .symbol_name = "js0_active",
10819               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10820               .offset = 10,
10821               .category = &panfrost_perf_config_tbox.categories[0],
10822            }, // counter
10823            {
10824               .name = "Fragment descriptor reads cycles",
10825               .desc = "The number of cycles where queued fragment work is waiting for a descriptor load.",
10826               .symbol_name = "js0_wait_read",
10827               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10828               .offset = 12,
10829               .category = &panfrost_perf_config_tbox.categories[0],
10830            }, // counter
10831            {
10832               .name = "Fragment job issue cycles",
10833               .desc = "The number of cycles where queued fragment work is waiting for an available processor.",
10834               .symbol_name = "js0_wait_issue",
10835               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10836               .offset = 13,
10837               .category = &panfrost_perf_config_tbox.categories[0],
10838            }, // counter
10839            {
10840               .name = "Fragment job dependency cycles",
10841               .desc = "The number of cycles where queued fragment work is waiting for dependent work to complete.",
10842               .symbol_name = "js0_wait_depend",
10843               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10844               .offset = 14,
10845               .category = &panfrost_perf_config_tbox.categories[0],
10846            }, // counter
10847            {
10848               .name = "Fragment job finish cycles",
10849               .desc = "The number of cycles where the GPU is waiting for issued fragment work to complete.",
10850               .symbol_name = "js0_wait_finish",
10851               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10852               .offset = 15,
10853               .category = &panfrost_perf_config_tbox.categories[0],
10854            }, // counter
10855            {
10856               .name = "Non-fragment jobs",
10857               .desc = "The number of jobs processed by the GPU non-fragment queue.",
10858               .symbol_name = "js1_jobs",
10859               .units = PAN_PERF_COUNTER_UNITS_JOBS,
10860               .offset = 16,
10861               .category = &panfrost_perf_config_tbox.categories[0],
10862            }, // counter
10863            {
10864               .name = "Non-fragment tasks",
10865               .desc = "The number of tasks processed by the GPU non-fragment queue.",
10866               .symbol_name = "js1_tasks",
10867               .units = PAN_PERF_COUNTER_UNITS_TASKS,
10868               .offset = 17,
10869               .category = &panfrost_perf_config_tbox.categories[0],
10870            }, // counter
10871            {
10872               .name = "Non-fragment queue active",
10873               .desc = "The number of cycles where work is queued in the GPU non-fragment queue.",
10874               .symbol_name = "js1_active",
10875               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10876               .offset = 18,
10877               .category = &panfrost_perf_config_tbox.categories[0],
10878            }, // counter
10879            {
10880               .name = "Non-fragment descriptor read cycles",
10881               .desc = "The number number of cycles where queued non-fragment work is waiting for a descriptor load.",
10882               .symbol_name = "js1_wait_read",
10883               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10884               .offset = 20,
10885               .category = &panfrost_perf_config_tbox.categories[0],
10886            }, // counter
10887            {
10888               .name = "Non-fragment job issue cycles",
10889               .desc = "The number of cycles where queued non-fragment work is waiting for an available processor.",
10890               .symbol_name = "js1_wait_issue",
10891               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10892               .offset = 21,
10893               .category = &panfrost_perf_config_tbox.categories[0],
10894            }, // counter
10895            {
10896               .name = "Non-fragment job dependency cycles",
10897               .desc = "The number of cycles where queued non-fragment work is waiting for dependent work to complete.",
10898               .symbol_name = "js1_wait_depend",
10899               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10900               .offset = 22,
10901               .category = &panfrost_perf_config_tbox.categories[0],
10902            }, // counter
10903            {
10904               .name = "Non-fragment job finish cycles",
10905               .desc = "The number of cycles where the GPU is waiting for issued non-fragment work to complete.",
10906               .symbol_name = "js1_wait_finish",
10907               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10908               .offset = 23,
10909               .category = &panfrost_perf_config_tbox.categories[0],
10910            }, // counter
10911            {
10912               .name = "Reserved jobs",
10913               .desc = "The number of jobs processed by the GPU reserved queue.",
10914               .symbol_name = "js2_jobs",
10915               .units = PAN_PERF_COUNTER_UNITS_JOBS,
10916               .offset = 24,
10917               .category = &panfrost_perf_config_tbox.categories[0],
10918            }, // counter
10919            {
10920               .name = "Reserved tasks",
10921               .desc = "The number of tasks processed by the GPU reserved queue.",
10922               .symbol_name = "js2_tasks",
10923               .units = PAN_PERF_COUNTER_UNITS_TASKS,
10924               .offset = 25,
10925               .category = &panfrost_perf_config_tbox.categories[0],
10926            }, // counter
10927            {
10928               .name = "Reserved queue active",
10929               .desc = "The number of cycles where work is queued in the GPU reserved queue.",
10930               .symbol_name = "js2_active",
10931               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10932               .offset = 26,
10933               .category = &panfrost_perf_config_tbox.categories[0],
10934            }, // counter
10935            {
10936               .name = "Reserved descriptor read cycles",
10937               .desc = "The number of cycles where queued reserved work is waiting for a descriptor load.",
10938               .symbol_name = "js2_wait_read",
10939               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10940               .offset = 28,
10941               .category = &panfrost_perf_config_tbox.categories[0],
10942            }, // counter
10943            {
10944               .name = "Reserved job issue cycles",
10945               .desc = "The number of cycles where queued reserved work is waiting for an available processor.",
10946               .symbol_name = "js2_wait_issue",
10947               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10948               .offset = 29,
10949               .category = &panfrost_perf_config_tbox.categories[0],
10950            }, // counter
10951            {
10952               .name = "Reserved job dependency cycles",
10953               .desc = "The number of cycles where queued reserved work is waiting for dependent work to complete.",
10954               .symbol_name = "js2_wait_depend",
10955               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10956               .offset = 30,
10957               .category = &panfrost_perf_config_tbox.categories[0],
10958            }, // counter
10959            {
10960               .name = "Reserved job finish cycles",
10961               .desc = "The number of cycles where the GPU is waiting for issued reserved work to complete.",
10962               .symbol_name = "js2_wait_finish",
10963               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10964               .offset = 31,
10965               .category = &panfrost_perf_config_tbox.categories[0],
10966            }, // counter
10967         }, // counters
10968      }, // category
10969      {
10970         .name = "Memory System",
10971         .n_counters = 39,
10972         .counters = {
10973            {
10974               .name = "MMU lookups",
10975               .desc = "The number of main MMU address translations performed.",
10976               .symbol_name = "mmu_requests",
10977               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10978               .offset = 196,
10979               .category = &panfrost_perf_config_tbox.categories[1],
10980            }, // counter
10981            {
10982               .name = "Read requests",
10983               .desc = "The number of L2 cache read requests from internal masters.",
10984               .symbol_name = "l2_rd_msg_in",
10985               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
10986               .offset = 208,
10987               .category = &panfrost_perf_config_tbox.categories[1],
10988            }, // counter
10989            {
10990               .name = "Read stall cycles",
10991               .desc = "The number of cycles L2 cache read requests from internal masters are stalled.",
10992               .symbol_name = "l2_rd_msg_in_stall",
10993               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
10994               .offset = 209,
10995               .category = &panfrost_perf_config_tbox.categories[1],
10996            }, // counter
10997            {
10998               .name = "Write requests",
10999               .desc = "The number of L2 cache write requests from internal masters.",
11000               .symbol_name = "l2_wr_msg_in",
11001               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11002               .offset = 210,
11003               .category = &panfrost_perf_config_tbox.categories[1],
11004            }, // counter
11005            {
11006               .name = "Write stall cycles",
11007               .desc = "The number of cycles where L2 cache write requests from internal masters are stalled.",
11008               .symbol_name = "l2_wr_msg_in_stall",
11009               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11010               .offset = 211,
11011               .category = &panfrost_perf_config_tbox.categories[1],
11012            }, // counter
11013            {
11014               .name = "Snoop requests",
11015               .desc = "The number of L2 snoop requests from internal masters.",
11016               .symbol_name = "l2_snp_msg_in",
11017               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11018               .offset = 212,
11019               .category = &panfrost_perf_config_tbox.categories[1],
11020            }, // counter
11021            {
11022               .name = "Snoop stall cycles",
11023               .desc = "The number of cycles where L2 cache snoop requests from internal masters are stalled.",
11024               .symbol_name = "l2_snp_msg_in_stall",
11025               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11026               .offset = 213,
11027               .category = &panfrost_perf_config_tbox.categories[1],
11028            }, // counter
11029            {
11030               .name = "L1 read requests",
11031               .desc = "The number of L1 cache read requests sent by the L2 cache to an internal master.",
11032               .symbol_name = "l2_rd_msg_out",
11033               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11034               .offset = 214,
11035               .category = &panfrost_perf_config_tbox.categories[1],
11036            }, // counter
11037            {
11038               .name = "L1 read stall cycles",
11039               .desc = "The number of cycles where L1 cache read requests sent by the L2 cache to an internal master are stalled.",
11040               .symbol_name = "l2_rd_msg_out_stall",
11041               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11042               .offset = 215,
11043               .category = &panfrost_perf_config_tbox.categories[1],
11044            }, // counter
11045            {
11046               .name = "L1 write requests",
11047               .desc = "The number of L1 cache write responses sent by the L2 cache to an internal master.",
11048               .symbol_name = "l2_wr_msg_out",
11049               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11050               .offset = 216,
11051               .category = &panfrost_perf_config_tbox.categories[1],
11052            }, // counter
11053            {
11054               .name = "Any lookup",
11055               .desc = "The number of L2 cache lookups performed.",
11056               .symbol_name = "l2_any_lookup",
11057               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11058               .offset = 217,
11059               .category = &panfrost_perf_config_tbox.categories[1],
11060            }, // counter
11061            {
11062               .name = "Read lookup",
11063               .desc = "The number of L2 cache read lookups performed.",
11064               .symbol_name = "l2_read_lookup",
11065               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11066               .offset = 218,
11067               .category = &panfrost_perf_config_tbox.categories[1],
11068            }, // counter
11069            {
11070               .name = "Write lookup",
11071               .desc = "The number of L2 cache write lookups performed.",
11072               .symbol_name = "l2_write_lookup",
11073               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11074               .offset = 219,
11075               .category = &panfrost_perf_config_tbox.categories[1],
11076            }, // counter
11077            {
11078               .name = "External snoop lookups",
11079               .desc = "The number of coherency snoop lookups performed that were triggered by an external master.",
11080               .symbol_name = "l2_ext_snoop_lookup",
11081               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11082               .offset = 220,
11083               .category = &panfrost_perf_config_tbox.categories[1],
11084            }, // counter
11085            {
11086               .name = "Read transaction",
11087               .desc = "The number of external read transactions.",
11088               .symbol_name = "l2_ext_read",
11089               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11090               .offset = 221,
11091               .category = &panfrost_perf_config_tbox.categories[1],
11092            }, // counter
11093            {
11094               .name = "ReadNoSnoop transactions",
11095               .desc = "The number of external non-coherent read transactions.",
11096               .symbol_name = "l2_ext_read_nosnp",
11097               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11098               .offset = 222,
11099               .category = &panfrost_perf_config_tbox.categories[1],
11100            }, // counter
11101            {
11102               .name = "ReadUnique transactions",
11103               .desc = "The number of external coherent read unique transactions.",
11104               .symbol_name = "l2_ext_read_unique",
11105               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11106               .offset = 223,
11107               .category = &panfrost_perf_config_tbox.categories[1],
11108            }, // counter
11109            {
11110               .name = "Read beat",
11111               .desc = "The number of external bus data read cycles.",
11112               .symbol_name = "l2_ext_read_beats",
11113               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11114               .offset = 224,
11115               .category = &panfrost_perf_config_tbox.categories[1],
11116            }, // counter
11117            {
11118               .name = "Read stall cycles",
11119               .desc = "The number of cycles where a read is stalled waiting for the external bus.",
11120               .symbol_name = "l2_ext_ar_stall",
11121               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11122               .offset = 225,
11123               .category = &panfrost_perf_config_tbox.categories[1],
11124            }, // counter
11125            {
11126               .name = "0-25% outstanding",
11127               .desc = "The number of read transactions initiated when 0-25% of the maximum are in use.",
11128               .symbol_name = "l2_ext_ar_cnt_q1",
11129               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11130               .offset = 226,
11131               .category = &panfrost_perf_config_tbox.categories[1],
11132            }, // counter
11133            {
11134               .name = "25-50% outstanding",
11135               .desc = "The number of read transactions initiated when 25-50% of the maximum are in use.",
11136               .symbol_name = "l2_ext_ar_cnt_q2",
11137               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11138               .offset = 227,
11139               .category = &panfrost_perf_config_tbox.categories[1],
11140            }, // counter
11141            {
11142               .name = "50-75% outstanding",
11143               .desc = "The number of read transactions initiated when 50-75% of the maximum are in use.",
11144               .symbol_name = "l2_ext_ar_cnt_q3",
11145               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11146               .offset = 228,
11147               .category = &panfrost_perf_config_tbox.categories[1],
11148            }, // counter
11149            {
11150               .name = "0-127 cycles",
11151               .desc = "The number of data beats returned 0-127 cycles after the read request.",
11152               .symbol_name = "l2_ext_rresp_0_127",
11153               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11154               .offset = 229,
11155               .category = &panfrost_perf_config_tbox.categories[1],
11156            }, // counter
11157            {
11158               .name = "128-191 cycles",
11159               .desc = "The number of data beats returned 128-191 cycles after the read request.",
11160               .symbol_name = "l2_ext_rresp_128_191",
11161               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11162               .offset = 230,
11163               .category = &panfrost_perf_config_tbox.categories[1],
11164            }, // counter
11165            {
11166               .name = "192-255 cycles",
11167               .desc = "The number of data beats returned 192-255 cycles after the read request.",
11168               .symbol_name = "l2_ext_rresp_192_255",
11169               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11170               .offset = 231,
11171               .category = &panfrost_perf_config_tbox.categories[1],
11172            }, // counter
11173            {
11174               .name = "256-319 cycles",
11175               .desc = "The number of data beats returned 256-319 cycles after the read request.",
11176               .symbol_name = "l2_ext_rresp_256_319",
11177               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11178               .offset = 232,
11179               .category = &panfrost_perf_config_tbox.categories[1],
11180            }, // counter
11181            {
11182               .name = "320-383 cycles",
11183               .desc = "The number of data beats returned 320-383 cycles after the read request.",
11184               .symbol_name = "l2_ext_rresp_320_383",
11185               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11186               .offset = 233,
11187               .category = &panfrost_perf_config_tbox.categories[1],
11188            }, // counter
11189            {
11190               .name = "Write transaction",
11191               .desc = "The number of external write transactions.",
11192               .symbol_name = "l2_ext_write",
11193               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11194               .offset = 234,
11195               .category = &panfrost_perf_config_tbox.categories[1],
11196            }, // counter
11197            {
11198               .name = "WriteNoSnoopFull transactions",
11199               .desc = "The number of external non-coherent full write transactions.",
11200               .symbol_name = "l2_ext_write_nosnp_full",
11201               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11202               .offset = 235,
11203               .category = &panfrost_perf_config_tbox.categories[1],
11204            }, // counter
11205            {
11206               .name = "WriteNoSnoopPartial transactions",
11207               .desc = "The number of external non-coherent partial write transactions.",
11208               .symbol_name = "l2_ext_write_nosnp_ptl",
11209               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11210               .offset = 236,
11211               .category = &panfrost_perf_config_tbox.categories[1],
11212            }, // counter
11213            {
11214               .name = "WriteSnoopFull transactions",
11215               .desc = "The number of external coherent full write transactions.",
11216               .symbol_name = "l2_ext_write_snp_full",
11217               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11218               .offset = 237,
11219               .category = &panfrost_perf_config_tbox.categories[1],
11220            }, // counter
11221            {
11222               .name = "WriteSnoopPartial transactions",
11223               .desc = "The number of external coherent partial write transactions.",
11224               .symbol_name = "l2_ext_write_snp_ptl",
11225               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11226               .offset = 238,
11227               .category = &panfrost_perf_config_tbox.categories[1],
11228            }, // counter
11229            {
11230               .name = "Write beat",
11231               .desc = "The number of external bus data write cycles.",
11232               .symbol_name = "l2_ext_write_beats",
11233               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11234               .offset = 239,
11235               .category = &panfrost_perf_config_tbox.categories[1],
11236            }, // counter
11237            {
11238               .name = "Write stall cycles",
11239               .desc = "The number of cycles where a write is stalled waiting for the external bus.",
11240               .symbol_name = "l2_ext_w_stall",
11241               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11242               .offset = 240,
11243               .category = &panfrost_perf_config_tbox.categories[1],
11244            }, // counter
11245            {
11246               .name = "0-25% outstanding",
11247               .desc = "The number of write transactions initiated when 0-25% of the maximum are in use.",
11248               .symbol_name = "l2_ext_aw_cnt_q1",
11249               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11250               .offset = 241,
11251               .category = &panfrost_perf_config_tbox.categories[1],
11252            }, // counter
11253            {
11254               .name = "25-50% outstanding",
11255               .desc = "The number of write transactions initiated when 25-50% of the maximum are in use.",
11256               .symbol_name = "l2_ext_aw_cnt_q2",
11257               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11258               .offset = 242,
11259               .category = &panfrost_perf_config_tbox.categories[1],
11260            }, // counter
11261            {
11262               .name = "50-75% outstanding",
11263               .desc = "The number of write transactions initiated when 50-75% of the maximum are in use.",
11264               .symbol_name = "l2_ext_aw_cnt_q3",
11265               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11266               .offset = 243,
11267               .category = &panfrost_perf_config_tbox.categories[1],
11268            }, // counter
11269            {
11270               .name = "Snoop transactions",
11271               .desc = "The number of coherency snoops triggered by external masters.",
11272               .symbol_name = "l2_ext_snoop",
11273               .units = PAN_PERF_COUNTER_UNITS_TRANSACTIONS,
11274               .offset = 244,
11275               .category = &panfrost_perf_config_tbox.categories[1],
11276            }, // counter
11277            {
11278               .name = "Snoop stall cycles",
11279               .desc = "The number of cycles where a coherency snoop triggered by external master is stalled.",
11280               .symbol_name = "l2_ext_snoop_stall",
11281               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11282               .offset = 245,
11283               .category = &panfrost_perf_config_tbox.categories[1],
11284            }, // counter
11285         }, // counters
11286      }, // category
11287      {
11288         .name = "Shader Core",
11289         .n_counters = 59,
11290         .counters = {
11291            {
11292               .name = "Fragment active",
11293               .desc = "The number of cycles where the shader core is processing a fragment workload.",
11294               .symbol_name = "frag_active",
11295               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11296               .offset = 196,
11297               .category = &panfrost_perf_config_tbox.categories[2],
11298            }, // counter
11299            {
11300               .name = "Read primitives",
11301               .desc = "The number of primitives read from the tile list by the fragment front-end.",
11302               .symbol_name = "frag_primitives_out",
11303               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11304               .offset = 197,
11305               .category = &panfrost_perf_config_tbox.categories[2],
11306            }, // counter
11307            {
11308               .name = "Rasterized primitives",
11309               .desc = "The number of primitives being rasterized.",
11310               .symbol_name = "frag_prim_rast",
11311               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11312               .offset = 198,
11313               .category = &panfrost_perf_config_tbox.categories[2],
11314            }, // counter
11315            {
11316               .name = "Fragment FPKB active",
11317               .desc = "The number of cycles where at least one quad is present in the pre-pipe quad queue.",
11318               .symbol_name = "frag_fpk_active",
11319               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11320               .offset = 199,
11321               .category = &panfrost_perf_config_tbox.categories[2],
11322            }, // counter
11323            {
11324               .name = "Fragment warps",
11325               .desc = "The number of fragment warps created.",
11326               .symbol_name = "frag_warps",
11327               .units = PAN_PERF_COUNTER_UNITS_WARPS,
11328               .offset = 201,
11329               .category = &panfrost_perf_config_tbox.categories[2],
11330            }, // counter
11331            {
11332               .name = "Partial rasterized quads",
11333               .desc = "The number of partially-rasterized fragment quads created.",
11334               .symbol_name = "frag_partial_quads_rast",
11335               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11336               .offset = 202,
11337               .category = &panfrost_perf_config_tbox.categories[2],
11338            }, // counter
11339            {
11340               .name = "Rasterized quads",
11341               .desc = "The number of quads generated by the rasterization phase.",
11342               .symbol_name = "frag_quads_rast",
11343               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11344               .offset = 203,
11345               .category = &panfrost_perf_config_tbox.categories[2],
11346            }, // counter
11347            {
11348               .name = "Early ZS tested quads",
11349               .desc = "The number of quads that are undergoing early depth and stencil testing.",
11350               .symbol_name = "frag_quads_ezs_test",
11351               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11352               .offset = 204,
11353               .category = &panfrost_perf_config_tbox.categories[2],
11354            }, // counter
11355            {
11356               .name = "Early ZS updated quads",
11357               .desc = "The number of quads undergoing early depth and stencil testing, that are capable of updating the framebuffer.",
11358               .symbol_name = "frag_quads_ezs_update",
11359               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11360               .offset = 205,
11361               .category = &panfrost_perf_config_tbox.categories[2],
11362            }, // counter
11363            {
11364               .name = "Early ZS killed quads",
11365               .desc = "The number of quads killed by early depth and stencil testing.",
11366               .symbol_name = "frag_quads_ezs_kill",
11367               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11368               .offset = 206,
11369               .category = &panfrost_perf_config_tbox.categories[2],
11370            }, // counter
11371            {
11372               .name = "Late ZS tested quads",
11373               .desc = "The number of quads undergoing late depth and stencil testing.",
11374               .symbol_name = "frag_lzs_test",
11375               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11376               .offset = 207,
11377               .category = &panfrost_perf_config_tbox.categories[2],
11378            }, // counter
11379            {
11380               .name = "Late ZS killed quads",
11381               .desc = "The number of quads killed by late depth and stencil testing.",
11382               .symbol_name = "frag_lzs_kill",
11383               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11384               .offset = 208,
11385               .category = &panfrost_perf_config_tbox.categories[2],
11386            }, // counter
11387            {
11388               .name = "All register warps",
11389               .desc = "The number of warps that require more than 32 registers.",
11390               .symbol_name = "warp_reg_size_64",
11391               .units = PAN_PERF_COUNTER_UNITS_WARPS,
11392               .offset = 209,
11393               .category = &panfrost_perf_config_tbox.categories[2],
11394            }, // counter
11395            {
11396               .name = "Tiles",
11397               .desc = "The number of tiles processed by the shader core.",
11398               .symbol_name = "frag_ptiles",
11399               .units = PAN_PERF_COUNTER_UNITS_TILES,
11400               .offset = 210,
11401               .category = &panfrost_perf_config_tbox.categories[2],
11402            }, // counter
11403            {
11404               .name = "Constant tiles killed",
11405               .desc = "The number of tiles killed by transaction elimination.",
11406               .symbol_name = "frag_trans_elim",
11407               .units = PAN_PERF_COUNTER_UNITS_TILES,
11408               .offset = 211,
11409               .category = &panfrost_perf_config_tbox.categories[2],
11410            }, // counter
11411            {
11412               .name = "FPK occluder quads",
11413               .desc = "The number of quads that are valid occluders for hidden surface removal.",
11414               .symbol_name = "quad_fpk_killer",
11415               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11416               .offset = 212,
11417               .category = &panfrost_perf_config_tbox.categories[2],
11418            }, // counter
11419            {
11420               .name = "Full quad warps",
11421               .desc = "The number of warps that are fully populated with quads.",
11422               .symbol_name = "full_quad_warps",
11423               .units = PAN_PERF_COUNTER_UNITS_WARPS,
11424               .offset = 213,
11425               .category = &panfrost_perf_config_tbox.categories[2],
11426            }, // counter
11427            {
11428               .name = "Non-fragment active",
11429               .desc = "The number of cycles where the shader core is processing some non-fragment workload.",
11430               .symbol_name = "compute_active",
11431               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11432               .offset = 214,
11433               .category = &panfrost_perf_config_tbox.categories[2],
11434            }, // counter
11435            {
11436               .name = "Non-fragment tasks",
11437               .desc = "The number of non-fragment tasks issued to the shader core.",
11438               .symbol_name = "compute_tasks",
11439               .units = PAN_PERF_COUNTER_UNITS_TASKS,
11440               .offset = 215,
11441               .category = &panfrost_perf_config_tbox.categories[2],
11442            }, // counter
11443            {
11444               .name = "Non-fragment warps",
11445               .desc = "The number of non-fragment warps created.",
11446               .symbol_name = "compute_warps",
11447               .units = PAN_PERF_COUNTER_UNITS_WARPS,
11448               .offset = 216,
11449               .category = &panfrost_perf_config_tbox.categories[2],
11450            }, // counter
11451            {
11452               .name = "Non-fragment starvation cycles",
11453               .desc = "The number of cycles where the shader core is processing a non-fragment workload and there are no new threads available for execution.",
11454               .symbol_name = "compute_starving",
11455               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11456               .offset = 217,
11457               .category = &panfrost_perf_config_tbox.categories[2],
11458            }, // counter
11459            {
11460               .name = "Execution core active",
11461               .desc = "The number of cycles where the shader core is processing at least one warp.",
11462               .symbol_name = "exec_core_active",
11463               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11464               .offset = 218,
11465               .category = &panfrost_perf_config_tbox.categories[2],
11466            }, // counter
11467            {
11468               .name = "FMA instructions",
11469               .desc = "The number of instructions issued to the FMA pipe.",
11470               .symbol_name = "exec_instr_fma",
11471               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
11472               .offset = 219,
11473               .category = &panfrost_perf_config_tbox.categories[2],
11474            }, // counter
11475            {
11476               .name = "CVT instructions",
11477               .desc = "The number of instructions issued to the CVT pipe.",
11478               .symbol_name = "exec_instr_cvt",
11479               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
11480               .offset = 220,
11481               .category = &panfrost_perf_config_tbox.categories[2],
11482            }, // counter
11483            {
11484               .name = "SFU instructions",
11485               .desc = "The number of instructions issued to the SFU pipe.",
11486               .symbol_name = "exec_instr_sfu",
11487               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
11488               .offset = 221,
11489               .category = &panfrost_perf_config_tbox.categories[2],
11490            }, // counter
11491            {
11492               .name = "Message instructions",
11493               .desc = "The number of instructions issued to the MSG pipe.",
11494               .symbol_name = "exec_instr_msg",
11495               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
11496               .offset = 222,
11497               .category = &panfrost_perf_config_tbox.categories[2],
11498            }, // counter
11499            {
11500               .name = "Diverged instructions",
11501               .desc = "The number of instructions executed per warp, that have control flow divergence.",
11502               .symbol_name = "exec_instr_diverged",
11503               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
11504               .offset = 223,
11505               .category = &panfrost_perf_config_tbox.categories[2],
11506            }, // counter
11507            {
11508               .name = "Instruction cache misses",
11509               .desc = "The number of instruction cache misses.",
11510               .symbol_name = "exec_icache_miss",
11511               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11512               .offset = 224,
11513               .category = &panfrost_perf_config_tbox.categories[2],
11514            }, // counter
11515            {
11516               .name = "Execution engine starvation cycles",
11517               .desc = "The number of cycles where the processing unit is starved of work.",
11518               .symbol_name = "exec_starve_arith",
11519               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11520               .offset = 225,
11521               .category = &panfrost_perf_config_tbox.categories[2],
11522            }, // counter
11523            {
11524               .name = "Blend shader calls",
11525               .desc = "The number of blend shader invocations executed.",
11526               .symbol_name = "call_blend_shader",
11527               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
11528               .offset = 226,
11529               .category = &panfrost_perf_config_tbox.categories[2],
11530            }, // counter
11531            {
11532               .name = "Input beats",
11533               .desc = "The number of texture request message data beats.",
11534               .symbol_name = "tex_msgi_num_flits",
11535               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11536               .offset = 227,
11537               .category = &panfrost_perf_config_tbox.categories[2],
11538            }, // counter
11539            {
11540               .name = "Descriptor stall cycles",
11541               .desc = "The number of cycles where a quad is stalled on texture descriptor fetch.",
11542               .symbol_name = "tex_dfch_clk_stalled",
11543               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11544               .offset = 228,
11545               .category = &panfrost_perf_config_tbox.categories[2],
11546            }, // counter
11547            {
11548               .name = "Fetch queue stall cycles",
11549               .desc = "The number of cycles where a quad is stalled on entering texture fetch because the fetch queue is full.",
11550               .symbol_name = "tex_tfch_clk_stalled",
11551               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11552               .offset = 229,
11553               .category = &panfrost_perf_config_tbox.categories[2],
11554            }, // counter
11555            {
11556               .name = "Filtering unit stall cycles",
11557               .desc = "The number of cycles where the filtering unit is idle and there is at least one quad present in the texture data fetch queue.",
11558               .symbol_name = "tex_tfch_starved_pending_data_fetch",
11559               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11560               .offset = 230,
11561               .category = &panfrost_perf_config_tbox.categories[2],
11562            }, // counter
11563            {
11564               .name = "Texturing active",
11565               .desc = "The number of texture filtering issue cycles.",
11566               .symbol_name = "tex_filt_num_operations",
11567               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11568               .offset = 231,
11569               .category = &panfrost_perf_config_tbox.categories[2],
11570            }, // counter
11571            {
11572               .name = "4x bilinear filtering active",
11573               .desc = "The number of cycles where the filtering unit uses the 4x path to implement nearest or bilinear filtering.",
11574               .symbol_name = "tex_filt_num_fxr_operations",
11575               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11576               .offset = 232,
11577               .category = &panfrost_perf_config_tbox.categories[2],
11578            }, // counter
11579            {
11580               .name = "2x trilinear filtering active",
11581               .desc = "The number of cycles where the filtering unit uses the 4x path to implement trilinear filtering.",
11582               .symbol_name = "tex_filt_num_fst_operations",
11583               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11584               .offset = 233,
11585               .category = &panfrost_perf_config_tbox.categories[2],
11586            }, // counter
11587            {
11588               .name = "Texture requests",
11589               .desc = "The number of quad-width texture operations processed by the texture unit.",
11590               .symbol_name = "tex_msgo_num_msg",
11591               .units = PAN_PERF_COUNTER_UNITS_QUADS,
11592               .offset = 234,
11593               .category = &panfrost_perf_config_tbox.categories[2],
11594            }, // counter
11595            {
11596               .name = "Output beats",
11597               .desc = "The number of texture response message data beats.",
11598               .symbol_name = "tex_msgo_num_flits",
11599               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11600               .offset = 235,
11601               .category = &panfrost_perf_config_tbox.categories[2],
11602            }, // counter
11603            {
11604               .name = "Full read cycles",
11605               .desc = "The number of full-width load/store cache reads.",
11606               .symbol_name = "ls_mem_read_full",
11607               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11608               .offset = 236,
11609               .category = &panfrost_perf_config_tbox.categories[2],
11610            }, // counter
11611            {
11612               .name = "Partial read cycles",
11613               .desc = "The number of partial-width load/store cache reads.",
11614               .symbol_name = "ls_mem_read_short",
11615               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11616               .offset = 237,
11617               .category = &panfrost_perf_config_tbox.categories[2],
11618            }, // counter
11619            {
11620               .name = "Full write cycles",
11621               .desc = "The number of full-width load/store cache writes.",
11622               .symbol_name = "ls_mem_write_full",
11623               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11624               .offset = 238,
11625               .category = &panfrost_perf_config_tbox.categories[2],
11626            }, // counter
11627            {
11628               .name = "Partial write cycles",
11629               .desc = "The number of partial-width load/store cache writes.",
11630               .symbol_name = "ls_mem_write_short",
11631               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11632               .offset = 239,
11633               .category = &panfrost_perf_config_tbox.categories[2],
11634            }, // counter
11635            {
11636               .name = "Atomic access cycles",
11637               .desc = "The number of load/store atomic accesses.",
11638               .symbol_name = "ls_mem_atomic",
11639               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11640               .offset = 240,
11641               .category = &panfrost_perf_config_tbox.categories[2],
11642            }, // counter
11643            {
11644               .name = "Interpolation requests",
11645               .desc = "The number of warp-width interpolation operations processed by the varying unit.",
11646               .symbol_name = "vary_instr",
11647               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
11648               .offset = 241,
11649               .category = &panfrost_perf_config_tbox.categories[2],
11650            }, // counter
11651            {
11652               .name = "32-bit interpolation active",
11653               .desc = "The number of 32-bit interpolation cycles processed by the varying unit.",
11654               .symbol_name = "vary_slot_32",
11655               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11656               .offset = 242,
11657               .category = &panfrost_perf_config_tbox.categories[2],
11658            }, // counter
11659            {
11660               .name = "16-bit interpolation active",
11661               .desc = "The number of 16-bit interpolation cycles processed by the varying unit.",
11662               .symbol_name = "vary_slot_16",
11663               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11664               .offset = 243,
11665               .category = &panfrost_perf_config_tbox.categories[2],
11666            }, // counter
11667            {
11668               .name = "Attribute requests",
11669               .desc = "The number of instructions executed by the attribute unit.",
11670               .symbol_name = "attr_instr",
11671               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
11672               .offset = 244,
11673               .category = &panfrost_perf_config_tbox.categories[2],
11674            }, // counter
11675            {
11676               .name = "Any active",
11677               .desc = "The number of cycles where the shader core is processing either a non-fragment workload or a fragment workload.",
11678               .symbol_name = "shader_core_active",
11679               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11680               .offset = 245,
11681               .category = &panfrost_perf_config_tbox.categories[2],
11682            }, // counter
11683            {
11684               .name = "Fragment L2 read beats",
11685               .desc = "The number of read beats received by the fixed-function fragment front-end.",
11686               .symbol_name = "beats_rd_ftc",
11687               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11688               .offset = 246,
11689               .category = &panfrost_perf_config_tbox.categories[2],
11690            }, // counter
11691            {
11692               .name = "Fragment external read beats",
11693               .desc = "The number of read beats received by the fixed-function fragment front-end that required an external memory access due to an L2 cache miss.",
11694               .symbol_name = "beats_rd_ftc_ext",
11695               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11696               .offset = 247,
11697               .category = &panfrost_perf_config_tbox.categories[2],
11698            }, // counter
11699            {
11700               .name = "Load/store L2 read beats",
11701               .desc = "The number of read beats received by the load/store unit.",
11702               .symbol_name = "beats_rd_lsc",
11703               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11704               .offset = 248,
11705               .category = &panfrost_perf_config_tbox.categories[2],
11706            }, // counter
11707            {
11708               .name = "Load/store external read beats",
11709               .desc = "The number of read beats received by the load/store unit that required an external memory access due to an L2 cache miss.",
11710               .symbol_name = "beats_rd_lsc_ext",
11711               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11712               .offset = 249,
11713               .category = &panfrost_perf_config_tbox.categories[2],
11714            }, // counter
11715            {
11716               .name = "Texture L2 read beats",
11717               .desc = "The number of read beats received by the texture unit.",
11718               .symbol_name = "beats_rd_tex",
11719               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11720               .offset = 250,
11721               .category = &panfrost_perf_config_tbox.categories[2],
11722            }, // counter
11723            {
11724               .name = "Texture external read beats",
11725               .desc = "The number of read beats received by the texture unit that required an external memory access due to an L2 cache miss.",
11726               .symbol_name = "beats_rd_tex_ext",
11727               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11728               .offset = 251,
11729               .category = &panfrost_perf_config_tbox.categories[2],
11730            }, // counter
11731            {
11732               .name = "Other L2 read beats",
11733               .desc = "The number of read beats received by a unit that is not specifically identified.",
11734               .symbol_name = "beats_rd_other",
11735               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11736               .offset = 252,
11737               .category = &panfrost_perf_config_tbox.categories[2],
11738            }, // counter
11739            {
11740               .name = "Load/store other write beats",
11741               .desc = "The number of write beats by the load/store unit that are due to any reason other than writeback.",
11742               .symbol_name = "beats_wr_lsc_other",
11743               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11744               .offset = 253,
11745               .category = &panfrost_perf_config_tbox.categories[2],
11746            }, // counter
11747            {
11748               .name = "Tile buffer write beats",
11749               .desc = "The number of write beats sent by the tile buffer writeback unit.",
11750               .symbol_name = "beats_wr_tib",
11751               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11752               .offset = 254,
11753               .category = &panfrost_perf_config_tbox.categories[2],
11754            }, // counter
11755            {
11756               .name = "Load/store writeback write beats",
11757               .desc = "The number of write beats by the load/store unit that are due to writeback.",
11758               .symbol_name = "beats_wr_lsc_wb",
11759               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11760               .offset = 255,
11761               .category = &panfrost_perf_config_tbox.categories[2],
11762            }, // counter
11763         }, // counters
11764      }, // category
11765      {
11766         .name = "Tiler",
11767         .n_counters = 24,
11768         .counters = {
11769            {
11770               .name = "Tiler active",
11771               .desc = "The number of cycles where the tiler has a workload queued for processing.",
11772               .symbol_name = "tiler_active",
11773               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11774               .offset = 4,
11775               .category = &panfrost_perf_config_tbox.categories[3],
11776            }, // counter
11777            {
11778               .name = "Triangle primitives",
11779               .desc = "The number of input triangle primitives.",
11780               .symbol_name = "triangles",
11781               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11782               .offset = 6,
11783               .category = &panfrost_perf_config_tbox.categories[3],
11784            }, // counter
11785            {
11786               .name = "Line primitives",
11787               .desc = "The number of input line primitives.",
11788               .symbol_name = "lines",
11789               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11790               .offset = 7,
11791               .category = &panfrost_perf_config_tbox.categories[3],
11792            }, // counter
11793            {
11794               .name = "Point primitives",
11795               .desc = "The number of input point primitives.",
11796               .symbol_name = "points",
11797               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11798               .offset = 8,
11799               .category = &panfrost_perf_config_tbox.categories[3],
11800            }, // counter
11801            {
11802               .name = "Front-facing primitives",
11803               .desc = "The number of front-facing triangles that are visible after culling.",
11804               .symbol_name = "front_facing",
11805               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11806               .offset = 9,
11807               .category = &panfrost_perf_config_tbox.categories[3],
11808            }, // counter
11809            {
11810               .name = "Back-facing primitives",
11811               .desc = "The number of back-facing triangles that are visible after culling.",
11812               .symbol_name = "back_facing",
11813               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11814               .offset = 10,
11815               .category = &panfrost_perf_config_tbox.categories[3],
11816            }, // counter
11817            {
11818               .name = "Visible primitives",
11819               .desc = "The number of primitives that are visible after culling.",
11820               .symbol_name = "prim_visible",
11821               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11822               .offset = 11,
11823               .category = &panfrost_perf_config_tbox.categories[3],
11824            }, // counter
11825            {
11826               .name = "Facing and XY plane test culled primitives",
11827               .desc = "The number of primitives that are culled by facing or frustum XY plane tests.",
11828               .symbol_name = "prim_culled",
11829               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11830               .offset = 12,
11831               .category = &panfrost_perf_config_tbox.categories[3],
11832            }, // counter
11833            {
11834               .name = "Z plane test culled primitives",
11835               .desc = "The number of primitives that are culled by frustum Z plane tests.",
11836               .symbol_name = "prim_clipped",
11837               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11838               .offset = 13,
11839               .category = &panfrost_perf_config_tbox.categories[3],
11840            }, // counter
11841            {
11842               .name = "Sample test culled primitives",
11843               .desc = "The number of primitives culled by the sample coverage test.",
11844               .symbol_name = "prim_sat_culled",
11845               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
11846               .offset = 14,
11847               .category = &panfrost_perf_config_tbox.categories[3],
11848            }, // counter
11849            {
11850               .name = "Read beats",
11851               .desc = "The number of internal bus data read cycles made by the tiler.",
11852               .symbol_name = "bus_read",
11853               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11854               .offset = 17,
11855               .category = &panfrost_perf_config_tbox.categories[3],
11856            }, // counter
11857            {
11858               .name = "Write beats",
11859               .desc = "The number of internal bus data write cycles made by the tiler.",
11860               .symbol_name = "bus_write",
11861               .units = PAN_PERF_COUNTER_UNITS_BEATS,
11862               .offset = 19,
11863               .category = &panfrost_perf_config_tbox.categories[3],
11864            }, // counter
11865            {
11866               .name = "Position shading requests",
11867               .desc = "The number of position shading requests in the IDVS flow.",
11868               .symbol_name = "idvs_pos_shad_req",
11869               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11870               .offset = 21,
11871               .category = &panfrost_perf_config_tbox.categories[3],
11872            }, // counter
11873            {
11874               .name = "Position shading stall cycles",
11875               .desc = "The number of cycles where the tiler has a stalled position shading request.",
11876               .symbol_name = "idvs_pos_shad_stall",
11877               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11878               .offset = 23,
11879               .category = &panfrost_perf_config_tbox.categories[3],
11880            }, // counter
11881            {
11882               .name = "Position FIFO full cycles",
11883               .desc = "The number of cycles where the tiler has a stalled position shading buffer.",
11884               .symbol_name = "idvs_pos_fifo_full",
11885               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11886               .offset = 24,
11887               .category = &panfrost_perf_config_tbox.categories[3],
11888            }, // counter
11889            {
11890               .name = "Position cache hits",
11891               .desc = "The number of position lookups that result in a hit in the vertex cache.",
11892               .symbol_name = "vcache_hit",
11893               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11894               .offset = 26,
11895               .category = &panfrost_perf_config_tbox.categories[3],
11896            }, // counter
11897            {
11898               .name = "Position cache misses",
11899               .desc = "The number of position lookups that miss in the vertex cache.",
11900               .symbol_name = "vcache_miss",
11901               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11902               .offset = 27,
11903               .category = &panfrost_perf_config_tbox.categories[3],
11904            }, // counter
11905            {
11906               .name = "Primitive assembly busy stall cycles",
11907               .desc = "The number of cycles where the tiler is stalled waiting for primitive assembly.",
11908               .symbol_name = "vfetch_stall",
11909               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11910               .offset = 31,
11911               .category = &panfrost_perf_config_tbox.categories[3],
11912            }, // counter
11913            {
11914               .name = "Varying cache hits",
11915               .desc = "The number of varying lookups that result in a hit in the vertex cache.",
11916               .symbol_name = "idvs_vbu_hit",
11917               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11918               .offset = 34,
11919               .category = &panfrost_perf_config_tbox.categories[3],
11920            }, // counter
11921            {
11922               .name = "Varying cache misses",
11923               .desc = "The number of varying lookups that miss in the vertex cache.",
11924               .symbol_name = "idvs_vbu_miss",
11925               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11926               .offset = 35,
11927               .category = &panfrost_perf_config_tbox.categories[3],
11928            }, // counter
11929            {
11930               .name = "Varying shading requests",
11931               .desc = "The number of varying shading requests in the IDVS flow.",
11932               .symbol_name = "idvs_var_shad_req",
11933               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
11934               .offset = 37,
11935               .category = &panfrost_perf_config_tbox.categories[3],
11936            }, // counter
11937            {
11938               .name = "Varying shading stall cycles",
11939               .desc = "The number of cycles where the tiler has a stalled varying shading request.",
11940               .symbol_name = "idvs_var_shad_stall",
11941               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11942               .offset = 38,
11943               .category = &panfrost_perf_config_tbox.categories[3],
11944            }, // counter
11945            {
11946               .name = "Write buffer transaction stall cycles",
11947               .desc = "The number of cycles where the tiler write buffer can not send data because it has no available write IDs.",
11948               .symbol_name = "wrbuf_no_axi_id_stall",
11949               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11950               .offset = 54,
11951               .category = &panfrost_perf_config_tbox.categories[3],
11952            }, // counter
11953            {
11954               .name = "Write buffer write stall cycles",
11955               .desc = "The number of cycles where the tiler write buffer can not send data because the bus is not ready.",
11956               .symbol_name = "wrbuf_axi_stall",
11957               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11958               .offset = 55,
11959               .category = &panfrost_perf_config_tbox.categories[3],
11960            }, // counter
11961         }, // counters
11962      }, // category
11963   }, // categories
11964}; // panfrost_perf_config_tbox
11965
11966static void UNUSED
11967static_asserts_t72x(void)
11968{
11969   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
11970   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
11971   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
11972   STATIC_ASSERT(31 <= PAN_PERF_MAX_COUNTERS);
11973   STATIC_ASSERT(8 <= PAN_PERF_MAX_COUNTERS);
11974}
11975
11976const struct panfrost_perf_config panfrost_perf_config_t72x = {
11977   .n_categories = 4,
11978   .categories = {
11979      {
11980         .name = "Job Manager",
11981         .n_counters = 11,
11982         .counters = {
11983            {
11984               .name = "GPU cycles",
11985               .desc = "Number of cycles GPU active",
11986               .symbol_name = "gpu_active",
11987               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11988               .offset = 4,
11989               .category = &panfrost_perf_config_t72x.categories[0],
11990            }, // counter
11991            {
11992               .name = "IRQ cycles",
11993               .desc = "Number of cycles GPU interrupt pending",
11994               .symbol_name = "irq_active",
11995               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
11996               .offset = 5,
11997               .category = &panfrost_perf_config_t72x.categories[0],
11998            }, // counter
11999            {
12000               .name = "JS0 cycles",
12001               .desc = "Number of cycles JS0 (fragment) active",
12002               .symbol_name = "js0_active",
12003               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12004               .offset = 8,
12005               .category = &panfrost_perf_config_t72x.categories[0],
12006            }, // counter
12007            {
12008               .name = "JS1 cycles",
12009               .desc = "Number of cycles JS1 (vertex/tiler/compute) active",
12010               .symbol_name = "js1_active",
12011               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12012               .offset = 11,
12013               .category = &panfrost_perf_config_t72x.categories[0],
12014            }, // counter
12015            {
12016               .name = "JS2 cycles",
12017               .desc = "Number of cycles JS2 (vertex/compute) active",
12018               .symbol_name = "js2_active",
12019               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12020               .offset = 14,
12021               .category = &panfrost_perf_config_t72x.categories[0],
12022            }, // counter
12023            {
12024               .name = "JS0 jobs",
12025               .desc = "Number of Jobs (fragment) completed in JS0",
12026               .symbol_name = "js0_jobs",
12027               .units = PAN_PERF_COUNTER_UNITS_JOBS,
12028               .offset = 6,
12029               .category = &panfrost_perf_config_t72x.categories[0],
12030            }, // counter
12031            {
12032               .name = "JS1 jobs",
12033               .desc = "Number of Jobs (vertex/tiler/compute) completed in JS1",
12034               .symbol_name = "js1_jobs",
12035               .units = PAN_PERF_COUNTER_UNITS_JOBS,
12036               .offset = 9,
12037               .category = &panfrost_perf_config_t72x.categories[0],
12038            }, // counter
12039            {
12040               .name = "JS2 jobs",
12041               .desc = "Number of Jobs (vertex/compute) completed in JS2",
12042               .symbol_name = "js2_jobs",
12043               .units = PAN_PERF_COUNTER_UNITS_JOBS,
12044               .offset = 12,
12045               .category = &panfrost_perf_config_t72x.categories[0],
12046            }, // counter
12047            {
12048               .name = "Pixels",
12049               .desc = "Number of Pixels completed in JS0",
12050               .symbol_name = "js0_tasks",
12051               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
12052               .offset = 7,
12053               .category = &panfrost_perf_config_t72x.categories[0],
12054            }, // counter
12055            {
12056               .name = "JS1 tasks",
12057               .desc = "Number of Tasks completed in JS1",
12058               .symbol_name = "js1_tasks",
12059               .units = PAN_PERF_COUNTER_UNITS_TASKS,
12060               .offset = 10,
12061               .category = &panfrost_perf_config_t72x.categories[0],
12062            }, // counter
12063            {
12064               .name = "JS2 tasks",
12065               .desc = "Number of Tasks completed in JS2",
12066               .symbol_name = "js2_tasks",
12067               .units = PAN_PERF_COUNTER_UNITS_TASKS,
12068               .offset = 13,
12069               .category = &panfrost_perf_config_t72x.categories[0],
12070            }, // counter
12071         }, // counters
12072      }, // category
12073      {
12074         .name = "Tiler",
12075         .n_counters = 11,
12076         .counters = {
12077            {
12078               .name = "Tiler cycles",
12079               .desc = "Number of cycles Tiler active",
12080               .symbol_name = "ti_active",
12081               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12082               .offset = 86,
12083               .category = &panfrost_perf_config_t72x.categories[1],
12084            }, // counter
12085            {
12086               .name = "Polygons",
12087               .desc = "Number of polygons processed",
12088               .symbol_name = "ti_polygons",
12089               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12090               .offset = 70,
12091               .category = &panfrost_perf_config_t72x.categories[1],
12092            }, // counter
12093            {
12094               .name = "Quads",
12095               .desc = "Number of quads processed",
12096               .symbol_name = "ti_quads",
12097               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12098               .offset = 69,
12099               .category = &panfrost_perf_config_t72x.categories[1],
12100            }, // counter
12101            {
12102               .name = "Triangles",
12103               .desc = "Number of triangles processed",
12104               .symbol_name = "ti_triangles",
12105               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12106               .offset = 68,
12107               .category = &panfrost_perf_config_t72x.categories[1],
12108            }, // counter
12109            {
12110               .name = "Lines",
12111               .desc = "Number of lines processed",
12112               .symbol_name = "ti_lines",
12113               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12114               .offset = 72,
12115               .category = &panfrost_perf_config_t72x.categories[1],
12116            }, // counter
12117            {
12118               .name = "Points",
12119               .desc = "Number of points processed",
12120               .symbol_name = "ti_points",
12121               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12122               .offset = 71,
12123               .category = &panfrost_perf_config_t72x.categories[1],
12124            }, // counter
12125            {
12126               .name = "Front facing prims",
12127               .desc = "Number of front facing primitives",
12128               .symbol_name = "ti_front_facing",
12129               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12130               .offset = 73,
12131               .category = &panfrost_perf_config_t72x.categories[1],
12132            }, // counter
12133            {
12134               .name = "Back facing prims",
12135               .desc = "Number of back facing primitives",
12136               .symbol_name = "ti_back_facing",
12137               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12138               .offset = 74,
12139               .category = &panfrost_perf_config_t72x.categories[1],
12140            }, // counter
12141            {
12142               .name = "Visible prims",
12143               .desc = "Number of visible primitives",
12144               .symbol_name = "ti_prim_visible",
12145               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12146               .offset = 75,
12147               .category = &panfrost_perf_config_t72x.categories[1],
12148            }, // counter
12149            {
12150               .name = "Culled prims",
12151               .desc = "Number of culled primitives",
12152               .symbol_name = "ti_prim_culled",
12153               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12154               .offset = 76,
12155               .category = &panfrost_perf_config_t72x.categories[1],
12156            }, // counter
12157            {
12158               .name = "Clipped prims",
12159               .desc = "Number of clipped primitives",
12160               .symbol_name = "ti_prim_clipped",
12161               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12162               .offset = 77,
12163               .category = &panfrost_perf_config_t72x.categories[1],
12164            }, // counter
12165         }, // counters
12166      }, // category
12167      {
12168         .name = "Shader Core",
12169         .n_counters = 31,
12170         .counters = {
12171            {
12172               .name = "Tripipe cycles",
12173               .desc = "Number of cycles tripipe was active",
12174               .symbol_name = "tripipe_active",
12175               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12176               .offset = 212,
12177               .category = &panfrost_perf_config_t72x.categories[2],
12178            }, // counter
12179            {
12180               .name = "Fragment cycles",
12181               .desc = "Number of cycles fragment processing was active",
12182               .symbol_name = "frag_active",
12183               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12184               .offset = 196,
12185               .category = &panfrost_perf_config_t72x.categories[2],
12186            }, // counter
12187            {
12188               .name = "Compute cycles",
12189               .desc = "Number of cycles vertex\\compute processing was active",
12190               .symbol_name = "compute_active",
12191               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12192               .offset = 209,
12193               .category = &panfrost_perf_config_t72x.categories[2],
12194            }, // counter
12195            {
12196               .name = "Fragment cycles waiting for tile",
12197               .desc = "Number of cycles spent waiting for a physical tile buffer",
12198               .symbol_name = "frag_cycles_no_tile",
12199               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12200               .offset = 206,
12201               .category = &panfrost_perf_config_t72x.categories[2],
12202            }, // counter
12203            {
12204               .name = "Fragment threads",
12205               .desc = "Number of fragment threads started",
12206               .symbol_name = "frag_threads",
12207               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12208               .offset = 199,
12209               .category = &panfrost_perf_config_t72x.categories[2],
12210            }, // counter
12211            {
12212               .name = "Dummy fragment threads",
12213               .desc = "Number of dummy fragment threads started",
12214               .symbol_name = "frag_dummy_threads",
12215               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12216               .offset = 200,
12217               .category = &panfrost_perf_config_t72x.categories[2],
12218            }, // counter
12219            {
12220               .name = "Fragment threads doing late ZS",
12221               .desc = "Number of threads doing late ZS test",
12222               .symbol_name = "frag_threads_lzs_test",
12223               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12224               .offset = 204,
12225               .category = &panfrost_perf_config_t72x.categories[2],
12226            }, // counter
12227            {
12228               .name = "Fragment threads killed late ZS",
12229               .desc = "Number of threads killed by late ZS test",
12230               .symbol_name = "frag_threads_lzs_killed",
12231               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12232               .offset = 205,
12233               .category = &panfrost_perf_config_t72x.categories[2],
12234            }, // counter
12235            {
12236               .name = "Compute tasks",
12237               .desc = "Number of compute tasks",
12238               .symbol_name = "compute_tasks",
12239               .units = PAN_PERF_COUNTER_UNITS_TASKS,
12240               .offset = 210,
12241               .category = &panfrost_perf_config_t72x.categories[2],
12242            }, // counter
12243            {
12244               .name = "Compute threads",
12245               .desc = "Number of compute threads started",
12246               .symbol_name = "compute_threads",
12247               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12248               .offset = 211,
12249               .category = &panfrost_perf_config_t72x.categories[2],
12250            }, // counter
12251            {
12252               .name = "Primitives loaded",
12253               .desc = "Number of primitives loaded from tiler",
12254               .symbol_name = "frag_primitives",
12255               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12256               .offset = 197,
12257               .category = &panfrost_perf_config_t72x.categories[2],
12258            }, // counter
12259            {
12260               .name = "Primitives dropped",
12261               .desc = "Number of primitives dropped because out of tile",
12262               .symbol_name = "frag_primitives_dropped",
12263               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12264               .offset = 198,
12265               .category = &panfrost_perf_config_t72x.categories[2],
12266            }, // counter
12267            {
12268               .name = "Quads rasterized",
12269               .desc = "Number of quads rasterized",
12270               .symbol_name = "frag_quads_rast",
12271               .units = PAN_PERF_COUNTER_UNITS_QUADS,
12272               .offset = 201,
12273               .category = &panfrost_perf_config_t72x.categories[2],
12274            }, // counter
12275            {
12276               .name = "Quads doing early ZS",
12277               .desc = "Number of quads doing early ZS test",
12278               .symbol_name = "frag_quads_ezs_test",
12279               .units = PAN_PERF_COUNTER_UNITS_QUADS,
12280               .offset = 202,
12281               .category = &panfrost_perf_config_t72x.categories[2],
12282            }, // counter
12283            {
12284               .name = "Quads killed early Z",
12285               .desc = "Number of quads killed by early ZS test",
12286               .symbol_name = "frag_quads_ezs_killed",
12287               .units = PAN_PERF_COUNTER_UNITS_QUADS,
12288               .offset = 203,
12289               .category = &panfrost_perf_config_t72x.categories[2],
12290            }, // counter
12291            {
12292               .name = "Pixels",
12293               .desc = "Number of pixels rendered",
12294               .symbol_name = "frag_num_tiles",
12295               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
12296               .offset = 207,
12297               .category = &panfrost_perf_config_t72x.categories[2],
12298            }, // counter
12299            {
12300               .name = "Tile writes killed by TE",
12301               .desc = "Number of tile writes skipped by transaction elimination",
12302               .symbol_name = "frag_trans_elim",
12303               .units = PAN_PERF_COUNTER_UNITS_TILES,
12304               .offset = 208,
12305               .category = &panfrost_perf_config_t72x.categories[2],
12306            }, // counter
12307            {
12308               .name = "A instructions",
12309               .desc = "Number of batched instructions executed by the A-pipe",
12310               .symbol_name = "arith_words",
12311               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12312               .offset = 213,
12313               .category = &panfrost_perf_config_t72x.categories[2],
12314            }, // counter
12315            {
12316               .name = "LS instructions",
12317               .desc = "Number of instructions completed by the LS-pipe",
12318               .symbol_name = "ls_words",
12319               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12320               .offset = 215,
12321               .category = &panfrost_perf_config_t72x.categories[2],
12322            }, // counter
12323            {
12324               .name = "LS instruction issues",
12325               .desc = "Number of instructions issued to the LS-pipe, including restarts",
12326               .symbol_name = "ls_issues",
12327               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12328               .offset = 216,
12329               .category = &panfrost_perf_config_t72x.categories[2],
12330            }, // counter
12331            {
12332               .name = "T instructions",
12333               .desc = "Number of instructions completed by the T-pipe",
12334               .symbol_name = "tex_words",
12335               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12336               .offset = 219,
12337               .category = &panfrost_perf_config_t72x.categories[2],
12338            }, // counter
12339            {
12340               .name = "T instruction issues",
12341               .desc = "Number of threads through loop 2 address calculation",
12342               .symbol_name = "tex_issues",
12343               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12344               .offset = 221,
12345               .category = &panfrost_perf_config_t72x.categories[2],
12346            }, // counter
12347            {
12348               .name = "Read hits",
12349               .desc = "Number of read hits in the Load/Store cache",
12350               .symbol_name = "lsc_read_hits",
12351               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12352               .offset = 222,
12353               .category = &panfrost_perf_config_t72x.categories[2],
12354            }, // counter
12355            {
12356               .name = "Read misses",
12357               .desc = "Number of read misses in the Load/Store cache",
12358               .symbol_name = "lsc_read_misses",
12359               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12360               .offset = 223,
12361               .category = &panfrost_perf_config_t72x.categories[2],
12362            }, // counter
12363            {
12364               .name = "Write hits",
12365               .desc = "Number of write hits in the Load/Store cache",
12366               .symbol_name = "lsc_write_hits",
12367               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12368               .offset = 224,
12369               .category = &panfrost_perf_config_t72x.categories[2],
12370            }, // counter
12371            {
12372               .name = "Write misses",
12373               .desc = "Number of write misses in the Load/Store cache",
12374               .symbol_name = "lsc_write_misses",
12375               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12376               .offset = 225,
12377               .category = &panfrost_perf_config_t72x.categories[2],
12378            }, // counter
12379            {
12380               .name = "Atomic hits",
12381               .desc = "Number of atomic hits in the Load/Store cache",
12382               .symbol_name = "lsc_atomic_hits",
12383               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12384               .offset = 226,
12385               .category = &panfrost_perf_config_t72x.categories[2],
12386            }, // counter
12387            {
12388               .name = "Atomic misses",
12389               .desc = "Number of atomic misses in the Load/Store cache",
12390               .symbol_name = "lsc_atomic_misses",
12391               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12392               .offset = 227,
12393               .category = &panfrost_perf_config_t72x.categories[2],
12394            }, // counter
12395            {
12396               .name = "Line fetches",
12397               .desc = "Number of line fetches in the Load/Store cache",
12398               .symbol_name = "lsc_line_fetches",
12399               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12400               .offset = 228,
12401               .category = &panfrost_perf_config_t72x.categories[2],
12402            }, // counter
12403            {
12404               .name = "Dirty line evictions",
12405               .desc = "Number of dirty line evictions in the Load/Store cache",
12406               .symbol_name = "lsc_dirty_line",
12407               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12408               .offset = 229,
12409               .category = &panfrost_perf_config_t72x.categories[2],
12410            }, // counter
12411            {
12412               .name = "Snoops in to LSC",
12413               .desc = "Number of coherent memory snoops in to the Load/Store cache",
12414               .symbol_name = "lsc_snoops",
12415               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12416               .offset = 230,
12417               .category = &panfrost_perf_config_t72x.categories[2],
12418            }, // counter
12419         }, // counters
12420      }, // category
12421      {
12422         .name = "L2 Cache",
12423         .n_counters = 8,
12424         .counters = {
12425            {
12426               .name = "Read snoops",
12427               .desc = "Number of read transaction snoops",
12428               .symbol_name = "l2_read_snoop",
12429               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12430               .offset = 134,
12431               .category = &panfrost_perf_config_t72x.categories[3],
12432            }, // counter
12433            {
12434               .name = "L2 read hits",
12435               .desc = "Number of reads hitting in the L2 cache",
12436               .symbol_name = "l2_read_hit",
12437               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12438               .offset = 135,
12439               .category = &panfrost_perf_config_t72x.categories[3],
12440            }, // counter
12441            {
12442               .name = "Write snoops",
12443               .desc = "Number of write transaction snoops",
12444               .symbol_name = "l2_write_snoop",
12445               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12446               .offset = 136,
12447               .category = &panfrost_perf_config_t72x.categories[3],
12448            }, // counter
12449            {
12450               .name = "L2 write hits",
12451               .desc = "Number of writes hitting in the L2 cache",
12452               .symbol_name = "l2_write_hit",
12453               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12454               .offset = 137,
12455               .category = &panfrost_perf_config_t72x.categories[3],
12456            }, // counter
12457            {
12458               .name = "External read bytes",
12459               .desc = "Number of external bus read bytes",
12460               .symbol_name = "l2_ext_read_beat",
12461               .units = PAN_PERF_COUNTER_UNITS_BYTES,
12462               .offset = 133,
12463               .category = &panfrost_perf_config_t72x.categories[3],
12464            }, // counter
12465            {
12466               .name = "External bus stalls (AR)",
12467               .desc = "Number of cycles a valid read address (AR) is stalled by the external interconnect",
12468               .symbol_name = "l2_ext_ar_stall",
12469               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12470               .offset = 140,
12471               .category = &panfrost_perf_config_t72x.categories[3],
12472            }, // counter
12473            {
12474               .name = "External write bytes",
12475               .desc = "Number of external bus write bytes",
12476               .symbol_name = "l2_ext_write_beat",
12477               .units = PAN_PERF_COUNTER_UNITS_BYTES,
12478               .offset = 132,
12479               .category = &panfrost_perf_config_t72x.categories[3],
12480            }, // counter
12481            {
12482               .name = "External bus stalls (W)",
12483               .desc = "Number of cycles a valid write data (W channel) is stalled by the external interconnect",
12484               .symbol_name = "l2_ext_w_stall",
12485               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12486               .offset = 141,
12487               .category = &panfrost_perf_config_t72x.categories[3],
12488            }, // counter
12489         }, // counters
12490      }, // category
12491   }, // categories
12492}; // panfrost_perf_config_t72x
12493
12494static void UNUSED
12495static_asserts_t76x(void)
12496{
12497   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
12498   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
12499   STATIC_ASSERT(19 <= PAN_PERF_MAX_COUNTERS);
12500   STATIC_ASSERT(33 <= PAN_PERF_MAX_COUNTERS);
12501   STATIC_ASSERT(13 <= PAN_PERF_MAX_COUNTERS);
12502}
12503
12504const struct panfrost_perf_config panfrost_perf_config_t76x = {
12505   .n_categories = 4,
12506   .categories = {
12507      {
12508         .name = "Job Manager",
12509         .n_counters = 11,
12510         .counters = {
12511            {
12512               .name = "GPU cycles",
12513               .desc = "Number of cycles GPU active",
12514               .symbol_name = "gpu_active",
12515               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12516               .offset = 6,
12517               .category = &panfrost_perf_config_t76x.categories[0],
12518            }, // counter
12519            {
12520               .name = "IRQ cycles",
12521               .desc = "Number of cycles GPU interrupt pending",
12522               .symbol_name = "irq_active",
12523               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12524               .offset = 7,
12525               .category = &panfrost_perf_config_t76x.categories[0],
12526            }, // counter
12527            {
12528               .name = "JS0 cycles",
12529               .desc = "Number of cycles JS0 (fragment) active",
12530               .symbol_name = "js0_active",
12531               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12532               .offset = 10,
12533               .category = &panfrost_perf_config_t76x.categories[0],
12534            }, // counter
12535            {
12536               .name = "JS1 cycles",
12537               .desc = "Number of cycles JS1 (vertex/tiler/compute) active",
12538               .symbol_name = "js1_active",
12539               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12540               .offset = 18,
12541               .category = &panfrost_perf_config_t76x.categories[0],
12542            }, // counter
12543            {
12544               .name = "JS2 cycles",
12545               .desc = "Number of cycles JS2 (vertex/compute) active",
12546               .symbol_name = "js2_active",
12547               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12548               .offset = 26,
12549               .category = &panfrost_perf_config_t76x.categories[0],
12550            }, // counter
12551            {
12552               .name = "JS0 jobs",
12553               .desc = "Number of Jobs (fragment) completed in JS0",
12554               .symbol_name = "js0_jobs",
12555               .units = PAN_PERF_COUNTER_UNITS_JOBS,
12556               .offset = 8,
12557               .category = &panfrost_perf_config_t76x.categories[0],
12558            }, // counter
12559            {
12560               .name = "JS1 jobs",
12561               .desc = "Number of Jobs (vertex/tiler/compute) completed in JS1",
12562               .symbol_name = "js1_jobs",
12563               .units = PAN_PERF_COUNTER_UNITS_JOBS,
12564               .offset = 16,
12565               .category = &panfrost_perf_config_t76x.categories[0],
12566            }, // counter
12567            {
12568               .name = "JS2 jobs",
12569               .desc = "Number of Jobs (vertex/compute) completed in JS2",
12570               .symbol_name = "js2_jobs",
12571               .units = PAN_PERF_COUNTER_UNITS_JOBS,
12572               .offset = 24,
12573               .category = &panfrost_perf_config_t76x.categories[0],
12574            }, // counter
12575            {
12576               .name = "Pixels",
12577               .desc = "Number of Pixels completed in JS0",
12578               .symbol_name = "js0_tasks",
12579               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
12580               .offset = 9,
12581               .category = &panfrost_perf_config_t76x.categories[0],
12582            }, // counter
12583            {
12584               .name = "JS1 tasks",
12585               .desc = "Number of Tasks completed in JS1",
12586               .symbol_name = "js1_tasks",
12587               .units = PAN_PERF_COUNTER_UNITS_TASKS,
12588               .offset = 17,
12589               .category = &panfrost_perf_config_t76x.categories[0],
12590            }, // counter
12591            {
12592               .name = "JS2 tasks",
12593               .desc = "Number of Tasks completed in JS2",
12594               .symbol_name = "js2_tasks",
12595               .units = PAN_PERF_COUNTER_UNITS_TASKS,
12596               .offset = 25,
12597               .category = &panfrost_perf_config_t76x.categories[0],
12598            }, // counter
12599         }, // counters
12600      }, // category
12601      {
12602         .name = "Tiler",
12603         .n_counters = 19,
12604         .counters = {
12605            {
12606               .name = "Tiler cycles",
12607               .desc = "Number of cycles Tiler active",
12608               .symbol_name = "ti_active",
12609               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12610               .offset = 109,
12611               .category = &panfrost_perf_config_t76x.categories[1],
12612            }, // counter
12613            {
12614               .name = "Polygons",
12615               .desc = "Number of polygons processed",
12616               .symbol_name = "ti_polygons",
12617               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12618               .offset = 70,
12619               .category = &panfrost_perf_config_t76x.categories[1],
12620            }, // counter
12621            {
12622               .name = "Quads",
12623               .desc = "Number of quads processed",
12624               .symbol_name = "ti_quads",
12625               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12626               .offset = 69,
12627               .category = &panfrost_perf_config_t76x.categories[1],
12628            }, // counter
12629            {
12630               .name = "Triangles",
12631               .desc = "Number of triangles processed",
12632               .symbol_name = "ti_triangles",
12633               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12634               .offset = 68,
12635               .category = &panfrost_perf_config_t76x.categories[1],
12636            }, // counter
12637            {
12638               .name = "Lines",
12639               .desc = "Number of lines processed",
12640               .symbol_name = "ti_lines",
12641               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12642               .offset = 72,
12643               .category = &panfrost_perf_config_t76x.categories[1],
12644            }, // counter
12645            {
12646               .name = "Points",
12647               .desc = "Number of points processed",
12648               .symbol_name = "ti_points",
12649               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12650               .offset = 71,
12651               .category = &panfrost_perf_config_t76x.categories[1],
12652            }, // counter
12653            {
12654               .name = "Front facing prims",
12655               .desc = "Number of front facing primitives",
12656               .symbol_name = "ti_front_facing",
12657               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12658               .offset = 75,
12659               .category = &panfrost_perf_config_t76x.categories[1],
12660            }, // counter
12661            {
12662               .name = "Back facing prims",
12663               .desc = "Number of back facing primitives",
12664               .symbol_name = "ti_back_facing",
12665               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12666               .offset = 76,
12667               .category = &panfrost_perf_config_t76x.categories[1],
12668            }, // counter
12669            {
12670               .name = "Visible prims",
12671               .desc = "Number of visible primitives",
12672               .symbol_name = "ti_prim_visible",
12673               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12674               .offset = 77,
12675               .category = &panfrost_perf_config_t76x.categories[1],
12676            }, // counter
12677            {
12678               .name = "Culled prims",
12679               .desc = "Number of culled primitives",
12680               .symbol_name = "ti_prim_culled",
12681               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12682               .offset = 78,
12683               .category = &panfrost_perf_config_t76x.categories[1],
12684            }, // counter
12685            {
12686               .name = "Clipped prims",
12687               .desc = "Number of clipped primitives",
12688               .symbol_name = "ti_prim_clipped",
12689               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12690               .offset = 79,
12691               .category = &panfrost_perf_config_t76x.categories[1],
12692            }, // counter
12693            {
12694               .name = "L0 prims",
12695               .desc = "Number of primitives in hierarchy level 0",
12696               .symbol_name = "ti_level0",
12697               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12698               .offset = 80,
12699               .category = &panfrost_perf_config_t76x.categories[1],
12700            }, // counter
12701            {
12702               .name = "L1 prims",
12703               .desc = "Number of primitives in hierarchy level 1",
12704               .symbol_name = "ti_level1",
12705               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12706               .offset = 81,
12707               .category = &panfrost_perf_config_t76x.categories[1],
12708            }, // counter
12709            {
12710               .name = "L2 prims",
12711               .desc = "Number of primitives in hierarchy level 2",
12712               .symbol_name = "ti_level2",
12713               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12714               .offset = 82,
12715               .category = &panfrost_perf_config_t76x.categories[1],
12716            }, // counter
12717            {
12718               .name = "L3 prims",
12719               .desc = "Number of primitives in hierarchy level 3",
12720               .symbol_name = "ti_level3",
12721               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12722               .offset = 83,
12723               .category = &panfrost_perf_config_t76x.categories[1],
12724            }, // counter
12725            {
12726               .name = "L4 prims",
12727               .desc = "Number of primitives in hierarchy level 4",
12728               .symbol_name = "ti_level4",
12729               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12730               .offset = 84,
12731               .category = &panfrost_perf_config_t76x.categories[1],
12732            }, // counter
12733            {
12734               .name = "L5 prims",
12735               .desc = "Number of primitives in hierarchy level 5",
12736               .symbol_name = "ti_level5",
12737               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12738               .offset = 85,
12739               .category = &panfrost_perf_config_t76x.categories[1],
12740            }, // counter
12741            {
12742               .name = "L6 prims",
12743               .desc = "Number of primitives in hierarchy level 6",
12744               .symbol_name = "ti_level6",
12745               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12746               .offset = 86,
12747               .category = &panfrost_perf_config_t76x.categories[1],
12748            }, // counter
12749            {
12750               .name = "L7 prims",
12751               .desc = "Number of primitives in hierarchy level 7",
12752               .symbol_name = "ti_level7",
12753               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12754               .offset = 87,
12755               .category = &panfrost_perf_config_t76x.categories[1],
12756            }, // counter
12757         }, // counters
12758      }, // category
12759      {
12760         .name = "Shader Core",
12761         .n_counters = 33,
12762         .counters = {
12763            {
12764               .name = "Tripipe cycles",
12765               .desc = "Number of cycles tripipe was active",
12766               .symbol_name = "tripipe_active",
12767               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12768               .offset = 218,
12769               .category = &panfrost_perf_config_t76x.categories[2],
12770            }, // counter
12771            {
12772               .name = "Fragment cycles",
12773               .desc = "Number of cycles fragment processing was active",
12774               .symbol_name = "frag_active",
12775               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12776               .offset = 196,
12777               .category = &panfrost_perf_config_t76x.categories[2],
12778            }, // counter
12779            {
12780               .name = "Compute cycles",
12781               .desc = "Number of cycles vertex\\compute processing was active",
12782               .symbol_name = "compute_active",
12783               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12784               .offset = 214,
12785               .category = &panfrost_perf_config_t76x.categories[2],
12786            }, // counter
12787            {
12788               .name = "Fragment cycles waiting for tile",
12789               .desc = "Number of cycles spent waiting for a physical tile buffer",
12790               .symbol_name = "frag_cycles_no_tile",
12791               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12792               .offset = 211,
12793               .category = &panfrost_perf_config_t76x.categories[2],
12794            }, // counter
12795            {
12796               .name = "Fragment cycles pre-pipe buffer not empty",
12797               .desc = "Number of cycles the pre-pipe queue contains quads",
12798               .symbol_name = "frag_cycles_fpkq_active",
12799               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
12800               .offset = 200,
12801               .category = &panfrost_perf_config_t76x.categories[2],
12802            }, // counter
12803            {
12804               .name = "Fragment threads",
12805               .desc = "Number of fragment threads started",
12806               .symbol_name = "frag_threads",
12807               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12808               .offset = 204,
12809               .category = &panfrost_perf_config_t76x.categories[2],
12810            }, // counter
12811            {
12812               .name = "Dummy fragment threads",
12813               .desc = "Number of dummy fragment threads started",
12814               .symbol_name = "frag_dummy_threads",
12815               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12816               .offset = 205,
12817               .category = &panfrost_perf_config_t76x.categories[2],
12818            }, // counter
12819            {
12820               .name = "Fragment threads doing late ZS",
12821               .desc = "Number of threads doing late ZS test",
12822               .symbol_name = "frag_threads_lzs_test",
12823               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12824               .offset = 209,
12825               .category = &panfrost_perf_config_t76x.categories[2],
12826            }, // counter
12827            {
12828               .name = "Fragment threads killed late ZS",
12829               .desc = "Number of threads killed by late ZS test",
12830               .symbol_name = "frag_threads_lzs_killed",
12831               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12832               .offset = 210,
12833               .category = &panfrost_perf_config_t76x.categories[2],
12834            }, // counter
12835            {
12836               .name = "Compute tasks",
12837               .desc = "Number of compute tasks",
12838               .symbol_name = "compute_tasks",
12839               .units = PAN_PERF_COUNTER_UNITS_TASKS,
12840               .offset = 215,
12841               .category = &panfrost_perf_config_t76x.categories[2],
12842            }, // counter
12843            {
12844               .name = "Compute threads",
12845               .desc = "Number of compute threads started",
12846               .symbol_name = "compute_threads",
12847               .units = PAN_PERF_COUNTER_UNITS_THREADS,
12848               .offset = 216,
12849               .category = &panfrost_perf_config_t76x.categories[2],
12850            }, // counter
12851            {
12852               .name = "Primitives loaded",
12853               .desc = "Number of primitives loaded from tiler",
12854               .symbol_name = "frag_primitives",
12855               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12856               .offset = 197,
12857               .category = &panfrost_perf_config_t76x.categories[2],
12858            }, // counter
12859            {
12860               .name = "Primitives dropped",
12861               .desc = "Number of primitives dropped because out of tile",
12862               .symbol_name = "frag_primitives_dropped",
12863               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
12864               .offset = 198,
12865               .category = &panfrost_perf_config_t76x.categories[2],
12866            }, // counter
12867            {
12868               .name = "Quads rasterized",
12869               .desc = "Number of quads rasterized",
12870               .symbol_name = "frag_quads_rast",
12871               .units = PAN_PERF_COUNTER_UNITS_QUADS,
12872               .offset = 206,
12873               .category = &panfrost_perf_config_t76x.categories[2],
12874            }, // counter
12875            {
12876               .name = "Quads doing early ZS",
12877               .desc = "Number of quads doing early ZS test",
12878               .symbol_name = "frag_quads_ezs_test",
12879               .units = PAN_PERF_COUNTER_UNITS_QUADS,
12880               .offset = 207,
12881               .category = &panfrost_perf_config_t76x.categories[2],
12882            }, // counter
12883            {
12884               .name = "Quads killed early Z",
12885               .desc = "Number of quads killed by early ZS test",
12886               .symbol_name = "frag_quads_ezs_killed",
12887               .units = PAN_PERF_COUNTER_UNITS_QUADS,
12888               .offset = 208,
12889               .category = &panfrost_perf_config_t76x.categories[2],
12890            }, // counter
12891            {
12892               .name = "Pixels",
12893               .desc = "Number of pixels rendered",
12894               .symbol_name = "frag_num_tiles",
12895               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
12896               .offset = 212,
12897               .category = &panfrost_perf_config_t76x.categories[2],
12898            }, // counter
12899            {
12900               .name = "Tile writes killed by TE",
12901               .desc = "Number of tile writes skipped by transaction elimination",
12902               .symbol_name = "frag_trans_elim",
12903               .units = PAN_PERF_COUNTER_UNITS_TILES,
12904               .offset = 213,
12905               .category = &panfrost_perf_config_t76x.categories[2],
12906            }, // counter
12907            {
12908               .name = "A instructions",
12909               .desc = "Number of instructions completed by the the A-pipe (normalized per pipeline)",
12910               .symbol_name = "arith_words",
12911               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12912               .offset = 219,
12913               .category = &panfrost_perf_config_t76x.categories[2],
12914            }, // counter
12915            {
12916               .name = "LS instructions",
12917               .desc = "Number of instructions completed by the LS-pipe",
12918               .symbol_name = "ls_words",
12919               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12920               .offset = 223,
12921               .category = &panfrost_perf_config_t76x.categories[2],
12922            }, // counter
12923            {
12924               .name = "LS instruction issues",
12925               .desc = "Number of instructions issued to the LS-pipe, including restarts",
12926               .symbol_name = "ls_issues",
12927               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12928               .offset = 224,
12929               .category = &panfrost_perf_config_t76x.categories[2],
12930            }, // counter
12931            {
12932               .name = "T instructions",
12933               .desc = "Number of instructions completed by the T-pipe",
12934               .symbol_name = "tex_words",
12935               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12936               .offset = 230,
12937               .category = &panfrost_perf_config_t76x.categories[2],
12938            }, // counter
12939            {
12940               .name = "T instruction issues",
12941               .desc = "Number of threads through loop 2 address calculation",
12942               .symbol_name = "tex_issues",
12943               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
12944               .offset = 234,
12945               .category = &panfrost_perf_config_t76x.categories[2],
12946            }, // counter
12947            {
12948               .name = "Cache misses",
12949               .desc = "Number of instructions in the T-pipe, recirculated due to cache miss",
12950               .symbol_name = "tex_recirc_fmiss",
12951               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12952               .offset = 235,
12953               .category = &panfrost_perf_config_t76x.categories[2],
12954            }, // counter
12955            {
12956               .name = "Read operations",
12957               .desc = "Number of read operations in the Load/Store cache",
12958               .symbol_name = "lsc_read_op",
12959               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12960               .offset = 241,
12961               .category = &panfrost_perf_config_t76x.categories[2],
12962            }, // counter
12963            {
12964               .name = "Read hits",
12965               .desc = "Number of read hits in the Load/Store cache",
12966               .symbol_name = "lsc_read_hits",
12967               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12968               .offset = 240,
12969               .category = &panfrost_perf_config_t76x.categories[2],
12970            }, // counter
12971            {
12972               .name = "Write operations",
12973               .desc = "Number of write operations in the Load/Store cache",
12974               .symbol_name = "lsc_write_op",
12975               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12976               .offset = 243,
12977               .category = &panfrost_perf_config_t76x.categories[2],
12978            }, // counter
12979            {
12980               .name = "Write hits",
12981               .desc = "Number of write hits in the Load/Store cache",
12982               .symbol_name = "lsc_write_hits",
12983               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12984               .offset = 242,
12985               .category = &panfrost_perf_config_t76x.categories[2],
12986            }, // counter
12987            {
12988               .name = "Atomic operations",
12989               .desc = "Number of atomic operations in the Load/Store cache",
12990               .symbol_name = "lsc_atomic_op",
12991               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
12992               .offset = 245,
12993               .category = &panfrost_perf_config_t76x.categories[2],
12994            }, // counter
12995            {
12996               .name = "Atomic hits",
12997               .desc = "Number of atomic hits in the Load/Store cache",
12998               .symbol_name = "lsc_atomic_hits",
12999               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13000               .offset = 244,
13001               .category = &panfrost_perf_config_t76x.categories[2],
13002            }, // counter
13003            {
13004               .name = "Line fetches",
13005               .desc = "Number of line fetches in the Load/Store cache",
13006               .symbol_name = "lsc_line_fetches",
13007               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13008               .offset = 246,
13009               .category = &panfrost_perf_config_t76x.categories[2],
13010            }, // counter
13011            {
13012               .name = "Dirty line evictions",
13013               .desc = "Number of dirty line evictions in the Load/Store cache",
13014               .symbol_name = "lsc_dirty_line",
13015               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13016               .offset = 247,
13017               .category = &panfrost_perf_config_t76x.categories[2],
13018            }, // counter
13019            {
13020               .name = "Snoops in to LSC",
13021               .desc = "Number of coherent memory snoops in to the Load/Store cache",
13022               .symbol_name = "lsc_snoops",
13023               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13024               .offset = 248,
13025               .category = &panfrost_perf_config_t76x.categories[2],
13026            }, // counter
13027         }, // counters
13028      }, // category
13029      {
13030         .name = "L2 Cache",
13031         .n_counters = 13,
13032         .counters = {
13033            {
13034               .name = "L2 read lookups",
13035               .desc = "Number of reads into the L2 cache",
13036               .symbol_name = "l2_read_lookup",
13037               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13038               .offset = 161,
13039               .category = &panfrost_perf_config_t76x.categories[3],
13040            }, // counter
13041            {
13042               .name = "Read snoops",
13043               .desc = "Number of read transaction snoops",
13044               .symbol_name = "l2_read_snoop",
13045               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13046               .offset = 164,
13047               .category = &panfrost_perf_config_t76x.categories[3],
13048            }, // counter
13049            {
13050               .name = "L2 read hits",
13051               .desc = "Number of reads hitting in the L2 cache",
13052               .symbol_name = "l2_read_hit",
13053               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13054               .offset = 165,
13055               .category = &panfrost_perf_config_t76x.categories[3],
13056            }, // counter
13057            {
13058               .name = "Write snoops",
13059               .desc = "Number of write transaction snoops",
13060               .symbol_name = "l2_write_snoop",
13061               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13062               .offset = 170,
13063               .category = &panfrost_perf_config_t76x.categories[3],
13064            }, // counter
13065            {
13066               .name = "L2 write hits",
13067               .desc = "Number of writes hitting in the L2 cache",
13068               .symbol_name = "l2_write_hit",
13069               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13070               .offset = 171,
13071               .category = &panfrost_perf_config_t76x.categories[3],
13072            }, // counter
13073            {
13074               .name = "L2 write lookups",
13075               .desc = "Number of writes into the L2 cache",
13076               .symbol_name = "l2_write_lookup",
13077               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13078               .offset = 167,
13079               .category = &panfrost_perf_config_t76x.categories[3],
13080            }, // counter
13081            {
13082               .name = "External read bytes",
13083               .desc = "Number of external bus read bytes",
13084               .symbol_name = "l2_ext_read_beats",
13085               .units = PAN_PERF_COUNTER_UNITS_BYTES,
13086               .offset = 159,
13087               .category = &panfrost_perf_config_t76x.categories[3],
13088            }, // counter
13089            {
13090               .name = "External bus stalls (AR)",
13091               .desc = "Number of cycles a valid read address (AR) is stalled by the external interconnect",
13092               .symbol_name = "l2_ext_ar_stall",
13093               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13094               .offset = 182,
13095               .category = &panfrost_perf_config_t76x.categories[3],
13096            }, // counter
13097            {
13098               .name = "External bus response buffer full",
13099               .desc = "Number of cycles a valid request is blocked by a full response buffer",
13100               .symbol_name = "l2_ext_r_buf_full",
13101               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13102               .offset = 188,
13103               .category = &panfrost_perf_config_t76x.categories[3],
13104            }, // counter
13105            {
13106               .name = "External bus read data buffer full",
13107               .desc = "Number of cycles a valid request is blocked by a full read data buffer",
13108               .symbol_name = "l2_ext_rd_buf_full",
13109               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13110               .offset = 184,
13111               .category = &panfrost_perf_config_t76x.categories[3],
13112            }, // counter
13113            {
13114               .name = "External write bytes",
13115               .desc = "Number of external bus write bytes",
13116               .symbol_name = "l2_ext_write_beats",
13117               .units = PAN_PERF_COUNTER_UNITS_BYTES,
13118               .offset = 158,
13119               .category = &panfrost_perf_config_t76x.categories[3],
13120            }, // counter
13121            {
13122               .name = "External bus stalls (W)",
13123               .desc = "Number of cycles a valid write data (W channel) is stalled by the external interconnect",
13124               .symbol_name = "l2_ext_w_stall",
13125               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13126               .offset = 186,
13127               .category = &panfrost_perf_config_t76x.categories[3],
13128            }, // counter
13129            {
13130               .name = "External bus write buffer full",
13131               .desc = "Number of cycles a valid request is blocked by a full write buffer",
13132               .symbol_name = "l2_ext_w_buf_full",
13133               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13134               .offset = 187,
13135               .category = &panfrost_perf_config_t76x.categories[3],
13136            }, // counter
13137         }, // counters
13138      }, // category
13139   }, // categories
13140}; // panfrost_perf_config_t76x
13141
13142static void UNUSED
13143static_asserts_t82x(void)
13144{
13145   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
13146   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
13147   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
13148   STATIC_ASSERT(33 <= PAN_PERF_MAX_COUNTERS);
13149   STATIC_ASSERT(13 <= PAN_PERF_MAX_COUNTERS);
13150}
13151
13152const struct panfrost_perf_config panfrost_perf_config_t82x = {
13153   .n_categories = 4,
13154   .categories = {
13155      {
13156         .name = "Job Manager",
13157         .n_counters = 11,
13158         .counters = {
13159            {
13160               .name = "GPU cycles",
13161               .desc = "Number of cycles GPU active",
13162               .symbol_name = "gpu_active",
13163               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13164               .offset = 6,
13165               .category = &panfrost_perf_config_t82x.categories[0],
13166            }, // counter
13167            {
13168               .name = "IRQ cycles",
13169               .desc = "Number of cycles GPU interrupt pending",
13170               .symbol_name = "irq_active",
13171               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13172               .offset = 7,
13173               .category = &panfrost_perf_config_t82x.categories[0],
13174            }, // counter
13175            {
13176               .name = "JS0 cycles",
13177               .desc = "Number of cycles JS0 (fragment) active",
13178               .symbol_name = "js0_active",
13179               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13180               .offset = 10,
13181               .category = &panfrost_perf_config_t82x.categories[0],
13182            }, // counter
13183            {
13184               .name = "JS1 cycles",
13185               .desc = "Number of cycles JS1 (vertex/tiler/compute) active",
13186               .symbol_name = "js1_active",
13187               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13188               .offset = 18,
13189               .category = &panfrost_perf_config_t82x.categories[0],
13190            }, // counter
13191            {
13192               .name = "JS2 cycles",
13193               .desc = "Number of cycles JS2 (vertex/compute) active",
13194               .symbol_name = "js2_active",
13195               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13196               .offset = 26,
13197               .category = &panfrost_perf_config_t82x.categories[0],
13198            }, // counter
13199            {
13200               .name = "JS0 jobs",
13201               .desc = "Number of Jobs (fragment) completed in JS0",
13202               .symbol_name = "js0_jobs",
13203               .units = PAN_PERF_COUNTER_UNITS_JOBS,
13204               .offset = 8,
13205               .category = &panfrost_perf_config_t82x.categories[0],
13206            }, // counter
13207            {
13208               .name = "JS1 jobs",
13209               .desc = "Number of Jobs (vertex/tiler/compute) completed in JS1",
13210               .symbol_name = "js1_jobs",
13211               .units = PAN_PERF_COUNTER_UNITS_JOBS,
13212               .offset = 16,
13213               .category = &panfrost_perf_config_t82x.categories[0],
13214            }, // counter
13215            {
13216               .name = "JS2 jobs",
13217               .desc = "Number of Jobs (vertex/compute) completed in JS2",
13218               .symbol_name = "js2_jobs",
13219               .units = PAN_PERF_COUNTER_UNITS_JOBS,
13220               .offset = 24,
13221               .category = &panfrost_perf_config_t82x.categories[0],
13222            }, // counter
13223            {
13224               .name = "Pixels",
13225               .desc = "Number of Pixels completed in JS0",
13226               .symbol_name = "js0_tasks",
13227               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
13228               .offset = 9,
13229               .category = &panfrost_perf_config_t82x.categories[0],
13230            }, // counter
13231            {
13232               .name = "JS1 tasks",
13233               .desc = "Number of Tasks completed in JS1",
13234               .symbol_name = "js1_tasks",
13235               .units = PAN_PERF_COUNTER_UNITS_TASKS,
13236               .offset = 17,
13237               .category = &panfrost_perf_config_t82x.categories[0],
13238            }, // counter
13239            {
13240               .name = "JS2 tasks",
13241               .desc = "Number of Tasks completed in JS2",
13242               .symbol_name = "js2_tasks",
13243               .units = PAN_PERF_COUNTER_UNITS_TASKS,
13244               .offset = 25,
13245               .category = &panfrost_perf_config_t82x.categories[0],
13246            }, // counter
13247         }, // counters
13248      }, // category
13249      {
13250         .name = "Tiler",
13251         .n_counters = 11,
13252         .counters = {
13253            {
13254               .name = "Tiler cycles",
13255               .desc = "Number of cycles Tiler active",
13256               .symbol_name = "ti_active",
13257               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13258               .offset = 86,
13259               .category = &panfrost_perf_config_t82x.categories[1],
13260            }, // counter
13261            {
13262               .name = "Polygons",
13263               .desc = "Number of polygons processed",
13264               .symbol_name = "ti_polygons",
13265               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13266               .offset = 70,
13267               .category = &panfrost_perf_config_t82x.categories[1],
13268            }, // counter
13269            {
13270               .name = "Quads",
13271               .desc = "Number of quads processed",
13272               .symbol_name = "ti_quads",
13273               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13274               .offset = 69,
13275               .category = &panfrost_perf_config_t82x.categories[1],
13276            }, // counter
13277            {
13278               .name = "Triangles",
13279               .desc = "Number of triangles processed",
13280               .symbol_name = "ti_triangles",
13281               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13282               .offset = 68,
13283               .category = &panfrost_perf_config_t82x.categories[1],
13284            }, // counter
13285            {
13286               .name = "Lines",
13287               .desc = "Number of lines processed",
13288               .symbol_name = "ti_lines",
13289               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13290               .offset = 72,
13291               .category = &panfrost_perf_config_t82x.categories[1],
13292            }, // counter
13293            {
13294               .name = "Points",
13295               .desc = "Number of points processed",
13296               .symbol_name = "ti_points",
13297               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13298               .offset = 71,
13299               .category = &panfrost_perf_config_t82x.categories[1],
13300            }, // counter
13301            {
13302               .name = "Front facing prims",
13303               .desc = "Number of front facing primitives",
13304               .symbol_name = "ti_front_facing",
13305               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13306               .offset = 73,
13307               .category = &panfrost_perf_config_t82x.categories[1],
13308            }, // counter
13309            {
13310               .name = "Back facing prims",
13311               .desc = "Number of back facing primitives",
13312               .symbol_name = "ti_back_facing",
13313               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13314               .offset = 74,
13315               .category = &panfrost_perf_config_t82x.categories[1],
13316            }, // counter
13317            {
13318               .name = "Visible prims",
13319               .desc = "Number of visible primitives",
13320               .symbol_name = "ti_prim_visible",
13321               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13322               .offset = 75,
13323               .category = &panfrost_perf_config_t82x.categories[1],
13324            }, // counter
13325            {
13326               .name = "Culled prims",
13327               .desc = "Number of culled primitives",
13328               .symbol_name = "ti_prim_culled",
13329               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13330               .offset = 76,
13331               .category = &panfrost_perf_config_t82x.categories[1],
13332            }, // counter
13333            {
13334               .name = "Clipped prims",
13335               .desc = "Number of clipped primitives",
13336               .symbol_name = "ti_prim_clipped",
13337               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13338               .offset = 77,
13339               .category = &panfrost_perf_config_t82x.categories[1],
13340            }, // counter
13341         }, // counters
13342      }, // category
13343      {
13344         .name = "Shader Core",
13345         .n_counters = 33,
13346         .counters = {
13347            {
13348               .name = "Tripipe cycles",
13349               .desc = "Number of cycles tripipe was active",
13350               .symbol_name = "tripipe_active",
13351               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13352               .offset = 218,
13353               .category = &panfrost_perf_config_t82x.categories[2],
13354            }, // counter
13355            {
13356               .name = "Fragment cycles",
13357               .desc = "Number of cycles fragment processing was active",
13358               .symbol_name = "frag_active",
13359               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13360               .offset = 196,
13361               .category = &panfrost_perf_config_t82x.categories[2],
13362            }, // counter
13363            {
13364               .name = "Compute cycles",
13365               .desc = "Number of cycles vertex\\compute processing was active",
13366               .symbol_name = "compute_active",
13367               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13368               .offset = 214,
13369               .category = &panfrost_perf_config_t82x.categories[2],
13370            }, // counter
13371            {
13372               .name = "Fragment cycles waiting for tile",
13373               .desc = "Number of cycles spent waiting for a physical tile buffer",
13374               .symbol_name = "frag_cycles_no_tile",
13375               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13376               .offset = 211,
13377               .category = &panfrost_perf_config_t82x.categories[2],
13378            }, // counter
13379            {
13380               .name = "Fragment cycles pre-pipe buffer not empty",
13381               .desc = "Number of cycles the pre-pipe queue contains quads",
13382               .symbol_name = "frag_cycles_fpkq_active",
13383               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13384               .offset = 200,
13385               .category = &panfrost_perf_config_t82x.categories[2],
13386            }, // counter
13387            {
13388               .name = "Fragment threads",
13389               .desc = "Number of fragment threads started",
13390               .symbol_name = "frag_threads",
13391               .units = PAN_PERF_COUNTER_UNITS_THREADS,
13392               .offset = 204,
13393               .category = &panfrost_perf_config_t82x.categories[2],
13394            }, // counter
13395            {
13396               .name = "Dummy fragment threads",
13397               .desc = "Number of dummy fragment threads started",
13398               .symbol_name = "frag_dummy_threads",
13399               .units = PAN_PERF_COUNTER_UNITS_THREADS,
13400               .offset = 205,
13401               .category = &panfrost_perf_config_t82x.categories[2],
13402            }, // counter
13403            {
13404               .name = "Fragment threads doing late ZS",
13405               .desc = "Number of threads doing late ZS test",
13406               .symbol_name = "frag_threads_lzs_test",
13407               .units = PAN_PERF_COUNTER_UNITS_THREADS,
13408               .offset = 209,
13409               .category = &panfrost_perf_config_t82x.categories[2],
13410            }, // counter
13411            {
13412               .name = "Fragment threads killed late ZS",
13413               .desc = "Number of threads killed by late ZS test",
13414               .symbol_name = "frag_threads_lzs_killed",
13415               .units = PAN_PERF_COUNTER_UNITS_THREADS,
13416               .offset = 210,
13417               .category = &panfrost_perf_config_t82x.categories[2],
13418            }, // counter
13419            {
13420               .name = "Compute tasks",
13421               .desc = "Number of compute tasks",
13422               .symbol_name = "compute_tasks",
13423               .units = PAN_PERF_COUNTER_UNITS_TASKS,
13424               .offset = 215,
13425               .category = &panfrost_perf_config_t82x.categories[2],
13426            }, // counter
13427            {
13428               .name = "Compute threads",
13429               .desc = "Number of compute threads started",
13430               .symbol_name = "compute_threads",
13431               .units = PAN_PERF_COUNTER_UNITS_THREADS,
13432               .offset = 216,
13433               .category = &panfrost_perf_config_t82x.categories[2],
13434            }, // counter
13435            {
13436               .name = "Primitives loaded",
13437               .desc = "Number of primitives loaded from tiler",
13438               .symbol_name = "frag_primitives",
13439               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13440               .offset = 197,
13441               .category = &panfrost_perf_config_t82x.categories[2],
13442            }, // counter
13443            {
13444               .name = "Primitives dropped",
13445               .desc = "Number of primitives dropped because out of tile",
13446               .symbol_name = "frag_primitives_dropped",
13447               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13448               .offset = 198,
13449               .category = &panfrost_perf_config_t82x.categories[2],
13450            }, // counter
13451            {
13452               .name = "Quads rasterized",
13453               .desc = "Number of quads rasterized",
13454               .symbol_name = "frag_quads_rast",
13455               .units = PAN_PERF_COUNTER_UNITS_QUADS,
13456               .offset = 206,
13457               .category = &panfrost_perf_config_t82x.categories[2],
13458            }, // counter
13459            {
13460               .name = "Quads doing early ZS",
13461               .desc = "Number of quads doing early ZS test",
13462               .symbol_name = "frag_quads_ezs_test",
13463               .units = PAN_PERF_COUNTER_UNITS_QUADS,
13464               .offset = 207,
13465               .category = &panfrost_perf_config_t82x.categories[2],
13466            }, // counter
13467            {
13468               .name = "Quads killed early Z",
13469               .desc = "Number of quads killed by early ZS test",
13470               .symbol_name = "frag_quads_ezs_killed",
13471               .units = PAN_PERF_COUNTER_UNITS_QUADS,
13472               .offset = 208,
13473               .category = &panfrost_perf_config_t82x.categories[2],
13474            }, // counter
13475            {
13476               .name = "Pixels",
13477               .desc = "Number of pixels rendered",
13478               .symbol_name = "frag_num_tiles",
13479               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
13480               .offset = 212,
13481               .category = &panfrost_perf_config_t82x.categories[2],
13482            }, // counter
13483            {
13484               .name = "Tile writes killed by TE",
13485               .desc = "Number of tile writes skipped by transaction elimination",
13486               .symbol_name = "frag_trans_elim",
13487               .units = PAN_PERF_COUNTER_UNITS_TILES,
13488               .offset = 213,
13489               .category = &panfrost_perf_config_t82x.categories[2],
13490            }, // counter
13491            {
13492               .name = "A instructions",
13493               .desc = "Number of batched instructions executed by the A-pipe (normalized per pipe)",
13494               .symbol_name = "arith_words",
13495               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
13496               .offset = 219,
13497               .category = &panfrost_perf_config_t82x.categories[2],
13498            }, // counter
13499            {
13500               .name = "LS instructions",
13501               .desc = "Number of instructions completed by the LS-pipe",
13502               .symbol_name = "ls_words",
13503               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
13504               .offset = 223,
13505               .category = &panfrost_perf_config_t82x.categories[2],
13506            }, // counter
13507            {
13508               .name = "LS instruction issues",
13509               .desc = "Number of instructions issued to the LS-pipe, including restarts",
13510               .symbol_name = "ls_issues",
13511               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
13512               .offset = 224,
13513               .category = &panfrost_perf_config_t82x.categories[2],
13514            }, // counter
13515            {
13516               .name = "T instructions",
13517               .desc = "Number of instructions completed by the T-pipe",
13518               .symbol_name = "tex_words",
13519               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
13520               .offset = 230,
13521               .category = &panfrost_perf_config_t82x.categories[2],
13522            }, // counter
13523            {
13524               .name = "T instruction issues",
13525               .desc = "Number of threads through loop 2 address calculation",
13526               .symbol_name = "tex_issues",
13527               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
13528               .offset = 234,
13529               .category = &panfrost_perf_config_t82x.categories[2],
13530            }, // counter
13531            {
13532               .name = "Cache misses",
13533               .desc = "Number of instructions in the T-pipe, recirculated due to cache miss",
13534               .symbol_name = "tex_recirc_fmiss",
13535               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13536               .offset = 235,
13537               .category = &panfrost_perf_config_t82x.categories[2],
13538            }, // counter
13539            {
13540               .name = "Read operations",
13541               .desc = "Number of read operations in the Load/Store cache",
13542               .symbol_name = "lsc_read_op",
13543               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13544               .offset = 241,
13545               .category = &panfrost_perf_config_t82x.categories[2],
13546            }, // counter
13547            {
13548               .name = "Read hits",
13549               .desc = "Number of read hits in the Load/Store cache",
13550               .symbol_name = "lsc_read_hits",
13551               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13552               .offset = 240,
13553               .category = &panfrost_perf_config_t82x.categories[2],
13554            }, // counter
13555            {
13556               .name = "Write operations",
13557               .desc = "Number of write operations in the Load/Store cache",
13558               .symbol_name = "lsc_write_op",
13559               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13560               .offset = 243,
13561               .category = &panfrost_perf_config_t82x.categories[2],
13562            }, // counter
13563            {
13564               .name = "Write hits",
13565               .desc = "Number of write hits in the Load/Store cache",
13566               .symbol_name = "lsc_write_hits",
13567               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13568               .offset = 242,
13569               .category = &panfrost_perf_config_t82x.categories[2],
13570            }, // counter
13571            {
13572               .name = "Atomic operations",
13573               .desc = "Number of atomic operations in the Load/Store cache",
13574               .symbol_name = "lsc_atomic_op",
13575               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13576               .offset = 245,
13577               .category = &panfrost_perf_config_t82x.categories[2],
13578            }, // counter
13579            {
13580               .name = "Atomic hits",
13581               .desc = "Number of atomic hits in the Load/Store cache",
13582               .symbol_name = "lsc_atomic_hits",
13583               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13584               .offset = 244,
13585               .category = &panfrost_perf_config_t82x.categories[2],
13586            }, // counter
13587            {
13588               .name = "Line fetches",
13589               .desc = "Number of line fetches in the Load/Store cache",
13590               .symbol_name = "lsc_line_fetches",
13591               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13592               .offset = 246,
13593               .category = &panfrost_perf_config_t82x.categories[2],
13594            }, // counter
13595            {
13596               .name = "Dirty line evictions",
13597               .desc = "Number of dirty line evictions in the Load/Store cache",
13598               .symbol_name = "lsc_dirty_line",
13599               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13600               .offset = 247,
13601               .category = &panfrost_perf_config_t82x.categories[2],
13602            }, // counter
13603            {
13604               .name = "Snoops in to LSC",
13605               .desc = "Number of coherent memory snoops in to the Load/Store cache",
13606               .symbol_name = "lsc_snoops",
13607               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13608               .offset = 248,
13609               .category = &panfrost_perf_config_t82x.categories[2],
13610            }, // counter
13611         }, // counters
13612      }, // category
13613      {
13614         .name = "L2 Cache",
13615         .n_counters = 13,
13616         .counters = {
13617            {
13618               .name = "L2 read lookups",
13619               .desc = "Number of reads into the L2 cache",
13620               .symbol_name = "l2_read_lookup",
13621               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13622               .offset = 161,
13623               .category = &panfrost_perf_config_t82x.categories[3],
13624            }, // counter
13625            {
13626               .name = "Read snoops",
13627               .desc = "Number of read transaction snoops",
13628               .symbol_name = "l2_read_snoop",
13629               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13630               .offset = 164,
13631               .category = &panfrost_perf_config_t82x.categories[3],
13632            }, // counter
13633            {
13634               .name = "L2 read hits",
13635               .desc = "Number of reads hitting in the L2 cache",
13636               .symbol_name = "l2_read_hit",
13637               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13638               .offset = 165,
13639               .category = &panfrost_perf_config_t82x.categories[3],
13640            }, // counter
13641            {
13642               .name = "Write snoops",
13643               .desc = "Number of write transaction snoops",
13644               .symbol_name = "l2_write_snoop",
13645               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13646               .offset = 170,
13647               .category = &panfrost_perf_config_t82x.categories[3],
13648            }, // counter
13649            {
13650               .name = "L2 write hits",
13651               .desc = "Number of writes hitting in the L2 cache",
13652               .symbol_name = "l2_write_hit",
13653               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13654               .offset = 171,
13655               .category = &panfrost_perf_config_t82x.categories[3],
13656            }, // counter
13657            {
13658               .name = "L2 write lookups",
13659               .desc = "Number of writes into the L2 cache",
13660               .symbol_name = "l2_write_lookup",
13661               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
13662               .offset = 167,
13663               .category = &panfrost_perf_config_t82x.categories[3],
13664            }, // counter
13665            {
13666               .name = "External read bytes",
13667               .desc = "Number of external bus read bytes",
13668               .symbol_name = "l2_ext_read_beats",
13669               .units = PAN_PERF_COUNTER_UNITS_BYTES,
13670               .offset = 159,
13671               .category = &panfrost_perf_config_t82x.categories[3],
13672            }, // counter
13673            {
13674               .name = "External bus stalls (AR)",
13675               .desc = "Number of cycles a valid read address (AR) is stalled by the external interconnect",
13676               .symbol_name = "l2_ext_ar_stall",
13677               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13678               .offset = 182,
13679               .category = &panfrost_perf_config_t82x.categories[3],
13680            }, // counter
13681            {
13682               .name = "External bus response buffer full",
13683               .desc = "Number of cycles a valid request is blocked by a full response buffer",
13684               .symbol_name = "l2_ext_r_buf_full",
13685               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13686               .offset = 188,
13687               .category = &panfrost_perf_config_t82x.categories[3],
13688            }, // counter
13689            {
13690               .name = "External bus read data buffer full",
13691               .desc = "Number of cycles a valid request is blocked by a full read data buffer",
13692               .symbol_name = "l2_ext_rd_buf_full",
13693               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13694               .offset = 184,
13695               .category = &panfrost_perf_config_t82x.categories[3],
13696            }, // counter
13697            {
13698               .name = "External write bytes",
13699               .desc = "Number of external bus write bytes",
13700               .symbol_name = "l2_ext_write_beats",
13701               .units = PAN_PERF_COUNTER_UNITS_BYTES,
13702               .offset = 158,
13703               .category = &panfrost_perf_config_t82x.categories[3],
13704            }, // counter
13705            {
13706               .name = "External bus stalls (W)",
13707               .desc = "Number of cycles a valid write data (W channel) is stalled by the external interconnect",
13708               .symbol_name = "l2_ext_w_stall",
13709               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13710               .offset = 186,
13711               .category = &panfrost_perf_config_t82x.categories[3],
13712            }, // counter
13713            {
13714               .name = "External bus write buffer full",
13715               .desc = "Number of cycles a valid request is blocked by a full write buffer",
13716               .symbol_name = "l2_ext_w_buf_full",
13717               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13718               .offset = 187,
13719               .category = &panfrost_perf_config_t82x.categories[3],
13720            }, // counter
13721         }, // counters
13722      }, // category
13723   }, // categories
13724}; // panfrost_perf_config_t82x
13725
13726static void UNUSED
13727static_asserts_t83x(void)
13728{
13729   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
13730   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
13731   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
13732   STATIC_ASSERT(33 <= PAN_PERF_MAX_COUNTERS);
13733   STATIC_ASSERT(13 <= PAN_PERF_MAX_COUNTERS);
13734}
13735
13736const struct panfrost_perf_config panfrost_perf_config_t83x = {
13737   .n_categories = 4,
13738   .categories = {
13739      {
13740         .name = "Job Manager",
13741         .n_counters = 11,
13742         .counters = {
13743            {
13744               .name = "GPU cycles",
13745               .desc = "Number of cycles GPU active",
13746               .symbol_name = "gpu_active",
13747               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13748               .offset = 6,
13749               .category = &panfrost_perf_config_t83x.categories[0],
13750            }, // counter
13751            {
13752               .name = "IRQ cycles",
13753               .desc = "Number of cycles GPU interrupt pending",
13754               .symbol_name = "irq_active",
13755               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13756               .offset = 7,
13757               .category = &panfrost_perf_config_t83x.categories[0],
13758            }, // counter
13759            {
13760               .name = "JS0 cycles",
13761               .desc = "Number of cycles JS0 (fragment) active",
13762               .symbol_name = "js0_active",
13763               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13764               .offset = 10,
13765               .category = &panfrost_perf_config_t83x.categories[0],
13766            }, // counter
13767            {
13768               .name = "JS1 cycles",
13769               .desc = "Number of cycles JS1 (vertex/tiler/compute) active",
13770               .symbol_name = "js1_active",
13771               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13772               .offset = 18,
13773               .category = &panfrost_perf_config_t83x.categories[0],
13774            }, // counter
13775            {
13776               .name = "JS2 cycles",
13777               .desc = "Number of cycles JS2 (vertex/compute) active",
13778               .symbol_name = "js2_active",
13779               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13780               .offset = 26,
13781               .category = &panfrost_perf_config_t83x.categories[0],
13782            }, // counter
13783            {
13784               .name = "JS0 jobs",
13785               .desc = "Number of Jobs (fragment) completed in JS0",
13786               .symbol_name = "js0_jobs",
13787               .units = PAN_PERF_COUNTER_UNITS_JOBS,
13788               .offset = 8,
13789               .category = &panfrost_perf_config_t83x.categories[0],
13790            }, // counter
13791            {
13792               .name = "JS1 jobs",
13793               .desc = "Number of Jobs (vertex/tiler/compute) completed in JS1",
13794               .symbol_name = "js1_jobs",
13795               .units = PAN_PERF_COUNTER_UNITS_JOBS,
13796               .offset = 16,
13797               .category = &panfrost_perf_config_t83x.categories[0],
13798            }, // counter
13799            {
13800               .name = "JS2 jobs",
13801               .desc = "Number of Jobs (vertex/compute) completed in JS2",
13802               .symbol_name = "js2_jobs",
13803               .units = PAN_PERF_COUNTER_UNITS_JOBS,
13804               .offset = 24,
13805               .category = &panfrost_perf_config_t83x.categories[0],
13806            }, // counter
13807            {
13808               .name = "Pixels",
13809               .desc = "Number of Pixels completed in JS0",
13810               .symbol_name = "js0_tasks",
13811               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
13812               .offset = 9,
13813               .category = &panfrost_perf_config_t83x.categories[0],
13814            }, // counter
13815            {
13816               .name = "JS1 tasks",
13817               .desc = "Number of Tasks completed in JS1",
13818               .symbol_name = "js1_tasks",
13819               .units = PAN_PERF_COUNTER_UNITS_TASKS,
13820               .offset = 17,
13821               .category = &panfrost_perf_config_t83x.categories[0],
13822            }, // counter
13823            {
13824               .name = "JS2 tasks",
13825               .desc = "Number of Tasks completed in JS2",
13826               .symbol_name = "js2_tasks",
13827               .units = PAN_PERF_COUNTER_UNITS_TASKS,
13828               .offset = 25,
13829               .category = &panfrost_perf_config_t83x.categories[0],
13830            }, // counter
13831         }, // counters
13832      }, // category
13833      {
13834         .name = "Tiler",
13835         .n_counters = 11,
13836         .counters = {
13837            {
13838               .name = "Tiler cycles",
13839               .desc = "Number of cycles Tiler active",
13840               .symbol_name = "ti_active",
13841               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13842               .offset = 86,
13843               .category = &panfrost_perf_config_t83x.categories[1],
13844            }, // counter
13845            {
13846               .name = "Polygons",
13847               .desc = "Number of polygons processed",
13848               .symbol_name = "ti_polygons",
13849               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13850               .offset = 70,
13851               .category = &panfrost_perf_config_t83x.categories[1],
13852            }, // counter
13853            {
13854               .name = "Quads",
13855               .desc = "Number of quads processed",
13856               .symbol_name = "ti_quads",
13857               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13858               .offset = 69,
13859               .category = &panfrost_perf_config_t83x.categories[1],
13860            }, // counter
13861            {
13862               .name = "Triangles",
13863               .desc = "Number of triangles processed",
13864               .symbol_name = "ti_triangles",
13865               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13866               .offset = 68,
13867               .category = &panfrost_perf_config_t83x.categories[1],
13868            }, // counter
13869            {
13870               .name = "Lines",
13871               .desc = "Number of lines processed",
13872               .symbol_name = "ti_lines",
13873               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13874               .offset = 72,
13875               .category = &panfrost_perf_config_t83x.categories[1],
13876            }, // counter
13877            {
13878               .name = "Points",
13879               .desc = "Number of points processed",
13880               .symbol_name = "ti_points",
13881               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13882               .offset = 71,
13883               .category = &panfrost_perf_config_t83x.categories[1],
13884            }, // counter
13885            {
13886               .name = "Front facing prims",
13887               .desc = "Number of front facing primitives",
13888               .symbol_name = "ti_front_facing",
13889               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13890               .offset = 73,
13891               .category = &panfrost_perf_config_t83x.categories[1],
13892            }, // counter
13893            {
13894               .name = "Back facing prims",
13895               .desc = "Number of back facing primitives",
13896               .symbol_name = "ti_back_facing",
13897               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13898               .offset = 74,
13899               .category = &panfrost_perf_config_t83x.categories[1],
13900            }, // counter
13901            {
13902               .name = "Visible prims",
13903               .desc = "Number of visible primitives",
13904               .symbol_name = "ti_prim_visible",
13905               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13906               .offset = 75,
13907               .category = &panfrost_perf_config_t83x.categories[1],
13908            }, // counter
13909            {
13910               .name = "Culled prims",
13911               .desc = "Number of culled primitives",
13912               .symbol_name = "ti_prim_culled",
13913               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13914               .offset = 76,
13915               .category = &panfrost_perf_config_t83x.categories[1],
13916            }, // counter
13917            {
13918               .name = "Clipped prims",
13919               .desc = "Number of clipped primitives",
13920               .symbol_name = "ti_prim_clipped",
13921               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
13922               .offset = 77,
13923               .category = &panfrost_perf_config_t83x.categories[1],
13924            }, // counter
13925         }, // counters
13926      }, // category
13927      {
13928         .name = "Shader Core",
13929         .n_counters = 33,
13930         .counters = {
13931            {
13932               .name = "Tripipe cycles",
13933               .desc = "Number of cycles tripipe was active",
13934               .symbol_name = "tripipe_active",
13935               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13936               .offset = 218,
13937               .category = &panfrost_perf_config_t83x.categories[2],
13938            }, // counter
13939            {
13940               .name = "Fragment cycles",
13941               .desc = "Number of cycles fragment processing was active",
13942               .symbol_name = "frag_active",
13943               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13944               .offset = 196,
13945               .category = &panfrost_perf_config_t83x.categories[2],
13946            }, // counter
13947            {
13948               .name = "Compute cycles",
13949               .desc = "Number of cycles vertex\\compute processing was active",
13950               .symbol_name = "compute_active",
13951               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13952               .offset = 214,
13953               .category = &panfrost_perf_config_t83x.categories[2],
13954            }, // counter
13955            {
13956               .name = "Fragment cycles waiting for tile",
13957               .desc = "Number of cycles spent waiting for a physical tile buffer",
13958               .symbol_name = "frag_cycles_no_tile",
13959               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13960               .offset = 211,
13961               .category = &panfrost_perf_config_t83x.categories[2],
13962            }, // counter
13963            {
13964               .name = "Fragment cycles pre-pipe buffer not empty",
13965               .desc = "Number of cycles the pre-pipe queue contains quads",
13966               .symbol_name = "frag_cycles_fpkq_active",
13967               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
13968               .offset = 200,
13969               .category = &panfrost_perf_config_t83x.categories[2],
13970            }, // counter
13971            {
13972               .name = "Fragment threads",
13973               .desc = "Number of fragment threads started",
13974               .symbol_name = "frag_threads",
13975               .units = PAN_PERF_COUNTER_UNITS_THREADS,
13976               .offset = 204,
13977               .category = &panfrost_perf_config_t83x.categories[2],
13978            }, // counter
13979            {
13980               .name = "Dummy fragment threads",
13981               .desc = "Number of dummy fragment threads started",
13982               .symbol_name = "frag_dummy_threads",
13983               .units = PAN_PERF_COUNTER_UNITS_THREADS,
13984               .offset = 205,
13985               .category = &panfrost_perf_config_t83x.categories[2],
13986            }, // counter
13987            {
13988               .name = "Fragment threads doing late ZS",
13989               .desc = "Number of threads doing late ZS test",
13990               .symbol_name = "frag_threads_lzs_test",
13991               .units = PAN_PERF_COUNTER_UNITS_THREADS,
13992               .offset = 209,
13993               .category = &panfrost_perf_config_t83x.categories[2],
13994            }, // counter
13995            {
13996               .name = "Fragment threads killed late ZS",
13997               .desc = "Number of threads killed by late ZS test",
13998               .symbol_name = "frag_threads_lzs_killed",
13999               .units = PAN_PERF_COUNTER_UNITS_THREADS,
14000               .offset = 210,
14001               .category = &panfrost_perf_config_t83x.categories[2],
14002            }, // counter
14003            {
14004               .name = "Compute tasks",
14005               .desc = "Number of compute tasks",
14006               .symbol_name = "compute_tasks",
14007               .units = PAN_PERF_COUNTER_UNITS_TASKS,
14008               .offset = 215,
14009               .category = &panfrost_perf_config_t83x.categories[2],
14010            }, // counter
14011            {
14012               .name = "Compute threads",
14013               .desc = "Number of compute threads started",
14014               .symbol_name = "compute_threads",
14015               .units = PAN_PERF_COUNTER_UNITS_THREADS,
14016               .offset = 216,
14017               .category = &panfrost_perf_config_t83x.categories[2],
14018            }, // counter
14019            {
14020               .name = "Primitives loaded",
14021               .desc = "Number of primitives loaded from tiler",
14022               .symbol_name = "frag_primitives",
14023               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14024               .offset = 197,
14025               .category = &panfrost_perf_config_t83x.categories[2],
14026            }, // counter
14027            {
14028               .name = "Primitives dropped",
14029               .desc = "Number of primitives dropped because out of tile",
14030               .symbol_name = "frag_primitives_dropped",
14031               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14032               .offset = 198,
14033               .category = &panfrost_perf_config_t83x.categories[2],
14034            }, // counter
14035            {
14036               .name = "Quads rasterized",
14037               .desc = "Number of quads rasterized",
14038               .symbol_name = "frag_quads_rast",
14039               .units = PAN_PERF_COUNTER_UNITS_QUADS,
14040               .offset = 206,
14041               .category = &panfrost_perf_config_t83x.categories[2],
14042            }, // counter
14043            {
14044               .name = "Quads doing early ZS",
14045               .desc = "Number of quads doing early ZS test",
14046               .symbol_name = "frag_quads_ezs_test",
14047               .units = PAN_PERF_COUNTER_UNITS_QUADS,
14048               .offset = 207,
14049               .category = &panfrost_perf_config_t83x.categories[2],
14050            }, // counter
14051            {
14052               .name = "Quads killed early Z",
14053               .desc = "Number of quads killed by early ZS test",
14054               .symbol_name = "frag_quads_ezs_killed",
14055               .units = PAN_PERF_COUNTER_UNITS_QUADS,
14056               .offset = 208,
14057               .category = &panfrost_perf_config_t83x.categories[2],
14058            }, // counter
14059            {
14060               .name = "Pixels",
14061               .desc = "Number of pixels rendered",
14062               .symbol_name = "frag_num_tiles",
14063               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
14064               .offset = 212,
14065               .category = &panfrost_perf_config_t83x.categories[2],
14066            }, // counter
14067            {
14068               .name = "Tile writes killed by TE",
14069               .desc = "Number of tile writes skipped by transaction elimination",
14070               .symbol_name = "frag_trans_elim",
14071               .units = PAN_PERF_COUNTER_UNITS_TILES,
14072               .offset = 213,
14073               .category = &panfrost_perf_config_t83x.categories[2],
14074            }, // counter
14075            {
14076               .name = "A instructions",
14077               .desc = "Number of batched instructions executed by the A-pipe (normalized per pipe)",
14078               .symbol_name = "arith_words",
14079               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14080               .offset = 219,
14081               .category = &panfrost_perf_config_t83x.categories[2],
14082            }, // counter
14083            {
14084               .name = "LS instructions",
14085               .desc = "Number of instructions completed by the LS-pipe",
14086               .symbol_name = "ls_words",
14087               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14088               .offset = 223,
14089               .category = &panfrost_perf_config_t83x.categories[2],
14090            }, // counter
14091            {
14092               .name = "LS instruction issues",
14093               .desc = "Number of instructions issued to the LS-pipe, including restarts",
14094               .symbol_name = "ls_issues",
14095               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14096               .offset = 224,
14097               .category = &panfrost_perf_config_t83x.categories[2],
14098            }, // counter
14099            {
14100               .name = "T instructions",
14101               .desc = "Number of instructions completed by the T-pipe",
14102               .symbol_name = "tex_words",
14103               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14104               .offset = 230,
14105               .category = &panfrost_perf_config_t83x.categories[2],
14106            }, // counter
14107            {
14108               .name = "T instruction issues",
14109               .desc = "Number of threads through loop 2 address calculation",
14110               .symbol_name = "tex_issues",
14111               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14112               .offset = 234,
14113               .category = &panfrost_perf_config_t83x.categories[2],
14114            }, // counter
14115            {
14116               .name = "Cache misses",
14117               .desc = "Number of instructions in the T-pipe, recirculated due to cache miss",
14118               .symbol_name = "tex_recirc_fmiss",
14119               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14120               .offset = 235,
14121               .category = &panfrost_perf_config_t83x.categories[2],
14122            }, // counter
14123            {
14124               .name = "Read operations",
14125               .desc = "Number of read operations in the Load/Store cache",
14126               .symbol_name = "lsc_read_op",
14127               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14128               .offset = 241,
14129               .category = &panfrost_perf_config_t83x.categories[2],
14130            }, // counter
14131            {
14132               .name = "Read hits",
14133               .desc = "Number of read hits in the Load/Store cache",
14134               .symbol_name = "lsc_read_hits",
14135               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14136               .offset = 240,
14137               .category = &panfrost_perf_config_t83x.categories[2],
14138            }, // counter
14139            {
14140               .name = "Write operations",
14141               .desc = "Number of write operations in the Load/Store cache",
14142               .symbol_name = "lsc_write_op",
14143               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14144               .offset = 243,
14145               .category = &panfrost_perf_config_t83x.categories[2],
14146            }, // counter
14147            {
14148               .name = "Write hits",
14149               .desc = "Number of write hits in the Load/Store cache",
14150               .symbol_name = "lsc_write_hits",
14151               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14152               .offset = 242,
14153               .category = &panfrost_perf_config_t83x.categories[2],
14154            }, // counter
14155            {
14156               .name = "Atomic operations",
14157               .desc = "Number of atomic operations in the Load/Store cache",
14158               .symbol_name = "lsc_atomic_op",
14159               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14160               .offset = 245,
14161               .category = &panfrost_perf_config_t83x.categories[2],
14162            }, // counter
14163            {
14164               .name = "Atomic hits",
14165               .desc = "Number of atomic hits in the Load/Store cache",
14166               .symbol_name = "lsc_atomic_hits",
14167               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14168               .offset = 244,
14169               .category = &panfrost_perf_config_t83x.categories[2],
14170            }, // counter
14171            {
14172               .name = "Line fetches",
14173               .desc = "Number of line fetches in the Load/Store cache",
14174               .symbol_name = "lsc_line_fetches",
14175               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14176               .offset = 246,
14177               .category = &panfrost_perf_config_t83x.categories[2],
14178            }, // counter
14179            {
14180               .name = "Dirty line evictions",
14181               .desc = "Number of dirty line evictions in the Load/Store cache",
14182               .symbol_name = "lsc_dirty_line",
14183               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14184               .offset = 247,
14185               .category = &panfrost_perf_config_t83x.categories[2],
14186            }, // counter
14187            {
14188               .name = "Snoops in to LSC",
14189               .desc = "Number of coherent memory snoops in to the Load/Store cache",
14190               .symbol_name = "lsc_snoops",
14191               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14192               .offset = 248,
14193               .category = &panfrost_perf_config_t83x.categories[2],
14194            }, // counter
14195         }, // counters
14196      }, // category
14197      {
14198         .name = "L2 Cache",
14199         .n_counters = 13,
14200         .counters = {
14201            {
14202               .name = "L2 read lookups",
14203               .desc = "Number of reads into the L2 cache",
14204               .symbol_name = "l2_read_lookup",
14205               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14206               .offset = 161,
14207               .category = &panfrost_perf_config_t83x.categories[3],
14208            }, // counter
14209            {
14210               .name = "Read snoops",
14211               .desc = "Number of read transaction snoops",
14212               .symbol_name = "l2_read_snoop",
14213               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14214               .offset = 164,
14215               .category = &panfrost_perf_config_t83x.categories[3],
14216            }, // counter
14217            {
14218               .name = "L2 read hits",
14219               .desc = "Number of reads hitting in the L2 cache",
14220               .symbol_name = "l2_read_hit",
14221               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14222               .offset = 165,
14223               .category = &panfrost_perf_config_t83x.categories[3],
14224            }, // counter
14225            {
14226               .name = "Write snoops",
14227               .desc = "Number of write transaction snoops",
14228               .symbol_name = "l2_write_snoop",
14229               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14230               .offset = 170,
14231               .category = &panfrost_perf_config_t83x.categories[3],
14232            }, // counter
14233            {
14234               .name = "L2 write hits",
14235               .desc = "Number of writes hitting in the L2 cache",
14236               .symbol_name = "l2_write_hit",
14237               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14238               .offset = 171,
14239               .category = &panfrost_perf_config_t83x.categories[3],
14240            }, // counter
14241            {
14242               .name = "L2 write lookups",
14243               .desc = "Number of writes into the L2 cache",
14244               .symbol_name = "l2_write_lookup",
14245               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14246               .offset = 167,
14247               .category = &panfrost_perf_config_t83x.categories[3],
14248            }, // counter
14249            {
14250               .name = "External read bytes",
14251               .desc = "Number of external bus read bytes",
14252               .symbol_name = "l2_ext_read_beats",
14253               .units = PAN_PERF_COUNTER_UNITS_BYTES,
14254               .offset = 159,
14255               .category = &panfrost_perf_config_t83x.categories[3],
14256            }, // counter
14257            {
14258               .name = "External bus stalls (AR)",
14259               .desc = "Number of cycles a valid read address (AR) is stalled by the external interconnect",
14260               .symbol_name = "l2_ext_ar_stall",
14261               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14262               .offset = 182,
14263               .category = &panfrost_perf_config_t83x.categories[3],
14264            }, // counter
14265            {
14266               .name = "External bus response buffer full",
14267               .desc = "Number of cycles a valid request is blocked by a full response buffer",
14268               .symbol_name = "l2_ext_r_buf_full",
14269               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14270               .offset = 188,
14271               .category = &panfrost_perf_config_t83x.categories[3],
14272            }, // counter
14273            {
14274               .name = "External bus read data buffer full",
14275               .desc = "Number of cycles a valid request is blocked by a full read data buffer",
14276               .symbol_name = "l2_ext_rd_buf_full",
14277               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14278               .offset = 184,
14279               .category = &panfrost_perf_config_t83x.categories[3],
14280            }, // counter
14281            {
14282               .name = "External write bytes",
14283               .desc = "Number of external bus write bytes",
14284               .symbol_name = "l2_ext_write_beats",
14285               .units = PAN_PERF_COUNTER_UNITS_BYTES,
14286               .offset = 158,
14287               .category = &panfrost_perf_config_t83x.categories[3],
14288            }, // counter
14289            {
14290               .name = "External bus stalls (W)",
14291               .desc = "Number of cycles a valid write data (W channel) is stalled by the external interconnect",
14292               .symbol_name = "l2_ext_w_stall",
14293               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14294               .offset = 186,
14295               .category = &panfrost_perf_config_t83x.categories[3],
14296            }, // counter
14297            {
14298               .name = "External bus write buffer full",
14299               .desc = "Number of cycles a valid request is blocked by a full write buffer",
14300               .symbol_name = "l2_ext_w_buf_full",
14301               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14302               .offset = 187,
14303               .category = &panfrost_perf_config_t83x.categories[3],
14304            }, // counter
14305         }, // counters
14306      }, // category
14307   }, // categories
14308}; // panfrost_perf_config_t83x
14309
14310static void UNUSED
14311static_asserts_t86x(void)
14312{
14313   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
14314   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
14315   STATIC_ASSERT(19 <= PAN_PERF_MAX_COUNTERS);
14316   STATIC_ASSERT(33 <= PAN_PERF_MAX_COUNTERS);
14317   STATIC_ASSERT(13 <= PAN_PERF_MAX_COUNTERS);
14318}
14319
14320const struct panfrost_perf_config panfrost_perf_config_t86x = {
14321   .n_categories = 4,
14322   .categories = {
14323      {
14324         .name = "Job Manager",
14325         .n_counters = 11,
14326         .counters = {
14327            {
14328               .name = "GPU cycles",
14329               .desc = "Number of cycles GPU active",
14330               .symbol_name = "gpu_active",
14331               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14332               .offset = 6,
14333               .category = &panfrost_perf_config_t86x.categories[0],
14334            }, // counter
14335            {
14336               .name = "IRQ cycles",
14337               .desc = "Number of cycles GPU interrupt pending",
14338               .symbol_name = "irq_active",
14339               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14340               .offset = 7,
14341               .category = &panfrost_perf_config_t86x.categories[0],
14342            }, // counter
14343            {
14344               .name = "JS0 cycles",
14345               .desc = "Number of cycles JS0 (fragment) active",
14346               .symbol_name = "js0_active",
14347               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14348               .offset = 10,
14349               .category = &panfrost_perf_config_t86x.categories[0],
14350            }, // counter
14351            {
14352               .name = "JS1 cycles",
14353               .desc = "Number of cycles JS1 (vertex/tiler/compute) active",
14354               .symbol_name = "js1_active",
14355               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14356               .offset = 18,
14357               .category = &panfrost_perf_config_t86x.categories[0],
14358            }, // counter
14359            {
14360               .name = "JS2 cycles",
14361               .desc = "Number of cycles JS2 (vertex/compute) active",
14362               .symbol_name = "js2_active",
14363               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14364               .offset = 26,
14365               .category = &panfrost_perf_config_t86x.categories[0],
14366            }, // counter
14367            {
14368               .name = "JS0 jobs",
14369               .desc = "Number of Jobs (fragment) completed in JS0",
14370               .symbol_name = "js0_jobs",
14371               .units = PAN_PERF_COUNTER_UNITS_JOBS,
14372               .offset = 8,
14373               .category = &panfrost_perf_config_t86x.categories[0],
14374            }, // counter
14375            {
14376               .name = "JS1 jobs",
14377               .desc = "Number of Jobs (vertex/tiler/compute) completed in JS1",
14378               .symbol_name = "js1_jobs",
14379               .units = PAN_PERF_COUNTER_UNITS_JOBS,
14380               .offset = 16,
14381               .category = &panfrost_perf_config_t86x.categories[0],
14382            }, // counter
14383            {
14384               .name = "JS2 jobs",
14385               .desc = "Number of Jobs (vertex/compute) completed in JS2",
14386               .symbol_name = "js2_jobs",
14387               .units = PAN_PERF_COUNTER_UNITS_JOBS,
14388               .offset = 24,
14389               .category = &panfrost_perf_config_t86x.categories[0],
14390            }, // counter
14391            {
14392               .name = "Pixels",
14393               .desc = "Number of Pixels completed in JS0",
14394               .symbol_name = "js0_tasks",
14395               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
14396               .offset = 9,
14397               .category = &panfrost_perf_config_t86x.categories[0],
14398            }, // counter
14399            {
14400               .name = "JS1 tasks",
14401               .desc = "Number of Tasks completed in JS1",
14402               .symbol_name = "js1_tasks",
14403               .units = PAN_PERF_COUNTER_UNITS_TASKS,
14404               .offset = 17,
14405               .category = &panfrost_perf_config_t86x.categories[0],
14406            }, // counter
14407            {
14408               .name = "JS2 tasks",
14409               .desc = "Number of Tasks completed in JS2",
14410               .symbol_name = "js2_tasks",
14411               .units = PAN_PERF_COUNTER_UNITS_TASKS,
14412               .offset = 25,
14413               .category = &panfrost_perf_config_t86x.categories[0],
14414            }, // counter
14415         }, // counters
14416      }, // category
14417      {
14418         .name = "Tiler",
14419         .n_counters = 19,
14420         .counters = {
14421            {
14422               .name = "Tiler cycles",
14423               .desc = "Number of cycles Tiler active",
14424               .symbol_name = "ti_active",
14425               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14426               .offset = 109,
14427               .category = &panfrost_perf_config_t86x.categories[1],
14428            }, // counter
14429            {
14430               .name = "Polygons",
14431               .desc = "Number of polygons processed",
14432               .symbol_name = "ti_polygons",
14433               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14434               .offset = 70,
14435               .category = &panfrost_perf_config_t86x.categories[1],
14436            }, // counter
14437            {
14438               .name = "Quads",
14439               .desc = "Number of quads processed",
14440               .symbol_name = "ti_quads",
14441               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14442               .offset = 69,
14443               .category = &panfrost_perf_config_t86x.categories[1],
14444            }, // counter
14445            {
14446               .name = "Triangles",
14447               .desc = "Number of triangles processed",
14448               .symbol_name = "ti_triangles",
14449               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14450               .offset = 68,
14451               .category = &panfrost_perf_config_t86x.categories[1],
14452            }, // counter
14453            {
14454               .name = "Lines",
14455               .desc = "Number of lines processed",
14456               .symbol_name = "ti_lines",
14457               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14458               .offset = 72,
14459               .category = &panfrost_perf_config_t86x.categories[1],
14460            }, // counter
14461            {
14462               .name = "Points",
14463               .desc = "Number of points processed",
14464               .symbol_name = "ti_points",
14465               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14466               .offset = 71,
14467               .category = &panfrost_perf_config_t86x.categories[1],
14468            }, // counter
14469            {
14470               .name = "Front facing prims",
14471               .desc = "Number of front facing primitives",
14472               .symbol_name = "ti_front_facing",
14473               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14474               .offset = 75,
14475               .category = &panfrost_perf_config_t86x.categories[1],
14476            }, // counter
14477            {
14478               .name = "Back facing prims",
14479               .desc = "Number of back facing primitives",
14480               .symbol_name = "ti_back_facing",
14481               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14482               .offset = 76,
14483               .category = &panfrost_perf_config_t86x.categories[1],
14484            }, // counter
14485            {
14486               .name = "Visible prims",
14487               .desc = "Number of visible primitives",
14488               .symbol_name = "ti_prim_visible",
14489               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14490               .offset = 77,
14491               .category = &panfrost_perf_config_t86x.categories[1],
14492            }, // counter
14493            {
14494               .name = "Culled prims",
14495               .desc = "Number of culled primitives",
14496               .symbol_name = "ti_prim_culled",
14497               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14498               .offset = 78,
14499               .category = &panfrost_perf_config_t86x.categories[1],
14500            }, // counter
14501            {
14502               .name = "Clipped prims",
14503               .desc = "Number of clipped primitives",
14504               .symbol_name = "ti_prim_clipped",
14505               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14506               .offset = 79,
14507               .category = &panfrost_perf_config_t86x.categories[1],
14508            }, // counter
14509            {
14510               .name = "L0 prims",
14511               .desc = "Number of primitives in hierarchy level 0",
14512               .symbol_name = "ti_level0",
14513               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14514               .offset = 80,
14515               .category = &panfrost_perf_config_t86x.categories[1],
14516            }, // counter
14517            {
14518               .name = "L1 prims",
14519               .desc = "Number of primitives in hierarchy level 1",
14520               .symbol_name = "ti_level1",
14521               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14522               .offset = 81,
14523               .category = &panfrost_perf_config_t86x.categories[1],
14524            }, // counter
14525            {
14526               .name = "L2 prims",
14527               .desc = "Number of primitives in hierarchy level 2",
14528               .symbol_name = "ti_level2",
14529               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14530               .offset = 82,
14531               .category = &panfrost_perf_config_t86x.categories[1],
14532            }, // counter
14533            {
14534               .name = "L3 prims",
14535               .desc = "Number of primitives in hierarchy level 3",
14536               .symbol_name = "ti_level3",
14537               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14538               .offset = 83,
14539               .category = &panfrost_perf_config_t86x.categories[1],
14540            }, // counter
14541            {
14542               .name = "L4 prims",
14543               .desc = "Number of primitives in hierarchy level 4",
14544               .symbol_name = "ti_level4",
14545               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14546               .offset = 84,
14547               .category = &panfrost_perf_config_t86x.categories[1],
14548            }, // counter
14549            {
14550               .name = "L5 prims",
14551               .desc = "Number of primitives in hierarchy level 5",
14552               .symbol_name = "ti_level5",
14553               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14554               .offset = 85,
14555               .category = &panfrost_perf_config_t86x.categories[1],
14556            }, // counter
14557            {
14558               .name = "L6 prims",
14559               .desc = "Number of primitives in hierarchy level 6",
14560               .symbol_name = "ti_level6",
14561               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14562               .offset = 86,
14563               .category = &panfrost_perf_config_t86x.categories[1],
14564            }, // counter
14565            {
14566               .name = "L7 prims",
14567               .desc = "Number of primitives in hierarchy level 7",
14568               .symbol_name = "ti_level7",
14569               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14570               .offset = 87,
14571               .category = &panfrost_perf_config_t86x.categories[1],
14572            }, // counter
14573         }, // counters
14574      }, // category
14575      {
14576         .name = "Shader Core",
14577         .n_counters = 33,
14578         .counters = {
14579            {
14580               .name = "Tripipe cycles",
14581               .desc = "Number of cycles tripipe was active",
14582               .symbol_name = "tripipe_active",
14583               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14584               .offset = 218,
14585               .category = &panfrost_perf_config_t86x.categories[2],
14586            }, // counter
14587            {
14588               .name = "Fragment cycles",
14589               .desc = "Number of cycles fragment processing was active",
14590               .symbol_name = "frag_active",
14591               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14592               .offset = 196,
14593               .category = &panfrost_perf_config_t86x.categories[2],
14594            }, // counter
14595            {
14596               .name = "Compute cycles",
14597               .desc = "Number of cycles vertex\\compute processing was active",
14598               .symbol_name = "compute_active",
14599               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14600               .offset = 214,
14601               .category = &panfrost_perf_config_t86x.categories[2],
14602            }, // counter
14603            {
14604               .name = "Fragment cycles waiting for tile",
14605               .desc = "Number of cycles spent waiting for a physical tile buffer",
14606               .symbol_name = "frag_cycles_no_tile",
14607               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14608               .offset = 211,
14609               .category = &panfrost_perf_config_t86x.categories[2],
14610            }, // counter
14611            {
14612               .name = "Fragment cycles pre-pipe buffer not empty",
14613               .desc = "Number of cycles the pre-pipe queue contains quads",
14614               .symbol_name = "frag_cycles_fpkq_active",
14615               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14616               .offset = 200,
14617               .category = &panfrost_perf_config_t86x.categories[2],
14618            }, // counter
14619            {
14620               .name = "Fragment threads",
14621               .desc = "Number of fragment threads started",
14622               .symbol_name = "frag_threads",
14623               .units = PAN_PERF_COUNTER_UNITS_THREADS,
14624               .offset = 204,
14625               .category = &panfrost_perf_config_t86x.categories[2],
14626            }, // counter
14627            {
14628               .name = "Dummy fragment threads",
14629               .desc = "Number of dummy fragment threads started",
14630               .symbol_name = "frag_dummy_threads",
14631               .units = PAN_PERF_COUNTER_UNITS_THREADS,
14632               .offset = 205,
14633               .category = &panfrost_perf_config_t86x.categories[2],
14634            }, // counter
14635            {
14636               .name = "Fragment threads doing late ZS",
14637               .desc = "Number of threads doing late ZS test",
14638               .symbol_name = "frag_threads_lzs_test",
14639               .units = PAN_PERF_COUNTER_UNITS_THREADS,
14640               .offset = 209,
14641               .category = &panfrost_perf_config_t86x.categories[2],
14642            }, // counter
14643            {
14644               .name = "Fragment threads killed late ZS",
14645               .desc = "Number of threads killed by late ZS test",
14646               .symbol_name = "frag_threads_lzs_killed",
14647               .units = PAN_PERF_COUNTER_UNITS_THREADS,
14648               .offset = 210,
14649               .category = &panfrost_perf_config_t86x.categories[2],
14650            }, // counter
14651            {
14652               .name = "Compute tasks",
14653               .desc = "Number of compute tasks",
14654               .symbol_name = "compute_tasks",
14655               .units = PAN_PERF_COUNTER_UNITS_TASKS,
14656               .offset = 215,
14657               .category = &panfrost_perf_config_t86x.categories[2],
14658            }, // counter
14659            {
14660               .name = "Compute threads",
14661               .desc = "Number of compute threads started",
14662               .symbol_name = "compute_threads",
14663               .units = PAN_PERF_COUNTER_UNITS_THREADS,
14664               .offset = 216,
14665               .category = &panfrost_perf_config_t86x.categories[2],
14666            }, // counter
14667            {
14668               .name = "Primitives loaded",
14669               .desc = "Number of primitives loaded from tiler",
14670               .symbol_name = "frag_primitives",
14671               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14672               .offset = 197,
14673               .category = &panfrost_perf_config_t86x.categories[2],
14674            }, // counter
14675            {
14676               .name = "Primitives dropped",
14677               .desc = "Number of primitives dropped because out of tile",
14678               .symbol_name = "frag_primitives_dropped",
14679               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
14680               .offset = 198,
14681               .category = &panfrost_perf_config_t86x.categories[2],
14682            }, // counter
14683            {
14684               .name = "Quads rasterized",
14685               .desc = "Number of quads rasterized",
14686               .symbol_name = "frag_quads_rast",
14687               .units = PAN_PERF_COUNTER_UNITS_QUADS,
14688               .offset = 206,
14689               .category = &panfrost_perf_config_t86x.categories[2],
14690            }, // counter
14691            {
14692               .name = "Quads doing early ZS",
14693               .desc = "Number of quads doing early ZS test",
14694               .symbol_name = "frag_quads_ezs_test",
14695               .units = PAN_PERF_COUNTER_UNITS_QUADS,
14696               .offset = 207,
14697               .category = &panfrost_perf_config_t86x.categories[2],
14698            }, // counter
14699            {
14700               .name = "Quads killed early Z",
14701               .desc = "Number of quads killed by early ZS test",
14702               .symbol_name = "frag_quads_ezs_killed",
14703               .units = PAN_PERF_COUNTER_UNITS_QUADS,
14704               .offset = 208,
14705               .category = &panfrost_perf_config_t86x.categories[2],
14706            }, // counter
14707            {
14708               .name = "Pixels",
14709               .desc = "Number of pixels rendered",
14710               .symbol_name = "frag_num_tiles",
14711               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
14712               .offset = 212,
14713               .category = &panfrost_perf_config_t86x.categories[2],
14714            }, // counter
14715            {
14716               .name = "Tile writes killed by TE",
14717               .desc = "Number of tile writes skipped by transaction elimination",
14718               .symbol_name = "frag_trans_elim",
14719               .units = PAN_PERF_COUNTER_UNITS_TILES,
14720               .offset = 213,
14721               .category = &panfrost_perf_config_t86x.categories[2],
14722            }, // counter
14723            {
14724               .name = "A instructions",
14725               .desc = "Number of instructions completed by the the A-pipe (normalized per pipeline)",
14726               .symbol_name = "arith_words",
14727               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14728               .offset = 219,
14729               .category = &panfrost_perf_config_t86x.categories[2],
14730            }, // counter
14731            {
14732               .name = "LS instructions",
14733               .desc = "Number of instructions completed by the LS-pipe",
14734               .symbol_name = "ls_words",
14735               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14736               .offset = 223,
14737               .category = &panfrost_perf_config_t86x.categories[2],
14738            }, // counter
14739            {
14740               .name = "LS instruction issues",
14741               .desc = "Number of instructions issued to the LS-pipe, including restarts",
14742               .symbol_name = "ls_issues",
14743               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14744               .offset = 224,
14745               .category = &panfrost_perf_config_t86x.categories[2],
14746            }, // counter
14747            {
14748               .name = "T instructions",
14749               .desc = "Number of instructions completed by the T-pipe",
14750               .symbol_name = "tex_words",
14751               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14752               .offset = 230,
14753               .category = &panfrost_perf_config_t86x.categories[2],
14754            }, // counter
14755            {
14756               .name = "T instruction issues",
14757               .desc = "Number of threads through loop 2 address calculation",
14758               .symbol_name = "tex_issues",
14759               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
14760               .offset = 234,
14761               .category = &panfrost_perf_config_t86x.categories[2],
14762            }, // counter
14763            {
14764               .name = "Cache misses",
14765               .desc = "Number of instructions in the T-pipe, recirculated due to cache miss",
14766               .symbol_name = "tex_recirc_fmiss",
14767               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14768               .offset = 235,
14769               .category = &panfrost_perf_config_t86x.categories[2],
14770            }, // counter
14771            {
14772               .name = "Read operations",
14773               .desc = "Number of read operations in the Load/Store cache",
14774               .symbol_name = "lsc_read_op",
14775               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14776               .offset = 241,
14777               .category = &panfrost_perf_config_t86x.categories[2],
14778            }, // counter
14779            {
14780               .name = "Read hits",
14781               .desc = "Number of read hits in the Load/Store cache",
14782               .symbol_name = "lsc_read_hits",
14783               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14784               .offset = 240,
14785               .category = &panfrost_perf_config_t86x.categories[2],
14786            }, // counter
14787            {
14788               .name = "Write operations",
14789               .desc = "Number of write operations in the Load/Store cache",
14790               .symbol_name = "lsc_write_op",
14791               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14792               .offset = 243,
14793               .category = &panfrost_perf_config_t86x.categories[2],
14794            }, // counter
14795            {
14796               .name = "Write hits",
14797               .desc = "Number of write hits in the Load/Store cache",
14798               .symbol_name = "lsc_write_hits",
14799               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14800               .offset = 242,
14801               .category = &panfrost_perf_config_t86x.categories[2],
14802            }, // counter
14803            {
14804               .name = "Atomic operations",
14805               .desc = "Number of atomic operations in the Load/Store cache",
14806               .symbol_name = "lsc_atomic_op",
14807               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14808               .offset = 245,
14809               .category = &panfrost_perf_config_t86x.categories[2],
14810            }, // counter
14811            {
14812               .name = "Atomic hits",
14813               .desc = "Number of atomic hits in the Load/Store cache",
14814               .symbol_name = "lsc_atomic_hits",
14815               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14816               .offset = 244,
14817               .category = &panfrost_perf_config_t86x.categories[2],
14818            }, // counter
14819            {
14820               .name = "Line fetches",
14821               .desc = "Number of line fetches in the Load/Store cache",
14822               .symbol_name = "lsc_line_fetches",
14823               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14824               .offset = 246,
14825               .category = &panfrost_perf_config_t86x.categories[2],
14826            }, // counter
14827            {
14828               .name = "Dirty line evictions",
14829               .desc = "Number of dirty line evictions in the Load/Store cache",
14830               .symbol_name = "lsc_dirty_line",
14831               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14832               .offset = 247,
14833               .category = &panfrost_perf_config_t86x.categories[2],
14834            }, // counter
14835            {
14836               .name = "Snoops in to LSC",
14837               .desc = "Number of coherent memory snoops in to the Load/Store cache",
14838               .symbol_name = "lsc_snoops",
14839               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14840               .offset = 248,
14841               .category = &panfrost_perf_config_t86x.categories[2],
14842            }, // counter
14843         }, // counters
14844      }, // category
14845      {
14846         .name = "L2 Cache",
14847         .n_counters = 13,
14848         .counters = {
14849            {
14850               .name = "L2 read lookups",
14851               .desc = "Number of reads into the L2 cache",
14852               .symbol_name = "l2_read_lookup",
14853               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14854               .offset = 161,
14855               .category = &panfrost_perf_config_t86x.categories[3],
14856            }, // counter
14857            {
14858               .name = "Read snoops",
14859               .desc = "Number of read transaction snoops",
14860               .symbol_name = "l2_read_snoop",
14861               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14862               .offset = 164,
14863               .category = &panfrost_perf_config_t86x.categories[3],
14864            }, // counter
14865            {
14866               .name = "L2 read hits",
14867               .desc = "Number of reads hitting in the L2 cache",
14868               .symbol_name = "l2_read_hit",
14869               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14870               .offset = 165,
14871               .category = &panfrost_perf_config_t86x.categories[3],
14872            }, // counter
14873            {
14874               .name = "Write snoops",
14875               .desc = "Number of write transaction snoops",
14876               .symbol_name = "l2_write_snoop",
14877               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14878               .offset = 170,
14879               .category = &panfrost_perf_config_t86x.categories[3],
14880            }, // counter
14881            {
14882               .name = "L2 write hits",
14883               .desc = "Number of writes hitting in the L2 cache",
14884               .symbol_name = "l2_write_hit",
14885               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14886               .offset = 171,
14887               .category = &panfrost_perf_config_t86x.categories[3],
14888            }, // counter
14889            {
14890               .name = "L2 write lookups",
14891               .desc = "Number of writes into the L2 cache",
14892               .symbol_name = "l2_write_lookup",
14893               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
14894               .offset = 167,
14895               .category = &panfrost_perf_config_t86x.categories[3],
14896            }, // counter
14897            {
14898               .name = "External read bytes",
14899               .desc = "Number of external bus read bytes",
14900               .symbol_name = "l2_ext_read_beats",
14901               .units = PAN_PERF_COUNTER_UNITS_BYTES,
14902               .offset = 159,
14903               .category = &panfrost_perf_config_t86x.categories[3],
14904            }, // counter
14905            {
14906               .name = "External bus stalls (AR)",
14907               .desc = "Number of cycles a valid read address (AR) is stalled by the external interconnect",
14908               .symbol_name = "l2_ext_ar_stall",
14909               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14910               .offset = 182,
14911               .category = &panfrost_perf_config_t86x.categories[3],
14912            }, // counter
14913            {
14914               .name = "External bus response buffer full",
14915               .desc = "Number of cycles a valid request is blocked by a full response buffer",
14916               .symbol_name = "l2_ext_r_buf_full",
14917               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14918               .offset = 188,
14919               .category = &panfrost_perf_config_t86x.categories[3],
14920            }, // counter
14921            {
14922               .name = "External bus read data buffer full",
14923               .desc = "Number of cycles a valid request is blocked by a full read data buffer",
14924               .symbol_name = "l2_ext_rd_buf_full",
14925               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14926               .offset = 184,
14927               .category = &panfrost_perf_config_t86x.categories[3],
14928            }, // counter
14929            {
14930               .name = "External write bytes",
14931               .desc = "Number of external bus write bytes",
14932               .symbol_name = "l2_ext_write_beats",
14933               .units = PAN_PERF_COUNTER_UNITS_BYTES,
14934               .offset = 158,
14935               .category = &panfrost_perf_config_t86x.categories[3],
14936            }, // counter
14937            {
14938               .name = "External bus stalls (W)",
14939               .desc = "Number of cycles a valid write data (W channel) is stalled by the external interconnect",
14940               .symbol_name = "l2_ext_w_stall",
14941               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14942               .offset = 186,
14943               .category = &panfrost_perf_config_t86x.categories[3],
14944            }, // counter
14945            {
14946               .name = "External bus write buffer full",
14947               .desc = "Number of cycles a valid request is blocked by a full write buffer",
14948               .symbol_name = "l2_ext_w_buf_full",
14949               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14950               .offset = 187,
14951               .category = &panfrost_perf_config_t86x.categories[3],
14952            }, // counter
14953         }, // counters
14954      }, // category
14955   }, // categories
14956}; // panfrost_perf_config_t86x
14957
14958static void UNUSED
14959static_asserts_t88x(void)
14960{
14961   STATIC_ASSERT(4 <= PAN_PERF_MAX_CATEGORIES);
14962   STATIC_ASSERT(11 <= PAN_PERF_MAX_COUNTERS);
14963   STATIC_ASSERT(19 <= PAN_PERF_MAX_COUNTERS);
14964   STATIC_ASSERT(33 <= PAN_PERF_MAX_COUNTERS);
14965   STATIC_ASSERT(13 <= PAN_PERF_MAX_COUNTERS);
14966}
14967
14968const struct panfrost_perf_config panfrost_perf_config_t88x = {
14969   .n_categories = 4,
14970   .categories = {
14971      {
14972         .name = "Job Manager",
14973         .n_counters = 11,
14974         .counters = {
14975            {
14976               .name = "GPU cycles",
14977               .desc = "Number of cycles GPU active",
14978               .symbol_name = "gpu_active",
14979               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14980               .offset = 6,
14981               .category = &panfrost_perf_config_t88x.categories[0],
14982            }, // counter
14983            {
14984               .name = "IRQ cycles",
14985               .desc = "Number of cycles GPU interrupt pending",
14986               .symbol_name = "irq_active",
14987               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14988               .offset = 7,
14989               .category = &panfrost_perf_config_t88x.categories[0],
14990            }, // counter
14991            {
14992               .name = "JS0 cycles",
14993               .desc = "Number of cycles JS0 (fragment) active",
14994               .symbol_name = "js0_active",
14995               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
14996               .offset = 10,
14997               .category = &panfrost_perf_config_t88x.categories[0],
14998            }, // counter
14999            {
15000               .name = "JS1 cycles",
15001               .desc = "Number of cycles JS1 (vertex/tiler/compute) active",
15002               .symbol_name = "js1_active",
15003               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15004               .offset = 18,
15005               .category = &panfrost_perf_config_t88x.categories[0],
15006            }, // counter
15007            {
15008               .name = "JS2 cycles",
15009               .desc = "Number of cycles JS2 (vertex/compute) active",
15010               .symbol_name = "js2_active",
15011               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15012               .offset = 26,
15013               .category = &panfrost_perf_config_t88x.categories[0],
15014            }, // counter
15015            {
15016               .name = "JS0 jobs",
15017               .desc = "Number of Jobs (fragment) completed in JS0",
15018               .symbol_name = "js0_jobs",
15019               .units = PAN_PERF_COUNTER_UNITS_JOBS,
15020               .offset = 8,
15021               .category = &panfrost_perf_config_t88x.categories[0],
15022            }, // counter
15023            {
15024               .name = "JS1 jobs",
15025               .desc = "Number of Jobs (vertex/tiler/compute) completed in JS1",
15026               .symbol_name = "js1_jobs",
15027               .units = PAN_PERF_COUNTER_UNITS_JOBS,
15028               .offset = 16,
15029               .category = &panfrost_perf_config_t88x.categories[0],
15030            }, // counter
15031            {
15032               .name = "JS2 jobs",
15033               .desc = "Number of Jobs (vertex/compute) completed in JS2",
15034               .symbol_name = "js2_jobs",
15035               .units = PAN_PERF_COUNTER_UNITS_JOBS,
15036               .offset = 24,
15037               .category = &panfrost_perf_config_t88x.categories[0],
15038            }, // counter
15039            {
15040               .name = "Pixels",
15041               .desc = "Number of Pixels completed in JS0",
15042               .symbol_name = "js0_tasks",
15043               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
15044               .offset = 9,
15045               .category = &panfrost_perf_config_t88x.categories[0],
15046            }, // counter
15047            {
15048               .name = "JS1 tasks",
15049               .desc = "Number of Tasks completed in JS1",
15050               .symbol_name = "js1_tasks",
15051               .units = PAN_PERF_COUNTER_UNITS_TASKS,
15052               .offset = 17,
15053               .category = &panfrost_perf_config_t88x.categories[0],
15054            }, // counter
15055            {
15056               .name = "JS2 tasks",
15057               .desc = "Number of Tasks completed in JS2",
15058               .symbol_name = "js2_tasks",
15059               .units = PAN_PERF_COUNTER_UNITS_TASKS,
15060               .offset = 25,
15061               .category = &panfrost_perf_config_t88x.categories[0],
15062            }, // counter
15063         }, // counters
15064      }, // category
15065      {
15066         .name = "Tiler",
15067         .n_counters = 19,
15068         .counters = {
15069            {
15070               .name = "Tiler cycles",
15071               .desc = "Number of cycles Tiler active",
15072               .symbol_name = "ti_active",
15073               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15074               .offset = 109,
15075               .category = &panfrost_perf_config_t88x.categories[1],
15076            }, // counter
15077            {
15078               .name = "Polygons",
15079               .desc = "Number of polygons processed",
15080               .symbol_name = "ti_polygons",
15081               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15082               .offset = 70,
15083               .category = &panfrost_perf_config_t88x.categories[1],
15084            }, // counter
15085            {
15086               .name = "Quads",
15087               .desc = "Number of quads processed",
15088               .symbol_name = "ti_quads",
15089               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15090               .offset = 69,
15091               .category = &panfrost_perf_config_t88x.categories[1],
15092            }, // counter
15093            {
15094               .name = "Triangles",
15095               .desc = "Number of triangles processed",
15096               .symbol_name = "ti_triangles",
15097               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15098               .offset = 68,
15099               .category = &panfrost_perf_config_t88x.categories[1],
15100            }, // counter
15101            {
15102               .name = "Lines",
15103               .desc = "Number of lines processed",
15104               .symbol_name = "ti_lines",
15105               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15106               .offset = 72,
15107               .category = &panfrost_perf_config_t88x.categories[1],
15108            }, // counter
15109            {
15110               .name = "Points",
15111               .desc = "Number of points processed",
15112               .symbol_name = "ti_points",
15113               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15114               .offset = 71,
15115               .category = &panfrost_perf_config_t88x.categories[1],
15116            }, // counter
15117            {
15118               .name = "Front facing prims",
15119               .desc = "Number of front facing primitives",
15120               .symbol_name = "ti_front_facing",
15121               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15122               .offset = 75,
15123               .category = &panfrost_perf_config_t88x.categories[1],
15124            }, // counter
15125            {
15126               .name = "Back facing prims",
15127               .desc = "Number of back facing primitives",
15128               .symbol_name = "ti_back_facing",
15129               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15130               .offset = 76,
15131               .category = &panfrost_perf_config_t88x.categories[1],
15132            }, // counter
15133            {
15134               .name = "Visible prims",
15135               .desc = "Number of visible primitives",
15136               .symbol_name = "ti_prim_visible",
15137               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15138               .offset = 77,
15139               .category = &panfrost_perf_config_t88x.categories[1],
15140            }, // counter
15141            {
15142               .name = "Culled prims",
15143               .desc = "Number of culled primitives",
15144               .symbol_name = "ti_prim_culled",
15145               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15146               .offset = 78,
15147               .category = &panfrost_perf_config_t88x.categories[1],
15148            }, // counter
15149            {
15150               .name = "Clipped prims",
15151               .desc = "Number of clipped primitives",
15152               .symbol_name = "ti_prim_clipped",
15153               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15154               .offset = 79,
15155               .category = &panfrost_perf_config_t88x.categories[1],
15156            }, // counter
15157            {
15158               .name = "L0 prims",
15159               .desc = "Number of primitives in hierarchy level 0",
15160               .symbol_name = "ti_level0",
15161               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15162               .offset = 80,
15163               .category = &panfrost_perf_config_t88x.categories[1],
15164            }, // counter
15165            {
15166               .name = "L1 prims",
15167               .desc = "Number of primitives in hierarchy level 1",
15168               .symbol_name = "ti_level1",
15169               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15170               .offset = 81,
15171               .category = &panfrost_perf_config_t88x.categories[1],
15172            }, // counter
15173            {
15174               .name = "L2 prims",
15175               .desc = "Number of primitives in hierarchy level 2",
15176               .symbol_name = "ti_level2",
15177               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15178               .offset = 82,
15179               .category = &panfrost_perf_config_t88x.categories[1],
15180            }, // counter
15181            {
15182               .name = "L3 prims",
15183               .desc = "Number of primitives in hierarchy level 3",
15184               .symbol_name = "ti_level3",
15185               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15186               .offset = 83,
15187               .category = &panfrost_perf_config_t88x.categories[1],
15188            }, // counter
15189            {
15190               .name = "L4 prims",
15191               .desc = "Number of primitives in hierarchy level 4",
15192               .symbol_name = "ti_level4",
15193               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15194               .offset = 84,
15195               .category = &panfrost_perf_config_t88x.categories[1],
15196            }, // counter
15197            {
15198               .name = "L5 prims",
15199               .desc = "Number of primitives in hierarchy level 5",
15200               .symbol_name = "ti_level5",
15201               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15202               .offset = 85,
15203               .category = &panfrost_perf_config_t88x.categories[1],
15204            }, // counter
15205            {
15206               .name = "L6 prims",
15207               .desc = "Number of primitives in hierarchy level 6",
15208               .symbol_name = "ti_level6",
15209               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15210               .offset = 86,
15211               .category = &panfrost_perf_config_t88x.categories[1],
15212            }, // counter
15213            {
15214               .name = "L7 prims",
15215               .desc = "Number of primitives in hierarchy level 7",
15216               .symbol_name = "ti_level7",
15217               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15218               .offset = 87,
15219               .category = &panfrost_perf_config_t88x.categories[1],
15220            }, // counter
15221         }, // counters
15222      }, // category
15223      {
15224         .name = "Shader Core",
15225         .n_counters = 33,
15226         .counters = {
15227            {
15228               .name = "Tripipe cycles",
15229               .desc = "Number of cycles tripipe was active",
15230               .symbol_name = "tripipe_active",
15231               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15232               .offset = 218,
15233               .category = &panfrost_perf_config_t88x.categories[2],
15234            }, // counter
15235            {
15236               .name = "Fragment cycles",
15237               .desc = "Number of cycles fragment processing was active",
15238               .symbol_name = "frag_active",
15239               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15240               .offset = 196,
15241               .category = &panfrost_perf_config_t88x.categories[2],
15242            }, // counter
15243            {
15244               .name = "Compute cycles",
15245               .desc = "Number of cycles vertex\\compute processing was active",
15246               .symbol_name = "compute_active",
15247               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15248               .offset = 214,
15249               .category = &panfrost_perf_config_t88x.categories[2],
15250            }, // counter
15251            {
15252               .name = "Fragment cycles waiting for tile",
15253               .desc = "Number of cycles spent waiting for a physical tile buffer",
15254               .symbol_name = "frag_cycles_no_tile",
15255               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15256               .offset = 211,
15257               .category = &panfrost_perf_config_t88x.categories[2],
15258            }, // counter
15259            {
15260               .name = "Fragment cycles pre-pipe buffer not empty",
15261               .desc = "Number of cycles the pre-pipe queue contains quads",
15262               .symbol_name = "frag_cycles_fpkq_active",
15263               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15264               .offset = 200,
15265               .category = &panfrost_perf_config_t88x.categories[2],
15266            }, // counter
15267            {
15268               .name = "Fragment threads",
15269               .desc = "Number of fragment threads started",
15270               .symbol_name = "frag_threads",
15271               .units = PAN_PERF_COUNTER_UNITS_THREADS,
15272               .offset = 204,
15273               .category = &panfrost_perf_config_t88x.categories[2],
15274            }, // counter
15275            {
15276               .name = "Dummy fragment threads",
15277               .desc = "Number of dummy fragment threads started",
15278               .symbol_name = "frag_dummy_threads",
15279               .units = PAN_PERF_COUNTER_UNITS_THREADS,
15280               .offset = 205,
15281               .category = &panfrost_perf_config_t88x.categories[2],
15282            }, // counter
15283            {
15284               .name = "Fragment threads doing late ZS",
15285               .desc = "Number of threads doing late ZS test",
15286               .symbol_name = "frag_threads_lzs_test",
15287               .units = PAN_PERF_COUNTER_UNITS_THREADS,
15288               .offset = 209,
15289               .category = &panfrost_perf_config_t88x.categories[2],
15290            }, // counter
15291            {
15292               .name = "Fragment threads killed late ZS",
15293               .desc = "Number of threads killed by late ZS test",
15294               .symbol_name = "frag_threads_lzs_killed",
15295               .units = PAN_PERF_COUNTER_UNITS_THREADS,
15296               .offset = 210,
15297               .category = &panfrost_perf_config_t88x.categories[2],
15298            }, // counter
15299            {
15300               .name = "Compute tasks",
15301               .desc = "Number of compute tasks",
15302               .symbol_name = "compute_tasks",
15303               .units = PAN_PERF_COUNTER_UNITS_TASKS,
15304               .offset = 215,
15305               .category = &panfrost_perf_config_t88x.categories[2],
15306            }, // counter
15307            {
15308               .name = "Compute threads",
15309               .desc = "Number of compute threads started",
15310               .symbol_name = "compute_threads",
15311               .units = PAN_PERF_COUNTER_UNITS_THREADS,
15312               .offset = 216,
15313               .category = &panfrost_perf_config_t88x.categories[2],
15314            }, // counter
15315            {
15316               .name = "Primitives loaded",
15317               .desc = "Number of primitives loaded from tiler",
15318               .symbol_name = "frag_primitives",
15319               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15320               .offset = 197,
15321               .category = &panfrost_perf_config_t88x.categories[2],
15322            }, // counter
15323            {
15324               .name = "Primitives dropped",
15325               .desc = "Number of primitives dropped because out of tile",
15326               .symbol_name = "frag_primitives_dropped",
15327               .units = PAN_PERF_COUNTER_UNITS_PRIMITIVES,
15328               .offset = 198,
15329               .category = &panfrost_perf_config_t88x.categories[2],
15330            }, // counter
15331            {
15332               .name = "Quads rasterized",
15333               .desc = "Number of quads rasterized",
15334               .symbol_name = "frag_quads_rast",
15335               .units = PAN_PERF_COUNTER_UNITS_QUADS,
15336               .offset = 206,
15337               .category = &panfrost_perf_config_t88x.categories[2],
15338            }, // counter
15339            {
15340               .name = "Quads doing early ZS",
15341               .desc = "Number of quads doing early ZS test",
15342               .symbol_name = "frag_quads_ezs_test",
15343               .units = PAN_PERF_COUNTER_UNITS_QUADS,
15344               .offset = 207,
15345               .category = &panfrost_perf_config_t88x.categories[2],
15346            }, // counter
15347            {
15348               .name = "Quads killed early Z",
15349               .desc = "Number of quads killed by early ZS test",
15350               .symbol_name = "frag_quads_ezs_killed",
15351               .units = PAN_PERF_COUNTER_UNITS_QUADS,
15352               .offset = 208,
15353               .category = &panfrost_perf_config_t88x.categories[2],
15354            }, // counter
15355            {
15356               .name = "Pixels",
15357               .desc = "Number of pixels rendered",
15358               .symbol_name = "frag_num_tiles",
15359               .units = PAN_PERF_COUNTER_UNITS_PIXELS,
15360               .offset = 212,
15361               .category = &panfrost_perf_config_t88x.categories[2],
15362            }, // counter
15363            {
15364               .name = "Tile writes killed by TE",
15365               .desc = "Number of tile writes skipped by transaction elimination",
15366               .symbol_name = "frag_trans_elim",
15367               .units = PAN_PERF_COUNTER_UNITS_TILES,
15368               .offset = 213,
15369               .category = &panfrost_perf_config_t88x.categories[2],
15370            }, // counter
15371            {
15372               .name = "A instructions",
15373               .desc = "Number of instructions completed by the the A-pipe (normalized per pipeline)",
15374               .symbol_name = "arith_words",
15375               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
15376               .offset = 219,
15377               .category = &panfrost_perf_config_t88x.categories[2],
15378            }, // counter
15379            {
15380               .name = "LS instructions",
15381               .desc = "Number of instructions completed by the LS-pipe",
15382               .symbol_name = "ls_words",
15383               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
15384               .offset = 223,
15385               .category = &panfrost_perf_config_t88x.categories[2],
15386            }, // counter
15387            {
15388               .name = "LS instruction issues",
15389               .desc = "Number of instructions issued to the LS-pipe, including restarts",
15390               .symbol_name = "ls_issues",
15391               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
15392               .offset = 224,
15393               .category = &panfrost_perf_config_t88x.categories[2],
15394            }, // counter
15395            {
15396               .name = "T instructions",
15397               .desc = "Number of instructions completed by the T-pipe",
15398               .symbol_name = "tex_words",
15399               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
15400               .offset = 230,
15401               .category = &panfrost_perf_config_t88x.categories[2],
15402            }, // counter
15403            {
15404               .name = "T instruction issues",
15405               .desc = "Number of threads through loop 2 address calculation",
15406               .symbol_name = "tex_issues",
15407               .units = PAN_PERF_COUNTER_UNITS_INSTRUCTIONS,
15408               .offset = 234,
15409               .category = &panfrost_perf_config_t88x.categories[2],
15410            }, // counter
15411            {
15412               .name = "Cache misses",
15413               .desc = "Number of instructions in the T-pipe, recirculated due to cache miss",
15414               .symbol_name = "tex_recirc_fmiss",
15415               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15416               .offset = 235,
15417               .category = &panfrost_perf_config_t88x.categories[2],
15418            }, // counter
15419            {
15420               .name = "Read operations",
15421               .desc = "Number of read operations in the Load/Store cache",
15422               .symbol_name = "lsc_read_op",
15423               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15424               .offset = 241,
15425               .category = &panfrost_perf_config_t88x.categories[2],
15426            }, // counter
15427            {
15428               .name = "Read hits",
15429               .desc = "Number of read hits in the Load/Store cache",
15430               .symbol_name = "lsc_read_hits",
15431               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15432               .offset = 240,
15433               .category = &panfrost_perf_config_t88x.categories[2],
15434            }, // counter
15435            {
15436               .name = "Write operations",
15437               .desc = "Number of write operations in the Load/Store cache",
15438               .symbol_name = "lsc_write_op",
15439               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15440               .offset = 243,
15441               .category = &panfrost_perf_config_t88x.categories[2],
15442            }, // counter
15443            {
15444               .name = "Write hits",
15445               .desc = "Number of write hits in the Load/Store cache",
15446               .symbol_name = "lsc_write_hits",
15447               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15448               .offset = 242,
15449               .category = &panfrost_perf_config_t88x.categories[2],
15450            }, // counter
15451            {
15452               .name = "Atomic operations",
15453               .desc = "Number of atomic operations in the Load/Store cache",
15454               .symbol_name = "lsc_atomic_op",
15455               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15456               .offset = 245,
15457               .category = &panfrost_perf_config_t88x.categories[2],
15458            }, // counter
15459            {
15460               .name = "Atomic hits",
15461               .desc = "Number of atomic hits in the Load/Store cache",
15462               .symbol_name = "lsc_atomic_hits",
15463               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15464               .offset = 244,
15465               .category = &panfrost_perf_config_t88x.categories[2],
15466            }, // counter
15467            {
15468               .name = "Line fetches",
15469               .desc = "Number of line fetches in the Load/Store cache",
15470               .symbol_name = "lsc_line_fetches",
15471               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15472               .offset = 246,
15473               .category = &panfrost_perf_config_t88x.categories[2],
15474            }, // counter
15475            {
15476               .name = "Dirty line evictions",
15477               .desc = "Number of dirty line evictions in the Load/Store cache",
15478               .symbol_name = "lsc_dirty_line",
15479               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15480               .offset = 247,
15481               .category = &panfrost_perf_config_t88x.categories[2],
15482            }, // counter
15483            {
15484               .name = "Snoops in to LSC",
15485               .desc = "Number of coherent memory snoops in to the Load/Store cache",
15486               .symbol_name = "lsc_snoops",
15487               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15488               .offset = 248,
15489               .category = &panfrost_perf_config_t88x.categories[2],
15490            }, // counter
15491         }, // counters
15492      }, // category
15493      {
15494         .name = "L2 Cache",
15495         .n_counters = 13,
15496         .counters = {
15497            {
15498               .name = "L2 read lookups",
15499               .desc = "Number of reads into the L2 cache",
15500               .symbol_name = "l2_read_lookup",
15501               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15502               .offset = 161,
15503               .category = &panfrost_perf_config_t88x.categories[3],
15504            }, // counter
15505            {
15506               .name = "Read snoops",
15507               .desc = "Number of read transaction snoops",
15508               .symbol_name = "l2_read_snoop",
15509               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15510               .offset = 164,
15511               .category = &panfrost_perf_config_t88x.categories[3],
15512            }, // counter
15513            {
15514               .name = "L2 read hits",
15515               .desc = "Number of reads hitting in the L2 cache",
15516               .symbol_name = "l2_read_hit",
15517               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15518               .offset = 165,
15519               .category = &panfrost_perf_config_t88x.categories[3],
15520            }, // counter
15521            {
15522               .name = "Write snoops",
15523               .desc = "Number of write transaction snoops",
15524               .symbol_name = "l2_write_snoop",
15525               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15526               .offset = 170,
15527               .category = &panfrost_perf_config_t88x.categories[3],
15528            }, // counter
15529            {
15530               .name = "L2 write hits",
15531               .desc = "Number of writes hitting in the L2 cache",
15532               .symbol_name = "l2_write_hit",
15533               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15534               .offset = 171,
15535               .category = &panfrost_perf_config_t88x.categories[3],
15536            }, // counter
15537            {
15538               .name = "L2 write lookups",
15539               .desc = "Number of writes into the L2 cache",
15540               .symbol_name = "l2_write_lookup",
15541               .units = PAN_PERF_COUNTER_UNITS_REQUESTS,
15542               .offset = 167,
15543               .category = &panfrost_perf_config_t88x.categories[3],
15544            }, // counter
15545            {
15546               .name = "External read bytes",
15547               .desc = "Number of external bus read bytes",
15548               .symbol_name = "l2_ext_read_beats",
15549               .units = PAN_PERF_COUNTER_UNITS_BYTES,
15550               .offset = 159,
15551               .category = &panfrost_perf_config_t88x.categories[3],
15552            }, // counter
15553            {
15554               .name = "External bus stalls (AR)",
15555               .desc = "Number of cycles a valid read address (AR) is stalled by the external interconnect",
15556               .symbol_name = "l2_ext_ar_stall",
15557               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15558               .offset = 182,
15559               .category = &panfrost_perf_config_t88x.categories[3],
15560            }, // counter
15561            {
15562               .name = "External bus response buffer full",
15563               .desc = "Number of cycles a valid request is blocked by a full response buffer",
15564               .symbol_name = "l2_ext_r_buf_full",
15565               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15566               .offset = 188,
15567               .category = &panfrost_perf_config_t88x.categories[3],
15568            }, // counter
15569            {
15570               .name = "External bus read data buffer full",
15571               .desc = "Number of cycles a valid request is blocked by a full read data buffer",
15572               .symbol_name = "l2_ext_rd_buf_full",
15573               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15574               .offset = 184,
15575               .category = &panfrost_perf_config_t88x.categories[3],
15576            }, // counter
15577            {
15578               .name = "External write bytes",
15579               .desc = "Number of external bus write bytes",
15580               .symbol_name = "l2_ext_write_beats",
15581               .units = PAN_PERF_COUNTER_UNITS_BYTES,
15582               .offset = 158,
15583               .category = &panfrost_perf_config_t88x.categories[3],
15584            }, // counter
15585            {
15586               .name = "External bus stalls (W)",
15587               .desc = "Number of cycles a valid write data (W channel) is stalled by the external interconnect",
15588               .symbol_name = "l2_ext_w_stall",
15589               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15590               .offset = 186,
15591               .category = &panfrost_perf_config_t88x.categories[3],
15592            }, // counter
15593            {
15594               .name = "External bus write buffer full",
15595               .desc = "Number of cycles a valid request is blocked by a full write buffer",
15596               .symbol_name = "l2_ext_w_buf_full",
15597               .units = PAN_PERF_COUNTER_UNITS_CYCLES,
15598               .offset = 187,
15599               .category = &panfrost_perf_config_t88x.categories[3],
15600            }, // counter
15601         }, // counters
15602      }, // category
15603   }, // categories
15604}; // panfrost_perf_config_t88x
15605