blob: 3cb28c6fdbbbe6d7dda5923628da1bf2eab5a2df [file] [log] [blame]
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001/*
2 * This file is part of msrtool.
3 *
Anton Kochkovdd678a22012-07-04 07:39:07 +04004 * Copyright (C) 2013 Anton Kochkov <anton.kochkov@gmail.com>
Anton Kochkov7c634ae2011-06-20 23:14:22 +04005 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
Anton Kochkov7c634ae2011-06-20 23:14:22 +040014 */
15
16#include "msrtool.h"
17
Anton Kochkov59b36f12012-07-21 07:29:48 +040018int intel_core2_later_probe(const struct targetdef *target, const struct cpuid_t *id) {
Anton Kochkov7c634ae2011-06-20 23:14:22 +040019 return ((0x6 == id->family)&(0x17 == id->model));
20}
21
22const struct msrdef intel_core2_later_msrs[] = {
Anton Kochkovdd678a22012-07-04 07:39:07 +040023 {0x17, MSRTYPE_RDWR, MSR2(0,0), "IA32_PLATFORM_ID Register",
24 "Model Specific Platform ID", {
25 /* The OS can use this MSR to determine "slot" information for the
26 * processor and the proper microcode update to load. */
Anton Kochkov7c634ae2011-06-20 23:14:22 +040027 { 63, 11, RESERVED },
Anton Kochkovdd678a22012-07-04 07:39:07 +040028 { 52, 3, "Platform ID", "R/O", PRESENT_BIN, {
29 { MSR1(0), "Processor Flag 0" },
30 { MSR1(1), "Processor Flag 1" },
31 { MSR1(2), "Processor Flag 2" },
32 { MSR1(3), "Processor Flag 3" },
33 { MSR1(4), "Processor Flag 4" },
34 { MSR1(5), "Processor Flag 5" },
35 { MSR1(6), "Processor Flag 6" },
36 { MSR1(7), "Processor Flag 7" },
37 { BITVAL_EOT }
38 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +040039 { 49, 37, RESERVED },
Anton Kochkovdd678a22012-07-04 07:39:07 +040040 { 12, 5, "Maximum Qualified Ratio:", "The maximum allowed bus ratio",
41 PRESENT_DEC, {
Anton Kochkov7c634ae2011-06-20 23:14:22 +040042 { BITVAL_EOT }
43 }},
44 { 7, 8, RESERVED },
45 { BITS_EOT }
46 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +040047 { 0x2a, MSRTYPE_RDWR, MSR2(0,0), "MSR_EBL_CR_POWERON Register",
48 "Processor Hard Power-On Configuration", {
Anton Kochkov7c634ae2011-06-20 23:14:22 +040049 { 63, 41, RESERVED },
50 { 26, 5, "Integer Bus Frequency Ratio:", "R/O", PRESENT_DEC, {
51 { BITVAL_EOT }
52 }},
53 { 21, 2, "Symmetric Arbitration ID:", "R/O", PRESENT_BIN, {
54 { BITVAL_EOT }
55 }},
56 { 19, 1, RESERVED },
57 { 18, 1, "N/2:", "Non-integer bus ratio", PRESENT_DEC, {
58 { MSR1(0), "Integer ratio" },
59 { MSR1(1), "Non-integer ratio" },
60 { BITVAL_EOT }
61 }},
62 { 17, 2, "APIC Cluster ID:", "R/O", PRESENT_HEX, {
63 { BITVAL_EOT }
64 }},
65 { 15, 1, RESERVED },
66 { 14, 1, "1 Mbyte Power on Reset Vector", "R/O", PRESENT_DEC, {
67 { MSR1(0), "4 GBytes Power on Reset Vector" },
68 { MSR1(1), "1 Mbyte Power on Reset Vector" },
69 { BITVAL_EOT }
70 }},
71 { 13, 1, RESERVED },
72 { 12, 1, "BINIT# Observation", "R/O", PRESENT_DEC, {
73 { MSR1(0), "BINIT# Observation disabled" },
74 { MSR1(1), "BINIT# Observation enabled" },
75 { BITVAL_EOT }
76 }},
77 { 11, 1, "TXT", "Intel TXT Capable Chipset", PRESENT_DEC, {
78 { MSR1(0), "Intel TXT Capable Chipset not present" },
79 { MSR1(1), "Intel TXT Capable Chipset present" },
80 { BITVAL_EOT }
81 }},
82 { 10, 1, "MCERR# Observation:", "R/O", PRESENT_DEC, {
83 { MSR1(0), "MCERR# Observation disabled" },
84 { MSR1(1), "MCERR# Observation enabled" },
85 { BITVAL_EOT }
86 }},
87 { 9, 1, "Execute BIST", "R/O", PRESENT_DEC, {
88 { MSR1(0), "Execute BIST disabled" },
89 { MSR1(1), "Execute BIST enabled" },
90 { BITVAL_EOT }
91 }},
92 { 8, 1, "Output Tri-state", "R/O", PRESENT_DEC, {
93 { MSR1(0), "Output Tri-state disabled" },
94 { MSR1(1), "Output Tri-state enabled" },
95 { BITVAL_EOT }
96 }},
97 { 7, 1, "BINIT# Driver Enable", "R/W", PRESENT_DEC, {
98 { MSR1(0), "BINIT# Driver disabled" },
99 { MSR1(1), "BINIT# Driver enabled" },
100 { BITVAL_EOT }
101 }},
102 { 6, 2, RESERVED },
103 { 4, 1, "Address parity enable", "R/W", PRESENT_DEC, {
104 { MSR1(0), "Address parity disabled" },
105 { MSR1(1), "Address parity enabled" },
106 { BITVAL_EOT }
107 }},
108 { 3, 1, "MCERR# Driver Enable", "R/W", PRESENT_DEC, {
109 { MSR1(0), "MCERR# Driver disabled" },
110 { MSR1(1), "MCERR# Driver enabled" },
111 { BITVAL_EOT }
112 }},
113 { 2, 1, "Response error checking enable", "R/W", PRESENT_DEC, {
114 { MSR1(0), "Response Error Checking disabled" },
115 { MSR1(1), "Response Error Checking enabled" },
116 { BITVAL_EOT }
117 }},
118 { 1, 1, "Data error checking enable", "R/W", PRESENT_DEC, {
119 { MSR1(0), "Data error checking disabled" },
120 { MSR1(1), "Data error checking enabled" },
121 { BITVAL_EOT }
122 }},
123 { 0, 1, RESERVED },
124 { BITS_EOT }
125 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400126 {0xcd, MSRTYPE_RDONLY, MSR2(0,0), "MSR_FSB_FREQ", "Scaleable Bus Speed", {
127 /* This field indicates the intended scaleable bus clock speed */
128 { 63, 61, RESERVED },
129 { 2, 3, "Speed", "R/O", PRESENT_BIN, {
130 { MSR1(0), "267 MHz (FSB 1067)" },
131 { MSR1(1), "133 MHz (FSB 533)" },
132 { MSR1(2), "200 MHz (FSB 800)" },
133 { MSR1(3), "167 MHz (FSB 667)" },
134 { MSR1(4), "333 MHz (FSB 1333)" },
135 { MSR1(5), "100 MHz (FSB 400)" },
136 { MSR1(6), "400 MHz (FSB 1600)" },
137 { BITVAL_EOT }
138 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400139 { BITS_EOT }
140 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400141 {0x11e, MSRTYPE_RDWR, MSR2(0,0), "MSR_BBL_CR_CTL3", "", {
142 { 63, 40, RESERVED },
143 { 23, 1, "L2 Present", "R/O", PRESENT_BIN, {
144 { MSR1(0), "L2 Present" },
145 { MSR1(1), "L2 Not Present" },
146 { BITVAL_EOT }
147 }},
148 { 22, 14, RESERVED },
149 { 8, 1, "L2 Enabled", "R/W", PRESENT_BIN, {
150 /* Until this bit is set the processor will not respond
151 * to the WBINVD instruction or the assertion
152 * of the FLUSH# input. */
153 { MSR1(0), "L2 is disabled" },
154 { MSR1(1), "L2 cache has been initialized" },
155 { BITVAL_EOT }
156 }},
157 { 7, 7, RESERVED},
158 { 0, 1, "L2 Hardware Enabled", "R/O", PRESENT_BIN, {
159 { MSR1(0), "L2 is hardware-disabled" },
160 { MSR1(1), "L2 is hardware-enabled" },
161 { BITVAL_EOT }
162 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400163 { BITS_EOT }
164 }},
165 {0x198, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_STATUS", "", {
166 { BITS_EOT }
167 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400168
169 // Per core msrs
170
Anton Kochkovdd678a22012-07-04 07:39:07 +0400171 {0x0, MSRTYPE_RDWR, MSR2(0,0), "IA32_P5_MC_ADDR", "Pentium Processor\
172 Machine-Check Exception Address", {
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400173 { BITS_EOT }
174 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400175 {0x1, MSRTYPE_RDWR, MSR2(0,0), "IA32_P5_MC_TYPE", "Pentium Processor\
176 Machine-Check Exception Type", {
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400177 { BITS_EOT }
178 }},
179 {0x6, MSRTYPE_RDWR, MSR2(0,0), "IA32_MONITOR_FILTER_SIZE", "", {
180 { BITS_EOT }
181 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400182 {0x10, MSRTYPE_RDWR, MSR2(0,0), "IA32_TIME_STEP_COUNTER", "TSC", {
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400183 { BITS_EOT }
184 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400185 {0x1b, MSRTYPE_RDWR, MSR2(0,0), "IA32_APIC_BASE", "APIC BASE", {
186 /* In Intel's manual there is MAXPHYWID,
187 * which determine index of highest bit of
188 * APIC Base itself, so marking it as
189 * 'RESERVED'.
190 */
191 { 63, 52, RESERVED },
192 { 11, 1, "APIC Global Enable", "R/W", PRESENT_BIN, {
193 { BITVAL_EOT }
194 }},
195 { 10, 1, RESERVED },
196 { 9, 1, RESERVED },
197 { 8, 1, "BSP Flag", "R/W", PRESENT_BIN, {
198 { BITVAL_EOT }
199 }},
200 { 7, 8, RESERVED },
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400201 { BITS_EOT }
202 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400203 {0x3a, MSRTYPE_RDWR, MSR2(0,0), "IA32_FEATURE_CONTROL",
204 "Control features in Intel 64Processor", {
205 { 63, 48, RESERVED },
206 /* if CPUID.01H: ECX[6] = 1 */
207 { 15, 1, "SENTER Global Enable", "R/WL", PRESENT_BIN, {
208 { MSR1(0), "SENTER leaf functions are disabled" },
209 { MSR1(1), "SENTER leaf functions are enabled" },
210 { BITVAL_EOT }
211 }},
212 /* if CPUID.01H: ECX[6] = 1 */
213 { 14, 7, "SENTER Local Function Enables", "R/WL", PRESENT_BIN, {
214 { BITVAL_EOT }
215 }},
216 { 7, 4, RESERVED },
217 { 3, 1, "SMRR Enable", "R/WL", PRESENT_BIN, {
218 { MSR1(0), "SMRR_PHYS_BASE and SMRR_PHYS_MASK are invisible in SMM" },
219 { MSR1(1), "SMRR_PHYS_BASE and SMRR_PHYS_MASK accessible from SMM" },
220 { BITVAL_EOT }
221 }},
222 /* if CPUID.01H: ECX[5 or 6] = 1 */
223 { 2, 1, "VMX outside of SMX operation", "R/WL", PRESENT_BIN, {
224 /* This bit enables VMX for system executive
225 * that do not require SMX.
226 */
227 { MSR1(0), "VMX outside of SMX operation disabled" },
228 { MSR1(1), "VMX outside of SMX operation enabled" },
229 { BITVAL_EOT }
230 }},
231 { 1, 1, "VMX inside of SMX operation", "R/WL", PRESENT_BIN, {
232 /* This bit enables a system executive to use
233 * VMX in conjuction with SMX to support Intel
234 * Trusted Execution Technology.
235 */
236 { MSR1(0), "VMX inside of SMX operation disabled" },
237 { MSR1(1), "VMX outside of SMX operation enabled" },
238 { BITVAL_EOT }
239 }},
240 /* if CPUID.01H: ECX[5 or 6] = 1 */
241 { 0, 1, "Lock bit", "R/WO", PRESENT_BIN, {
242 /* Once the Lock bit is set, the contents
243 * of this register cannot be modified.
244 * Therefore the lock bit must be set after
245 * configuring support for Intel Virtualization
246 * Technology and prior transferring control
247 * to an Option ROM or bootloader. Hence, once
248 * the lock bit is set, the entire IA32_FEATURE_CONTROL_MSR
249 * contents are preserved across RESET when
250 * PWRGOOD it not deasserted.
251 */
252 { MSR1(0), "IA32_FEATURE_CONTROL MSR can be modified" },
253 { MSR1(1), "IA32_FEATURE_CONTROL MSR cannot be modified" },
254 { BITVAL_EOT }
255 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400256 { BITS_EOT }
257 }},
258 {0x40, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_0_FROM_IP", "", {
259 { BITS_EOT }
260 }},
261 {0x41, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_1_FROM_IP", "", {
262 { BITS_EOT }
263 }},
264 {0x42, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_2_FROM_IP", "", {
265 { BITS_EOT }
266 }},
267 {0x43, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_3_FROM_IP", "", {
268 { BITS_EOT }
269 }},
270 {0x60, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_0_TO_LIP", "", {
271 { BITS_EOT }
272 }},
273 {0x61, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_1_TO_LIP", "", {
274 { BITS_EOT }
275 }},
276 {0x62, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_2_TO_LIP", "", {
277 { BITS_EOT }
278 }},
279 {0x63, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_3_TO_LIP", "", {
280 { BITS_EOT }
281 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400282 {0x79, MSRTYPE_RDWR, MSR2(0,0), "IA32_BIOS_UPDT_TRIG",
283 "BIOS Update Trigger Register (W)", {
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400284 { BITS_EOT }
285 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400286 {0x8b, MSRTYPE_RDWR, MSR2(0,0), "IA32_BIOS_SIGN_ID",
287 "BIOS Update Signature ID (RO)", {
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400288 { BITS_EOT }
289 }},
290 {0xa0, MSRTYPE_RDWR, MSR2(0,0), "MSR_SMRR_PHYS_BASE", "", {
291 { BITS_EOT }
292 }},
293 {0xa1, MSRTYPE_RDWR, MSR2(0,0), "MSR_SMRR_PHYS_MASK", "", {
294 { BITS_EOT }
295 }},
296 {0xc1, MSRTYPE_RDWR, MSR2(0,0), "IA32_PMC0", "", {
297 { BITS_EOT }
298 }},
299 {0xc2, MSRTYPE_RDWR, MSR2(0,0), "IA32_PMC1", "", {
300 { BITS_EOT }
301 }},
302 {0xe7, MSRTYPE_RDWR, MSR2(0,0), "IA32_MPERF", "", {
303 { BITS_EOT }
304 }},
305 {0xe8, MSRTYPE_RDWR, MSR2(0,0), "IA32_APERF", "", {
306 { BITS_EOT }
307 }},
308 {0xfe, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRRCAP", "", {
Anton Kochkovdd678a22012-07-04 07:39:07 +0400309 { 63, 52, RESERVED },
310 { 11, 1, "SMRR Capability Using MSR 0xa0 and 0xa1", "R/O", PRESENT_BIN, {
311 { BITVAL_EOT }
312 }},
313 { 10, 11, RESERVED },
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400314 { BITS_EOT }
315 }},
316 {0x174, MSRTYPE_RDWR, MSR2(0,0), "IA32_SYSENTER_CS", "", {
317 { BITS_EOT }
318 }},
319 {0x175, MSRTYPE_RDWR, MSR2(0,0), "IA32_SYSENTER_ESP", "", {
320 { BITS_EOT }
321 }},
322 {0x176, MSRTYPE_RDWR, MSR2(0,0), "IA32_SYSENTER_EIP", "", {
323 { BITS_EOT }
324 }},
325 {0x179, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCG_CAP", "", {
326 { BITS_EOT }
327 }},
328 {0x17a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCG_STATUS", "", {
Anton Kochkovdd678a22012-07-04 07:39:07 +0400329 { 63, 61, RESERVED },
330 { 2, 1, "MCIP", "R/W", PRESENT_BIN, {
331 /* When set, bit indicates that a machine check has been
332 * generated. If a second machine check is detected while
333 * this bit is still set, the processor enters a shutdown state.
334 * Software should write this bit to 0 after processing
335 * a machine check exception.
336 */
337 { MSR1(0), "Nothing" },
338 { MSR1(1), "Machine check has been generated" },
339 { BITVAL_EOT }
340 }},
341 { 1, 1, "EPIV", "R/W", PRESENT_BIN, {
342 /* When set, bit indicates that the instruction addressed
343 * by the instruction pointer pushed on the stack (when
344 * the machine check was generated) is directly associated
345 * with the error
346 */
347 { MSR1(0), "Nothing" },
348 { MSR1(1), "Instruction addressed directly associated with the error" },
349 { BITVAL_EOT }
350 }},
351 { 0, 1, "RIPV", "R/W", PRESENT_BIN, {
352 /* When set, bit indicates that the instruction addressed
353 * by the instruction pointer pushed on the stack (when
354 * the machine check was generated) can be used to restart
355 * the program. If cleared, the program cannot be reliably restarted
356 */
357 { MSR1(0), "Program cannot be reliably restarted" },
358 { MSR1(1), "Instruction addressed can be used to restart the program" },
359 { BITVAL_EOT }
360 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400361 { BITS_EOT }
362 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400363 /* if CPUID.0AH: EAX[15:8] > 0 */
364 {0x186, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERFEVTSEL0",
365 "Performance Event Select Register 0", {
366 { 63, 32, RESERVED },
367 { 31, 8, "CMASK", "R/W", PRESENT_HEX, {
368 /* When CMASK is not zero, the corresponding performance
369 * counter 0 increments each cycle if the event count
370 * is greater than or equal to the CMASK.
371 */
372 { BITVAL_EOT }
373 }},
374 { 23, 1, "INV", "R/W", PRESENT_BIN, {
375 { MSR1(0), "CMASK using as is" },
376 { MSR1(1), "CMASK inerting" },
377 { BITVAL_EOT }
378 }},
379 { 22, 1, "EN", "R/W", PRESENT_BIN, {
380 { MSR1(0), "No commence counting" },
381 { MSR1(1), "Commence counting" },
382 { BITVAL_EOT }
383 }},
384 { 21, 1, "AnyThread", "R/W", PRESENT_BIN, {
385 { BITVAL_EOT }
386 }},
387 { 20, 1, "INT", "R/W", PRESENT_BIN, {
388 { MSR1(0), "Interrupt on counter overflow is disabled" },
389 { MSR1(1), "Interrupt on counter overflow is enabled" },
390 { BITVAL_EOT }
391 }},
392 { 19, 1, "PC", "R/W", PRESENT_BIN, {
393 { MSR1(0), "Disabled pin control" },
394 { MSR1(1), "Enabled pin control" },
395 { BITVAL_EOT }
396 }},
397 { 18, 1, "Edge", "R/W", PRESENT_BIN, {
398 { MSR1(0), "Disabled edge detection" },
399 { MSR1(1), "Enabled edge detection" },
400 { BITVAL_EOT }
401 }},
402 { 17, 1, "OS", "R/W", PRESENT_BIN, {
403 { MSR1(0), "Nothing" },
404 { MSR1(1), "Counts while in privilege level is ring 0" },
405 { BITVAL_EOT }
406 }},
407 { 16, 1, "USR", "R/W", PRESENT_BIN, {
408 { MSR1(0), "Nothing" },
409 { MSR1(1), "Counts while in privilege level is not ring 0" },
410 { BITVAL_EOT }
411 }},
412 { 15, 8, "UMask", "R/W", PRESENT_HEX, {
413 /* Qualifies the microarchitectural condition
414 * to detect on the selected event logic. */
415 { BITVAL_EOT }
416 }},
417 { 7, 8, "Event Select", "R/W", PRESENT_HEX, {
418 /* Selects a performance event logic unit. */
419 { BITVAL_EOT }
420 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400421 { BITS_EOT }
422 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400423 /* if CPUID.0AH: EAX[15:8] > 0 */
424 {0x187, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERFEVTSEL1",
425 "Performance Event Select Register 1", {
426 { 63, 32, RESERVED },
427 { 31, 8, "CMASK", "R/W", PRESENT_HEX, {
428 /* When CMASK is not zero, the corresponding performance
429 * counter 1 increments each cycle if the event count
430 * is greater than or equal to the CMASK.
431 */
432 { BITVAL_EOT }
433 }},
434 { 23, 1, "INV", "R/W", PRESENT_BIN, {
435 { MSR1(0), "CMASK using as is" },
436 { MSR1(1), "CMASK inerting" },
437 { BITVAL_EOT }
438 }},
439 { 22, 1, "EN", "R/W", PRESENT_BIN, {
440 { MSR1(0), "No commence counting" },
441 { MSR1(1), "Commence counting" },
442 { BITVAL_EOT }
443 }},
444 { 21, 1, "AnyThread", "R/W", PRESENT_BIN, {
445 { BITVAL_EOT }
446 }},
447 { 20, 1, "INT", "R/W", PRESENT_BIN, {
448 { MSR1(0), "Interrupt on counter overflow is disabled" },
449 { MSR1(1), "Interrupt on counter overflow is enabled" },
450 { BITVAL_EOT }
451 }},
452 { 19, 1, "PC", "R/W", PRESENT_BIN, {
453 { MSR1(0), "Disabled pin control" },
454 { MSR1(1), "Enabled pin control" },
455 { BITVAL_EOT }
456 }},
457 { 18, 1, "Edge", "R/W", PRESENT_BIN, {
458 { MSR1(0), "Disabled edge detection" },
459 { MSR1(1), "Enabled edge detection" },
460 { BITVAL_EOT }
461 }},
462 { 17, 1, "OS", "R/W", PRESENT_BIN, {
463 { MSR1(0), "Nothing" },
464 { MSR1(1), "Counts while in privilege level is ring 0" },
465 { BITVAL_EOT }
466 }},
467 { 16, 1, "USR", "R/W", PRESENT_BIN, {
468 { MSR1(0), "Nothing" },
469 { MSR1(1), "Counts while in privilege level is not ring 0" },
470 { BITVAL_EOT }
471 }},
472 { 15, 8, "UMask", "R/W", PRESENT_HEX, {
473 /* Qualifies the microarchitectural condition
474 * to detect on the selected event logic. */
475 { BITVAL_EOT }
476 }},
477 { 7, 8, "Event Select", "R/W", PRESENT_HEX, {
478 /* Selects a performance event logic unit. */
479 { BITVAL_EOT }
480 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400481 { BITS_EOT }
482 }},
483 {0x198, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_STATUS", "", {
484 { BITS_EOT }
485 }},
486 {0x199, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_CTL", "", {
487 { BITS_EOT }
488 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400489 {0x19a, MSRTYPE_RDWR, MSR2(0,0), "IA32_CLOCK_MODULATION",
490 "Clock Modulation", {
491 { 63, 59, RESERVED },
492 { 4, 1, "On demand Clock Modulation", "R/W", PRESENT_BIN, {
493 { MSR1(0), "On demand Clock Modulation is disabled" },
494 { MSR1(1), "On demand Clock Modulation is enabled" },
495 { BITVAL_EOT }
496 }},
497 { 3, 3, "On demand Clock Modulation Duty Cycle", "R/W", PRESENT_HEX, {
498 { BITVAL_EOT }
499 }},
500 { 0, 1, RESERVED },
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400501 { BITS_EOT }
502 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400503 {0x19b, MSRTYPE_RDWR, MSR2(0,0), "IA32_THERM_INTERRUPT",
504 "Thermal Interrupt Control", {
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400505 { BITS_EOT }
506 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400507 {0x19c, MSRTYPE_RDWR, MSR2(0,0), "IA32_THERM_STATUS",
508 "Thermal Monitor Status", {
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400509 { BITS_EOT }
510 }},
511 {0x19d, MSRTYPE_RDWR, MSR2(0,0), "MSR_THERM2_CTL", "", {
512 { BITS_EOT }
513 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400514 {0x1a0, MSRTYPE_RDWR, MSR2(0,0), "IA32_MISC_ENABLE",
515 "Enable miscellaneous processor features", {
516 { 63, 24, RESERVED },
517 { 39, 1, "IP Prefetcher Disable", "R/W", PRESENT_BIN, {
518 { MSR1(0), "IP Prefetcher enabled" },
519 { MSR1(1), "IP Prefetcher disabled" },
520 { BITVAL_EOT }
521 }},
522 /* Note: [38] bit using for whole package,
523 * while some other bits can be Core or Thread
524 * specific.
525 */
526 { 38, 1, "IDA Disable", "R/W", PRESENT_BIN, {
527 /* When set to a 0 on processors that support IDA,
528 * CPUID.06H: EAX[1] reports the processor's
529 * support of turbo mode is enabled.
530 */
531 { MSR1(0), "IDA enabled" },
532 /* When set 1 on processors that support Intel Turbo Boost
533 * technology, the turbo mode feature is disabled and
534 * the IDA_Enable feature flag will be clear (CPUID.06H: EAX[1]=0).
535 */
536 { MSR1(1), "IDA disabled" },
537 { BITVAL_EOT }
538 /* Note: the power-on default value is used by BIOS to detect
539 * hardware support of turbo mode. If power-on default value is 1,
540 * turbo mode is available in the processor. If power-on default
541 * value is 0, turbo mode not available.
542 */
543 }},
544 { 37, 1, "DCU Prefetcher Disable", "R/W", PRESENT_BIN, {
545 { MSR1(0), "DCU L1 data cache prefetcher is enabled" },
546 { MSR1(1), "DCU L1 data cache prefetcher is disabled" },
547 { BITVAL_EOT }
548 }},
549 { 36, 2, RESERVED },
550 { 34, 1, "XD Bit Disable", "R/W", PRESENT_BIN, {
551 { BITVAL_EOT }
552 }},
553 { 33, 10, RESERVED },
554 { 23, 1, "xTPR Message Disable", "R/W", PRESENT_BIN, {
555 { BITVAL_EOT }
556 }},
557 { 22, 1, "Limit CPUID Maxval", "R/W", PRESENT_BIN, {
558 { BITVAL_EOT }
559 }},
560 { 21, 1, RESERVED },
561 { 20, 1, "Enhanced Intel SpeedStep Select Lock", "R/W",
562 PRESENT_BIN, {
563 { MSR1(0), "Enhanced Intel SpeedStep Select\
564 and Enable bits are writeable" },
565 { MSR1(1), "Enhanced Intel SpeedStep Select\
566 and Enable bits are locked and R/O" },
567 { BITVAL_EOT }
568 }},
569 { 19, 1, "Adjacent Cache Line Prefetch Disable", "R/W",
570 PRESENT_BIN, {
571 { MSR1(0), "Fetching cache lines that comprise a cache\
572 line pair (128 bytes)" },
573 { MSR1(1), "Fetching cache line that contains data\
574 currently required by the processor" },
575 { BITVAL_EOT }
576 }},
577 { 18, 1, "Enable Monitor FSM", "R/W", PRESENT_BIN, {
578 { BITVAL_EOT }
579 }},
580 { 17, 1, "UNDOCUMENTED", "R/W", PRESENT_BIN, {
581 { BITVAL_EOT }
582 }},
583 /* Note: [16] bit using for whole package,
584 * while some other bits can be Core or Thread
585 * specific.
586 */
587 { 16, 1, "Enhanced Intel SpeedStep Technology Enable", "R/W",
588 PRESENT_BIN, {
589 { BITVAL_EOT }
590 }},
591 { 15, 2, RESERVED },
592 { 13, 1, "TM2 Enable", "R/W", PRESENT_BIN, {
593 { BITVAL_EOT }
594 }},
595 { 12, 1, "Precise Event Based Sampling Unavailable", "R/O",
596 PRESENT_BIN, {
597 { BITVAL_EOT }
598 }},
599 { 11, 1, "Branch Trace Storage Unavailable", "R/O", PRESENT_BIN, {
600 { BITVAL_EOT }
601 }},
602 { 10, 1, "FERR# Multiplexing Enable", "R/W", PRESENT_BIN, {
603 { MSR1(0), "FERR# signaling compatible behaviour" },
604 { MSR1(1), "FERR# asserted by the processor to indicate\
605 a pending break event within the processor" },
606 { BITVAL_EOT }
607 }},
608 { 9, 1, "Hardware Prefetcher Disable", "R/W", PRESENT_BIN, {
609 { MSR1(0), "Hardware prefetcher is enabled" },
610 { MSR1(1), "Hardware prefetcher is disabled" },
611 { BITVAL_EOT }
612 }},
613 { 8, 1, RESERVED },
614 { 7, 1, "Performance Monitoring Available", "R", PRESENT_BIN, {
615 { BITVAL_EOT }
616 }},
617 { 6, 3, RESERVED },
618 { 3, 1, "Automatic Thermal Control Circuit Enable", "R/W"
619 , PRESENT_BIN, {
620 { BITVAL_EOT }
621 }},
622 { 2, 2, RESERVED },
623 { 0, 1, "Fast-Strings Enable", "R/W", PRESENT_BIN, {
624 { BITVAL_EOT }
625 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400626 { BITS_EOT }
627 }},
628 {0x1c9, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_TOS", "", {
629 { BITS_EOT }
630 }},
631 {0x1d9, MSRTYPE_RDWR, MSR2(0,0), "IA32_DEBUGCTL", "", {
632 { BITS_EOT }
633 }},
634 {0x1dd, MSRTYPE_RDWR, MSR2(0,0), "MSR_LER_FROM_LIP", "", {
635 { BITS_EOT }
636 }},
637 {0x1de, MSRTYPE_RDWR, MSR2(0,0), "MSR_LER_TO_LIP", "", {
638 { BITS_EOT }
639 }},
640 {0x200, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE0", "", {
641 { BITS_EOT }
642 }},
643 {0x201, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK0", "", {
644 { BITS_EOT }
645 }},
646 {0x202, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE1", "", {
647 { BITS_EOT }
648 }},
649 {0x203, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK1", "", {
650 { BITS_EOT }
651 }},
652 {0x204, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE2", "", {
653 { BITS_EOT }
654 }},
655 {0x205, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK2", "", {
656 { BITS_EOT }
657 }},
658 {0x206, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE3", "", {
659 { BITS_EOT }
660 }},
661 {0x207, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK3", "", {
662 { BITS_EOT }
663 }},
664 {0x208, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE4", "", {
665 { BITS_EOT }
666 }},
667 {0x209, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK4", "", {
668 { BITS_EOT }
669 }},
670 {0x20a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE5", "", {
671 { BITS_EOT }
672 }},
673 {0x20b, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK5", "", {
674 { BITS_EOT }
675 }},
676 {0x20c, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE6", "", {
677 { BITS_EOT }
678 }},
679 {0x20d, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK6", "", {
680 { BITS_EOT }
681 }},
682 {0x20e, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE7", "", {
683 { BITS_EOT }
684 }},
685 {0x20f, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK7", "", {
686 { BITS_EOT }
687 }},
688 {0x250, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX64K_00000", "", {
689 { BITS_EOT }
690 }},
691 {0x258, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX16K_80000", "", {
692 { BITS_EOT }
693 }},
694 {0x259, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX16K_A0000", "", {
695 { BITS_EOT }
696 }},
697 {0x268, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_C0000", "", {
698 { BITS_EOT }
699 }},
700 {0x269, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_C8000", "", {
701 { BITS_EOT }
702 }},
703 {0x26a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_D0000", "", {
704 { BITS_EOT }
705 }},
706 {0x26b, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_D8000", "", {
707 { BITS_EOT }
708 }},
709 {0x26c, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_E0000", "", {
710 { BITS_EOT }
711 }},
712 {0x26d, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_E8000", "", {
713 { BITS_EOT }
714 }},
715 {0x26e, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_F0000", "", {
716 { BITS_EOT }
717 }},
718 {0x26f, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_F8000", "", {
719 { BITS_EOT }
720 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400721 {0x277, MSRTYPE_RDWR, MSR2(0,0), "IA32_PAT", "IA32_PAT", {
722 { 63, 5, RESERVED },
723 { 58, 3, "PA7", "R/W", PRESENT_BIN, {
724 { BITVAL_EOT }
725 }},
726 { 55, 5, RESERVED },
727 { 40, 3, "PA6", "R/W", PRESENT_BIN, {
728 { BITVAL_EOT }
729 }},
730 { 47, 5, RESERVED },
731 { 42, 3, "PA5", "R/W", PRESENT_BIN, {
732 { BITVAL_EOT }
733 }},
734 { 39, 5, RESERVED },
735 { 34, 3, "PA4", "R/W", PRESENT_BIN, {
736 { BITVAL_EOT }
737 }},
738 { 31, 5, RESERVED },
739 { 26, 3, "PA3", "R/W", PRESENT_BIN, {
740 { BITVAL_EOT }
741 }},
742 { 23, 5, RESERVED },
743 { 18, 3, "PA2", "R/W", PRESENT_BIN, {
744 { BITVAL_EOT }
745 }},
746 { 15, 5, RESERVED },
747 { 10, 3, "PA1", "R/W", PRESENT_BIN, {
748 { BITVAL_EOT }
749 }},
750 { 7, 5, RESERVED },
751 { 2, 3, "PA0", "R/W", PRESENT_BIN, {
752 { BITVAL_EOT }
753 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400754 { BITS_EOT }
755 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400756 {0x2ff, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_DEF_TYPE",
757 "Default Memory Types", {
758 { 63, 52, RESERVED },
759 { 11, 1, "MTRR Enable", "R/W", PRESENT_BIN, {
760 { BITVAL_EOT }
761 }},
762 { 10, 1, "Fixed Range MTRR Enable", "R/W", PRESENT_BIN, {
763 { BITVAL_EOT }
764 }},
765 { 9, 7, RESERVED },
766 { 2, 3, "Default Memory Type", "R/W", PRESENT_HEX, {
767 { BITVAL_EOT }
768 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400769 { BITS_EOT }
770 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400771 /* if CPUID.0AH: EDX[4:0] > 0 */
772 {0x309, MSRTYPE_RDWR, MSR2(0,0), "IA32_FIXED_CTR0", "Fixed-Function \
773 Performance Counter Register 0: Counts Instr_Retired.Any", {
774 /* Also known as MSR_PERF_FIXED_CTR0 */
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400775 { BITS_EOT }
776 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400777 /* if CPUID.0AH: EDX[4:0] > 1 */
778 {0x30a, MSRTYPE_RDWR, MSR2(0,0), "IA32_FIXED_CTR1", "Fixed-Function \
779 Performance Counter Register 1: Counts CPU_CLK_Unhalted.Core ", {
780 /* Also known as MSR_PERF_FIXED_CTR1 */
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400781 { BITS_EOT }
782 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400783 /* if CPUID.0AH: EDX[4:0] > 2 */
784 {0x30b, MSRTYPE_RDWR, MSR2(0,0), "IA32_FIXED_CTR2", "Fixed-Function \
785 Performance Counter Register 2: Counts CPU_CLK_Unhalted.Ref", {
786 /* Also known as MSR_PERF_FIXED_CTR2 */
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400787 { BITS_EOT }
788 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400789 {0x345, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PERF_CAPABILITIES", "", {
790 /* Additional info available at Section 17.4.1 of
791 * Intel 64 and IA-32 Architecures Software Developer's
792 * Manual, Volume 3.
793 */
794 { 63, 56, RESERVED },
795 { 7, 1, "PEBSSaveArchRegs", "R/O", PRESENT_BIN, {
796 { BITVAL_EOT }
797 }},
798 { 6, 1, "PEBS Record Format", "R/O", PRESENT_BIN, {
799 { BITVAL_EOT }
800 }},
801 { 5, 6, "LBR Format", "R/O", PRESENT_HEX, {
802 { BITVAL_EOT }
803 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400804 { BITS_EOT }
805 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400806 /* if CPUID.0AH: EAX[7:0] > 1*/
807 {0x38d, MSRTYPE_RDWR, MSR2(0,0), "IA32_FIXED_CTR_CTRL",
808 "Fixed-Function-Counter Control Register", {
809 /* Also known as MSR_PERF_FIXED_CTR_CTRL.
810 * Counter increments while the results of ANDing respective enable bit
811 * in IA32_PERF_GLOBAL_CTRL with the corresponding OS or USR bits
812 * in this MSR is true. */
813 { 63, 52, RESERVED },
814 { 11, 1, "EN2_PMI", "R/W", PRESENT_BIN, {
815 { MSR1(0), "Nothing" },
816 { MSR1(1), "PMI when fixed counter 2 overflows is enabled" },
817 { BITVAL_EOT }
818 }},
819 /* if CPUID.0AH EAX[7:0] > 2 */
820 { 10, 1, "AnyThread 2", "R/W", PRESENT_BIN, {
821 { MSR1(0), "Counter only increments the associated event \
822 conditions occuring in the logical processor which programmed the MSR" },
823 { MSR1(1), "Counting the associated event conditions \
824 occuring across all logical processors sharing a processor core" },
825 { BITVAL_EOT }
826 }},
827 { 9, 1, "EN2_Usr", "R/W", PRESENT_BIN, {
828 { MSR1(0), "Nothing" },
829 { MSR1(1), "Fixed counter 2 is enabled to count while CPL > 0" },
830 { BITVAL_EOT }
831 }},
832 { 8, 1, "EN2_OS", "R/W", PRESENT_BIN, {
833 { MSR1(0), "Nothing" },
834 { MSR1(1), "Fixed counter 2 is enabled to count while CPL = 0" },
835 { BITVAL_EOT }
836 }},
837 { 7, 1, "EN1_PMI", "R/W", PRESENT_BIN, {
838 { MSR1(0), "Nothing" },
839 { MSR1(1), "PMI when fixed counter 1 overflows is enabled" },
840 { BITVAL_EOT }
841 }},
842 /* if CPUID.0AH: EAX[7:0] > 2 */
843 { 6, 1, "AnyThread 1", "R/W", PRESENT_BIN, {
844 { MSR1(0), "Counter only increments the associated event \
845 conditions occuring in the logical processor which programmed the MSR" },
846 { MSR1(1), "Counting the associated event conditions \
847 occuring across all logical processors sharing a processor core" },
848 { BITVAL_EOT }
849 }},
850 { 5, 1, "EN1_Usr", "R/W", PRESENT_BIN, {
851 { MSR1(0), "Nothing" },
852 { MSR1(1), "Fixed counter 1 is enabled to count while CPL > 0" },
853 { BITVAL_EOT }
854 }},
855 { 4, 1, "EN1_OS", "R/W", PRESENT_BIN, {
856 { MSR1(0), "Nothing" },
857 { MSR1(1), "Fixed counter 1 is enabled to count while CPL = 0" },
858 { BITVAL_EOT }
859 }},
860 { 3, 1, "EN0_PMI", "R/W", PRESENT_BIN, {
861 { MSR1(0), "Nothing" },
862 { MSR1(1), "PMI when fixed counter 0 overflows is enabled" },
863 { BITVAL_EOT }
864 }},
865 /* if CPUID.0AH: EAX[7:0] > 2 */
866 { 2, 1, "AnyThread 0", "R/W", PRESENT_BIN, {
867 { MSR1(0), "Counter only increments the associated event \
868 conditions occuring in the logical processor which programmed the MSR" },
869 { MSR1(1), "Counting the associated event conditions \
870 occuring across all logical processors sharing a processor core" },
871 { BITVAL_EOT }
872 }},
873 { 1, 1, "EN0_Usr", "R/W", PRESENT_BIN, {
874 { MSR1(0), "Nothing" },
875 { MSR1(1), "Fixed counter 0 is enabled to count while CPL > 0" },
876 { BITVAL_EOT }
877 }},
878 { 0, 1, "EN0_OS", "R/W", PRESENT_BIN, {
879 { MSR1(0), "Nothing" },
880 { MSR1(1), "Fixed counter 0 is enabled to count while CPL = 0" },
881 { BITVAL_EOT }
882 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400883 { BITS_EOT }
884 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400885 /* if CPUID.0AH: EAX[7:0] > 0 */
886 {0x38e, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PERF_GLOBAL_STATUS",
887 "Global Performance Counter Status", {
888 /* Also known as MSR_PERF_GLOBAL_STATUS */
889 /* if CPUID.0AH: EAX[7:0] > 0 */
890 { 63, 1, "CondChg: Status bits of this register has changed",
891 "R/O", PRESENT_BIN, {
892 { BITVAL_EOT }
893 }},
894 /* if CPUID.0AH: EAX[7:0] > 0 */
895 { 62, 1, "OvfBuf: DS SAVE area Buffer overflow status",
896 "R/O", PRESENT_BIN, {
897 { BITVAL_EOT }
898 }},
899 /* if CPUID.0AH: EAX[7:0] > 2 */
900 { 61, 1, "Ovf_Uncore: Uncore counter overflow status",
901 "R/O", PRESENT_BIN, {
902 { BITVAL_EOT }
903 }},
904 { 60, 26, RESERVED },
905 /* if CPUID.0AH: EAX[7:0] > 1 */
906 { 34, 1, "Ovf_FixedCtr2: Overflow status of IA32_FIXED_CTR2",
907 "R/O", PRESENT_BIN, {
908 { BITVAL_EOT }
909 }},
910 /* if CPUID.0AH: EAX[7:0] > 1 */
911 { 33, 1, "Ovf_FixedCtr1: Overflow status of IA32_FIXED_CTR1",
912 "R/O", PRESENT_BIN, {
913 { BITVAL_EOT }
914 }},
915 /* if CPUID.0AH: EAX[7:0] > 1 */
916 { 32, 1, "Ovf_FixedCtr0: Overflow status of IA32_FIXED_CTR0",
917 "R/O", PRESENT_BIN, {
918 { BITVAL_EOT }
919 }},
920 { 31, 28, RESERVED },
921 /* presented only in 06_2EH Nehalem model */
922 { 3, 1, "Ovf_PMC3: Overflow status of IA32_PMC3", "R/O", PRESENT_BIN, {
923 { BITVAL_EOT }
924 }},
925 /* presented only in 06_2EH Nehalem model */
926 { 2, 1, "Ovf_PMC2: Overflow status of IA32_PMC2", "R/O", PRESENT_BIN, {
927 { BITVAL_EOT }
928 }},
929 /* if CPUID.0AH: EAX[7:0] > 0 */
930 { 1, 1, "Ovf_PMC1: Overflow status of IA32_PMC1", "R/O", PRESENT_BIN, {
931 { BITVAL_EOT }
932 }},
933 /* if CPUID.0AH: EAX[7:0] > 0 */
934 { 0, 1, "Ovf_PMC0: Overflow status of IA32_PMC0", "R/O", PRESENT_BIN, {
935 { BITVAL_EOT }
936 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400937 { BITS_EOT }
938 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400939 /* if CPUID.0AH: EAX[7:0] > 0 */
940 {0x38f, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_GLOBAL_CTL",
941 "Global Performance Counter Control", {
942 /* Counter increments while the result of ANDing respective
943 * enable bit in this MSR with corresponding OS or USR bits
944 * in general-purpose or fixed counter control MSR is true.
945 */
946 { 63, 29, RESERVED },
947 /* if CPUID.0AH: EAX[7:0] > 1 */
948 { 34, 1, "EN_FIXED_CTR2", "R/W", PRESENT_BIN, {
949 { BITVAL_EOT }
950 }},
951 /* if CPUID.0AH: EAX[7:0] > 1 */
952 { 33, 1, "EN_FIXED_CTR1", "R/W", PRESENT_BIN, {
953 { BITVAL_EOT }
954 }},
955 /* if CPUID.0AH: EAX[7:0] > 1 */
956 { 32, 1, "EN_FIXED_CTR0", "R/W", PRESENT_BIN, {
957 { BITVAL_EOT }
958 }},
959 { 31, 30, RESERVED },
960 /* if CPUID.0AH: EAX[7:0] > 0 */
961 { 1, 1, "EN_PMC1", "R/W", PRESENT_BIN, {
962 { BITVAL_EOT }
963 }},
964 /* if CPUID.0AH: EAX[7:0] > 0 */
965 { 0, 1, "EN_PMC0", "R/W", PRESENT_BIN, {
966 { BITVAL_EOT }
967 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +0400968 { BITS_EOT }
969 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +0400970 /* if CPUID.0AH: EAX[7:0] > 0 */
971 {0x390, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_GLOBAL_OVF_CTL",
972 "Global Performance Counter Overflow Control", {
973 /* if CPUID.0AH: EAX[7:0] > 0 */
974 { 63, 1, "Clear CondChg bit", "R/W", PRESENT_BIN, {
975 { BITVAL_EOT }
976 }},
977 /* if CPUID.0AH: EAX[7:0] > 0 */
978 { 62, 1, "Clear OvfBuf bit", "R/W", PRESENT_BIN, {
979 { BITVAL_EOT }
980 }},
981 /* Presented only in 06_2EH Nehalem model */
982 { 61, 1, "Clear Ovf_Uncore bit", "R/W", PRESENT_BIN, {
983 { BITVAL_EOT }
984 }},
985 { 60, 26, RESERVED },
986 /* if CPUID.0AH: EAX[7:0] > 1 */
987 { 34, 1, "Clear Ovf_FIXED_CTR2 bit", "R/W", PRESENT_BIN, {
988 { BITVAL_EOT }
989 }},
990 /* if CPUID.0AH: EAX[7:0] > 1 */
991 { 33, 1, "Clear Ovf_FIXED_CTR1 bit", "R/W", PRESENT_BIN, {
992 { BITVAL_EOT }
993 }},
994 /* if CPUID.0AH: EAX[7:0] > 1 */
995 { 32, 1, "Clear Ovf_FIXED_CTR0 bit", "R/W", PRESENT_BIN, {
996 { BITVAL_EOT }
997 }},
998 { 31, 30, RESERVED },
999 /* if CPUID.0AH: EAX[7:0] > 0 */
1000 { 1, 1, "Clear Ovf_PMC1 bit", "R/W", PRESENT_BIN, {
1001 { BITVAL_EOT }
1002 }},
1003 /* if CPUID.0AH: EAX[7:0] > 0 */
1004 { 0, 1, "Clear Ovf_PMC0 bit", "R/W", PRESENT_BIN, {
1005 { BITVAL_EOT }
1006 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001007 { BITS_EOT }
1008 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001009 /* See Section 18.6.1.1 of Intel 64 and IA-32 Architectures
1010 * Software Developer's Manual, Volume 3,
1011 * "Precise Event Based Sampling (PEBS)".
1012 */
1013 {0x3f1, MSRTYPE_RDWR, MSR2(0,0), "IA32_PEBS_ENABLE", "PEBS Control", {
1014 { 63, 28, RESERVED },
1015 { 35, 1, "Load Latency on IA32_PMC3", "R/W", PRESENT_BIN, {
1016 { MSR1(0), "Disabled" },
1017 { MSR1(1), "Enabled" },
1018 { BITVAL_EOT }
1019 }},
1020 { 34, 1, "Load Latency on IA32_PMC2", "R/W", PRESENT_BIN, {
1021 { MSR1(0), "Disabled" },
1022 { MSR1(1), "Enabled" },
1023 { BITVAL_EOT }
1024 }},
1025 { 33, 1, "Load Latency on IA32_PMC1", "R/W", PRESENT_BIN, {
1026 { MSR1(0), "Disabled" },
1027 { MSR1(1), "Enabled" },
1028 { BITVAL_EOT }
1029 }},
1030 { 32, 1, "Load Latency on IA32_PMC0", "R/W", PRESENT_BIN, {
1031 { MSR1(0), "Disabled" },
1032 { MSR1(1), "Enabled" },
1033 { BITVAL_EOT }
1034 }},
1035 { 31, 28, RESERVED },
1036 { 3, 1, "PEBS on IA32_PMC3", "R/W", PRESENT_BIN, {
1037 { MSR1(0), "Disabled" },
1038 { MSR1(1), "Enabled" },
1039 { BITVAL_EOT }
1040 }},
1041 { 2, 1, "PEBS on IA32_PMC2", "R/W", PRESENT_BIN, {
1042 { MSR1(0), "Disabled" },
1043 { MSR1(1), "Enabled" },
1044 { BITVAL_EOT }
1045 }},
1046 { 1, 1, "PEBS on IA32_PMC1", "R/W", PRESENT_BIN, {
1047 { MSR1(0), "Disabled" },
1048 { MSR1(1), "Enabled" },
1049 { BITVAL_EOT }
1050 }},
1051 { 0, 1, "PEBS on IA32_PMC0", "R/W", PRESENT_BIN, {
1052 { MSR1(0), "Disabled" },
1053 { MSR1(1), "Enabled" },
1054 { BITVAL_EOT }
1055 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001056 { BITS_EOT }
1057 }},
1058 {0x400, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCO_CTL", "", {
1059 { BITS_EOT }
1060 }},
1061 {0x401, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCO_STATUS", "", {
1062 { BITS_EOT }
1063 }},
1064 {0x402, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCO_ADDR", "", {
1065 { BITS_EOT }
1066 }},
1067 {0x403, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC0_MISC", "", {
1068 { BITS_EOT }
1069 }},
1070 {0x404, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_CTL", "", {
1071 { BITS_EOT }
1072 }},
1073 {0x405, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_STATUS", "", {
1074 { BITS_EOT }
1075 }},
1076 {0x406, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_ADDR", "", {
1077 { BITS_EOT }
1078 }},
1079 {0x407, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_MISC", "", {
1080 { BITS_EOT }
1081 }},
1082 {0x408, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC2_CTL", "", {
1083 { BITS_EOT }
1084 }},
1085 {0x409, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC2_STATUS", "", {
1086 { BITS_EOT }
1087 }},
1088 {0x40a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC2_ADDR", "", {
1089 { BITS_EOT }
1090 }},
1091 {0x40b, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC2_MISC", "", {
1092 { BITS_EOT }
1093 }},
1094 {0x40c, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_CTL", "", {
1095 { BITS_EOT }
1096 }},
1097 {0x40d, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_STATUS", "", {
1098 { BITS_EOT }
1099 }},
1100 {0x40e, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_ADDR", "", {
1101 { BITS_EOT }
1102 }},
1103 {0x40f, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_MISC", "", {
1104 { BITS_EOT }
1105 }},
1106 {0x410, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_CTL", "", {
1107 { BITS_EOT }
1108 }},
1109 {0x411, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_STATUS", "", {
1110 { BITS_EOT }
1111 }},
1112 {0x412, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_ADDR", "", {
1113 { BITS_EOT }
1114 }},
1115 {0x413, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_MISC", "", {
1116 { BITS_EOT }
1117 }},
1118 {0x414, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_CTL", "", {
1119 { BITS_EOT }
1120 }},
1121 {0x415, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_STATUS", "", {
1122 { BITS_EOT }
1123 }},
1124 {0x416, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_ADDR", "", {
1125 { BITS_EOT }
1126 }},
1127 {0x417, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_MISC", "", {
1128 { BITS_EOT }
1129 }},
1130 {0x418, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC6_CTL", "", {
1131 { BITS_EOT }
1132 }},
1133 {0x419, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC6_STATUS", "", {
1134 { BITS_EOT }
1135 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001136 {0x480, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_BASIC",
1137 "Reporting Register of Basic VMX Capabilities", {
1138 /* Additional info available at
1139 * Appendix A.1, "Basic VMX Information" */
1140 { 63, 10, RESERVED },
1141 { 53, 4, "Memory type for VMREAD and VMWRITE", "R/O", PRESENT_HEX, {
1142 { BITVAL_EOT }
1143 }},
1144 { 49, 1, "Support of dual-treatment of system-management functions",
1145 "R/O", PRESENT_BIN, {
1146 { BITVAL_EOT }
1147 }},
1148 { 48, 1, "Enable full linear address access", "R/O", PRESENT_BIN, {
1149 { BITVAL_EOT }
1150 }},
1151 { 47, 3, RESERVED },
1152 { 44, 13, "VMXON region allocation size", "R/O", PRESENT_DEC, {
1153 { BITVAL_EOT }
1154 }},
1155 { 31, 32, "VMCS Revision Identifier", "R/O", PRESENT_HEX, {
1156 { BITVAL_EOT }
1157 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001158 { BITS_EOT }
1159 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001160 {0x481, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PINBASED_CTLS",
1161 "Capability Reporting Register of \
1162 Pin-based VM-execution Controls", {
1163 /* Additional info available at Appendix A.3,
1164 * "VM-Execution Controls" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001165 { BITS_EOT }
1166 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001167 {0x482, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PROCBASED_CTLS",
1168 "Capability Reporting Register of \
1169 Primary Processor-based VM-execution Controls", {
1170 /* Additional info available at Appendix A.3,
1171 * "VM-Execution Controls" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001172 { BITS_EOT }
1173 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001174 {0x483, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_EXIT_CTLS",
1175 "Capability Reporting Register of VM-exit Controls", {
1176 /* Additional info available at Appendix A.4,
1177 * "VM-Exit Controls" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001178 { BITS_EOT }
1179 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001180 {0x484, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_ENTRY_CTLS",
1181 "Capability Reporting Register of VM-entry Controls", {
1182 /* Additional info available at Appendix A.5,
1183 * "VM-Entry Controls" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001184 { BITS_EOT }
1185 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001186 {0x485, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_MISC",
1187 "Reporting Register of Miscellaneous VMX Capabilities", {
1188 /* Additional info available at Appendix A.6,
1189 * "Miscellaneous Data" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001190 { BITS_EOT }
1191 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001192 {0x486, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_CR0_FIXED0",
1193 "Capability Reporting Register of CR0 Bits Fixed to 0", {
1194 /* Additional info available at Appendix A.7,
1195 * "VMX-Fixed Bits in CR0" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001196 { BITS_EOT }
1197 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001198 {0x487, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_CR0_FIXED1",
1199 "Capability Reporting Register of CR0 Bits Fixed to 1", {
1200 /* Additional info available at Appendix A.7,
1201 * "VMX-Fixed Bits in CR0" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001202 { BITS_EOT }
1203 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001204 {0x488, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_CR4_FIXED0",
1205 "Capability Reporting Register of CR4 Bits Fixed to 0", {
1206 /* Additional info available at Appendix A.8,
1207 * "VMX-Fixed Bits in CR4" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001208 { BITS_EOT }
1209 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001210 {0x489, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_CR4_FIXED1",
1211 "Capability Reporting Register of CR4 Bits Fixed to 1", {
1212 /* Additional info available at Appendix A.8,
1213 * "VMX-Fixed Bits in CR4" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001214 { BITS_EOT }
1215 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001216 {0x48a, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_VMCS_ENUM",
1217 "Capability Reporting Register of VMCS Field Enumeration", {
1218 /* Additional info available at Appendix A.9,
1219 * "VMCS Enumeration" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001220 { BITS_EOT }
1221 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001222 {0x48b, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_PROCBASED_CTLS2",
1223 "Capability Reporting Register of Secondary \
1224 Processor-based VM-execution Controls", {
1225 /* Additional info available at Appendix A.3,
1226 * "VM-Execution Controls" */
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001227 { BITS_EOT }
1228 }},
Anton Kochkovdd678a22012-07-04 07:39:07 +04001229 {0x600, MSRTYPE_RDWR, MSR2(0,0), "IA32_DS_AREA", "DS Save Area", {
1230 /* Additional info available at Section 18.10.4 of Intel 64
1231 * and IA-32 Architectures Software Developer's Manual,
1232 * "Debug Store (DS) Mechanism".
1233 */
1234 { 63, 32, RESERVED }, // reserved if not in IA-32e mode
1235 { 31, 32, "Linear address of DS buffer management area",
1236 "R/W", PRESENT_HEX, {
1237 { BITVAL_EOT }
1238 }},
Anton Kochkov7c634ae2011-06-20 23:14:22 +04001239 { BITS_EOT }
1240 }},
1241 {0x107cc, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL0", "", {
1242 { BITS_EOT }
1243 }},
1244 {0x107cd, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL1", "", {
1245 { BITS_EOT }
1246 }},
1247 {0x107ce, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL2", "", {
1248 { BITS_EOT }
1249 }},
1250 {0x107cf, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL3", "", {
1251 { BITS_EOT }
1252 }},
1253 {0x107d0, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL4", "", {
1254 { BITS_EOT }
1255 }},
1256 {0x107d1, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL5", "", {
1257 { BITS_EOT }
1258 }},
1259 {0x107d2, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL6", "", {
1260 { BITS_EOT }
1261 }},
1262 {0x107d3, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL7", "", {
1263 { BITS_EOT }
1264 }},
1265 {0x107d8, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_GL_CTL", "", {
1266 { BITS_EOT }
1267 }},
1268 {0xc0000080, MSRTYPE_RDWR, MSR2(0,0), "IA32_EFER", "", {
1269 { BITS_EOT }
1270 }},
1271 {0xc0000081, MSRTYPE_RDWR, MSR2(0,0), "IA32_STAR", "", {
1272 { BITS_EOT }
1273 }},
1274 {0xc0000082, MSRTYPE_RDWR, MSR2(0,0), "IA32_LSTAR", "", {
1275 { BITS_EOT }
1276 }},
1277 {0xc0000084, MSRTYPE_RDWR, MSR2(0,0), "IA32_FMASK", "", {
1278 { BITS_EOT }
1279 }},
1280 {0xc0000100, MSRTYPE_RDWR, MSR2(0,0), "IA32_FS_BASE", "", {
1281 { BITS_EOT }
1282 }},
1283 {0xc0000101, MSRTYPE_RDWR, MSR2(0,0), "IA32_GS_BASE", "", {
1284 { BITS_EOT }
1285 }},
1286 {0xc0000102, MSRTYPE_RDWR, MSR2(0,0), "IA32_KERNEL_GS_BASE", "", {
1287 { BITS_EOT }
1288 }},
1289 { MSR_EOT }
1290};