vmm: Move the vmcall overrides to the VM struct
[akaros.git] / user / perfmon / events / intel_snbep_unc_imc_events.h
1 /*
2  * Copyright (c) 2012 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  * PMU: snbep_unc_imc (Intel SandyBridge-EP IMC uncore PMU)
26  */
27
28 static const intel_x86_umask_t snbep_unc_m_cas_count[]={
29   { .uname = "ALL",
30     .udesc  = "Counts total number of DRAM CAS commands issued on this channel",
31     .ucode  = 0xf00,
32     .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
33   },
34   { .uname = "RD",
35     .udesc  = "Counts all DRAM reads on this channel, incl. underfills",
36     .ucode  = 0x300,
37     .uflags = INTEL_X86_NCOMBO,
38   },
39   { .uname = "RD_REG",
40     .udesc  = "Counts number of DRAM read CAS commands issued on this channel, incl. regular read CAS and those with implicit precharge",
41     .ucode  = 0x100,
42     .uflags = INTEL_X86_NCOMBO,
43   },
44   { .uname = "RD_UNDERFILL",
45     .udesc  = "Counts number of underfill reads issued by the memory controller",
46     .ucode  = 0x200,
47     .uflags = INTEL_X86_NCOMBO,
48   },
49   { .uname = "WR",
50     .udesc  = "Counts number of DRAM write CAS commands on this channel",
51     .ucode  = 0xc00,
52     .uflags = INTEL_X86_NCOMBO,
53   },
54   { .uname = "WR_RMM",
55     .udesc  = "Counts Number of opportunistic DRAM write CAS commands issued on this channel",
56     .ucode  = 0x800,
57     .uflags = INTEL_X86_NCOMBO,
58   },
59   { .uname = "WR_WMM",
60     .udesc  = "Counts number of DRAM write CAS commands issued on this channel while in Write-Major mode",
61     .ucode  = 0x400,
62     .uflags = INTEL_X86_NCOMBO,
63   },
64 };
65
66 static const intel_x86_umask_t snbep_unc_m_dram_refresh[]={
67   { .uname = "HIGH",
68     .udesc  = "TBD",
69     .ucode  = 0x400,
70     .uflags = INTEL_X86_NCOMBO,
71   },
72   { .uname = "PANIC",
73     .udesc  = "TBD",
74     .ucode  = 0x200,
75     .uflags = INTEL_X86_NCOMBO,
76   },
77 };
78
79 static const intel_x86_umask_t snbep_unc_m_major_modes[]={
80   { .uname = "ISOCH",
81     .udesc  = "Counts cycles in ISOCH Major mode",
82     .ucode  = 0x800,
83     .uflags = INTEL_X86_NCOMBO,
84   },
85   { .uname = "PARTIAL",
86     .udesc  = "Counts cycles in Partial Major mode",
87     .ucode  = 0x400,
88     .uflags = INTEL_X86_NCOMBO,
89   },
90   { .uname = "READ",
91     .udesc  = "Counts cycles in Read Major mode",
92     .ucode  = 0x100,
93     .uflags = INTEL_X86_NCOMBO,
94   },
95   { .uname = "WRITE",
96     .udesc  = "Counts cycles in Write Major mode",
97     .ucode  = 0x200,
98     .uflags = INTEL_X86_NCOMBO,
99   },
100 };
101
102 static const intel_x86_umask_t snbep_unc_m_power_cke_cycles[]={
103   { .uname = "RANK0",
104     .udesc  = "Count cycles for rank 0",
105     .ucode  = 0x100,
106     .uflags = INTEL_X86_NCOMBO,
107   },
108   { .uname = "RANK1",
109     .udesc  = "Count cycles for rank 1",
110     .ucode  = 0x200,
111     .uflags = INTEL_X86_NCOMBO,
112   },
113   { .uname = "RANK2",
114     .udesc  = "Count cycles for rank 2",
115     .ucode  = 0x400,
116     .uflags = INTEL_X86_NCOMBO,
117   },
118   { .uname = "RANK3",
119     .udesc  = "Count cycles for rank 3",
120     .ucode  = 0x800,
121     .uflags = INTEL_X86_NCOMBO,
122   },
123   { .uname = "RANK4",
124     .udesc  = "Count cycles for rank 4",
125     .ucode  = 0x1000,
126     .uflags = INTEL_X86_NCOMBO,
127   },
128   { .uname = "RANK5",
129     .udesc  = "Count cycles for rank 5",
130     .ucode  = 0x2000,
131     .uflags = INTEL_X86_NCOMBO,
132   },
133   { .uname = "RANK6",
134     .udesc  = "Count cycles for rank 6",
135     .ucode  = 0x4000,
136     .uflags = INTEL_X86_NCOMBO,
137   },
138   { .uname = "RANK7",
139     .udesc  = "Count cycles for rank 7",
140     .ucode  = 0x8000,
141     .uflags = INTEL_X86_NCOMBO,
142   },
143 };
144
145 static const intel_x86_umask_t snbep_unc_m_preemption[]={
146   { .uname = "RD_PREEMPT_RD",
147     .udesc  = "Counts read over read preemptions",
148     .ucode  = 0x100,
149     .uflags = INTEL_X86_NCOMBO,
150   },
151   { .uname = "RD_PREEMPT_WR",
152     .udesc  = "Counts read over write preemptions",
153     .ucode  = 0x200,
154     .uflags = INTEL_X86_NCOMBO,
155   },
156 };
157
158 static const intel_x86_umask_t snbep_unc_m_pre_count[]={
159   { .uname = "PAGE_CLOSE",
160     .udesc  = "Counts number of DRAM precharge commands sent on this channel as a result of the page close counter expiring",
161     .ucode  = 0x200,
162     .uflags = INTEL_X86_NCOMBO,
163   },
164   { .uname = "PAGE_MISS",
165     .udesc  = "Counts number of DRAM precharge commands sent on this channel as a result of page misses",
166     .ucode  = 0x100,
167     .uflags = INTEL_X86_NCOMBO,
168   },
169 };
170
171 static const intel_x86_entry_t intel_snbep_unc_m_pe[]={
172   { .name   = "UNC_M_CLOCKTICKS",
173     .desc   = "IMC Uncore clockticks",
174     .modmsk = 0x0,
175     .cntmsk = 0x100000000ull,
176     .code = 0xff, /* perf pseudo encoding for fixed counter */
177     .flags = INTEL_X86_FIXED,
178   },
179   { .name = "UNC_M_ACT_COUNT",
180     .desc = "DRAM Activate Count",
181     .code = 0x1,
182     .cntmsk = 0xf,
183     .modmsk = SNBEP_UNC_IMC_ATTRS,
184   },
185   { .name = "UNC_M_CAS_COUNT",
186     .desc = "DRAM RD_CAS and WR_CAS Commands.",
187     .code = 0x4,
188     .cntmsk = 0xf,
189     .ngrp = 1,
190     .modmsk = SNBEP_UNC_IMC_ATTRS,
191     .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_m_cas_count),
192     .umasks  = snbep_unc_m_cas_count
193   },
194   { .name = "UNC_M_DRAM_PRE_ALL",
195     .desc = "DRAM Precharge All Commands",
196     .code = 0x6,
197     .cntmsk = 0xf,
198     .modmsk = SNBEP_UNC_IMC_ATTRS,
199   },
200   { .name = "UNC_M_DRAM_REFRESH",
201     .desc = "Number of DRAM Refreshes Issued",
202     .code = 0x5,
203     .cntmsk = 0xf,
204     .ngrp = 1,
205     .modmsk = SNBEP_UNC_IMC_ATTRS,
206     .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_m_dram_refresh),
207     .umasks  = snbep_unc_m_dram_refresh
208   },
209   { .name = "UNC_M_ECC_CORRECTABLE_ERRORS",
210     .desc = "ECC Correctable Errors",
211     .code = 0x9,
212     .cntmsk = 0xf,
213     .modmsk = SNBEP_UNC_IMC_ATTRS,
214   },
215   { .name = "UNC_M_MAJOR_MODES",
216     .desc = "Cycles in a Major Mode",
217     .code = 0x7,
218     .cntmsk = 0xf,
219     .ngrp = 1,
220     .modmsk = SNBEP_UNC_IMC_ATTRS,
221     .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_m_major_modes),
222     .umasks  = snbep_unc_m_major_modes
223   },
224   { .name = "UNC_M_POWER_CHANNEL_DLLOFF",
225     .desc = "Channel DLLOFF Cycles",
226     .code = 0x84,
227     .cntmsk = 0xf,
228     .modmsk = SNBEP_UNC_IMC_ATTRS,
229   },
230   { .name = "UNC_M_POWER_CHANNEL_PPD",
231     .desc = "Channel PPD Cycles",
232     .code = 0x85,
233     .cntmsk = 0xf,
234     .modmsk = SNBEP_UNC_IMC_ATTRS,
235   },
236   { .name = "UNC_M_POWER_CKE_CYCLES",
237     .desc = "CKE_ON_CYCLES by Rank",
238     .code = 0x83,
239     .cntmsk = 0xf,
240     .ngrp = 1,
241     .modmsk = SNBEP_UNC_IMC_ATTRS,
242     .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_m_power_cke_cycles),
243     .umasks  = snbep_unc_m_power_cke_cycles
244   },
245   { .name = "UNC_M_POWER_CRITICAL_THROTTLE_CYCLES",
246     .desc = "Critical Throttle Cycles",
247     .code = 0x86,
248     .cntmsk = 0xf,
249     .modmsk = SNBEP_UNC_IMC_ATTRS,
250   },
251   { .name = "UNC_M_POWER_SELF_REFRESH",
252     .desc = "Clock-Enabled Self-Refresh",
253     .code = 0x43,
254     .cntmsk = 0xf,
255     .modmsk = SNBEP_UNC_IMC_ATTRS,
256   },
257   { .name = "UNC_M_POWER_THROTTLE_CYCLES",
258     .desc = "Throttle Cycles for Rank 0",
259     .code = 0x41,
260     .cntmsk = 0xf,
261     .ngrp = 1,
262     .modmsk = SNBEP_UNC_IMC_ATTRS,
263     .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_m_power_cke_cycles),
264     .umasks  = snbep_unc_m_power_cke_cycles /* identical to snbep_unc_m_power_cke_cycles */
265   },
266   { .name = "UNC_M_PREEMPTION",
267     .desc = "Read Preemption Count",
268     .code = 0x8,
269     .cntmsk = 0xf,
270     .ngrp = 1,
271     .modmsk = SNBEP_UNC_IMC_ATTRS,
272     .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_m_preemption),
273     .umasks  = snbep_unc_m_preemption
274   },
275   { .name = "UNC_M_PRE_COUNT",
276     .desc = "DRAM Precharge commands.",
277     .code = 0x2,
278     .cntmsk = 0xf,
279     .ngrp = 1,
280     .modmsk = SNBEP_UNC_IMC_ATTRS,
281     .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_m_pre_count),
282     .umasks  = snbep_unc_m_pre_count
283   },
284   { .name = "UNC_M_RPQ_CYCLES_FULL",
285     .desc = "Read Pending Queue Full Cycles",
286     .code = 0x12,
287     .cntmsk = 0xf,
288     .modmsk = SNBEP_UNC_IMC_ATTRS,
289   },
290   { .name = "UNC_M_RPQ_CYCLES_NE",
291     .desc = "Read Pending Queue Not Empty",
292     .code = 0x11,
293     .cntmsk = 0xf,
294     .modmsk = SNBEP_UNC_IMC_ATTRS,
295   },
296   { .name = "UNC_M_RPQ_INSERTS",
297     .desc = "Read Pending Queue Allocations",
298     .code = 0x10,
299     .cntmsk = 0xf,
300     .modmsk = SNBEP_UNC_IMC_ATTRS,
301   },
302   { .name = "UNC_M_RPQ_OCCUPANCY",
303     .desc = "Read Pending Queue Occupancy",
304     .code = 0x80,
305     .cntmsk = 0xf,
306     .modmsk = SNBEP_UNC_IMC_ATTRS,
307   },
308   { .name = "UNC_M_WPQ_CYCLES_FULL",
309     .desc = "Write Pending Queue Full Cycles",
310     .code = 0x22,
311     .cntmsk = 0xf,
312     .modmsk = SNBEP_UNC_IMC_ATTRS,
313   },
314   { .name = "UNC_M_WPQ_CYCLES_NE",
315     .desc = "Write Pending Queue Not Empty",
316     .code = 0x21,
317     .cntmsk = 0xf,
318     .modmsk = SNBEP_UNC_IMC_ATTRS,
319   },
320   { .name = "UNC_M_WPQ_INSERTS",
321     .desc = "Write Pending Queue Allocations",
322     .code = 0x20,
323     .cntmsk = 0xf,
324     .modmsk = SNBEP_UNC_IMC_ATTRS,
325   },
326   { .name = "UNC_M_WPQ_OCCUPANCY",
327     .desc = "Write Pending Queue Occupancy",
328     .code = 0x81,
329     .cntmsk = 0xf,
330     .modmsk = SNBEP_UNC_IMC_ATTRS,
331   },
332   { .name = "UNC_M_WPQ_READ_HIT",
333     .desc = "Write Pending Queue CAM Match",
334     .code = 0x23,
335     .cntmsk = 0xf,
336     .modmsk = SNBEP_UNC_IMC_ATTRS,
337   },
338   { .name = "UNC_M_WPQ_WRITE_HIT",
339     .desc = "Write Pending Queue CAM Match",
340     .code = 0x24,
341     .cntmsk = 0xf,
342     .modmsk = SNBEP_UNC_IMC_ATTRS,
343   },
344 };