From: Vineet Gupta Date: Thu, 16 Jan 2014 09:34:24 +0000 (+0530) Subject: ARC: [cmdline] support External Device Trees from u-boot X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=e57d339a6264355df8c98948f05a46ff2bc5d504;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git ARC: [cmdline] support External Device Trees from u-boot Signed-off-by: Vineet Gupta --- diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c index ffb60b4f6f86..119dddb752b2 100644 --- a/arch/arc/kernel/setup.c +++ b/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;