Browse Source

ARC: [cmdline] support External Device Trees from u-boot

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Vineet Gupta 11 năm trước cách đây
mục cha
commit
e57d339a62
1 tập tin đã thay đổi với 12 bổ sung3 xóa
  1. 12 3
      arch/arc/kernel/setup.c

+ 12 - 3
arch/arc/kernel/setup.c

@@ -323,22 +323,31 @@ static inline int is_kernel(unsigned long addr)
 
 void __init setup_arch(char **cmdline_p)
 {
+	/* make sure that uboot passed pointer to cmdline/dtb is valid */
+	if (uboot_tag && is_kernel((unsigned long)uboot_arg))
+		panic("Invalid uboot arg\n");
+
+	/* See if u-boot passed an external Device Tree blob */
+	machine_desc = setup_machine_fdt(uboot_arg);	/* uboot_tag == 2 */
+	if (!machine_desc) {
+		/* No, so try the embedded one */
 		machine_desc = setup_machine_fdt(__dtb_start);
 		if (!machine_desc)
 			panic("Embedded DT invalid\n");
 
 		/*
-		 * Append uboot cmdline to embedded DT cmdline.
+		 * If we are here, it is established that @uboot_arg didn't
+		 * point to DT blob. Instead if u-boot says it is cmdline,
+		 * Appent to embedded DT cmdline.
 		 * setup_machine_fdt() would have populated @boot_command_line
 		 */
 		if (uboot_tag == 1) {
-			BUG_ON(is_kernel(unsigned long)uboot_arg);
-
 			/* Ensure a whitespace between the 2 cmdlines */
 			strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
 			strlcat(boot_command_line, uboot_arg,
 				COMMAND_LINE_SIZE);
 		}
+	}
 
 	/* Save unparsed command line copy for /proc/cmdline */
 	*cmdline_p = boot_command_line;