background image

11-22 Vol. 3A

MEMORY CACHE CONTROL

VCNT (variable range registers count) field, bits 0 through 7 — Indicates the number of variable ranges 
implemented on the processor.

FIX (fixed range registers supported) flag, bit 8 — Fixed range MTRRs (IA32_MTRR_FIX64K_00000 
through IA32_MTRR_FIX4K_0F8000) are supported when set; no fixed range registers are supported when 
clear.

WC (write combining) flag, bit 10 — The write-combining (WC) memory type is supported when set; the 
WC type is not supported when clear.

SMRR (System-Management Range Register) flag, bit 11 — The system-management range register 
(SMRR) interface is supported when bit 11 is set; the SMRR interface is not supported when clear.

Bit 9 and bits 12 through 63 in the IA32_MTRRCAP MSR are reserved. If software attempts to write to the 
IA32_MTRRCAP MSR, a general-protection exception (#GP) is generated. 
Software must read IA32_MTRRCAP VCNT field to determine the number of variable MTRRs and query other 
feature bits in IA32_MTRRCAP to determine additional capabilities that are supported in a processor. For example, 
some processors may report a value of ‘8’ in the VCNT field, other processors may report VCNT with different 
values. 

11.11.2 Setting 

Memory 

Ranges with MTRRs

The memory ranges and the types of memory specified in each range are set by three groups of registers: the 
IA32_MTRR_DEF_TYPE MSR, the fixed-range MTRRs, and the variable range MTRRs. These registers can be read 
and written to using the RDMSR and WRMSR instructions, respectively. The IA32_MTRRCAP MSR indicates the 
availability of these registers on the processor (see Section 11.11.1, “MTRR Feature Identification”).

11.11.2.1   IA32_MTRR_DEF_TYPE MSR

The IA32_MTRR_DEF_TYPE MSR (named MTRRdefType MSR for the P6 family processors) sets the default proper-
ties of the regions of physical memory that are not encompassed by MTRRs. The functions of the flags and field in 
this register are as follows:

Type field, bits 0 through 7 — Indicates the default memory type used for those physical memory address 
ranges that do not have a memory type specified for them by an MTRR (see Table 11-8 for the encoding of this 
field). The legal values for this field are 0, 1, 4, 5, and 6. All other values result in a general-protection 
exception (#GP) being generated. 
Intel recommends the use of the UC (uncached) memory type for all physical memory addresses where 
memory does not exist. To assign the UC type to nonexistent memory locations, it can either be specified as the 
default type in the Type field or be explicitly assigned with the fixed and variable MTRRs.

Figure 11-5.  IA32_MTRRCAP Register

VCNT — Number of variable range registers

FIX — Fixed range registers supported

WC — Write-combining memory type supported

63

0

Reserved

W

C

7

10

11

VCNT

F

I

X

8

9

Reserved

SMRR — SMRR interface supported