ARC: [cmdline] Don't overwrite u-boot provided bootargs
authorVineet Gupta <vgupta@synopsys.com>
Tue, 9 Apr 2013 10:48:04 +0000 (16:18 +0530)
committerVineet Gupta <vgupta@synopsys.com>
Tue, 7 May 2013 08:13:57 +0000 (13:43 +0530)
The existing code was wrong on several counts:

* uboot provided bootargs were copied into @boot_command_line, only to
  be over-written by setup_machine_fdt(), effectively lost

* @cmdline_p returned by setup_arch() to start_kernel() didn't include
  the DT /bootargs

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/kernel/setup.c

index 18763153e07c4d6c7755fc16076aed0320fde648..b2b3731dd1e9c65638b69cd5402382ab2bbb275c 100644 (file)
@@ -318,18 +318,20 @@ void __cpuinit setup_processor(void)
 
 void __init setup_arch(char **cmdline_p)
 {
+       /* This also populates @boot_command_line from /bootargs */
+       machine_desc = setup_machine_fdt(__dtb_start);
+       if (!machine_desc)
+               panic("Embedded DT invalid\n");
+
+       /* Append any u-boot provided cmdline */
 #ifdef CONFIG_CMDLINE_UBOOT
-       /* Make sure that a whitespace is inserted before */
-       strlcat(command_line, " ", sizeof(command_line));
+       /* Add a whitespace seperator between the 2 cmdlines */
+       strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
+       strlcat(boot_command_line, command_line, COMMAND_LINE_SIZE);
 #endif
 
        /* Save unparsed command line copy for /proc/cmdline */
-       strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
-       *cmdline_p = command_line;
-
-       machine_desc = setup_machine_fdt(__dtb_start);
-       if (!machine_desc)
-               panic("Embedded DT invalid\n");
+       *cmdline_p = boot_command_line;
 
        /* To force early parsing of things like mem=xxx */
        parse_early_param();