diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2014-01-16 15:04:24 +0530 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2014-01-16 18:53:16 +0530 |
commit | e57d339a6264355df8c98948f05a46ff2bc5d504 (patch) | |
tree | b176d8540cad72142941dcdf96ee60644088db50 /arch/arc | |
parent | 59ed9413533897823bcdb4c79fd2904718e25b0a (diff) |
ARC: [cmdline] support External Device Trees from u-boot
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'arch/arc')
-rw-r--r-- | arch/arc/kernel/setup.c | 15 |
1 files changed, 12 insertions, 3 deletions
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; |