vmm: Move the vmcall overrides to the VM struct
[akaros.git] / user / perfmon / events / intel_wsm_unc_events.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: wsm_unc (Intel Westmere uncore)
28  */
29
30 static const intel_x86_umask_t wsm_unc_unc_dram_open[]={
31    { .uname  = "CH0",
32      .udesc  = "DRAM Channel 0 open commands issued for read or write",
33      .ucode = 0x100,
34    },
35    { .uname  = "CH1",
36      .udesc  = "DRAM Channel 1 open commands issued for read or write",
37      .ucode = 0x200,
38    },
39    { .uname  = "CH2",
40      .udesc  = "DRAM Channel 2 open commands issued for read or write",
41      .ucode = 0x400,
42    },
43 };
44
45 static const intel_x86_umask_t wsm_unc_unc_gc_occupancy[]={
46    { .uname  = "READ_TRACKER",
47      .udesc  = "In the read tracker",
48      .ucode = 0x100,
49      .uflags= INTEL_X86_DFL,
50    },
51 };
52
53 static const intel_x86_umask_t wsm_unc_unc_dram_page_close[]={
54    { .uname  = "CH0",
55      .udesc  = "DRAM Channel 0 page close",
56      .ucode = 0x100,
57    },
58    { .uname  = "CH1",
59      .udesc  = "DRAM Channel 1 page close",
60      .ucode = 0x200,
61    },
62    { .uname  = "CH2",
63      .udesc  = "DRAM Channel 2 page close",
64      .ucode = 0x400,
65    },
66 };
67
68 static const intel_x86_umask_t wsm_unc_unc_dram_page_miss[]={
69    { .uname  = "CH0",
70      .udesc  = "DRAM Channel 0 page miss",
71      .ucode = 0x100,
72    },
73    { .uname  = "CH1",
74      .udesc  = "DRAM Channel 1 page miss",
75      .ucode = 0x200,
76    },
77    { .uname  = "CH2",
78      .udesc  = "DRAM Channel 2 page miss",
79      .ucode = 0x400,
80    },
81 };
82
83 static const intel_x86_umask_t wsm_unc_unc_dram_pre_all[]={
84    { .uname  = "CH0",
85      .udesc  = "DRAM Channel 0 precharge all commands",
86      .ucode = 0x100,
87    },
88    { .uname  = "CH1",
89      .udesc  = "DRAM Channel 1 precharge all commands",
90      .ucode = 0x200,
91    },
92    { .uname  = "CH2",
93      .udesc  = "DRAM Channel 2 precharge all commands",
94      .ucode = 0x400,
95    },
96 };
97
98 static const intel_x86_umask_t wsm_unc_unc_dram_read_cas[]={
99    { .uname  = "CH0",
100      .udesc  = "DRAM Channel 0 read CAS commands",
101      .ucode = 0x100,
102    },
103    { .uname  = "AUTOPRE_CH0",
104      .udesc  = "DRAM Channel 0 read CAS auto page close commands",
105      .ucode = 0x200,
106    },
107    { .uname  = "CH1",
108      .udesc  = "DRAM Channel 1 read CAS commands",
109      .ucode = 0x400,
110    },
111    { .uname  = "AUTOPRE_CH1",
112      .udesc  = "DRAM Channel 1 read CAS auto page close commands",
113      .ucode = 0x800,
114    },
115    { .uname  = "CH2",
116      .udesc  = "DRAM Channel 2 read CAS commands",
117      .ucode = 0x1000,
118    },
119    { .uname  = "AUTOPRE_CH2",
120      .udesc  = "DRAM Channel 2 read CAS auto page close commands",
121      .ucode = 0x2000,
122    },
123 };
124
125 static const intel_x86_umask_t wsm_unc_unc_dram_refresh[]={
126    { .uname  = "CH0",
127      .udesc  = "DRAM Channel 0 refresh commands",
128      .ucode = 0x100,
129    },
130    { .uname  = "CH1",
131      .udesc  = "DRAM Channel 1 refresh commands",
132      .ucode = 0x200,
133    },
134    { .uname  = "CH2",
135      .udesc  = "DRAM Channel 2 refresh commands",
136      .ucode = 0x400,
137    },
138 };
139
140 static const intel_x86_umask_t wsm_unc_unc_dram_write_cas[]={
141    { .uname  = "CH0",
142      .udesc  = "DRAM Channel 0 write CAS commands",
143      .ucode = 0x100,
144    },
145    { .uname  = "AUTOPRE_CH0",
146      .udesc  = "DRAM Channel 0 write CAS auto page close commands",
147      .ucode = 0x200,
148    },
149    { .uname  = "CH1",
150      .udesc  = "DRAM Channel 1 write CAS commands",
151      .ucode = 0x400,
152    },
153    { .uname  = "AUTOPRE_CH1",
154      .udesc  = "DRAM Channel 1 write CAS auto page close commands",
155      .ucode = 0x800,
156    },
157    { .uname  = "CH2",
158      .udesc  = "DRAM Channel 2 write CAS commands",
159      .ucode = 0x1000,
160    },
161    { .uname  = "AUTOPRE_CH2",
162      .udesc  = "DRAM Channel 2 write CAS auto page close commands",
163      .ucode = 0x2000,
164    },
165 };
166
167 static const intel_x86_umask_t wsm_unc_unc_gq_alloc[]={
168    { .uname  = "READ_TRACKER",
169      .udesc  = "GQ read tracker requests",
170      .ucode = 0x100,
171    },
172    { .uname  = "RT_LLC_MISS",
173      .udesc  = "GQ read tracker LLC misses",
174      .ucode = 0x200,
175    },
176    { .uname  = "RT_TO_LLC_RESP",
177      .udesc  = "GQ read tracker LLC requests",
178      .ucode = 0x400,
179    },
180    { .uname  = "RT_TO_RTID_ACQUIRED",
181      .udesc  = "GQ read tracker LLC miss to RTID acquired",
182      .ucode = 0x800,
183    },
184    { .uname  = "WT_TO_RTID_ACQUIRED",
185      .udesc  = "GQ write tracker LLC miss to RTID acquired",
186      .ucode = 0x1000,
187    },
188    { .uname  = "WRITE_TRACKER",
189      .udesc  = "GQ write tracker LLC misses",
190      .ucode = 0x2000,
191    },
192    { .uname  = "PEER_PROBE_TRACKER",
193      .udesc  = "GQ peer probe tracker requests",
194      .ucode = 0x4000,
195    },
196 };
197
198 static const intel_x86_umask_t wsm_unc_unc_gq_cycles_full[]={
199    { .uname  = "READ_TRACKER",
200      .udesc  = "Cycles GQ read tracker is full.",
201      .ucode = 0x100,
202    },
203    { .uname  = "WRITE_TRACKER",
204      .udesc  = "Cycles GQ write tracker is full.",
205      .ucode = 0x200,
206    },
207    { .uname  = "PEER_PROBE_TRACKER",
208      .udesc  = "Cycles GQ peer probe tracker is full.",
209      .ucode = 0x400,
210    },
211 };
212
213 static const intel_x86_umask_t wsm_unc_unc_gq_cycles_not_empty[]={
214    { .uname  = "READ_TRACKER",
215      .udesc  = "Cycles GQ read tracker is busy",
216      .ucode = 0x100,
217    },
218    { .uname  = "WRITE_TRACKER",
219      .udesc  = "Cycles GQ write tracker is busy",
220      .ucode = 0x200,
221    },
222    { .uname  = "PEER_PROBE_TRACKER",
223      .udesc  = "Cycles GQ peer probe tracker is busy",
224      .ucode = 0x400,
225    },
226 };
227
228 static const intel_x86_umask_t wsm_unc_unc_gq_data_from[]={
229    { .uname  = "QPI",
230      .udesc  = "Cycles GQ data is imported from Quickpath interface",
231      .ucode = 0x100,
232    },
233    { .uname  = "QMC",
234      .udesc  = "Cycles GQ data is imported from Quickpath memory interface",
235      .ucode = 0x200,
236    },
237    { .uname  = "LLC",
238      .udesc  = "Cycles GQ data is imported from LLC",
239      .ucode = 0x400,
240    },
241    { .uname  = "CORES_02",
242      .udesc  = "Cycles GQ data is imported from Cores 0 and 2",
243      .ucode = 0x800,
244    },
245    { .uname  = "CORES_13",
246      .udesc  = "Cycles GQ data is imported from Cores 1 and 3",
247      .ucode = 0x1000,
248    },
249 };
250
251 static const intel_x86_umask_t wsm_unc_unc_gq_data_to[]={
252    { .uname  = "QPI_QMC",
253      .udesc  = "Cycles GQ data sent to the QPI or QMC",
254      .ucode = 0x100,
255    },
256    { .uname  = "LLC",
257      .udesc  = "Cycles GQ data sent to LLC",
258      .ucode = 0x200,
259    },
260    { .uname  = "CORES",
261      .udesc  = "Cycles GQ data sent to cores",
262      .ucode = 0x400,
263    },
264 };
265
266 static const intel_x86_umask_t wsm_unc_unc_llc_hits[]={
267    { .uname  = "READ",
268      .udesc  = "Number of LLC read hits",
269      .ucode = 0x100,
270    },
271    { .uname  = "WRITE",
272      .udesc  = "Number of LLC write hits",
273      .ucode = 0x200,
274    },
275    { .uname  = "PROBE",
276      .udesc  = "Number of LLC peer probe hits",
277      .ucode = 0x400,
278    },
279    { .uname  = "ANY",
280      .udesc  = "Number of LLC hits",
281      .ucode = 0x300,
282      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
283    },
284 };
285
286 static const intel_x86_umask_t wsm_unc_unc_llc_lines_in[]={
287    { .uname  = "M_STATE",
288      .udesc  = "LLC lines allocated in M state",
289      .ucode = 0x100,
290    },
291    { .uname  = "E_STATE",
292      .udesc  = "LLC lines allocated in E state",
293      .ucode = 0x200,
294    },
295    { .uname  = "S_STATE",
296      .udesc  = "LLC lines allocated in S state",
297      .ucode = 0x400,
298    },
299    { .uname  = "F_STATE",
300      .udesc  = "LLC lines allocated in F state",
301      .ucode = 0x800,
302    },
303    { .uname  = "ANY",
304      .udesc  = "LLC lines allocated",
305      .ucode = 0xf00,
306      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
307    },
308 };
309
310 static const intel_x86_umask_t wsm_unc_unc_llc_lines_out[]={
311    { .uname  = "M_STATE",
312      .udesc  = "LLC lines victimized in M state",
313      .ucode = 0x100,
314    },
315    { .uname  = "E_STATE",
316      .udesc  = "LLC lines victimized in E state",
317      .ucode = 0x200,
318    },
319    { .uname  = "S_STATE",
320      .udesc  = "LLC lines victimized in S state",
321      .ucode = 0x400,
322    },
323    { .uname  = "I_STATE",
324      .udesc  = "LLC lines victimized in I state",
325      .ucode = 0x800,
326    },
327    { .uname  = "F_STATE",
328      .udesc  = "LLC lines victimized in F state",
329      .ucode = 0x1000,
330    },
331    { .uname  = "ANY",
332      .udesc  = "LLC lines victimized",
333      .ucode = 0x1f00,
334      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
335    },
336 };
337
338 static const intel_x86_umask_t wsm_unc_unc_llc_miss[]={
339    { .uname  = "READ",
340      .udesc  = "Number of LLC read misses",
341      .ucode = 0x100,
342    },
343    { .uname  = "WRITE",
344      .udesc  = "Number of LLC write misses",
345      .ucode = 0x200,
346    },
347    { .uname  = "PROBE",
348      .udesc  = "Number of LLC peer probe misses",
349      .ucode = 0x400,
350    },
351    { .uname  = "ANY",
352      .udesc  = "Number of LLC misses",
353      .ucode = 0x300,
354      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
355    },
356 };
357
358 static const intel_x86_umask_t wsm_unc_unc_qhl_address_conflicts[]={
359    { .uname  = "2WAY",
360      .udesc  = "QHL 2 way address conflicts",
361      .ucode = 0x200,
362    },
363    { .uname  = "3WAY",
364      .udesc  = "QHL 3 way address conflicts",
365      .ucode = 0x400,
366    },
367 };
368
369 static const intel_x86_umask_t wsm_unc_unc_qhl_conflict_cycles[]={
370    { .uname  = "IOH",
371      .udesc  = "QHL IOH Tracker conflict cycles",
372      .ucode = 0x100,
373    },
374    { .uname  = "REMOTE",
375      .udesc  = "QHL Remote Tracker conflict cycles",
376      .ucode = 0x200,
377    },
378    { .uname  = "LOCAL",
379      .udesc  = "QHL Local Tracker conflict cycles",
380      .ucode = 0x400,
381    },
382 };
383
384 static const intel_x86_umask_t wsm_unc_unc_qhl_cycles_full[]={
385    { .uname  = "REMOTE",
386      .udesc  = "Cycles QHL  Remote Tracker is full",
387      .ucode = 0x200,
388    },
389    { .uname  = "LOCAL",
390      .udesc  = "Cycles QHL Local Tracker is full",
391      .ucode = 0x400,
392    },
393    { .uname  = "IOH",
394      .udesc  = "Cycles QHL IOH Tracker is full",
395      .ucode = 0x100,
396    },
397 };
398
399 static const intel_x86_umask_t wsm_unc_unc_qhl_cycles_not_empty[]={
400    { .uname  = "IOH",
401      .udesc  = "Cycles QHL IOH is busy",
402      .ucode = 0x100,
403    },
404    { .uname  = "REMOTE",
405      .udesc  = "Cycles QHL Remote Tracker is busy",
406      .ucode = 0x200,
407    },
408    { .uname  = "LOCAL",
409      .udesc  = "Cycles QHL Local Tracker is busy",
410      .ucode = 0x400,
411    },
412 };
413
414 static const intel_x86_umask_t wsm_unc_unc_qhl_frc_ack_cnflts[]={
415    { .uname  = "LOCAL",
416      .udesc  = "QHL FrcAckCnflts sent to local home",
417      .ucode = 0x400,
418      .uflags= INTEL_X86_DFL,
419    },
420 };
421
422 static const intel_x86_umask_t wsm_unc_unc_qhl_sleeps[]={
423    { .uname  = "IOH_ORDER",
424      .udesc  = "Due to IOH ordering (write after read) conflicts",
425      .ucode = 0x100,
426    },
427    { .uname  = "REMOTE_ORDER",
428      .udesc  = "Due to remote socket ordering (write after read) conflicts",
429      .ucode = 0x200,
430    },
431    { .uname  = "LOCAL_ORDER",
432      .udesc  = "Due to local socket ordering (write after read) conflicts",
433      .ucode = 0x400,
434    },
435    { .uname  = "IOH_CONFLICT",
436      .udesc  = "Due to IOH address conflicts",
437      .ucode = 0x800,
438    },
439    { .uname  = "REMOTE_CONFLICT",
440      .udesc  = "Due to remote socket address conflicts",
441      .ucode = 0x1000,
442    },
443    { .uname  = "LOCAL_CONFLICT",
444      .udesc  = "Due to local socket address conflicts",
445      .ucode = 0x2000,
446    },
447 };
448
449 static const intel_x86_umask_t wsm_unc_unc_qhl_occupancy[]={
450    { .uname  = "IOH",
451      .udesc  = "Cycles QHL IOH Tracker Allocate to Deallocate Read Occupancy",
452      .ucode = 0x100,
453    },
454    { .uname  = "REMOTE",
455      .udesc  = "Cycles QHL Remote Tracker Allocate to Deallocate Read Occupancy",
456      .ucode = 0x200,
457    },
458    { .uname  = "LOCAL",
459      .udesc  = "Cycles QHL Local Tracker Allocate to Deallocate Read Occupancy",
460      .ucode = 0x400,
461    },
462 };
463
464 static const intel_x86_umask_t wsm_unc_unc_qhl_requests[]={
465    { .uname  = "LOCAL_READS",
466      .udesc  = "Quickpath Home Logic local read requests",
467      .ucode = 0x1000,
468    },
469    { .uname  = "LOCAL_WRITES",
470      .udesc  = "Quickpath Home Logic local write requests",
471      .ucode = 0x2000,
472    },
473    { .uname  = "REMOTE_READS",
474      .udesc  = "Quickpath Home Logic remote read requests",
475      .ucode = 0x400,
476    },
477    { .uname  = "IOH_READS",
478      .udesc  = "Quickpath Home Logic IOH read requests",
479      .ucode = 0x100,
480    },
481    { .uname  = "IOH_WRITES",
482      .udesc  = "Quickpath Home Logic IOH write requests",
483      .ucode = 0x200,
484    },
485    { .uname  = "REMOTE_WRITES",
486      .udesc  = "Quickpath Home Logic remote write requests",
487      .ucode = 0x800,
488    },
489 };
490
491 static const intel_x86_umask_t wsm_unc_unc_qmc_busy[]={
492    { .uname  = "READ_CH0",
493      .udesc  = "Cycles QMC channel 0 busy with a read request",
494      .ucode = 0x100,
495    },
496    { .uname  = "READ_CH1",
497      .udesc  = "Cycles QMC channel 1 busy with a read request",
498      .ucode = 0x200,
499    },
500    { .uname  = "READ_CH2",
501      .udesc  = "Cycles QMC channel 2 busy with a read request",
502      .ucode = 0x400,
503    },
504    { .uname  = "WRITE_CH0",
505      .udesc  = "Cycles QMC channel 0 busy with a write request",
506      .ucode = 0x800,
507    },
508    { .uname  = "WRITE_CH1",
509      .udesc  = "Cycles QMC channel 1 busy with a write request",
510      .ucode = 0x1000,
511    },
512    { .uname  = "WRITE_CH2",
513      .udesc  = "Cycles QMC channel 2 busy with a write request",
514      .ucode = 0x2000,
515    },
516 };
517
518 static const intel_x86_umask_t wsm_unc_unc_qmc_cancel[]={
519    { .uname  = "CH0",
520      .udesc  = "QMC channel 0 cancels",
521      .ucode = 0x100,
522    },
523    { .uname  = "CH1",
524      .udesc  = "QMC channel 1 cancels",
525      .ucode = 0x200,
526    },
527    { .uname  = "CH2",
528      .udesc  = "QMC channel 2 cancels",
529      .ucode = 0x400,
530    },
531    { .uname  = "ANY",
532      .udesc  = "QMC cancels",
533      .ucode = 0x700,
534      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
535    },
536 };
537
538 static const intel_x86_umask_t wsm_unc_unc_qmc_critical_priority_reads[]={
539    { .uname  = "CH0",
540      .udesc  = "QMC channel 0 critical priority read requests",
541      .ucode = 0x100,
542    },
543    { .uname  = "CH1",
544      .udesc  = "QMC channel 1 critical priority read requests",
545      .ucode = 0x200,
546    },
547    { .uname  = "CH2",
548      .udesc  = "QMC channel 2 critical priority read requests",
549      .ucode = 0x400,
550    },
551    { .uname  = "ANY",
552      .udesc  = "QMC critical priority read requests",
553      .ucode = 0x700,
554      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
555    },
556 };
557
558 static const intel_x86_umask_t wsm_unc_unc_qmc_high_priority_reads[]={
559    { .uname  = "CH0",
560      .udesc  = "QMC channel 0 high priority read requests",
561      .ucode = 0x100,
562    },
563    { .uname  = "CH1",
564      .udesc  = "QMC channel 1 high priority read requests",
565      .ucode = 0x200,
566    },
567    { .uname  = "CH2",
568      .udesc  = "QMC channel 2 high priority read requests",
569      .ucode = 0x400,
570    },
571    { .uname  = "ANY",
572      .udesc  = "QMC high priority read requests",
573      .ucode = 0x700,
574      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
575    },
576 };
577
578 static const intel_x86_umask_t wsm_unc_unc_qmc_isoc_full[]={
579    { .uname  = "READ_CH0",
580      .udesc  = "Cycles DRAM channel 0 full with isochronous read requests",
581      .ucode = 0x100,
582    },
583    { .uname  = "READ_CH1",
584      .udesc  = "Cycles DRAM channel 1 full with isochronous read requests",
585      .ucode = 0x200,
586    },
587    { .uname  = "READ_CH2",
588      .udesc  = "Cycles DRAM channel 2 full with isochronous read requests",
589      .ucode = 0x400,
590    },
591    { .uname  = "WRITE_CH0",
592      .udesc  = "Cycles DRAM channel 0 full with isochronous write requests",
593      .ucode = 0x800,
594    },
595    { .uname  = "WRITE_CH1",
596      .udesc  = "Cycles DRAM channel 1 full with isochronous write requests",
597      .ucode = 0x1000,
598    },
599    { .uname  = "WRITE_CH2",
600      .udesc  = "Cycles DRAM channel 2 full with isochronous write requests",
601      .ucode = 0x2000,
602    },
603 };
604
605 static const intel_x86_umask_t wsm_unc_unc_imc_isoc_occupancy[]={
606    { .uname  = "CH0",
607      .udesc  = "IMC channel 0 isochronous read request occupancy",
608      .ucode = 0x100,
609    },
610    { .uname  = "CH1",
611      .udesc  = "IMC channel 1 isochronous read request occupancy",
612      .ucode = 0x200,
613    },
614    { .uname  = "CH2",
615      .udesc  = "IMC channel 2 isochronous read request occupancy",
616      .ucode = 0x400,
617    },
618    { .uname  = "ANY",
619      .udesc  = "IMC isochronous read request occupancy",
620      .ucode = 0x700,
621      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
622    },
623 };
624
625 static const intel_x86_umask_t wsm_unc_unc_qmc_normal_reads[]={
626    { .uname  = "CH0",
627      .udesc  = "QMC channel 0 normal read requests",
628      .ucode = 0x100,
629    },
630    { .uname  = "CH1",
631      .udesc  = "QMC channel 1 normal read requests",
632      .ucode = 0x200,
633    },
634    { .uname  = "CH2",
635      .udesc  = "QMC channel 2 normal read requests",
636      .ucode = 0x400,
637    },
638    { .uname  = "ANY",
639      .udesc  = "QMC normal read requests",
640      .ucode = 0x700,
641      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
642    },
643 };
644
645 static const intel_x86_umask_t wsm_unc_unc_qmc_occupancy[]={
646    { .uname  = "CH0",
647      .udesc  = "IMC channel 0 normal read request occupancy",
648      .ucode = 0x100,
649    },
650    { .uname  = "CH1",
651      .udesc  = "IMC channel 1 normal read request occupancy",
652      .ucode = 0x200,
653    },
654    { .uname  = "CH2",
655      .udesc  = "IMC channel 2 normal read request occupancy",
656      .ucode = 0x400,
657    },
658 };
659
660 static const intel_x86_umask_t wsm_unc_unc_qmc_priority_updates[]={
661    { .uname  = "CH0",
662      .udesc  = "QMC channel 0 priority updates",
663      .ucode = 0x100,
664    },
665    { .uname  = "CH1",
666      .udesc  = "QMC channel 1 priority updates",
667      .ucode = 0x200,
668    },
669    { .uname  = "CH2",
670      .udesc  = "QMC channel 2 priority updates",
671      .ucode = 0x400,
672    },
673    { .uname  = "ANY",
674      .udesc  = "QMC priority updates",
675      .ucode = 0x700,
676      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
677    },
678 };
679
680 static const intel_x86_umask_t wsm_unc_unc_imc_retry[]={
681    { .uname  = "CH0",
682      .udesc  = "Channel 0",
683      .ucode = 0x100,
684    },
685    { .uname  = "CH1",
686      .udesc  = "Channel 1",
687      .ucode = 0x200,
688    },
689    { .uname  = "CH2",
690      .udesc  = "Channel 2",
691      .ucode = 0x400,
692    },
693    { .uname  = "ANY",
694      .udesc  = "Any channel",
695      .ucode = 0x700,
696      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
697    },
698 };
699
700 static const intel_x86_umask_t wsm_unc_unc_qmc_writes[]={
701    { .uname  = "FULL_CH0",
702      .udesc  = "QMC channel 0 full cache line writes",
703      .ucode = 0x100,
704      .grpid = 0,
705    },
706    { .uname  = "FULL_CH1",
707      .udesc  = "QMC channel 1 full cache line writes",
708      .ucode = 0x200,
709      .grpid = 0,
710    },
711    { .uname  = "FULL_CH2",
712      .udesc  = "QMC channel 2 full cache line writes",
713      .ucode = 0x400,
714      .grpid = 0,
715    },
716    { .uname  = "FULL_ANY",
717      .udesc  = "QMC full cache line writes",
718      .ucode = 0x700,
719      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
720      .grpid = 0,
721    },
722    { .uname  = "PARTIAL_CH0",
723      .udesc  = "QMC channel 0 partial cache line writes",
724      .ucode = 0x800,
725      .grpid = 1,
726    },
727    { .uname  = "PARTIAL_CH1",
728      .udesc  = "QMC channel 1 partial cache line writes",
729      .ucode = 0x1000,
730      .grpid = 1,
731    },
732    { .uname  = "PARTIAL_CH2",
733      .udesc  = "QMC channel 2 partial cache line writes",
734      .ucode = 0x2000,
735      .grpid = 1,
736    },
737    { .uname  = "PARTIAL_ANY",
738      .udesc  = "QMC partial cache line writes",
739      .ucode = 0x3800,
740      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
741      .grpid = 1,
742    },
743 };
744
745 static const intel_x86_umask_t wsm_unc_unc_qpi_rx_no_ppt_credit[]={
746    { .uname  = "STALLS_LINK_0",
747      .udesc  = "Link 0 snoop stalls due to no PPT entry",
748      .ucode = 0x100,
749    },
750    { .uname  = "STALLS_LINK_1",
751      .udesc  = "Link 1 snoop stalls due to no PPT entry",
752      .ucode = 0x200,
753    },
754 };
755
756 static const intel_x86_umask_t wsm_unc_unc_qpi_tx_header[]={
757    { .uname  = "BUSY_LINK_0",
758      .udesc  = "Cycles link 0 outbound header busy",
759      .ucode = 0x200,
760    },
761    { .uname  = "BUSY_LINK_1",
762      .udesc  = "Cycles link 1 outbound header busy",
763      .ucode = 0x800,
764    },
765 };
766
767 static const intel_x86_umask_t wsm_unc_unc_qpi_tx_stalled_multi_flit[]={
768    { .uname  = "DRS_LINK_0",
769      .udesc  = "Cycles QPI outbound link 0 DRS stalled",
770      .ucode = 0x100,
771    },
772    { .uname  = "NCB_LINK_0",
773      .udesc  = "Cycles QPI outbound link 0 NCB stalled",
774      .ucode = 0x200,
775    },
776    { .uname  = "NCS_LINK_0",
777      .udesc  = "Cycles QPI outbound link 0 NCS stalled",
778      .ucode = 0x400,
779    },
780    { .uname  = "DRS_LINK_1",
781      .udesc  = "Cycles QPI outbound link 1 DRS stalled",
782      .ucode = 0x800,
783    },
784    { .uname  = "NCB_LINK_1",
785      .udesc  = "Cycles QPI outbound link 1 NCB stalled",
786      .ucode = 0x1000,
787    },
788    { .uname  = "NCS_LINK_1",
789      .udesc  = "Cycles QPI outbound link 1 NCS stalled",
790      .ucode = 0x2000,
791    },
792    { .uname  = "LINK_0",
793      .udesc  = "Cycles QPI outbound link 0 multi flit stalled",
794      .ucode = 0x700,
795      .uflags= INTEL_X86_NCOMBO,
796    },
797    { .uname  = "LINK_1",
798      .udesc  = "Cycles QPI outbound link 1 multi flit stalled",
799      .ucode = 0x3800,
800      .uflags= INTEL_X86_NCOMBO,
801    },
802 };
803
804 static const intel_x86_umask_t wsm_unc_unc_qpi_tx_stalled_single_flit[]={
805    { .uname  = "HOME_LINK_0",
806      .udesc  = "Cycles QPI outbound link 0 HOME stalled",
807      .ucode = 0x100,
808    },
809    { .uname  = "SNOOP_LINK_0",
810      .udesc  = "Cycles QPI outbound link 0 SNOOP stalled",
811      .ucode = 0x200,
812    },
813    { .uname  = "NDR_LINK_0",
814      .udesc  = "Cycles QPI outbound link 0 NDR stalled",
815      .ucode = 0x400,
816    },
817    { .uname  = "HOME_LINK_1",
818      .udesc  = "Cycles QPI outbound link 1 HOME stalled",
819      .ucode = 0x800,
820    },
821    { .uname  = "SNOOP_LINK_1",
822      .udesc  = "Cycles QPI outbound link 1 SNOOP stalled",
823      .ucode = 0x1000,
824    },
825    { .uname  = "NDR_LINK_1",
826      .udesc  = "Cycles QPI outbound link 1 NDR stalled",
827      .ucode = 0x2000,
828    },
829    { .uname  = "LINK_0",
830      .udesc  = "Cycles QPI outbound link 0 single flit stalled",
831      .ucode = 0x700,
832      .uflags= INTEL_X86_NCOMBO,
833    },
834    { .uname  = "LINK_1",
835      .udesc  = "Cycles QPI outbound link 1 single flit stalled",
836      .ucode = 0x3800,
837      .uflags= INTEL_X86_NCOMBO,
838    },
839 };
840
841 static const intel_x86_umask_t wsm_unc_unc_snp_resp_to_local_home[]={
842    { .uname  = "I_STATE",
843      .udesc  = "Local home snoop response - LLC does not have cache line",
844      .ucode = 0x100,
845    },
846    { .uname  = "S_STATE",
847      .udesc  = "Local home snoop response - LLC has  cache line in S state",
848      .ucode = 0x200,
849    },
850    { .uname  = "FWD_S_STATE",
851      .udesc  = "Local home snoop response - LLC forwarding cache line in S state.",
852      .ucode = 0x400,
853    },
854    { .uname  = "FWD_I_STATE",
855      .udesc  = "Local home snoop response - LLC has forwarded a modified cache line",
856      .ucode = 0x800,
857    },
858    { .uname  = "CONFLICT",
859      .udesc  = "Local home conflict snoop response",
860      .ucode = 0x1000,
861    },
862    { .uname  = "WB",
863      .udesc  = "Local home snoop response - LLC has cache line in the M state",
864      .ucode = 0x2000,
865    },
866 };
867
868 static const intel_x86_umask_t wsm_unc_unc_snp_resp_to_remote_home[]={
869    { .uname  = "I_STATE",
870      .udesc  = "Remote home snoop response - LLC does not have cache line",
871      .ucode = 0x100,
872    },
873    { .uname  = "S_STATE",
874      .udesc  = "Remote home snoop response - LLC has  cache line in S state",
875      .ucode = 0x200,
876    },
877    { .uname  = "FWD_S_STATE",
878      .udesc  = "Remote home snoop response - LLC forwarding cache line in S state.",
879      .ucode = 0x400,
880    },
881    { .uname  = "FWD_I_STATE",
882      .udesc  = "Remote home snoop response - LLC has forwarded a modified cache line",
883      .ucode = 0x800,
884    },
885    { .uname  = "CONFLICT",
886      .udesc  = "Remote home conflict snoop response",
887      .ucode = 0x1000,
888    },
889    { .uname  = "WB",
890      .udesc  = "Remote home snoop response - LLC has cache line in the M state",
891      .ucode = 0x2000,
892    },
893    { .uname  = "HITM",
894      .udesc  = "Remote home snoop response - LLC HITM",
895      .ucode = 0x2400,
896      .uflags= INTEL_X86_NCOMBO,
897    },
898 };
899
900 static const intel_x86_umask_t wsm_unc_unc_thermal_throttling_temp[]={
901    { .uname  = "CORE_0",
902      .udesc  = "Core 0",
903      .ucode = 0x100,
904    },
905    { .uname  = "CORE_1",
906      .udesc  = "Core 1",
907      .ucode = 0x200,
908    },
909    { .uname  = "CORE_2",
910      .udesc  = "Core 2",
911      .ucode = 0x400,
912    },
913    { .uname  = "CORE_3",
914      .udesc  = "Core 3",
915      .ucode = 0x800,
916    },
917 };
918
919 static const intel_x86_entry_t intel_wsm_unc_pe[]={
920 { .name   = "UNC_CLK_UNHALTED",
921   .desc   = "Uncore clockticks.",
922   .modmsk =0x0,
923   .cntmsk = 0x100000,
924   .code = 0xff,
925   .flags = INTEL_X86_FIXED,
926 },
927 { .name   = "UNC_DRAM_OPEN",
928   .desc   = "DRAM open commands issued for read or write",
929   .modmsk = NHM_UNC_ATTRS,
930   .cntmsk = 0x1fe00000,
931   .code = 0x60,
932   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_dram_open),
933   .ngrp = 1,
934   .umasks = wsm_unc_unc_dram_open,
935 },
936 { .name   = "UNC_GC_OCCUPANCY",
937   .desc   = "Number of queue entries",
938   .modmsk = NHM_UNC_ATTRS,
939   .cntmsk = 0x1fe00000,
940   .code = 0x2,
941   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_gc_occupancy),
942   .ngrp = 1,
943   .umasks = wsm_unc_unc_gc_occupancy,
944 },
945 { .name   = "UNC_DRAM_PAGE_CLOSE",
946   .desc   = "DRAM page close due to idle timer expiration",
947   .modmsk = NHM_UNC_ATTRS,
948   .cntmsk = 0x1fe00000,
949   .code = 0x61,
950   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_dram_page_close),
951   .ngrp = 1,
952   .umasks = wsm_unc_unc_dram_page_close,
953 },
954 { .name   = "UNC_DRAM_PAGE_MISS",
955   .desc   = "DRAM Channel 0 page miss",
956   .modmsk = NHM_UNC_ATTRS,
957   .cntmsk = 0x1fe00000,
958   .code = 0x62,
959   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_dram_page_miss),
960   .ngrp = 1,
961   .umasks = wsm_unc_unc_dram_page_miss,
962 },
963 { .name   = "UNC_DRAM_PRE_ALL",
964   .desc   = "DRAM Channel 0 precharge all commands",
965   .modmsk = NHM_UNC_ATTRS,
966   .cntmsk = 0x1fe00000,
967   .code = 0x66,
968   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_dram_pre_all),
969   .ngrp = 1,
970   .umasks = wsm_unc_unc_dram_pre_all,
971 },
972 { .name   = "UNC_DRAM_THERMAL_THROTTLED",
973   .desc   = "Uncore cycles DRAM was throttled due to its temperature being above thermal throttling threshold",
974   .modmsk = NHM_UNC_ATTRS,
975   .cntmsk = 0x1fe00000,
976   .code = 0x67,
977 },
978 { .name   = "UNC_DRAM_READ_CAS",
979   .desc   = "DRAM Channel 0 read CAS commands",
980   .modmsk = NHM_UNC_ATTRS,
981   .cntmsk = 0x1fe00000,
982   .code = 0x63,
983   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_dram_read_cas),
984   .ngrp = 1,
985   .umasks = wsm_unc_unc_dram_read_cas,
986 },
987 { .name   = "UNC_DRAM_REFRESH",
988   .desc   = "DRAM Channel 0 refresh commands",
989   .modmsk = NHM_UNC_ATTRS,
990   .cntmsk = 0x1fe00000,
991   .code = 0x65,
992   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_dram_refresh),
993   .ngrp = 1,
994   .umasks = wsm_unc_unc_dram_refresh,
995 },
996 { .name   = "UNC_DRAM_WRITE_CAS",
997   .desc   = "DRAM Channel 0 write CAS commands",
998   .modmsk = NHM_UNC_ATTRS,
999   .cntmsk = 0x1fe00000,
1000   .code = 0x64,
1001   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_dram_write_cas),
1002   .ngrp = 1,
1003   .umasks = wsm_unc_unc_dram_write_cas,
1004 },
1005 { .name   = "UNC_GQ_ALLOC",
1006   .desc   = "GQ read tracker requests",
1007   .modmsk = NHM_UNC_ATTRS,
1008   .cntmsk = 0x1fe00000,
1009   .code = 0x3,
1010   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_gq_alloc),
1011   .ngrp = 1,
1012   .umasks = wsm_unc_unc_gq_alloc,
1013 },
1014 { .name   = "UNC_GQ_CYCLES_FULL",
1015   .desc   = "Cycles GQ read tracker is full.",
1016   .modmsk = NHM_UNC_ATTRS,
1017   .cntmsk = 0x1fe00000,
1018   .code = 0x0,
1019   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_gq_cycles_full),
1020   .ngrp = 1,
1021   .umasks = wsm_unc_unc_gq_cycles_full,
1022 },
1023 { .name   = "UNC_GQ_CYCLES_NOT_EMPTY",
1024   .desc   = "Cycles GQ read tracker is busy",
1025   .modmsk = NHM_UNC_ATTRS,
1026   .cntmsk = 0x1fe00000,
1027   .code = 0x1,
1028   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_gq_cycles_not_empty),
1029   .ngrp = 1,
1030   .umasks = wsm_unc_unc_gq_cycles_not_empty,
1031 },
1032 { .name   = "UNC_GQ_DATA_FROM",
1033   .desc   = "Cycles GQ data is imported",
1034   .modmsk = NHM_UNC_ATTRS,
1035   .cntmsk = 0x1fe00000,
1036   .code = 0x4,
1037   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_gq_data_from),
1038   .ngrp = 1,
1039   .umasks = wsm_unc_unc_gq_data_from,
1040 },
1041 { .name   = "UNC_GQ_DATA_TO",
1042   .desc   = "Cycles GQ data is exported",
1043   .modmsk = NHM_UNC_ATTRS,
1044   .cntmsk = 0x1fe00000,
1045   .code = 0x5,
1046   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_gq_data_to),
1047   .ngrp = 1,
1048   .umasks = wsm_unc_unc_gq_data_to,
1049 },
1050 { .name   = "UNC_LLC_HITS",
1051   .desc   = "Number of LLC read hits",
1052   .modmsk = NHM_UNC_ATTRS,
1053   .cntmsk = 0x1fe00000,
1054   .code = 0x8,
1055   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_llc_hits),
1056   .ngrp = 1,
1057   .umasks = wsm_unc_unc_llc_hits,
1058 },
1059 { .name   = "UNC_LLC_LINES_IN",
1060   .desc   = "LLC lines allocated in M state",
1061   .modmsk = NHM_UNC_ATTRS,
1062   .cntmsk = 0x1fe00000,
1063   .code = 0xa,
1064   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_llc_lines_in),
1065   .ngrp = 1,
1066   .umasks = wsm_unc_unc_llc_lines_in,
1067 },
1068 { .name   = "UNC_LLC_LINES_OUT",
1069   .desc   = "LLC lines victimized in M state",
1070   .modmsk = NHM_UNC_ATTRS,
1071   .cntmsk = 0x1fe00000,
1072   .code = 0xb,
1073   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_llc_lines_out),
1074   .ngrp = 1,
1075   .umasks = wsm_unc_unc_llc_lines_out,
1076 },
1077 { .name   = "UNC_LLC_MISS",
1078   .desc   = "Number of LLC read misses",
1079   .modmsk = NHM_UNC_ATTRS,
1080   .cntmsk = 0x1fe00000,
1081   .code = 0x9,
1082   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_llc_miss),
1083   .ngrp = 1,
1084   .umasks = wsm_unc_unc_llc_miss,
1085 },
1086 { .name   = "UNC_QHL_ADDRESS_CONFLICTS",
1087   .desc   = "QHL 2 way address conflicts",
1088   .modmsk = NHM_UNC_ATTRS,
1089   .cntmsk = 0x1fe00000,
1090   .code = 0x24,
1091   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qhl_address_conflicts),
1092   .ngrp = 1,
1093   .umasks = wsm_unc_unc_qhl_address_conflicts,
1094 },
1095 { .name   = "UNC_QHL_CONFLICT_CYCLES",
1096   .desc   = "QHL IOH Tracker conflict cycles",
1097   .modmsk = NHM_UNC_ATTRS,
1098   .cntmsk = 0x1fe00000,
1099   .code = 0x25,
1100   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qhl_conflict_cycles),
1101   .ngrp = 1,
1102   .umasks = wsm_unc_unc_qhl_conflict_cycles,
1103 },
1104 { .name   = "UNC_QHL_CYCLES_FULL",
1105   .desc   = "Cycles QHL  Remote Tracker is full",
1106   .modmsk = NHM_UNC_ATTRS,
1107   .cntmsk = 0x1fe00000,
1108   .code = 0x21,
1109   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qhl_cycles_full),
1110   .ngrp = 1,
1111   .umasks = wsm_unc_unc_qhl_cycles_full,
1112 },
1113 { .name   = "UNC_QHL_CYCLES_NOT_EMPTY",
1114   .desc   = "Cycles QHL Tracker is not empty",
1115   .modmsk =0x0,
1116   .cntmsk = 0x1fe00000,
1117   .code = 0x22,
1118   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qhl_cycles_not_empty),
1119   .ngrp = 1,
1120   .umasks = wsm_unc_unc_qhl_cycles_not_empty,
1121 },
1122 { .name   = "UNC_QHL_FRC_ACK_CNFLTS",
1123   .desc   = "QHL FrcAckCnflts sent to local home",
1124   .modmsk = NHM_UNC_ATTRS,
1125   .cntmsk = 0x1fe00000,
1126   .code = 0x33,
1127   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qhl_frc_ack_cnflts),
1128   .ngrp = 1,
1129   .umasks = wsm_unc_unc_qhl_frc_ack_cnflts,
1130 },
1131 { .name   = "UNC_QHL_SLEEPS",
1132   .desc   = "Number of occurrences a request was put to sleep",
1133   .modmsk = NHM_UNC_ATTRS,
1134   .cntmsk = 0x1fe00000,
1135   .code = 0x34,
1136   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qhl_sleeps),
1137   .ngrp = 1,
1138   .umasks = wsm_unc_unc_qhl_sleeps,
1139 },
1140 { .name   = "UNC_QHL_OCCUPANCY",
1141   .desc   = "Cycles QHL Tracker Allocate to Deallocate Read Occupancy",
1142   .modmsk = NHM_UNC_ATTRS,
1143   .cntmsk = 0x1fe00000,
1144   .code = 0x23,
1145   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qhl_occupancy),
1146   .ngrp = 1,
1147   .umasks = wsm_unc_unc_qhl_occupancy,
1148 },
1149 { .name   = "UNC_QHL_REQUESTS",
1150   .desc   = "Quickpath Home Logic local read requests",
1151   .modmsk = NHM_UNC_ATTRS,
1152   .cntmsk = 0x1fe00000,
1153   .code = 0x20,
1154   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qhl_requests),
1155   .ngrp = 1,
1156   .umasks = wsm_unc_unc_qhl_requests,
1157 },
1158 { .name   = "UNC_QHL_TO_QMC_BYPASS",
1159   .desc   = "Number of requests to QMC that bypass QHL",
1160   .modmsk = NHM_UNC_ATTRS,
1161   .cntmsk = 0x1fe00000,
1162   .code = 0x26,
1163 },
1164 { .name   = "UNC_QMC_BUSY",
1165   .desc   = "Cycles QMC busy with a read request",
1166   .modmsk = NHM_UNC_ATTRS,
1167   .cntmsk = 0x1fe00000,
1168   .code = 0x29,
1169   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_busy),
1170   .ngrp = 1,
1171   .umasks = wsm_unc_unc_qmc_busy,
1172 },
1173 { .name   = "UNC_QMC_CANCEL",
1174   .desc   = "QMC cancels",
1175   .modmsk = NHM_UNC_ATTRS,
1176   .cntmsk = 0x1fe00000,
1177   .code = 0x30,
1178   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_cancel),
1179   .ngrp = 1,
1180   .umasks = wsm_unc_unc_qmc_cancel,
1181 },
1182 { .name   = "UNC_QMC_CRITICAL_PRIORITY_READS",
1183   .desc   = "QMC critical priority read requests",
1184   .modmsk = NHM_UNC_ATTRS,
1185   .cntmsk = 0x1fe00000,
1186   .code = 0x2e,
1187   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_critical_priority_reads),
1188   .ngrp = 1,
1189   .umasks = wsm_unc_unc_qmc_critical_priority_reads,
1190 },
1191 { .name   = "UNC_QMC_HIGH_PRIORITY_READS",
1192   .desc   = "QMC high priority read requests",
1193   .modmsk = NHM_UNC_ATTRS,
1194   .cntmsk = 0x1fe00000,
1195   .code = 0x2d,
1196   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_high_priority_reads),
1197   .ngrp = 1,
1198   .umasks = wsm_unc_unc_qmc_high_priority_reads,
1199 },
1200 { .name   = "UNC_QMC_ISOC_FULL",
1201   .desc   = "Cycles DRAM full with isochronous (ISOC) read requests",
1202   .modmsk = NHM_UNC_ATTRS,
1203   .cntmsk = 0x1fe00000,
1204   .code = 0x28,
1205   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_isoc_full),
1206   .ngrp = 1,
1207   .umasks = wsm_unc_unc_qmc_isoc_full,
1208 },
1209 { .name   = "UNC_IMC_ISOC_OCCUPANCY",
1210   .desc   = "IMC isochronous (ISOC) Read Occupancy",
1211   .modmsk = NHM_UNC_ATTRS,
1212   .cntmsk = 0x1fe00000,
1213   .code = 0x2b,
1214   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_imc_isoc_occupancy),
1215   .ngrp = 1,
1216   .umasks = wsm_unc_unc_imc_isoc_occupancy,
1217 },
1218 { .name   = "UNC_QMC_NORMAL_READS",
1219   .desc   = "QMC normal read requests",
1220   .modmsk = NHM_UNC_ATTRS,
1221   .cntmsk = 0x1fe00000,
1222   .code = 0x2c,
1223   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_normal_reads),
1224   .ngrp = 1,
1225   .umasks = wsm_unc_unc_qmc_normal_reads,
1226 },
1227 { .name   = "UNC_QMC_OCCUPANCY",
1228   .desc   = "QMC Occupancy",
1229   .modmsk = NHM_UNC_ATTRS,
1230   .cntmsk = 0x1fe00000,
1231   .code = 0x2a,
1232   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_occupancy),
1233   .ngrp = 1,
1234   .umasks = wsm_unc_unc_qmc_occupancy,
1235 },
1236 { .name   = "UNC_QMC_PRIORITY_UPDATES",
1237   .desc   = "QMC priority updates",
1238   .modmsk = NHM_UNC_ATTRS,
1239   .cntmsk = 0x1fe00000,
1240   .code = 0x31,
1241   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_priority_updates),
1242   .ngrp = 1,
1243   .umasks = wsm_unc_unc_qmc_priority_updates,
1244 },
1245 { .name   = "UNC_IMC_RETRY",
1246   .desc   = "Number of IMC DRAM channel retries (retries occur in RAS mode only)",
1247   .modmsk = NHM_UNC_ATTRS,
1248   .cntmsk = 0x1fe00000,
1249   .code = 0x32,
1250   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_imc_retry),
1251   .ngrp = 1,
1252   .umasks = wsm_unc_unc_imc_retry,
1253 },
1254 { .name   = "UNC_QMC_WRITES",
1255   .desc   = "QMC cache line writes",
1256   .modmsk = NHM_UNC_ATTRS,
1257   .cntmsk = 0x1fe00000,
1258   .code = 0x2f,
1259   .flags= INTEL_X86_GRP_EXCL,
1260   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qmc_writes),
1261   .ngrp = 2,
1262   .umasks = wsm_unc_unc_qmc_writes,
1263 },
1264 { .name   = "UNC_QPI_RX_NO_PPT_CREDIT",
1265   .desc   = "Link 0 snoop stalls due to no PPT entry",
1266   .modmsk = NHM_UNC_ATTRS,
1267   .cntmsk = 0x1fe00000,
1268   .code = 0x43,
1269   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qpi_rx_no_ppt_credit),
1270   .ngrp = 1,
1271   .umasks = wsm_unc_unc_qpi_rx_no_ppt_credit,
1272 },
1273 { .name   = "UNC_QPI_TX_HEADER",
1274   .desc   = "Cycles link 0 outbound header busy",
1275   .modmsk = NHM_UNC_ATTRS,
1276   .cntmsk = 0x1fe00000,
1277   .code = 0x42,
1278   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qpi_tx_header),
1279   .ngrp = 1,
1280   .umasks = wsm_unc_unc_qpi_tx_header,
1281 },
1282 { .name   = "UNC_QPI_TX_STALLED_MULTI_FLIT",
1283   .desc   = "Cycles QPI outbound stalls",
1284   .modmsk = NHM_UNC_ATTRS,
1285   .cntmsk = 0x1fe00000,
1286   .code = 0x41,
1287   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qpi_tx_stalled_multi_flit),
1288   .ngrp = 1,
1289   .umasks = wsm_unc_unc_qpi_tx_stalled_multi_flit,
1290 },
1291 { .name   = "UNC_QPI_TX_STALLED_SINGLE_FLIT",
1292   .desc   = "Cycles QPI outbound link stalls",
1293   .modmsk = NHM_UNC_ATTRS,
1294   .cntmsk = 0x1fe00000,
1295   .code = 0x40,
1296   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_qpi_tx_stalled_single_flit),
1297   .ngrp = 1,
1298   .umasks = wsm_unc_unc_qpi_tx_stalled_single_flit,
1299 },
1300 { .name   = "UNC_SNP_RESP_TO_LOCAL_HOME",
1301   .desc   = "Local home snoop response",
1302   .modmsk = NHM_UNC_ATTRS,
1303   .cntmsk = 0x1fe00000,
1304   .code = 0x6,
1305   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_snp_resp_to_local_home),
1306   .ngrp = 1,
1307   .umasks = wsm_unc_unc_snp_resp_to_local_home,
1308 },
1309 { .name   = "UNC_SNP_RESP_TO_REMOTE_HOME",
1310   .desc   = "Remote home snoop response",
1311   .modmsk = NHM_UNC_ATTRS,
1312   .cntmsk = 0x1fe00000,
1313   .code = 0x7,
1314   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_snp_resp_to_remote_home),
1315   .ngrp = 1,
1316   .umasks = wsm_unc_unc_snp_resp_to_remote_home,
1317 },
1318 { .name   = "UNC_THERMAL_THROTTLING_TEMP",
1319   .desc   = "Uncore cycles that the PCU records core temperature above threshold",
1320   .modmsk = NHM_UNC_ATTRS,
1321   .cntmsk = 0x1fe00000,
1322   .code = 0x80,
1323   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_thermal_throttling_temp),
1324   .ngrp = 1,
1325   .umasks = wsm_unc_unc_thermal_throttling_temp,
1326 },
1327 { .name   = "UNC_THERMAL_THROTTLED_TEMP",
1328   .desc   = "Uncore cycles that the PCU records that core is in power throttled state due to temperature being above threshold",
1329   .modmsk = NHM_UNC_ATTRS,
1330   .cntmsk = 0x1fe00000,
1331   .code = 0x81,
1332   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_thermal_throttling_temp),
1333   .ngrp = 1,
1334   .umasks = wsm_unc_unc_thermal_throttling_temp, /* identical to actual umasks list for this event */
1335 },
1336 { .name   = "UNC_PROCHOT_ASSERTION",
1337   .desc   = "Number of system assertions of PROCHOT indicating the entire processor has exceeded the thermal limit",
1338   .modmsk = NHM_UNC_ATTRS,
1339   .cntmsk = 0x1fe00000,
1340   .code = 0x82,
1341 },
1342 { .name   = "UNC_THERMAL_THROTTLING_PROCHOT",
1343   .desc   = "Uncore cycles that the PCU records that core is in power throttled state due PROCHOT assertions",
1344   .modmsk = NHM_UNC_ATTRS,
1345   .cntmsk = 0x1fe00000,
1346   .code = 0x83,
1347   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_thermal_throttling_temp),
1348   .ngrp = 1,
1349   .umasks = wsm_unc_unc_thermal_throttling_temp, /* identical to actual umasks list for this event */
1350 },
1351 { .name   = "UNC_TURBO_MODE",
1352   .desc   = "Uncore cycles that a core is operating in turbo mode",
1353   .modmsk = NHM_UNC_ATTRS,
1354   .cntmsk = 0x1fe00000,
1355   .code = 0x84,
1356   .numasks = LIBPFM_ARRAY_SIZE(wsm_unc_unc_thermal_throttling_temp),
1357   .ngrp = 1,
1358   .umasks = wsm_unc_unc_thermal_throttling_temp, /* identical to actual umasks list for this event */
1359 },
1360 { .name   = "UNC_CYCLES_UNHALTED_L3_FLL_ENABLE",
1361   .desc   = "Uncore cycles where at least one core is unhalted and all L3 ways are enabled",
1362   .modmsk = NHM_UNC_ATTRS,
1363   .cntmsk = 0x1fe00000,
1364   .code = 0x85,
1365 },
1366 { .name   = "UNC_CYCLES_UNHALTED_L3_FLL_DISABLE",
1367   .desc   = "Uncore cycles where at least one core is unhalted and all L3 ways are disabled",
1368   .modmsk = NHM_UNC_ATTRS,
1369   .cntmsk = 0x1fe00000,
1370   .code = 0x86,
1371 },
1372 };