Here we will get the firmware for the CPU loaded at boot. This helps the stability and efficiency of the processor.
Let's make sure we have the required options enabled in the kernel and rebuild if not.
General setup ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support Processor type and features ---> <*> CPU microcode loading support [*] Intel microcode loading support
If these were not enabled, enable them as above (not modules!) and recompile and install your kernel.
Next we'll install 2 packages required for this to work.
# emerge -av intel-microcode iucode_tool These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild R ] sys-firmware/intel-microcode-20161104::gentoo USE="split-ucode -initramfs -monolithic" 0 KiB [ebuild R ] sys-apps/iucode_tool-2.1.1::gentoo 0 KiB
Mount your /boot filesystem and execute the following to generate the cpio archive.
iucode_tool -S --write-earlyfw=/boot/early_ucode.cpio /lib/firmware/intel-ucode/*
You should see output like this with a different HEX value.
iucode_tool: system has processor(s) with signature 0x000206a7 iucode_tool: Writing selected microcodes to: /boot/early_ucode.cpio
Now we'll configure grub2 and install the new boot config.
Open the file /etc/grub.d/10_linux in your favourite editor and (at line ~204) make the following change.
From this:
initrd=
for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
"initrd-${version}" "initramfs-${version}.img" \
"initrd.img-${alt_version}" "initrd-${alt_version}.img" \
"initrd-${alt_version}" "initramfs-${alt_version}.img" \
"initramfs-genkernel-${version}" \
"initramfs-genkernel-${alt_version}" \
"initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
"initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
if test -e "${dirname}/${i}" ; then
initrd="$i"
break
fi
done
To:
initrd= for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \ "initrd-${version}" "initramfs-${version}.img" \ "initrd.img-${alt_version}" "initrd-${alt_version}.img" \ "initrd-${alt_version}" "initramfs-${alt_version}.img" \ "initramfs-genkernel-${version}" \ "initramfs-genkernel-${alt_version}" \ "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \ "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do if test -e "${dirname}/${i}" ; then initrd="early_ucode.cpio ${rel_dirname}/$i" break else initrd="early_ucode.cpio" fi done
Edit /etc/default/grub (at line ~59)
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to kernel GRUB_DISABLE_LINUX_UUID=true
And last off, install the new grub config:
grub-mkconfig -o /boot/grub/grub.cfg
And that is it!
If there is an update to sys-firmware/intel-microcode from this point that contains firmware for your CPU, just mount your boot FS and execute the iucode_tool command to generate a new cpio archive.