commit: ced7a8141c6d311eee4928959fb42919ed34e6e6
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 18 00:25:08 2019 +0000
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Thu Jul 18 00:25:08 2019 +0000
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=ced7a814
Change --microcode-initramfs handling
- Always add microcode to initramfs when user has set
--microcode-initramfs option despite kernel support.
- Show warning when kernel will be unable to use microcode.
- Inform user that --microcode-initramfs is not the recommended
method to load microcode when bootloader supports multiple
initramfs and /boot/{amd,intel}-uc.img is available (currently
only true for --microcode=intel).
- --microcode-initramfs and --integrated-initramfs options are
mutually exclusive.
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>
gen_determineargs.sh | 13 +++++++++++++
gen_initramfs.sh | 53 +++++++++++++++++++++++++++++++++++++---------------
2 files changed, 51 insertions(+), 15 deletions(-)
diff --git a/gen_determineargs.sh b/gen_determineargs.sh
index 7bebea1..f345944 100755
--- a/gen_determineargs.sh
+++ b/gen_determineargs.sh
@@ -468,6 +468,19 @@ determine_real_args() {
*) gen_die "Invalid microcode '${MICROCODE}',
--microcode=<type> requires one of: no, all, intel, amd" ;;
esac
+ if isTrue "${BUILD_RAMDISK}" && isTrue "${MICROCODE_INITRAMFS}" && [[
-z "${MICROCODE}" ]]
+ then
+ print_warning 1 '--microcode=no implies
--no-microcode-initramfs; Will not add any microcode to initramfs ...'
+ print_warning 1 '' 1 0
+ MICROCODE_INITRAMFS=no
+ fi
+
+ if isTrue "${BUILD_RAMDISK}" && isTrue "${MICROCODE_INITRAMFS}" &&
isTrue "${INTEGRATED_INITRAMFS}"
+ then
+ # Force a user decision
+ gen_die "Cannot embed microcode in initramfs when
--integrated-initramfs is set. Either change option to
--no-integrated-initramfs or --no-microcode-initramfs!"
+ fi
+
if isTrue "${FIRMWARE}"
then
for ff in ${FIRMWARE_FILES}; do
diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index d5383f5..1479a5d 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -1728,16 +1728,9 @@ create_initramfs() {
## mostly laid out in
linux/Documentation/x86/early-microcode.txt
## It only loads monolithic ucode from an uncompressed cpio,
which MUST
## be before the other cpio archives in the stream.
- local cfg_CONFIG_MICROCODE=$(kconfig_get_opt
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE)
- if isTrue "${MICROCODE_INITRAMFS}" && [
"${cfg_CONFIG_MICROCODE}" == "y" ]
+ if isTrue "${MICROCODE_INITRAMFS}"
then
- if [[ "${MICROCODE}" == intel ]]
- then
- # Only show this information for Intel users
because we have no mechanism yet
- # to generate amd-*.img in /boot after
sys-kernel/linux-firmware update
- print_info 1 "MICROCODE_INITRAMFS option is
enabled by default for compatability but made obsolete by
>=sys-boot/grub-2.02-r1"
- fi
-
+ local cfg_CONFIG_MICROCODE=$(kconfig_get_opt
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE)
local cfg_CONFIG_MICROCODE_INTEL=$(kconfig_get_opt
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_INTEL)
local cfg_CONFIG_MICROCODE_AMD=$(kconfig_get_opt
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_AMD)
print_info 1 "$(get_indent 1)>> Adding early-microcode
support ..."
@@ -1745,25 +1738,42 @@ create_initramfs() {
mkdir -p "${UCODEDIR}" || gen_die "Failed to create
'${UCODEDIR}'!"
echo 1 > "${TEMP}/ucode_tmp/early_cpio"
- if [[ "${cfg_CONFIG_MICROCODE_INTEL}" == "y" ]]
+ if [ "${cfg_CONFIG_MICROCODE}" != "y" ]
then
+ print_warning 1 "$(get_indent
2)early-microcode: Will add microcode(s) like requested but kernel has set
CONFIG_MICROCODE=n"
+ fi
+
+ if [[ "${MICROCODE}" == 'all' || "${MICROCODE}" ==
'intel' ]]
+ then
+ if [[ "${cfg_CONFIG_MICROCODE_INTEL}" != "y" ]]
+ then
+ print_warning 1 "$(get_indent
2)early-microcode: Will add Intel microcode(s) like requested
(--microcode=${MICROCODE}) but kernel has set CONFIG_MICROCODE_INTEL=n"
+ fi
+
if [ -d /lib/firmware/intel-ucode ]
then
print_info 1 "$(get_indent
2)early-microcode: Adding GenuineIntel.bin ..."
cat /lib/firmware/intel-ucode/* >
"${UCODEDIR}/GenuineIntel.bin" || gen_die "Failed to concat intel cpu ucode"
else
- print_info 1 "$(get_indent
2)early-microcode: CONFIG_MICROCODE_INTEL=y set but no ucode available. Please
install sys-firmware/intel-microcode[split-ucode]"
+ print_warning 1 "$(get_indent
2)early-microcode: Unable to add Intel microcode like requested
(--microcode=${MICROCODE}); No ucode is available."
+ print_warning 1 "$(get_indent 2)
Is sys-firmware/intel-microcode[split-ucode] installed?"
fi
fi
- if [[ "${cfg_CONFIG_MICROCODE_AMD}" == "y" ]]
+ if [[ "${MICROCODE}" == 'all' || "${MICROCODE}" ==
'amd' ]]
then
+ if [[ "${cfg_CONFIG_MICROCODE_AMD}" != "y" ]]
+ then
+ print_warning 1 "$(get_indent
2)early-microcode: Will add AMD microcode(s) like requested
(--microcode=${MICROCODE}) but kernel has set CONFIG_MICROCODE_AMD=n"
+ fi
+
if [ -d /lib/firmware/amd-ucode ]
then
print_info 1 "$(get_indent
2)early-microcode: Adding AuthenticAMD.bin ..."
cat /lib/firmware/amd-ucode/*.bin >
"${UCODEDIR}/AuthenticAMD.bin" || gen_dir "Failed to concat amd cpu ucode"
else
- print_info 1 "$(get_indent
2)early-microcode: CONFIG_MICROCODE_AMD=y set but no ucode available. Please
install sys-firmware/linux-firmware"
+ print_warning 1 "$(get_indent
2)early-microcode: Unable to add AMD microcode like requested
(--microcode=${MICROCODE}); No ucode is available."
+ print_warning 1 "$(get_indent 2)
Is sys-firmware/linux-firmware installed?"
fi
fi
@@ -1778,9 +1788,22 @@ create_initramfs() {
cat "${TEMP}/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 "$(get_indent 2)early-microcode:
CONFIG_MICROCODE=y is set but no microcode found"
- print_info 1 "$(get_indent 2)early-microcode:
You can disable MICROCODE_INITRAMFS option if you use your bootloader to load
AMD/Intel ucode initrd"
+ print_warning 1 "$(get_indent
2)early-microcode: No microcode found; Will not prepend any microcode to
initramfs ..."
+ print_info 1 "$(get_indent 2)
${BOLD}Note:${NORMAL} You can set --no-microcode-initramfs if you load
microcode on your own"
+ fi
+
+ if ! isTrue "${WRAP_INITRD}" && [[ "${MICROCODE}" ==
intel ]]
+ then
+ # Only show this information for Intel users
because we have no mechanism yet
+ # to generate amd-*.img in /boot after
sys-kernel/linux-firmware update
+ print_info 1 ''
+ print_info 1 "${BOLD}Note:${NORMAL}"
+ print_info 1 '--microcode-initramfs option is
enabled by default for backward compatability.'
+ print_info 1 'If your bootloader can load
multiple initramfs it is recommended to load'
+ print_info 1 '/boot/intel-uc.img instead of
embedding microcode into initramfs.'
fi
+ else
+ print_info 3 "$(get_indent 1)>>
--no-microcode-initramfs is set; Skipping early-microcode support ..."
fi
if isTrue "${WRAP_INITRD}"