Intel Processor Microcode Package for Linux | |
CPU microcode is a mechanism to correct certain errata in existing systems. | |
The normal preferred method to apply microcode updates is using the system | |
BIOS, but for a subset of Intel's processors this can be done at runtime | |
using the operating system. This package contains those processors that | |
support OS loading of microcode updates. | |
The target user for this package are OS vendors such as Linux distributions | |
for inclusion in their OS releases. Intel recommends getting the microcode | |
using the OS vendor update mechanism. Expert users can of course update their | |
microcode directly outside the OS vendor mechanism. This method is complex and | |
thus could be error prone. | |
Microcode is best loaded from the BIOS. Certain microcode must only be applied | |
from the BIOS. Such processor microcode updates are never packaged in this | |
package since they are not appropriate for OS distribution. An OEM may receive | |
microcode packages that might be a superset of what is contained in this | |
package. | |
OS vendors may choose to also update microcode that kernel can consume for early | |
loading. For e.g. Linux can update processor microcode very early in the kernel | |
boot sequence. In situations when the BIOS update isn't available, early loading | |
is the next best alternative to updating processor microcode. Microcode states | |
are reset on a power reset, hence its required to be updated everytime during | |
boot process. | |
Loading microcode using the initrd method is recommended so that the microcode | |
is loaded at the earliest time for best coverage. Systems that cannot tolerate | |
downtime may use the late reload method to update a running system without a | |
reboot. | |
== About Processor Signature, Family, Model, Stepping and Platform ID == | |
Processor signature is a number identifying the model and version of a | |
Intel processor. It can be obtained using the CPUID instruction, and can | |
also be obtained via the command lscpu or from the content of /proc/cpuinfo. | |
It's usually presented as 3 fields: Family, Model and Stepping | |
(In the table of updates below, they are shorten as F, MO and S). | |
The width of Family/Model/Stepping is 12/8/4bit, but when arranged in the | |
32bit processor signature raw data is like 0FFM0FMS, hexadecimal. | |
e.g. if a processor signature is 0x000906eb, it means | |
Family=0x006, Model=0x9e and Stepping=0xb | |
A processor product can be implemented for multiple types of platforms, | |
So in MSR(17H), Intel processors have a 3bit Platform ID field, | |
that can specify a platform type from at most 8 types. | |
A microcode file for a specified processor model can support multiple | |
platforms, so the Platform ID of a microcode (shorten as PI in the table) | |
is a 8bit mask, each set bit indicates a platform type that it supports. | |
One can find the platform ID on Linux using rdmsr from msr-tools. | |
== Microcode update instructions == | |
-- intel-ucode/ -- | |
intel-ucode directory contains binary microcode files named in | |
family-model-stepping pattern. The file is supported in most modern Linux | |
distributions. It's generally located in the /lib/firmware directory, | |
and can be updated through the microcode reload interface. | |
To update early loading initrd, consult your distribution on how to package | |
microcode files for early loading. Some distros use update-initramfs or dracut. | |
As recommended above, please use the OS vendors are recommended method to ensure | |
microcode file is updated for early loading before attempting the late-load | |
procedure below. | |
To update the intel-ucode package to the system, one need: | |
1. Ensure the existence of /sys/devices/system/cpu/microcode/reload | |
2. Copy intel-ucode directory to /lib/firmware, overwrite the files in | |
/lib/firmware/intel-ucode/ | |
3. Write the reload interface to 1 to reload the microcode files, e.g. | |
echo 1 > /sys/devices/system/cpu/microcode/reload | |
If you are using the OS vendor method to update microcode, the above steps may | |
have been done automatically during the update process. | |
-- intel-ucode-with-caveats/ -- | |
This directory holds microcode that might need special handling. | |
BDX-ML microcode is provided in directory, because it need special commits in | |
the Linux kernel, otherwise, updating it might result in unexpected system | |
behavior. | |
OS vendors must ensure that the late loader patches (provided in | |
linux-kernel-patches\) are included in the distribution before packaging the | |
BDX-ML microcode for late-loading. | |
== 20190514 Release == | |
-- Updates upon 20190312 release -- | |
Processor Identifier Version Products | |
Model Stepping F-MO-S/PI Old->New | |
---- new platforms ---------------------------------------- | |
VLV C0 6-37-8/02 00000838 Atom Z series | |
VLV C0 6-37-8/0C 00000838 Celeron N2xxx, Pentium N35xx | |
VLV D0 6-37-9/0F 0000090c Atom E38xx | |
CHV C0 6-4c-3/01 00000368 Atom X series | |
CHV D0 6-4c-4/01 00000411 Atom X series | |
CLX-SP B1 6-55-7/bf 05000021 Xeon Scalable Gen2 | |
---- updated platforms ------------------------------------ | |
SNB D2/G1/Q0 6-2a-7/12 0000002e->0000002f Core Gen2 | |
IVB E1/L1 6-3a-9/12 00000020->00000021 Core Gen3 | |
HSW C0 6-3c-3/32 00000025->00000027 Core Gen4 | |
BDW-U/Y E0/F0 6-3d-4/c0 0000002b->0000002d Core Gen5 | |
IVB-E/EP C1/M1/S1 6-3e-4/ed 0000042e->0000042f Core Gen3 X Series; Xeon E5 v2 | |
IVB-EX D1 6-3e-7/ed 00000714->00000715 Xeon E7 v2 | |
HSX-E/EP Cx/M1 6-3f-2/6f 00000041->00000043 Core Gen4 X series; Xeon E5 v3 | |
HSX-EX E0 6-3f-4/80 00000013->00000014 Xeon E7 v3 | |
HSW-U C0/D0 6-45-1/72 00000024->00000025 Core Gen4 | |
HSW-H C0 6-46-1/32 0000001a->0000001b Core Gen4 | |
BDW-H/E3 E0/G0 6-47-1/22 0000001e->00000020 Core Gen5 | |
SKL-U/Y D0/K1 6-4e-3/c0 000000c6->000000cc Core Gen6 | |
BDX-ML B0/M0/R0 6-4f-1/ef 0b00002e->00000036 Xeon E5/E7 v4; Core i7-69xx/68xx | |
SKX-SP H0/M0/U0 6-55-4/b7 0200005a->0000005e Xeon Scalable | |
SKX-D M1 6-55-4/b7 0200005a->0000005e Xeon D-21xx | |
BDX-DE V1 6-56-2/10 00000019->0000001a Xeon D-1520/40 | |
BDX-DE V2/3 6-56-3/10 07000016->07000017 Xeon D-1518/19/21/27/28/31/33/37/41/48, Pentium D1507/08/09/17/19 | |
BDX-DE Y0 6-56-4/10 0f000014->0f000015 Xeon D-1557/59/67/71/77/81/87 | |
BDX-NS A0 6-56-5/10 0e00000c->0e00000d Xeon D-1513N/23/33/43/53 | |
APL D0 6-5c-9/03 00000036->00000038 Pentium N/J4xxx, Celeron N/J3xxx, Atom x5/7-E39xx | |
SKL-H/S R0/N0 6-5e-3/36 000000c6->000000cc Core Gen6; Xeon E3 v5 | |
DNV B0 6-5f-1/01 00000024->0000002e Atom C Series | |
GLK B0 6-7a-1/01 0000002c->0000002e Pentium Silver N/J5xxx, Celeron N/J4xxx | |
AML-Y22 H0 6-8e-9/10 0000009e->000000b4 Core Gen8 Mobile | |
KBL-U/Y H0 6-8e-9/c0 0000009a->000000b4 Core Gen7 Mobile | |
CFL-U43e D0 6-8e-a/c0 0000009e->000000b4 Core Gen8 Mobile | |
WHL-U W0 6-8e-b/d0 000000a4->000000b8 Core Gen8 Mobile | |
WHL-U V0 6-8e-d/94 000000b2->000000b8 Core Gen8 Mobile | |
KBL-G/H/S/E3 B0 6-9e-9/2a 0000009a->000000b4 Core Gen7; Xeon E3 v6 | |
CFL-H/S/E3 U0 6-9e-a/22 000000aa->000000b4 Core Gen8 Desktop, Mobile, Xeon E | |
CFL-S B0 6-9e-b/02 000000aa->000000b4 Core Gen8 | |
CFL-H/S P0 6-9e-c/22 000000a2->000000ae Core Gen9 | |
CFL-H R0 6-9e-d/22 000000b0->000000b8 Core Gen9 Mobile |