]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/microcode: Add microcode= cmdline parsing
authorBorislav Petkov (AMD) <bp@alien8.de>
Wed, 20 Aug 2025 13:50:42 +0000 (15:50 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Thu, 4 Sep 2025 14:02:20 +0000 (16:02 +0200)
Add a "microcode=" command line argument after which all options can be
passed in a comma-separated list.

Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Sohil Mehta <sohil.mehta@intel.com>
Reviewed-by: Chang S. Bae <chang.seok.bae@intel.com>
Link: https://lore.kernel.org/20250820135043.19048-2-bp@kernel.org
Documentation/admin-guide/kernel-parameters.txt
arch/x86/Kconfig
arch/x86/kernel/cpu/microcode/core.c

index 747a55abf4946bb9efe320f0f62fdcd1560b0a71..9e3bbce6583f20f3414215bc164989adc329e791 100644 (file)
 
        mga=            [HW,DRM]
 
-       microcode.force_minrev= [X86]
-                       Format: <bool>
+       microcode=      [X86] Control the behavior of the microcode loader.
+                       Available options, comma separated:
+
+                       dis_ucode_ldr: disable the microcode loader
+
+                       force_minrev:
                        Enable or disable the microcode minimal revision
                        enforcement for the runtime microcode loader.
 
index 58d890fe2100eb6990880bcf5ba600cdefb0a7d1..aa250d90f927a23f7aac600ff019e97c6a12d476 100644 (file)
@@ -1340,7 +1340,7 @@ config MICROCODE_LATE_LOADING
          use this at your own risk. Late loading taints the kernel unless the
          microcode header indicates that it is safe for late loading via the
          minimal revision check. This minimal revision check can be enforced on
-         the kernel command line with "microcode.minrev=Y".
+         the kernel command line with "microcode=force_minrev".
 
 config MICROCODE_LATE_FORCE_MINREV
        bool "Enforce late microcode loading minimal revision check"
@@ -1356,7 +1356,7 @@ config MICROCODE_LATE_FORCE_MINREV
          revision check fails.
 
          This minimal revision check can also be controlled via the
-         "microcode.minrev" parameter on the kernel command line.
+         "microcode=force_minrev" parameter on the kernel command line.
 
          If unsure say Y.
 
index b92e09a87c6997f92eace5865b1c4887d55e3852..7d590630673b42de6f4b66e55da44d0a47cbaffa 100644 (file)
 #include "internal.h"
 
 static struct microcode_ops *microcode_ops;
-static bool dis_ucode_ldr = false;
+static bool dis_ucode_ldr;
 
 bool force_minrev = IS_ENABLED(CONFIG_MICROCODE_LATE_FORCE_MINREV);
-module_param(force_minrev, bool, S_IRUSR | S_IWUSR);
 
 /*
  * Synchronization.
@@ -126,13 +125,32 @@ bool __init microcode_loader_disabled(void)
        return dis_ucode_ldr;
 }
 
+static void early_parse_cmdline(void)
+{
+       char cmd_buf[64] = {};
+       char *s, *p = cmd_buf;
+
+       if (cmdline_find_option(boot_command_line, "microcode", cmd_buf, sizeof(cmd_buf)) > 0) {
+               while ((s = strsep(&p, ","))) {
+                       if (!strcmp("force_minrev", s))
+                               force_minrev = true;
+
+                       if (!strcmp(s, "dis_ucode_ldr"))
+                               dis_ucode_ldr = true;
+               }
+       }
+
+       /* old, compat option */
+       if (cmdline_find_option_bool(boot_command_line, "dis_ucode_ldr") > 0)
+               dis_ucode_ldr = true;
+}
+
 void __init load_ucode_bsp(void)
 {
        unsigned int cpuid_1_eax;
        bool intel = true;
 
-       if (cmdline_find_option_bool(boot_command_line, "dis_ucode_ldr") > 0)
-               dis_ucode_ldr = true;
+       early_parse_cmdline();
 
        if (microcode_loader_disabled())
                return;