commit:     dae8d61f014283ef86ead2251f2b355004bc3f42
Author:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
AuthorDate: Mon Jan  2 22:50:20 2017 +0000
Commit:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
CommitDate: Mon Jan  2 22:50:20 2017 +0000
URL:        https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=dae8d61f

gen_initramfs: cleaner conditionals for microcode

Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org>

 gen_initramfs.sh | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index 268bc2d..e968719 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -1053,27 +1053,32 @@ create_initramfs() {
                fi
                ## To early load microcode we need to follow some pretty 
specific steps
                ## mostly laid out in 
linux/Documentation/x86/early-microcode.txt
-               if grep -sq '^CONFIG_MICROCODE=y' 
"${KERNEL_OUTPUTDIR}"/.config; then
+               ## It only loads monolithic ucode from an uncompressed cpio, 
which MUST
+               ## be before the other cpio archives in the stream.
+               cfg_CONFIG_MICROCODE=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE)
+               if [ "${cfg_CONFIG_MICROCODE}" == "y" ]; then
+                       cfg_CONFIG_MICROCODE_INTEL=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_INTEL)
+                       cfg_CONFIG_MICROCODE_AMD=$(kconfig_get_opt 
"${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_AMD)
                        print_info 1 "early-microcode: >> Preparing..."
                        UCODEDIR="${TMPDIR}/ucode_tmp/kernel/x86/microcode/"
                        mkdir -p "${UCODEDIR}"
-                       if grep -sq '^CONFIG_MICROCODE_INTEL=y' 
"${KERNEL_OUTPUTDIR}"/.config; then
-                               if [ "$(ls -A /lib/firmware/intel-ucode)" ]; 
then
+                       if [  "${cfg_CONFIG_MICROCODE_INTEL}" == "y" ]; then
+                               if [ -d /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 grep -sq '^CONFIG_MICROCODE_AMD=y' 
"${KERNEL_OUTPUTDIR}"/.config; then
-                               if [ "$(ls -A /lib/firmware/amd-ucode)" ]; then
+                       if [  "${cfg_CONFIG_MICROCODE_AMD}" == "y" ]; then
+                               if [ -d /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
+                       if [ -f "${UCODEDIR}/AuthenticAMD.bin" -o -f 
"${UCODEDIR}/GenuineIntel.bin" ]; 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"

Reply via email to