sh: Allow for kernel command line concatenation.
authorPawel Moll <pawel.moll@st.com>
Mon, 24 Aug 2009 07:25:38 +0000 (16:25 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 24 Aug 2009 07:25:38 +0000 (16:25 +0900)
So far kernel command line arguments could be passed in by a bootloader
or defined as CONFIG_CMDLINE, which completely overwriting the first one.

This change allows a developer to declare selected kernel parameters in
a kernel configuration (eg. project-specific defconfig), retaining
possibility of passing others by a bootloader.

The obvious examples of the first type are MTD partition or
bigphysarea-like region definitions, while "debug" option or network
configuration should be given by a bootloader or a JTAG boot script.

Signed-off-by: Pawel Moll <pawel.moll@st.com>
Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/Kconfig
arch/sh/kernel/setup.c

index 80b4f9a..2f5352c 100644 (file)
@@ -767,12 +767,31 @@ config UBC_WAKEUP
 
          If unsure, say N.
 
-config CMDLINE_BOOL
-       bool "Default bootloader kernel arguments"
+choice
+       prompt "Kernel command line"
+       optional
+       default CMDLINE_OVERWRITE
+       help
+         Setting this option allows the kernel command line arguments
+         to be set.
+
+config CMDLINE_OVERWRITE
+       bool "Overwrite bootloader kernel arguments"
+       help
+         Given string will overwrite any arguments passed in by
+         a bootloader.
+
+config CMDLINE_EXTEND
+       bool "Extend bootloader kernel arguments"
+       help
+         Given string will be concatenated with arguments passed in
+         by a bootloader.
+
+endchoice
 
 config CMDLINE
-       string "Initial kernel command string"
-       depends on CMDLINE_BOOL
+       string "Kernel command line arguments string"
+       depends on CMDLINE_OVERWRITE || CMDLINE_EXTEND
        default "console=ttySC1,115200"
 
 endmenu
index 212e6bd..d13bbaf 100644 (file)
@@ -404,10 +404,14 @@ void __init setup_arch(char **cmdline_p)
        if (!memory_end)
                memory_end = memory_start + __MEMORY_SIZE;
 
-#ifdef CONFIG_CMDLINE_BOOL
+#ifdef CONFIG_CMDLINE_OVERWRITE
        strlcpy(command_line, CONFIG_CMDLINE, sizeof(command_line));
 #else
        strlcpy(command_line, COMMAND_LINE, sizeof(command_line));
+#ifdef CONFIG_CMDLINE_EXTEND
+       strlcat(command_line, " ", sizeof(command_line));
+       strlcat(command_line, CONFIG_CMDLINE, sizeof(command_line));
+#endif
 #endif
 
        /* Save unparsed command line copy for /proc/cmdline */