MIPS: Add support for extending builtin cmdline
authorRabin Vincent <rabinv@axis.com>
Thu, 28 Apr 2016 09:03:09 +0000 (11:03 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 13 May 2016 12:02:21 +0000 (14:02 +0200)
Allow the builtin command line to be extended by what the bootloader
passes in.  For example, the bootloader can pass specific arguments
depending on the boot mode, and these should override the defaults in
the builtin cmdline.

The default MIPS_CMDLINE_FROM_BOOTLOADER option prepends the
bootloader's cmdline to the builtin cmdline so is not suitable for this
purpose.

Signed-off-by: Rabin Vincent <rabinv@axis.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/13181/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/Kconfig
arch/mips/kernel/setup.c

index 5cc5b621ae69e1ffc736cc838f3ee91bc1870135..d10ed57ad418b37ea134b3ff8ba3662fcfccddb5 100644 (file)
@@ -2930,6 +2930,10 @@ choice
 
        config MIPS_CMDLINE_FROM_BOOTLOADER
                bool "Bootloader kernel arguments if available"
+
+       config MIPS_CMDLINE_BUILTIN_EXTEND
+               depends on CMDLINE_BOOL
+               bool "Extend builtin kernel arguments with bootloader arguments"
 endchoice
 
 endmenu
index 38815f78c819bac24bd986cbe7bfe4eaccc8d6f8..19c03a9e7492b4f739aac0f8e909cac31b2d0c3f 100644 (file)
@@ -640,6 +640,8 @@ static void __init request_crashkernel(struct resource *res)
 #define USE_PROM_CMDLINE       IS_ENABLED(CONFIG_MIPS_CMDLINE_FROM_BOOTLOADER)
 #define USE_DTB_CMDLINE                IS_ENABLED(CONFIG_MIPS_CMDLINE_FROM_DTB)
 #define EXTEND_WITH_PROM       IS_ENABLED(CONFIG_MIPS_CMDLINE_DTB_EXTEND)
+#define BUILTIN_EXTEND_WITH_PROM       \
+       IS_ENABLED(CONFIG_MIPS_CMDLINE_BUILTIN_EXTEND)
 
 static void __init arch_mem_init(char **cmdline_p)
 {
@@ -684,6 +686,12 @@ static void __init arch_mem_init(char **cmdline_p)
                        strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
                strlcat(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
        }
+
+       if (BUILTIN_EXTEND_WITH_PROM && arcs_cmdline[0]) {
+               if (boot_command_line[0])
+                       strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
+               strlcat(boot_command_line, arcs_cmdline, COMMAND_LINE_SIZE);
+       }
 #endif
 #endif
        strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);