vmm: Fix use-after-free in load_elf()
[akaros.git] / user / perfmon / events / amd64_events_fam14h.h
1 /*
2  * Copyright (c) 2011 Google, Inc
3  * Contributed by Stephane Eranian <eranian@gmail.com>
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to deal
7  * in the Software without restriction, including without limitation the rights
8  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9  * of the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
17  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
20  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * This file is part of libpfm, a performance monitoring support library for
23  * applications on Linux.
24  *
25  * This file has been automatically generated.
26  *
27  * PMU: amd64_fam14h (AMD64 Fam14h)
28  */
29
30 static const amd64_umask_t amd64_fam14h_dispatched_fpu[]={
31    { .uname  = "PIPE0",
32      .udesc  = "Pipe 0 (fadd, imul, mmx) ops",
33      .ucode = 0x1,
34    },
35    { .uname  = "PIPE1",
36      .udesc  = "Pipe 1 (fmul, store, mmx) ops",
37      .ucode = 0x2,
38    },
39    { .uname  = "ANY",
40      .udesc  = "Pipe 1 and Pipe 0 ops",
41      .ucode = 0x3,
42      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
43    },
44 };
45
46 static const amd64_umask_t amd64_fam14h_retired_sse_operations[]={
47    { .uname  = "SINGLE_ADD_SUB_OPS",
48      .udesc  = "Single precision add/subtract ops",
49      .ucode = 0x1,
50    },
51    { .uname  = "SINGLE_MUL_OPS",
52      .udesc  = "Single precision multiply ops",
53      .ucode = 0x2,
54    },
55    { .uname  = "SINGLE_DIV_OPS",
56      .udesc  = "Single precision divide/square root ops",
57      .ucode = 0x4,
58    },
59    { .uname  = "DOUBLE_ADD_SUB_OPS",
60      .udesc  = "Double precision add/subtract ops",
61      .ucode = 0x8,
62    },
63    { .uname  = "DOUBLE_MUL_OPS",
64      .udesc  = "Double precision multiply ops",
65      .ucode = 0x10,
66    },
67    { .uname  = "DOUBLE_DIV_OPS",
68      .udesc  = "Double precision divide/square root ops",
69      .ucode = 0x20,
70    },
71    { .uname  = "OP_TYPE",
72      .udesc  = "Op type: 0=uops. 1=FLOPS",
73      .ucode = 0x40,
74    },
75    { .uname  = "ALL",
76      .udesc  = "All sub-events selected",
77      .ucode = 0x7f,
78      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
79    },
80 };
81
82 static const amd64_umask_t amd64_fam14h_retired_move_ops[]={
83    { .uname  = "ALL_OTHER_MERGING_MOVE_UOPS",
84      .udesc  = "All other merging move uops",
85      .ucode = 0x4,
86    },
87    { .uname  = "ALL_OTHER_MOVE_UOPS",
88      .udesc  = "All other move uops",
89      .ucode = 0x8,
90    },
91    { .uname  = "ALL",
92      .udesc  = "All sub-events selected",
93      .ucode = 0xc,
94      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
95    },
96 };
97
98 static const amd64_umask_t amd64_fam14h_retired_serializing_ops[]={
99    { .uname  = "SSE_BOTTOM_EXECUTING_UOPS",
100      .udesc  = "SSE bottom-executing uops retired",
101      .ucode = 0x1,
102    },
103    { .uname  = "SSE_BOTTOM_SERIALIZING_UOPS",
104      .udesc  = "SSE bottom-serializing uops retired",
105      .ucode = 0x2,
106    },
107    { .uname  = "X87_BOTTOM_EXECUTING_UOPS",
108      .udesc  = "X87 bottom-executing uops retired",
109      .ucode = 0x4,
110    },
111    { .uname  = "X87_BOTTOM_SERIALIZING_UOPS",
112      .udesc  = "X87 bottom-serializing uops retired",
113      .ucode = 0x8,
114    },
115    { .uname  = "ALL",
116      .udesc  = "All sub-events selected",
117      .ucode = 0xf,
118      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
119    },
120 };
121
122 static const amd64_umask_t amd64_fam14h_retired_x87_fpu_ops[]={
123    { .uname  = "ADD_SUB_OPS",
124      .udesc  = "Add/subtract ops",
125      .ucode = 0x1,
126    },
127    { .uname  = "MULT_OPS",
128      .udesc  = "Multiply ops",
129      .ucode = 0x2,
130    },
131    { .uname  = "DIV_FSQRT_OPS",
132      .udesc  = "Divide and fqsrt ops",
133      .ucode = 0x4,
134    },
135    { .uname  = "ALL",
136      .udesc  = "All sub-events selected",
137      .ucode = 0x7,
138      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
139    },
140 };
141
142 static const amd64_umask_t amd64_fam14h_segment_register_loads[]={
143    { .uname  = "ES",
144      .udesc  = "ES",
145      .ucode = 0x1,
146    },
147    { .uname  = "CS",
148      .udesc  = "CS",
149      .ucode = 0x2,
150    },
151    { .uname  = "SS",
152      .udesc  = "SS",
153      .ucode = 0x4,
154    },
155    { .uname  = "DS",
156      .udesc  = "DS",
157      .ucode = 0x8,
158    },
159    { .uname  = "FS",
160      .udesc  = "FS",
161      .ucode = 0x10,
162    },
163    { .uname  = "GS",
164      .udesc  = "GS",
165      .ucode = 0x20,
166    },
167    { .uname  = "HS",
168      .udesc  = "HS",
169      .ucode = 0x40,
170    },
171    { .uname  = "ALL",
172      .udesc  = "All sub-events selected",
173      .ucode = 0x7f,
174      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
175    },
176 };
177
178 static const amd64_umask_t amd64_fam14h_locked_ops[]={
179    { .uname  = "EXECUTED",
180      .udesc  = "Number of locked instructions executed",
181      .ucode = 0x1,
182    },
183    { .uname  = "BUS_LOCK",
184      .udesc  = "Number of cycles to acquire bus lock",
185      .ucode = 0x2,
186    },
187    { .uname  = "UNLOCK_LINE",
188      .udesc  = "Number of cycles to unlock line (not including cache miss)",
189      .ucode = 0x4,
190    },
191    { .uname  = "ALL",
192      .udesc  = "All sub-events selected",
193      .ucode = 0x7,
194      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
195    },
196 };
197
198 static const amd64_umask_t amd64_fam14h_cancelled_store_to_load_forward_operations[]={
199    { .uname  = "ADDRESS_MISMATCHES",
200      .udesc  = "Address mismatches (starting byte not the same).",
201      .ucode = 0x1,
202    },
203    { .uname  = "STORE_IS_SMALLER_THAN_LOAD",
204      .udesc  = "Store is smaller than load.",
205      .ucode = 0x2,
206    },
207    { .uname  = "MISALIGNED",
208      .udesc  = "Misaligned.",
209      .ucode = 0x4,
210    },
211    { .uname  = "ALL",
212      .udesc  = "All sub-events selected",
213      .ucode = 0x7,
214      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
215    },
216 };
217
218 static const amd64_umask_t amd64_fam14h_data_cache_refills[]={
219    { .uname  = "UNCACHEABLE",
220      .udesc  = "From non-cacheable data",
221      .ucode = 0x1,
222    },
223    { .uname  = "SHARED",
224      .udesc  = "From shared lines",
225      .ucode = 0x2,
226    },
227    { .uname  = "EXCLUSIVE",
228      .udesc  = "From exclusive lines",
229      .ucode = 0x4,
230    },
231    { .uname  = "OWNED",
232      .udesc  = "From owned lines",
233      .ucode = 0x8,
234    },
235    { .uname  = "MODIFIED",
236      .udesc  = "From modified lines",
237      .ucode = 0x10,
238    },
239    { .uname  = "ALL",
240      .udesc  = "All sub-events selected",
241      .ucode = 0x1f,
242      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
243    },
244 };
245
246 static const amd64_umask_t amd64_fam14h_data_cache_refills_from_nb[]={
247    { .uname  = "UNCACHEABLE",
248      .udesc  = "Uncacheable data",
249      .ucode = 0x1,
250    },
251    { .uname  = "SHARED",
252      .udesc  = "Shared",
253      .ucode = 0x2,
254    },
255    { .uname  = "EXCLUSIVE",
256      .udesc  = "Exclusive",
257      .ucode = 0x4,
258    },
259    { .uname  = "OWNED",
260      .udesc  = "Owned",
261      .ucode = 0x8,
262    },
263    { .uname  = "MODIFIED",
264      .udesc  = "Modified",
265      .ucode = 0x10,
266    },
267    { .uname  = "ALL",
268      .udesc  = "All sub-events selected",
269      .ucode = 0x1f,
270      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
271    },
272 };
273
274 static const amd64_umask_t amd64_fam14h_data_cache_lines_evicted[]={
275    { .uname  = "PROBE",
276      .udesc  = "Eviction from probe",
277      .ucode = 0x1,
278    },
279    { .uname  = "SHARED",
280      .udesc  = "Shared eviction",
281      .ucode = 0x2,
282    },
283    { .uname  = "EXCLUSIVE",
284      .udesc  = "Exclusive eviction",
285      .ucode = 0x4,
286    },
287    { .uname  = "OWNED",
288      .udesc  = "Owned eviction",
289      .ucode = 0x8,
290    },
291    { .uname  = "MODIFIED",
292      .udesc  = "Modified eviction",
293      .ucode = 0x10,
294    },
295    { .uname  = "ALL",
296      .udesc  = "All sub-events selected",
297      .ucode = 0x1f,
298      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
299    },
300 };
301
302 static const amd64_umask_t amd64_fam14h_dtlb_miss[]={
303    { .uname  = "STORES_L1TLB_MISS",
304      .udesc  = "Stores that miss L1TLB",
305      .ucode = 0x1,
306    },
307    { .uname  = "LOADS_L1TLB_MISS",
308      .udesc  = "Loads that miss L1TLB",
309      .ucode = 0x2,
310    },
311    { .uname  = "STORES_L2TLB_MISS",
312      .udesc  = "Stores that miss L2TLB",
313      .ucode = 0x4,
314    },
315    { .uname  = "LOADS_L2TLB_MISS",
316      .udesc  = "Loads that miss L2TLB",
317      .ucode = 0x8,
318    },
319    { .uname  = "ALL",
320      .udesc  = "All sub-events selected",
321      .ucode = 0xf,
322      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
323    },
324 };
325
326 static const amd64_umask_t amd64_fam14h_prefetch_instructions_dispatched[]={
327    { .uname  = "LOAD",
328      .udesc  = "Load (Prefetch, PrefetchT0/T1/T2)",
329      .ucode = 0x1,
330    },
331    { .uname  = "STORE",
332      .udesc  = "Store (PrefetchW)",
333      .ucode = 0x2,
334    },
335    { .uname  = "NTA",
336      .udesc  = "NTA (PrefetchNTA)",
337      .ucode = 0x4,
338    },
339    { .uname  = "ALL",
340      .udesc  = "All sub-events selected",
341      .ucode = 0x7,
342      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
343    },
344 };
345
346 static const amd64_umask_t amd64_fam14h_l1_dtlb_hit[]={
347    { .uname  = "L1_4K_TLB_HIT",
348      .udesc  = "L1 4K TLB hit",
349      .ucode = 0x1,
350    },
351    { .uname  = "L1_2M_TLB_HIT",
352      .udesc  = "L1 2M TLB hit",
353      .ucode = 0x2,
354    },
355    { .uname  = "ALL",
356      .udesc  = "All sub-events selected",
357      .ucode = 0x3,
358      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
359    },
360 };
361
362 static const amd64_umask_t amd64_fam14h_dcache_sw_prefetches[]={
363    { .uname  = "HIT",
364      .udesc  = "SW prefetch hit in the data cache",
365      .ucode = 0x1,
366    },
367    { .uname  = "PENDING_FILL",
368      .udesc  = "SW prefetch hit a pending fill",
369      .ucode = 0x2,
370    },
371    { .uname  = "NO_MAB",
372      .udesc  = "SW prefetch does not get a MAB",
373      .ucode = 0x4,
374    },
375    { .uname  = "L2_HIT",
376      .udesc  = "SW prefetch hits L2",
377      .ucode = 0x8,
378    },
379    { .uname  = "ALL",
380      .udesc  = "All sub-events selected",
381      .ucode = 0xf,
382      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
383    },
384 };
385
386 static const amd64_umask_t amd64_fam14h_memory_requests[]={
387    { .uname  = "NON_CACHEABLE",
388      .udesc  = "Requests to non-cacheable (UC) memory",
389      .ucode = 0x1,
390    },
391    { .uname  = "WRITE_COMBINING",
392      .udesc  = "Requests to write-combining (WC) memory or WC buffer flushes to WB memory",
393      .ucode = 0x2,
394    },
395    { .uname  = "STREAMING_STORE",
396      .udesc  = "Streaming store (SS) requests",
397      .ucode = 0x80,
398    },
399    { .uname  = "ALL",
400      .udesc  = "All sub-events selected",
401      .ucode = 0x83,
402      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
403    },
404 };
405
406 static const amd64_umask_t amd64_fam14h_mab_requests[]={
407    { .uname  = "DC_BUFFER_0",
408      .udesc  = "Data cache buffer 0",
409      .ucode = 0x0,
410      .uflags= AMD64_FL_NCOMBO,
411    },
412    { .uname  = "DC_BUFFER_1",
413      .udesc  = "Data cache buffer 1",
414      .ucode = 0x1,
415      .uflags= AMD64_FL_NCOMBO,
416    },
417    { .uname  = "DC_BUFFER_2",
418      .udesc  = "Data cache buffer 2",
419      .ucode = 0x2,
420      .uflags= AMD64_FL_NCOMBO,
421    },
422    { .uname  = "DC_BUFFER_3",
423      .udesc  = "Data cache buffer 3",
424      .ucode = 0x3,
425      .uflags= AMD64_FL_NCOMBO,
426    },
427    { .uname  = "DC_BUFFER_4",
428      .udesc  = "Data cache buffer 4",
429      .ucode = 0x4,
430      .uflags= AMD64_FL_NCOMBO,
431    },
432    { .uname  = "DC_BUFFER_5",
433      .udesc  = "Data cache buffer 5",
434      .ucode = 0x5,
435      .uflags= AMD64_FL_NCOMBO,
436    },
437    { .uname  = "DC_BUFFER_6",
438      .udesc  = "Data cache buffer 6",
439      .ucode = 0x6,
440      .uflags= AMD64_FL_NCOMBO,
441    },
442    { .uname  = "DC_BUFFER_7",
443      .udesc  = "Data cache buffer 7",
444      .ucode = 0x7,
445      .uflags= AMD64_FL_NCOMBO,
446    },
447    { .uname  = "IC_BUFFER_0",
448      .udesc  = "Instruction cache Buffer 1",
449      .ucode = 0x8,
450      .uflags= AMD64_FL_NCOMBO,
451    },
452    { .uname  = "IC_BUFFER_1",
453      .udesc  = "Instructions cache buffer 1",
454      .ucode = 0x9,
455      .uflags= AMD64_FL_NCOMBO,
456    },
457    { .uname  = "ANY_IC_BUFFER",
458      .udesc  = "Any instruction cache buffer",
459      .ucode = 0xa,
460      .uflags= AMD64_FL_NCOMBO,
461    },
462    { .uname  = "ANY_DC_BUFFER",
463      .udesc  = "Any data cache buffer",
464      .ucode = 0xb,
465      .uflags= AMD64_FL_NCOMBO,
466    },
467 };
468
469 static const amd64_umask_t amd64_fam14h_system_read_responses[]={
470    { .uname  = "EXCLUSIVE",
471      .udesc  = "Exclusive",
472      .ucode = 0x1,
473    },
474    { .uname  = "MODIFIED",
475      .udesc  = "Modified",
476      .ucode = 0x2,
477    },
478    { .uname  = "SHARED",
479      .udesc  = "Shared",
480      .ucode = 0x4,
481    },
482    { .uname  = "OWNED",
483      .udesc  = "Owned",
484      .ucode = 0x8,
485    },
486    { .uname  = "DATA_ERROR",
487      .udesc  = "Data Error",
488      .ucode = 0x10,
489    },
490    { .uname  = "DIRTY_SUCCESS",
491      .udesc  = "Change-to-dirty success",
492      .ucode = 0x20,
493    },
494    { .uname  = "UNCACHEABLE",
495      .udesc  = "Uncacheable",
496      .ucode = 0x40,
497    },
498    { .uname  = "ALL",
499      .udesc  = "All sub-events selected",
500      .ucode = 0x7f,
501      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
502    },
503 };
504
505 static const amd64_umask_t amd64_fam14h_requests_to_l2[]={
506    { .uname  = "INSTRUCTIONS",
507      .udesc  = "IC fill",
508      .ucode = 0x1,
509    },
510    { .uname  = "DATA",
511      .udesc  = "DC fill",
512      .ucode = 0x2,
513    },
514    { .uname  = "SNOOP",
515      .udesc  = "Tag snoop request",
516      .ucode = 0x8,
517    },
518    { .uname  = "ALL",
519      .udesc  = "All sub-events selected",
520      .ucode = 0xb,
521      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
522    },
523 };
524
525 static const amd64_umask_t amd64_fam14h_l2_cache_miss[]={
526    { .uname  = "INSTRUCTIONS",
527      .udesc  = "IC fill",
528      .ucode = 0x1,
529    },
530    { .uname  = "DATA",
531      .udesc  = "DC fill (includes possible replays, whereas EventSelect 041h does not)",
532      .ucode = 0x2,
533    },
534    { .uname  = "ALL",
535      .udesc  = "All sub-events selected",
536      .ucode = 0x3,
537      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
538    },
539 };
540
541 static const amd64_umask_t amd64_fam14h_l2_fill_writeback[]={
542    { .uname  = "L2_FILLS",
543      .udesc  = "L2 fills (victims from L1 caches, TLB page table walks and data prefetches)",
544      .ucode = 0x1,
545    },
546    { .uname  = "L2_WRITEBACKS",
547      .udesc  = "L2 Writebacks to system.",
548      .ucode = 0x2,
549    },
550    { .uname  = "IC_ATTR_WRITES_L2_ACCESS",
551      .udesc  = "Ic attribute writes which access the L2",
552      .ucode = 0x4,
553    },
554    { .uname  = "IC_ATTR_WRITES_L2_WRITES",
555      .udesc  = "Ic attribute writes which store into the L2",
556      .ucode = 0x8,
557    },
558    { .uname  = "ALL",
559      .udesc  = "All sub-events selected",
560      .ucode = 0xf,
561      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
562    },
563 };
564
565 static const amd64_umask_t amd64_fam14h_l1_itlb_miss_and_l2_itlb_miss[]={
566    { .uname  = "4K_PAGE_FETCHES",
567      .udesc  = "Instruction fetches to a 4K page.",
568      .ucode = 0x1,
569    },
570    { .uname  = "2M_PAGE_FETCHES",
571      .udesc  = "Instruction fetches to a 2M page.",
572      .ucode = 0x2,
573    },
574    { .uname  = "ALL",
575      .udesc  = "All sub-events selected",
576      .ucode = 0x3,
577      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
578    },
579 };
580
581 static const amd64_umask_t amd64_fam14h_instruction_cache_lines_invalidated[]={
582    { .uname  = "INVALIDATING_LS_PROBE",
583      .udesc  = "IC invalidate due to an LS probe",
584      .ucode = 0x1,
585    },
586    { .uname  = "INVALIDATING_BU_PROBE",
587      .udesc  = "IC invalidate due to a BU probe",
588      .ucode = 0x2,
589    },
590    { .uname  = "ALL",
591      .udesc  = "All sub-events selected",
592      .ucode = 0x3,
593      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
594    },
595 };
596
597 static const amd64_umask_t amd64_fam14h_retired_floating_point_instructions[]={
598    { .uname  = "X87",
599      .udesc  = "X87 or MMX instructions",
600      .ucode = 0x1,
601    },
602    { .uname  = "SSE",
603      .udesc  = "SSE (SSE, SSE2, SSE3, MNI) instructions",
604      .ucode = 0x2,
605    },
606    { .uname  = "ALL",
607      .udesc  = "All sub-events selected",
608      .ucode = 0x3,
609      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
610    },
611 };
612
613 static const amd64_umask_t amd64_fam14h_fpu_exceptions[]={
614    { .uname  = "X87_RECLASS_MICROFAULTS",
615      .udesc  = "X87 reclass microfaults",
616      .ucode = 0x1,
617    },
618    { .uname  = "SSE_RETYPE_MICROFAULTS",
619      .udesc  = "SSE retype microfaults",
620      .ucode = 0x2,
621    },
622    { .uname  = "SSE_RECLASS_MICROFAULTS",
623      .udesc  = "SSE reclass microfaults",
624      .ucode = 0x4,
625    },
626    { .uname  = "SSE_AND_X87_MICROTRAPS",
627      .udesc  = "SSE and x87 microtraps",
628      .ucode = 0x8,
629    },
630    { .uname  = "ALL",
631      .udesc  = "All sub-events selected",
632      .ucode = 0xf,
633      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
634    },
635 };
636
637 static const amd64_umask_t amd64_fam14h_dram_accesses_page[]={
638    { .uname  = "HIT",
639      .udesc  = "DCT0 Page hit",
640      .ucode = 0x1,
641    },
642    { .uname  = "MISS",
643      .udesc  = "DCT0 Page Miss",
644      .ucode = 0x2,
645    },
646    { .uname  = "CONFLICT",
647      .udesc  = "DCT0 Page Conflict",
648      .ucode = 0x4,
649    },
650    { .uname  = "WRITE_REQUEST",
651      .udesc  = "Write request",
652      .ucode = 0x40,
653    },
654    { .uname  = "ALL",
655      .udesc  = "All sub-events selected",
656      .ucode = 0x47,
657      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
658    },
659 };
660
661 static const amd64_umask_t amd64_fam14h_memory_controller_page_table[]={
662    { .uname  = "DCT0_PAGE_TABLE_OVERFLOW",
663      .udesc  = "DCT0 Page Table Overflow",
664      .ucode = 0x1,
665    },
666    { .uname  = "DCT0_PAGE_TABLE_STALE_HIT",
667      .udesc  = "DCT0 number of stale table entry hits (hit on a page closed too soon)",
668      .ucode = 0x2,
669    },
670    { .uname  = "DCT0_PAGE_TABLE_IDLE_INC",
671      .udesc  = "DCT0 page table idle cycle limit incremented",
672      .ucode = 0x4,
673    },
674    { .uname  = "DCT0_PAGE_TABLE_IDLE_DEC",
675      .udesc  = "DCT0 page table idle cycle limit decremented",
676      .ucode = 0x8,
677    },
678    { .uname  = "DCT0_PAGE_TABLE_CLOSED",
679      .udesc  = "DCT0 page table is closed due to row inactivity",
680      .ucode = 0x10,
681    },
682    { .uname  = "ALL",
683      .udesc  = "All sub-events selected",
684      .ucode = 0x1f,
685      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
686    },
687 };
688
689 static const amd64_umask_t amd64_fam14h_memory_controller_slot_misses[]={
690    { .uname  = "DCT0_RBD",
691      .udesc  = "DCT0 RBD",
692      .ucode = 0x10,
693    },
694    { .uname  = "DCT0_PREFETCH",
695      .udesc  = "DCT0 prefetch",
696      .ucode = 0x40,
697    },
698    { .uname  = "ALL",
699      .udesc  = "All sub-events selected",
700      .ucode = 0x50,
701      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
702    },
703 };
704
705 static const amd64_umask_t amd64_fam14h_memory_controller_rbd_queue_events[]={
706    { .uname  = "DCQ_BYPASS_MAX",
707      .udesc  = "DCQ_BYPASS_MAX counter reached",
708      .ucode = 0x4,
709    },
710    { .uname  = "BANK_CLOSED",
711      .udesc  = "Bank is closed due to bank conflict with an outstanding request in the RBD queue",
712      .ucode = 0x8,
713    },
714    { .uname  = "ALL",
715      .udesc  = "All sub-events selected",
716      .ucode = 0xc,
717      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
718    },
719 };
720
721 static const amd64_umask_t amd64_fam14h_thermal_status[]={
722    { .uname  = "MEMHOT_L",
723      .udesc  = "MEMHOT_L assertions",
724      .ucode = 0x1,
725    },
726    { .uname  = "HTC_TRANSITION",
727      .udesc  = "Number of times HTC transitions from inactive to active",
728      .ucode = 0x4,
729    },
730    { .uname  = "CLOCKS_HTC_P_STATE_INACTIVE",
731      .udesc  = "Number of clocks HTC P-state is inactive.",
732      .ucode = 0x20,
733    },
734    { .uname  = "CLOCKS_HTC_P_STATE_ACTIVE",
735      .udesc  = "Number of clocks HTC P-state is active",
736      .ucode = 0x40,
737    },
738    { .uname  = "PROCHOT_L",
739      .udesc  = "PROCHOT_L asserted by an external source and the assertion causes a P-state change",
740      .ucode = 0x80,
741    },
742    { .uname  = "ALL",
743      .udesc  = "All sub-events selected",
744      .ucode = 0xc5,
745      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
746    },
747 };
748
749 static const amd64_umask_t amd64_fam14h_cpu_io_requests_to_memory_io[]={
750    { .uname  = "I_O_TO_I_O",
751      .udesc  = "IO to IO",
752      .ucode = 0x1,
753    },
754    { .uname  = "I_O_TO_MEM",
755      .udesc  = "IO to Mem",
756      .ucode = 0x2,
757    },
758    { .uname  = "CPU_TO_I_O",
759      .udesc  = "CPU to IO",
760      .ucode = 0x4,
761    },
762    { .uname  = "CPU_TO_MEM",
763      .udesc  = "CPU to Mem",
764      .ucode = 0x8,
765    },
766    { .uname  = "ALL",
767      .udesc  = "All sub-events selected",
768      .ucode = 0xf,
769      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
770    },
771 };
772
773 static const amd64_umask_t amd64_fam14h_cache_block[]={
774    { .uname  = "VICTIM_WRITEBACK",
775      .udesc  = "Victim Block (Writeback)",
776      .ucode = 0x1,
777    },
778    { .uname  = "DCACHE_LOAD_MISS",
779      .udesc  = "Read Block (Dcache load miss refill)",
780      .ucode = 0x4,
781    },
782    { .uname  = "SHARED_ICACHE_REFILL",
783      .udesc  = "Read Block Shared (Icache refill)",
784      .ucode = 0x8,
785    },
786    { .uname  = "READ_BLOCK_MODIFIED",
787      .udesc  = "Read Block Modified (Dcache store miss refill)",
788      .ucode = 0x10,
789    },
790    { .uname  = "CHANGE_TO_DIRTY",
791      .udesc  = "Change-to-Dirty (first store to clean block already in cache)",
792      .ucode = 0x20,
793    },
794    { .uname  = "ALL",
795      .udesc  = "All sub-events selected",
796      .ucode = 0x3d,
797      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
798    },
799 };
800
801 static const amd64_umask_t amd64_fam14h_sized_commands[]={
802    { .uname  = "NON_POSTED_WRITE_BYTE",
803      .udesc  = "Non-Posted SzWr Byte (1-32 bytes) Legacy or mapped IO, typically 1-4 bytes",
804      .ucode = 0x1,
805    },
806    { .uname  = "NON_POSTED_WRITE_DWORD",
807      .udesc  = "Non-Posted SzWr DW (1-16 dwords) Legacy or mapped IO, typically 1 DWORD",
808      .ucode = 0x2,
809    },
810    { .uname  = "POSTED_WRITE_BYTE",
811      .udesc  = "Posted SzWr Byte (1-32 bytes) Subcache-line DMA writes, size varies; also flushes of partially-filled Write Combining buffer",
812      .ucode = 0x4,
813    },
814    { .uname  = "POSTED_WRITE_DWORD",
815      .udesc  = "Posted SzWr DW (1-16 dwords) Block-oriented DMA writes, often cache-line sized; also processor Write Combining buffer flushes",
816      .ucode = 0x8,
817    },
818    { .uname  = "READ_BYTE_4_BYTES",
819      .udesc  = "SzRd Byte (4 bytes) Legacy or mapped IO",
820      .ucode = 0x10,
821    },
822    { .uname  = "READ_DWORD_1_16_DWORDS",
823      .udesc  = "SzRd DW (1-16 dwords) Block-oriented DMA reads, typically cache-line size",
824      .ucode = 0x20,
825    },
826    { .uname  = "ALL",
827      .udesc  = "All sub-events selected",
828      .ucode = 0x3f,
829      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
830    },
831 };
832
833 static const amd64_umask_t amd64_fam14h_probe[]={
834    { .uname  = "MISS",
835      .udesc  = "Probe miss",
836      .ucode = 0x1,
837    },
838    { .uname  = "HIT_CLEAN",
839      .udesc  = "Probe hit clean",
840      .ucode = 0x2,
841    },
842    { .uname  = "HIT_DIRTY_NO_MEMORY_CANCEL",
843      .udesc  = "Probe hit dirty without memory cancel (probed by Sized Write or Change2Dirty)",
844      .ucode = 0x4,
845    },
846    { .uname  = "HIT_DIRTY_WITH_MEMORY_CANCEL",
847      .udesc  = "Probe hit dirty with memory cancel (probed by DMA read or cache refill request)",
848      .ucode = 0x8,
849    },
850    { .uname  = "UPSTREAM_HIGH_PRIO_READS",
851      .udesc  = "Upstream high priority reads",
852      .ucode = 0x10,
853    },
854    { .uname  = "UPSTREAM_LOW_PRIO_READS",
855      .udesc  = "Upstream low priority reads",
856      .ucode = 0x20,
857    },
858    { .uname  = "UPSTREAM_LOW_PRIO_WRITES",
859      .udesc  = "Upstream non-ISOC writes",
860      .ucode = 0x80,
861    },
862    { .uname  = "ALL",
863      .udesc  = "All sub-events selected",
864      .ucode = 0xbf,
865      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
866    },
867 };
868
869 static const amd64_umask_t amd64_fam14h_dev_events[]={
870    { .uname  = "HIT",
871      .udesc  = "DEV hit",
872      .ucode = 0x10,
873    },
874    { .uname  = "MISS",
875      .udesc  = "DEV miss",
876      .ucode = 0x20,
877    },
878    { .uname  = "ERROR",
879      .udesc  = "DEV error",
880      .ucode = 0x40,
881    },
882    { .uname  = "ALL",
883      .udesc  = "All sub-events selected",
884      .ucode = 0x70,
885      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
886    },
887 };
888
889 static const amd64_umask_t amd64_fam14h_memory_controller_requests[]={
890    { .uname  = "32_BYTES_WRITES",
891      .udesc  = "32 Bytes Sized Writes",
892      .ucode = 0x8,
893    },
894    { .uname  = "64_BYTES_WRITES",
895      .udesc  = "64 Bytes Sized Writes",
896      .ucode = 0x10,
897    },
898    { .uname  = "32_BYTES_READS",
899      .udesc  = "32 Bytes Sized Reads",
900      .ucode = 0x20,
901    },
902    { .uname  = "64_BYTES_READS",
903      .udesc  = "64 Byte Sized Reads",
904      .ucode = 0x40,
905    },
906    { .uname  = "ALL",
907      .udesc  = "All sub-events selected",
908      .ucode = 0x78,
909      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
910    },
911 };
912
913 static const amd64_umask_t amd64_fam14h_sideband_signals_special_signals[]={
914    { .uname  = "STOPGRANT",
915      .udesc  = "Stopgrant",
916      .ucode = 0x2,
917    },
918    { .uname  = "SHUTDOWN",
919      .udesc  = "Shutdown",
920      .ucode = 0x4,
921    },
922    { .uname  = "WBINVD",
923      .udesc  = "Wbinvd",
924      .ucode = 0x8,
925    },
926    { .uname  = "INVD",
927      .udesc  = "Invd",
928      .ucode = 0x10,
929    },
930    { .uname  = "ALL",
931      .udesc  = "All sub-events selected",
932      .ucode = 0x1c,
933      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
934    },
935 };
936
937 static const amd64_umask_t amd64_fam14h_interrupt_events[]={
938    { .uname  = "FIXED_AND_LPA",
939      .udesc  = "Fixed and LPA",
940      .ucode = 0x1,
941    },
942    { .uname  = "LPA",
943      .udesc  = "LPA",
944      .ucode = 0x2,
945    },
946    { .uname  = "SMI",
947      .udesc  = "SMI",
948      .ucode = 0x4,
949    },
950    { .uname  = "NMI",
951      .udesc  = "NMI",
952      .ucode = 0x8,
953    },
954    { .uname  = "INIT",
955      .udesc  = "INIT",
956      .ucode = 0x10,
957    },
958    { .uname  = "STARTUP",
959      .udesc  = "STARTUP",
960      .ucode = 0x20,
961    },
962    { .uname  = "INT",
963      .udesc  = "INT",
964      .ucode = 0x40,
965    },
966    { .uname  = "EOI",
967      .udesc  = "EOI",
968      .ucode = 0x80,
969    },
970    { .uname  = "ALL",
971      .udesc  = "All sub-events selected",
972      .ucode = 0xff,
973      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
974    },
975 };
976
977 static const amd64_umask_t amd64_fam14h_pdc_miss[]={
978    { .uname  = "HOST_PDE_LEVEL",
979      .udesc  = "Host PDE level",
980      .ucode = 0x1,
981    },
982    { .uname  = "HOST_PDPE_LEVEL",
983      .udesc  = "Host PDPE level",
984      .ucode = 0x2,
985    },
986    { .uname  = "HOST_PML4E_LEVEL",
987      .udesc  = "Host PML4E level",
988      .ucode = 0x4,
989    },
990    { .uname  = "GUEST_PDE_LEVEL",
991      .udesc  = "Guest PDE level",
992      .ucode = 0x10,
993    },
994    { .uname  = "GUEST_PDPE_LEVEL",
995      .udesc  = "Guest PDPE level",
996      .ucode = 0x20,
997    },
998    { .uname  = "GUEST_PML4E_LEVEL",
999      .udesc  = "Guest PML4E level",
1000      .ucode = 0x40,
1001    },
1002    { .uname  = "ALL",
1003      .udesc  = "All sub-events selected",
1004      .ucode = 0x67,
1005      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1006    },
1007 };
1008
1009 static const amd64_entry_t amd64_fam14h_pe[]={
1010 { .name    = "DISPATCHED_FPU",
1011   .desc    = "Number of uops dispatched to FPU execution pipelines",
1012   .modmsk  = AMD64_FAM10H_ATTRS,
1013   .code    = 0x0,
1014   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_dispatched_fpu),
1015   .ngrp    = 1,
1016   .umasks  = amd64_fam14h_dispatched_fpu,
1017 },
1018 { .name    = "CYCLES_NO_FPU_OPS_RETIRED",
1019   .desc    = "Cycles in which the FPU is Empty",
1020   .modmsk  = AMD64_FAM10H_ATTRS,
1021   .code    = 0x1,
1022 },
1023 { .name    = "DISPATCHED_FPU_OPS_FAST_FLAG",
1024   .desc    = "Dispatched Fast Flag FPU Operations",
1025   .modmsk  = AMD64_FAM10H_ATTRS,
1026   .code    = 0x2,
1027 },
1028 { .name    = "RETIRED_SSE_OPERATIONS",
1029   .desc    = "Retired SSE Operations",
1030   .modmsk  = AMD64_FAM10H_ATTRS,
1031   .code    = 0x3,
1032   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_retired_sse_operations),
1033   .ngrp    = 1,
1034   .umasks  = amd64_fam14h_retired_sse_operations,
1035 },
1036 { .name    = "RETIRED_MOVE_OPS",
1037   .desc    = "Retired Move Ops",
1038   .modmsk  = AMD64_FAM10H_ATTRS,
1039   .code    = 0x4,
1040   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_retired_move_ops),
1041   .ngrp    = 1,
1042   .umasks  = amd64_fam14h_retired_move_ops,
1043 },
1044 { .name    = "RETIRED_SERIALIZING_OPS",
1045   .desc    = "Retired Serializing Ops",
1046   .modmsk  = AMD64_FAM10H_ATTRS,
1047   .code    = 0x5,
1048   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_retired_serializing_ops),
1049   .ngrp    = 1,
1050   .umasks  = amd64_fam14h_retired_serializing_ops,
1051 },
1052 { .name    = "RETIRED_X87_FPU_OPS",
1053   .desc    = "Number of x87 floating points ops that have retired",
1054   .modmsk  = AMD64_FAM10H_ATTRS,
1055   .code    = 0x11,
1056   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_retired_x87_fpu_ops),
1057   .ngrp    = 1,
1058   .umasks  = amd64_fam14h_retired_x87_fpu_ops,
1059 },
1060 { .name    = "SEGMENT_REGISTER_LOADS",
1061   .desc    = "Segment Register Loads",
1062   .modmsk  = AMD64_FAM10H_ATTRS,
1063   .code    = 0x20,
1064   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_segment_register_loads),
1065   .ngrp    = 1,
1066   .umasks  = amd64_fam14h_segment_register_loads,
1067 },
1068 { .name    = "PIPELINE_RESTART_DUE_TO_SELF_MODIFYING_CODE",
1069   .desc    = "Pipeline Restart Due to Self-Modifying Code",
1070   .modmsk  = AMD64_FAM10H_ATTRS,
1071   .code    = 0x21,
1072 },
1073 { .name    = "PIPELINE_RESTART_DUE_TO_PROBE_HIT",
1074   .desc    = "Pipeline Restart Due to Probe Hit",
1075   .modmsk  = AMD64_FAM10H_ATTRS,
1076   .code    = 0x22,
1077 },
1078 { .name    = "RSQ_FULL",
1079   .desc    = "Number of cycles that the RSQ holds retired stores. This buffer holds the stores waiting to retired as well as requests that missed the data cache and waiting on a refill",
1080   .modmsk  = AMD64_FAM10H_ATTRS,
1081   .code    = 0x23,
1082 },
1083 { .name    = "LOCKED_OPS",
1084   .desc    = "Locked Operations",
1085   .modmsk  = AMD64_FAM10H_ATTRS,
1086   .code    = 0x24,
1087   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_locked_ops),
1088   .ngrp    = 1,
1089   .umasks  = amd64_fam14h_locked_ops,
1090 },
1091 { .name    = "RETIRED_CLFLUSH_INSTRUCTIONS",
1092   .desc    = "Retired CLFLUSH Instructions",
1093   .modmsk  = AMD64_FAM10H_ATTRS,
1094   .code    = 0x26,
1095 },
1096 { .name    = "RETIRED_CPUID_INSTRUCTIONS",
1097   .desc    = "Retired CPUID Instructions",
1098   .modmsk  = AMD64_FAM10H_ATTRS,
1099   .code    = 0x27,
1100 },
1101 { .name    = "CANCELLED_STORE_TO_LOAD_FORWARD_OPERATIONS",
1102   .desc    = "Cancelled Store to Load Forward Operations",
1103   .modmsk  = AMD64_FAM10H_ATTRS,
1104   .code    = 0x2a,
1105   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_cancelled_store_to_load_forward_operations),
1106   .ngrp    = 1,
1107   .umasks  = amd64_fam14h_cancelled_store_to_load_forward_operations,
1108 },
1109 { .name    = "DATA_CACHE_ACCESSES",
1110   .desc    = "Data Cache Accesses",
1111   .modmsk  = AMD64_FAM10H_ATTRS,
1112   .code    = 0x40,
1113 },
1114 { .name    = "DATA_CACHE_MISSES",
1115   .desc    = "Data Cache Misses",
1116   .modmsk  = AMD64_FAM10H_ATTRS,
1117   .code    = 0x41,
1118 },
1119 { .name    = "DATA_CACHE_REFILLS",
1120   .desc    = "Data Cache Refills from L2 or Northbridge",
1121   .modmsk  = AMD64_FAM10H_ATTRS,
1122   .code    = 0x42,
1123   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_data_cache_refills),
1124   .ngrp    = 1,
1125   .umasks  = amd64_fam14h_data_cache_refills,
1126 },
1127 { .name    = "DATA_CACHE_REFILLS_FROM_NB",
1128   .desc    = "Data Cache Refills from the Northbridge",
1129   .modmsk  = AMD64_FAM10H_ATTRS,
1130   .code    = 0x43,
1131   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_data_cache_refills_from_nb),
1132   .ngrp    = 1,
1133   .umasks  = amd64_fam14h_data_cache_refills_from_nb,
1134 },
1135 { .name    = "DATA_CACHE_LINES_EVICTED",
1136   .desc    = "Data Cache Lines Evicted",
1137   .modmsk  = AMD64_FAM10H_ATTRS,
1138   .code    = 0x44,
1139   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_data_cache_lines_evicted),
1140   .ngrp    = 1,
1141   .umasks  = amd64_fam14h_data_cache_lines_evicted,
1142 },
1143 { .name    = "L1_DTLB_MISS_AND_L2_DTLB_HIT",
1144   .desc    = "Number of data cache accesses that miss in the L1 DTLB and hit the L2 DTLB. This is a speculative event",
1145   .modmsk  = AMD64_FAM10H_ATTRS,
1146   .code    = 0x45,
1147 },
1148 { .name    = "DTLB_MISS",
1149   .desc    = "L1 DTLB and L2 DTLB Miss",
1150   .modmsk  = AMD64_FAM10H_ATTRS,
1151   .code    = 0x46,
1152   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_dtlb_miss),
1153   .ngrp    = 1,
1154   .umasks  = amd64_fam14h_dtlb_miss,
1155 },
1156 { .name    = "MISALIGNED_ACCESSES",
1157   .desc    = "Misaligned Accesses",
1158   .modmsk  = AMD64_FAM10H_ATTRS,
1159   .code    = 0x47,
1160 },
1161 { .name    = "PREFETCH_INSTRUCTIONS_DISPATCHED",
1162   .desc    = "Prefetch Instructions Dispatched",
1163   .modmsk  = AMD64_FAM10H_ATTRS,
1164   .code    = 0x4b,
1165   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_prefetch_instructions_dispatched),
1166   .ngrp    = 1,
1167   .umasks  = amd64_fam14h_prefetch_instructions_dispatched,
1168 },
1169 { .name    = "DCACHE_MISSES_BY_LOCKED_INSTRUCTIONS",
1170   .desc    = "DCACHE Misses by Locked Instructions",
1171   .modmsk  = AMD64_FAM10H_ATTRS,
1172   .code    = 0x4c,
1173 },
1174 { .name    = "L1_DTLB_HIT",
1175   .desc    = "L1 DTLB Hit",
1176   .modmsk  = AMD64_FAM10H_ATTRS,
1177   .code    = 0x4d,
1178   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_l1_dtlb_hit),
1179   .ngrp    = 1,
1180   .umasks  = amd64_fam14h_l1_dtlb_hit,
1181 },
1182 { .name    = "DCACHE_SW_PREFETCHES",
1183   .desc    = "Number of software prefetches that do not cause an actual data cache refill",
1184   .modmsk  = AMD64_FAM10H_ATTRS,
1185   .code    = 0x52,
1186   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_dcache_sw_prefetches),
1187   .ngrp    = 1,
1188   .umasks  = amd64_fam14h_dcache_sw_prefetches,
1189 },
1190 { .name    = "GLOBAL_TLB_FLUSHES",
1191   .desc    = "Global TLB Flushes",
1192   .modmsk  = AMD64_FAM10H_ATTRS,
1193   .code    = 0x54,
1194 },
1195 { .name    = "MEMORY_REQUESTS",
1196   .desc    = "Memory Requests by Type",
1197   .modmsk  = AMD64_FAM10H_ATTRS,
1198   .code    = 0x65,
1199   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_memory_requests),
1200   .ngrp    = 1,
1201   .umasks  = amd64_fam14h_memory_requests,
1202 },
1203 { .name    = "MAB_REQUESTS",
1204   .desc    = "Number of L1 I-cache and D-cache misses per buffer. Average latency by combining with MAB_WAIT_CYCLES.",
1205   .modmsk  = AMD64_FAM10H_ATTRS,
1206   .code    = 0x68,
1207   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_mab_requests),
1208   .ngrp    = 1,
1209   .umasks  = amd64_fam14h_mab_requests,
1210 },
1211 { .name    = "MAB_WAIT_CYCLES",
1212   .desc    = "Latency of L1 I-cache and D-cache misses per buffer. Average latency by combining with MAB_REQUESTS.",
1213   .modmsk  = AMD64_FAM10H_ATTRS,
1214   .code    = 0x69,
1215   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_mab_requests),
1216   .ngrp    = 1,
1217   .umasks  = amd64_fam14h_mab_requests, /* identical to actual umasks list for this event */
1218 },
1219 { .name    = "SYSTEM_READ_RESPONSES",
1220   .desc    = "Northbridge Read Responses by Coherency State",
1221   .modmsk  = AMD64_FAM10H_ATTRS,
1222   .code    = 0x6c,
1223   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_system_read_responses),
1224   .ngrp    = 1,
1225   .umasks  = amd64_fam14h_system_read_responses,
1226 },
1227 { .name    = "CPU_CLK_UNHALTED",
1228   .desc    = "CPU Clocks not Halted",
1229   .modmsk  = AMD64_FAM10H_ATTRS,
1230   .code    = 0x76,
1231 },
1232 { .name    = "REQUESTS_TO_L2",
1233   .desc    = "Requests to L2 Cache",
1234   .modmsk  = AMD64_FAM10H_ATTRS,
1235   .code    = 0x7d,
1236   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_requests_to_l2),
1237   .ngrp    = 1,
1238   .umasks  = amd64_fam14h_requests_to_l2,
1239 },
1240 { .name    = "L2_CACHE_MISS",
1241   .desc    = "L2 Cache Misses",
1242   .modmsk  = AMD64_FAM10H_ATTRS,
1243   .code    = 0x7e,
1244   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_l2_cache_miss),
1245   .ngrp    = 1,
1246   .umasks  = amd64_fam14h_l2_cache_miss,
1247 },
1248 { .name    = "L2_FILL_WRITEBACK",
1249   .desc    = "L2 Fill/Writeback",
1250   .modmsk  = AMD64_FAM10H_ATTRS,
1251   .code    = 0x7f,
1252   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_l2_fill_writeback),
1253   .ngrp    = 1,
1254   .umasks  = amd64_fam14h_l2_fill_writeback,
1255 },
1256 { .name    = "INSTRUCTION_CACHE_FETCHES",
1257   .desc    = "Instruction Cache Fetches",
1258   .modmsk  = AMD64_FAM10H_ATTRS,
1259   .code    = 0x80,
1260 },
1261 { .name    = "INSTRUCTION_CACHE_MISSES",
1262   .desc    = "Instruction Cache Misses",
1263   .modmsk  = AMD64_FAM10H_ATTRS,
1264   .code    = 0x81,
1265 },
1266 { .name    = "INSTRUCTION_CACHE_REFILLS_FROM_L2",
1267   .desc    = "Instruction Cache Refills from L2",
1268   .modmsk  = AMD64_FAM10H_ATTRS,
1269   .code    = 0x82,
1270 },
1271 { .name    = "INSTRUCTION_CACHE_REFILLS_FROM_SYSTEM",
1272   .desc    = "Instruction Cache Refills from System",
1273   .modmsk  = AMD64_FAM10H_ATTRS,
1274   .code    = 0x83,
1275 },
1276 { .name    = "L1_ITLB_MISS_AND_L2_ITLB_MISS",
1277   .desc    = "L1 ITLB Miss and L2 ITLB Miss",
1278   .modmsk  = AMD64_FAM10H_ATTRS,
1279   .code    = 0x85,
1280   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_l1_itlb_miss_and_l2_itlb_miss),
1281   .ngrp    = 1,
1282   .umasks  = amd64_fam14h_l1_itlb_miss_and_l2_itlb_miss,
1283 },
1284 { .name    = "INSTRUCTION_FETCH_STALL",
1285   .desc    = "Instruction Fetch Stall",
1286   .modmsk  = AMD64_FAM10H_ATTRS,
1287   .code    = 0x87,
1288 },
1289 { .name    = "RETURN_STACK_HITS",
1290   .desc    = "Return Stack Hits",
1291   .modmsk  = AMD64_FAM10H_ATTRS,
1292   .code    = 0x88,
1293 },
1294 { .name    = "RETURN_STACK_OVERFLOWS",
1295   .desc    = "Return Stack Overflows",
1296   .modmsk  = AMD64_FAM10H_ATTRS,
1297   .code    = 0x89,
1298 },
1299 { .name    = "INSTRUCTION_CACHE_VICTIMS",
1300   .desc    = "Instruction Cache Victims",
1301   .modmsk  = AMD64_FAM10H_ATTRS,
1302   .code    = 0x8b,
1303 },
1304 { .name    = "INSTRUCTION_CACHE_LINES_INVALIDATED",
1305   .desc    = "Instruction Cache Lines Invalidated",
1306   .modmsk  = AMD64_FAM10H_ATTRS,
1307   .code    = 0x8c,
1308   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_instruction_cache_lines_invalidated),
1309   .ngrp    = 1,
1310   .umasks  = amd64_fam14h_instruction_cache_lines_invalidated,
1311 },
1312 { .name    = "ITLB_RELOADS",
1313   .desc    = "ITLB Reloads",
1314   .modmsk  = AMD64_FAM10H_ATTRS,
1315   .code    = 0x99,
1316 },
1317 { .name    = "ITLB_RELOADS_ABORTED",
1318   .desc    = "ITLB Reloads Aborted",
1319   .modmsk  = AMD64_FAM10H_ATTRS,
1320   .code    = 0x9a,
1321 },
1322 { .name    = "RETIRED_INSTRUCTIONS",
1323   .desc    = "Retired Instructions",
1324   .modmsk  = AMD64_FAM10H_ATTRS,
1325   .code    = 0xc0,
1326 },
1327 { .name    = "RETIRED_UOPS",
1328   .desc    = "Retired uops",
1329   .modmsk  = AMD64_FAM10H_ATTRS,
1330   .code    = 0xc1,
1331 },
1332 { .name    = "RETIRED_BRANCH_INSTRUCTIONS",
1333   .desc    = "Retired Branch Instructions",
1334   .modmsk  = AMD64_FAM10H_ATTRS,
1335   .code    = 0xc2,
1336 },
1337 { .name    = "RETIRED_MISPREDICTED_BRANCH_INSTRUCTIONS",
1338   .desc    = "Retired Mispredicted Branch Instructions",
1339   .modmsk  = AMD64_FAM10H_ATTRS,
1340   .code    = 0xc3,
1341 },
1342 { .name    = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS",
1343   .desc    = "Retired Taken Branch Instructions",
1344   .modmsk  = AMD64_FAM10H_ATTRS,
1345   .code    = 0xc4,
1346 },
1347 { .name    = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS_MISPREDICTED",
1348   .desc    = "Retired Taken Branch Instructions Mispredicted",
1349   .modmsk  = AMD64_FAM10H_ATTRS,
1350   .code    = 0xc5,
1351 },
1352 { .name    = "RETIRED_FAR_CONTROL_TRANSFERS",
1353   .desc    = "Retired Far Control Transfers",
1354   .modmsk  = AMD64_FAM10H_ATTRS,
1355   .code    = 0xc6,
1356 },
1357 { .name    = "RETIRED_BRANCH_RESYNCS",
1358   .desc    = "Retired Branch Resyncs",
1359   .modmsk  = AMD64_FAM10H_ATTRS,
1360   .code    = 0xc7,
1361 },
1362 { .name    = "RETIRED_NEAR_RETURNS",
1363   .desc    = "Retired Near Returns",
1364   .modmsk  = AMD64_FAM10H_ATTRS,
1365   .code    = 0xc8,
1366 },
1367 { .name    = "RETIRED_NEAR_RETURNS_MISPREDICTED",
1368   .desc    = "Retired Near Returns Mispredicted",
1369   .modmsk  = AMD64_FAM10H_ATTRS,
1370   .code    = 0xc9,
1371 },
1372 { .name    = "RETIRED_INDIRECT_BRANCHES_MISPREDICTED",
1373   .desc    = "Retired Indirect Branches Mispredicted",
1374   .modmsk  = AMD64_FAM10H_ATTRS,
1375   .code    = 0xca,
1376 },
1377 { .name    = "RETIRED_FLOATING_POINT_INSTRUCTIONS",
1378   .desc    = "Retired SSE/MMX/FP Instructions",
1379   .modmsk  = AMD64_FAM10H_ATTRS,
1380   .code    = 0xcb,
1381   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_retired_floating_point_instructions),
1382   .ngrp    = 1,
1383   .umasks  = amd64_fam14h_retired_floating_point_instructions,
1384 },
1385 { .name    = "INTERRUPTS_MASKED_CYCLES",
1386   .desc    = "Interrupts-Masked Cycles",
1387   .modmsk  = AMD64_FAM10H_ATTRS,
1388   .code    = 0xcd,
1389 },
1390 { .name    = "INTERRUPTS_MASKED_CYCLES_WITH_INTERRUPT_PENDING",
1391   .desc    = "Interrupts-Masked Cycles with Interrupt Pending",
1392   .modmsk  = AMD64_FAM10H_ATTRS,
1393   .code    = 0xce,
1394 },
1395 { .name    = "INTERRUPTS_TAKEN",
1396   .desc    = "Interrupts Taken",
1397   .modmsk  = AMD64_FAM10H_ATTRS,
1398   .code    = 0xcf,
1399 },
1400 { .name    = "FPU_EXCEPTIONS",
1401   .desc    = "FPU Exceptions",
1402   .modmsk  = AMD64_FAM10H_ATTRS,
1403   .code    = 0xdb,
1404   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_fpu_exceptions),
1405   .ngrp    = 1,
1406   .umasks  = amd64_fam14h_fpu_exceptions,
1407 },
1408 { .name    = "DR0_BREAKPOINT_MATCHES",
1409   .desc    = "DR0 Breakpoint Matches",
1410   .modmsk  = AMD64_FAM10H_ATTRS,
1411   .code    = 0xdc,
1412 },
1413 { .name    = "DR1_BREAKPOINT_MATCHES",
1414   .desc    = "DR1 Breakpoint Matches",
1415   .modmsk  = AMD64_FAM10H_ATTRS,
1416   .code    = 0xdd,
1417 },
1418 { .name    = "DR2_BREAKPOINT_MATCHES",
1419   .desc    = "DR2 Breakpoint Matches",
1420   .modmsk  = AMD64_FAM10H_ATTRS,
1421   .code    = 0xde,
1422 },
1423 { .name    = "DR3_BREAKPOINT_MATCHES",
1424   .desc    = "DR3 Breakpoint Matches",
1425   .modmsk  = AMD64_FAM10H_ATTRS,
1426   .code    = 0xdf,
1427 },
1428 { .name    = "DRAM_ACCESSES_PAGE",
1429   .desc    = "DRAM Accesses",
1430   .modmsk  = AMD64_FAM10H_ATTRS,
1431   .code    = 0xe0,
1432   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_dram_accesses_page),
1433   .ngrp    = 1,
1434   .umasks  = amd64_fam14h_dram_accesses_page,
1435 },
1436 { .name    = "MEMORY_CONTROLLER_PAGE_TABLE",
1437   .desc    = "Number of page table events in the local DRAM controller",
1438   .modmsk  = AMD64_FAM10H_ATTRS,
1439   .code    = 0xe1,
1440   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_memory_controller_page_table),
1441   .ngrp    = 1,
1442   .umasks  = amd64_fam14h_memory_controller_page_table,
1443 },
1444 { .name    = "MEMORY_CONTROLLER_SLOT_MISSES",
1445   .desc    = "Memory Controller DRAM Command Slots Missed",
1446   .modmsk  = AMD64_FAM10H_ATTRS,
1447   .code    = 0xe2,
1448   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_memory_controller_slot_misses),
1449   .ngrp    = 1,
1450   .umasks  = amd64_fam14h_memory_controller_slot_misses,
1451 },
1452 { .name    = "MEMORY_CONTROLLER_RBD_QUEUE_EVENTS",
1453   .desc    = "Memory Controller Bypass Counter Saturation",
1454   .modmsk  = AMD64_FAM10H_ATTRS,
1455   .code    = 0xe4,
1456   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_memory_controller_rbd_queue_events),
1457   .ngrp    = 1,
1458   .umasks  = amd64_fam14h_memory_controller_rbd_queue_events,
1459 },
1460 { .name    = "THERMAL_STATUS",
1461   .desc    = "Thermal Status",
1462   .modmsk  = AMD64_FAM10H_ATTRS,
1463   .code    = 0xe8,
1464   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_thermal_status),
1465   .ngrp    = 1,
1466   .umasks  = amd64_fam14h_thermal_status,
1467 },
1468 { .name    = "CPU_IO_REQUESTS_TO_MEMORY_IO",
1469   .desc    = "CPU/IO Requests to Memory/IO",
1470   .modmsk  = AMD64_FAM10H_ATTRS,
1471   .code    = 0xe9,
1472   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_cpu_io_requests_to_memory_io),
1473   .ngrp    = 1,
1474   .umasks  = amd64_fam14h_cpu_io_requests_to_memory_io,
1475 },
1476 { .name    = "CACHE_BLOCK",
1477   .desc    = "Cache Block Commands",
1478   .modmsk  = AMD64_FAM10H_ATTRS,
1479   .code    = 0xea,
1480   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_cache_block),
1481   .ngrp    = 1,
1482   .umasks  = amd64_fam14h_cache_block,
1483 },
1484 { .name    = "SIZED_COMMANDS",
1485   .desc    = "Sized Commands",
1486   .modmsk  = AMD64_FAM10H_ATTRS,
1487   .code    = 0xeb,
1488   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_sized_commands),
1489   .ngrp    = 1,
1490   .umasks  = amd64_fam14h_sized_commands,
1491 },
1492 { .name    = "PROBE",
1493   .desc    = "Probe Responses and Upstream Requests",
1494   .modmsk  = AMD64_FAM10H_ATTRS,
1495   .code    = 0xec,
1496   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_probe),
1497   .ngrp    = 1,
1498   .umasks  = amd64_fam14h_probe,
1499 },
1500 { .name    = "DEV_EVENTS",
1501   .desc    = "DEV Events",
1502   .modmsk  = AMD64_FAM10H_ATTRS,
1503   .code    = 0xee,
1504   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_dev_events),
1505   .ngrp    = 1,
1506   .umasks  = amd64_fam14h_dev_events,
1507 },
1508 { .name    = "MEMORY_CONTROLLER_REQUESTS",
1509   .desc    = "Memory Controller Requests",
1510   .modmsk  = AMD64_FAM10H_ATTRS,
1511   .code    = 0x1f0,
1512   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_memory_controller_requests),
1513   .ngrp    = 1,
1514   .umasks  = amd64_fam14h_memory_controller_requests,
1515 },
1516 { .name    = "SIDEBAND_SIGNALS_SPECIAL_SIGNALS",
1517   .desc    = "Sideband signals and special cycles",
1518   .modmsk  = AMD64_FAM10H_ATTRS,
1519   .code    = 0x1e9,
1520   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_sideband_signals_special_signals),
1521   .ngrp    = 1,
1522   .umasks  = amd64_fam14h_sideband_signals_special_signals,
1523 },
1524 { .name    = "INTERRUPT_EVENTS",
1525   .desc    = "Interrupt events",
1526   .modmsk  = AMD64_FAM10H_ATTRS,
1527   .code    = 0x1ea,
1528   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_interrupt_events),
1529   .ngrp    = 1,
1530   .umasks  = amd64_fam14h_interrupt_events,
1531 },
1532 { .name    = "PDC_MISS",
1533   .desc    = "PDC miss",
1534   .modmsk  = AMD64_FAM10H_ATTRS,
1535   .code    = 0x162,
1536   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam14h_pdc_miss),
1537   .ngrp    = 1,
1538   .umasks  = amd64_fam14h_pdc_miss,
1539 },
1540 };