summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Farina (Zero_Chaos) <zerochaos@gentoo.org>2016-10-27 00:36:31 -0400
committerRick Farina (Zero_Chaos) <zerochaos@gentoo.org>2016-10-27 00:36:31 -0400
commitf1009fdc9d720bde0b2332179a44a0be51dcd9c6 (patch)
tree1681e84b8cabc92a3dc0451d0b7279b6a80439f7
parentFIRMWARE_INSTALL control option. (diff)
downloadgenkernel-f1009fdc9d720bde0b2332179a44a0be51dcd9c6.tar.gz
genkernel-f1009fdc9d720bde0b2332179a44a0be51dcd9c6.tar.bz2
genkernel-f1009fdc9d720bde0b2332179a44a0be51dcd9c6.zip
initial early-microcode support
automatically detect if it is possible to prepend cpu ucode to the initramfs, and then, you know, do it. Left a few blanks because it's super later and I'm tired of working on this. I can continue if no one beats me to it.
-rwxr-xr-xgen_funcs.sh2
-rwxr-xr-xgen_initramfs.sh34
2 files changed, 35 insertions, 1 deletions
diff --git a/gen_funcs.sh b/gen_funcs.sh
index 7e974de1..1bdaa7b0 100755
--- a/gen_funcs.sh
+++ b/gen_funcs.sh
@@ -262,7 +262,7 @@ then
for i in ${TMPDIR_CONTENTS}
do
print_info 1 " >> removing ${i}"
- rm ${TMPDIR}/${i}
+ rm -r ${TMPDIR}/${i}
done
fi
}
diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index ea4a7711..fb749292 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -1040,6 +1040,40 @@ create_initramfs() {
print_info 1 " >> Not compressing cpio data ..."
fi
fi
+ ## To early load microcode we need to follow some pretty specific steps
+ ## mostly laid out in linux/Documentation/x86/early-microcode.txt
+ #if CONFIG_MICROCODE=y; then
+ print_info 1 "early-microcode: >> Preparing..."
+ UCODEDIR="${TMPDIR}/ucode_tmp/kernel/x86/microcode/"
+ mkdir -p "${UCODEDIR}"
+ #if CONFIG_MICROCODE_INTEL=y; then
+ if [ "$(ls -A /lib/firmware/intel-ucode)" ]; then
+ print_info 1 " >> adding GenuineIntel.bin"
+ cat /lib/firmware/intel-ucode/* > "${UCODEDIR}/GenuineIntel.bin" || gen_die "Failed to concat intel cpu ucode"
+ #else
+ #print_info 1 "CONFIG_MICROCODE_INTEL=y set but no ucode available. Please install sys-firmware/intel-microcode[split-ucode]"
+ fi
+ #fi
+ #if CONFIG_MICROCODE_AMD=y; then
+ if [ "$(ls -A /lib/firmware/amd-ucode)" ]; then
+ print_info 1 " >> adding AuthenticAMD.bin"
+ cat /lib/firmware/amd-ucode/*.bin > "${UCODEDIR}/AuthenticAMD.bin" || gen_dir "Failed to concat amd cpu ucode"
+ #else
+ #print_info 1 "CONFIG_MICROCODE_AMD=y set but no ucode available. Please install sys-firmware/linux-firmware"
+ fi
+ #fi
+ if [ "$(ls -A ${UCODE})" ]; then
+ print_info 1 "early-microcode: >> Creating cpio..."
+ pushd "${TMPDIR}/ucode_tmp" > /dev/null
+ find . | cpio -o -H newc > ../ucode.cpio || gen_die "Failed to create cpu microcode cpio"
+ popd > /dev/null
+ print_info 1 "early-microcode: >> Prepending early-microcode to initramfs"
+ cat "${TMPDIR}/ucode.cpio" "${CPIO}" > "${CPIO}.early-microcode" || gen_die "Failed to prepend early-microcode to initramfs"
+ mv -f "${CPIO}.early-microcode" "${CPIO}" || gen_die "Rename failed"
+ #else
+ #print_info 1 "CONFIG_MICROCODE=y is set but no microcode found"
+ fi
+ #fi
if isTrue "${WRAP_INITRD}"
then
local mkimage_cmd=$(type -p mkimage)