| Early load microcode | |
| ==================== | |
| By Fenghua Yu <fenghua.yu@intel.com> | |
| Kernel can update microcode in early phase of boot time. Loading microcode early | |
| can fix CPU issues before they are observed during kernel boot time. | |
| Microcode is stored in an initrd file. The microcode is read from the initrd | |
| file and loaded to CPUs during boot time. | |
| The format of the combined initrd image is microcode in cpio format followed by | |
| the initrd image (maybe compressed). Kernel parses the combined initrd image | |
| during boot time. The microcode file in cpio name space is: | |
| on Intel: kernel/x86/microcode/GenuineIntel.bin | |
| on AMD : kernel/x86/microcode/AuthenticAMD.bin | |
| During BSP boot (before SMP starts), if the kernel finds the microcode file in | |
| the initrd file, it parses the microcode and saves matching microcode in memory. | |
| If matching microcode is found, it will be uploaded in BSP and later on in all | |
| APs. | |
| The cached microcode patch is applied when CPUs resume from a sleep state. | |
| There are two legacy user space interfaces to load microcode, either through | |
| /dev/cpu/microcode or through /sys/devices/system/cpu/microcode/reload file | |
| in sysfs. | |
| In addition to these two legacy methods, the early loading method described | |
| here is the third method with which microcode can be uploaded to a system's | |
| CPUs. | |
| The following example script shows how to generate a new combined initrd file in | |
| /boot/initrd-3.5.0.ucode.img with original microcode microcode.bin and | |
| original initrd image /boot/initrd-3.5.0.img. | |
| mkdir initrd | |
| cd initrd | |
| mkdir -p kernel/x86/microcode | |
| cp ../microcode.bin kernel/x86/microcode/GenuineIntel.bin (or AuthenticAMD.bin) | |
| find . | cpio -o -H newc >../ucode.cpio | |
| cd .. | |
| cat ucode.cpio /boot/initrd-3.5.0.img >/boot/initrd-3.5.0.ucode.img |