| 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: | 
 | kernel/x86/microcode/GenuineIntel.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 kernel | 
 | mkdir kernel/x86 | 
 | mkdir kernel/x86/microcode | 
 | cp ../microcode.bin kernel/x86/microcode/GenuineIntel.bin | 
 | find .|cpio -oc >../ucode.cpio | 
 | cd .. | 
 | cat ucode.cpio /boot/initrd-3.5.0.img >/boot/initrd-3.5.0.ucode.img |