blob: 3c5c3ba3d438253265735ac93edc59a01984e89c [file] [log] [blame]
.. SPDX-License-Identifier: GPL-2.0+:
.. index::
single: mtrr (command)
mtrr command
============
Synopsis
--------
mtrr [list]
mtrr set <reg> <type> <start> <size>
mtrr disable <reg>
mtrr enable
Description
-----------
The *mtrr* command is used to dump the Memory Type Range Registers (MTRRs) on
an x86 machine. These register control cache behaviour in selected memory
ranges.
Note that the number of registers can vary between CPUs.
mtrr [list]
~~~~~~~~~~~
List the MTRRs. The table shows the following information:
Reg
Register number (the first is register 0)
Valid
Shows Y if the register is valid (has bit 11 set), N if not
Write-type
Shows the behaviour when writing to the memory region. The types are
abbreviated to fit a reasonable line length. Valid types shown below.
====== ============== ====================================================
Value Type Meaning
====== ============== ====================================================
0 Uncacheable Skip cache and write directly to memory
1 Combine Multiple writes can be combined into one transaction
4 Through Update cache and also write to memory
5 Protect Writes are prohibited
6 Back Update cache but don't write to memory
====== ============== ====================================================
Base
Base memory address from which the register controls behaviour
Mask
Mask value, which also indicates the size
Size
Length of memory region within which the register controls behaviour
mtrr set
~~~~~~~~
This sets the value of a particular MTRR. Parameters are:
reg
Register number to set, with 0 being the first
type
Access type to set. See Write-type above for valid types. This uses the name
rather than its numeric value.
start
Base memory address from which the register should control behaviour
size
Length of memory region within which the register controls behaviour
mtrr disable
~~~~~~~~~~~~
This disables a particular register, by clearing its `valid` bit (11).
mtrr enable
~~~~~~~~~~~
This enables a particular register, by setting its `valid` bit (11).
Example
-------
This shows disabling and enabling an MTRR, as well as setting its type::
=> mtrr
CPU 0:
Reg Valid Write-type Base || Mask || Size ||
0 Y Back 0000000000000000 0000000f80000000 0000000080000000
1 Y Back 0000000080000000 0000000fe0000000 0000000020000000
2 Y Back 00000000a0000000 0000000ff0000000 0000000010000000
3 Y Uncacheable 00000000ad000000 0000000fff000000 0000000001000000
4 Y Uncacheable 00000000ae000000 0000000ffe000000 0000000002000000
5 Y Combine 00000000d0000000 0000000ff0000000 0000000010000000
6 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
7 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
8 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
9 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
=> mtrr d 5
=> mtrr
CPU 0:
Reg Valid Write-type Base || Mask || Size ||
0 Y Back 0000000000000000 0000000f80000000 0000000080000000
1 Y Back 0000000080000000 0000000fe0000000 0000000020000000
2 Y Back 00000000a0000000 0000000ff0000000 0000000010000000
3 Y Uncacheable 00000000ad000000 0000000fff000000 0000000001000000
4 Y Uncacheable 00000000ae000000 0000000ffe000000 0000000002000000
5 N Combine 00000000d0000000 0000000ff0000000 0000000010000000
6 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
7 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
8 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
9 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
=> mtrr e 5
=> mtrr
CPU 0:
Reg Valid Write-type Base || Mask || Size ||
0 Y Back 0000000000000000 0000000f80000000 0000000080000000
1 Y Back 0000000080000000 0000000fe0000000 0000000020000000
2 Y Back 00000000a0000000 0000000ff0000000 0000000010000000
3 Y Uncacheable 00000000ad000000 0000000fff000000 0000000001000000
4 Y Uncacheable 00000000ae000000 0000000ffe000000 0000000002000000
5 Y Combine 00000000d0000000 0000000ff0000000 0000000010000000
6 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
7 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
8 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
9 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
=> mtrr set 5 Uncacheable d0000000 10000000
=> mtrr
CPU 0:
Reg Valid Write-type Base || Mask || Size ||
0 Y Back 0000000000000000 0000000f80000000 0000000080000000
1 Y Back 0000000080000000 0000000fe0000000 0000000020000000
2 Y Back 00000000a0000000 0000000ff0000000 0000000010000000
3 Y Uncacheable 00000000ad000000 0000000fff000000 0000000001000000
4 Y Uncacheable 00000000ae000000 0000000ffe000000 0000000002000000
5 Y Uncacheable 00000000d0000000 0000000ff0000000 0000000010000000
6 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
7 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
8 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
9 N Uncacheable 0000000000000000 0000000000000000 0000001000000000
=>