When booting a modern x86 platform, one task of the firmware is to update microcode to correct hardware bugs and mitigate security issues found after silicon has been shipped. The Pentium FDIV bug could have been fixed with a microcode update, had the Pentium used updateable microcode. Starting with the Pentium Pro, CPU microcode can be updated by software.
As per BIOS Writer's Guides, Intel defines a processor as the silicon and the accompanying microcode update, and considers any processor that does not have its microcode updated to be running out of specification. This suggests that microcode is a crucial ingredient for correct operation.
On multi-processor or Hyper-Threading-enabled systems, each thread has its own microcode. Therefore, microcode must be updated on every thread.
When a CPU core comes out of reset, it uses microcode from an internal ROM. This “default” microcode often contains bugs, so it needs to be updated as soon as possible. For example, Core 2 CPUs can boot without microcode updates, but have stability problems. On newer platforms, it is nearly impossible to boot without having updated the microcode. On some platforms, an updated microcode is required in order to enable Cache-As-RAM or to be able to successfully initialize the DRAM.
Plus, microcode needs to be loaded multiple times. Intel Document 504790 explains that this is because of so-called enhanced microcode updates, which are large updates with errata workarounds for both core and uncore. In order to correctly apply enhanced microcode updates, the MP-Init algorithm must be decomposed into multiple initialization phases.
Beginning with 4th generation Intel Core processors, it is possible for microcode to be updated before the CPU is taken out of reset. This is accomplished by means of FIT, a data structure which contains pointers to various firmware ingredients in the BIOS flash.
In rare cases, FIT microcode updates may not be successful. Therefore, it is important to check that the microcode is up-to-date and, if not, update it. This needs to be done as early as possible, like on older processor generations without FIT support.
Whether all threads on a processor get their microcode updated through FIT is not clear. According to Intel Documents 493770 and 535094, FIT microcode updates are applied to all cores within the package. However, Intel Document 550049 states that FIT microcode updates are applied to all threads within the package.
Prior to SMM relocation, microcode must have been updated at least once.
The BWG briefly describes microcode updates as part of the MP-Init.
As part of the MP-Init sequence, two microcode updates are required.
The Linux kernel developer's recommendations are:
The requirements specified in BWGs differ between platforms:
Refer to Intel Document 504790 for details.
Refer to Intel Document 493770 and 535094 for details.
Refer to Intel Document 546625 for details.
Refer to Intel Document 550049 for details.