Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e57d339a authored by Vineet Gupta's avatar Vineet Gupta
Browse files

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

parent 59ed9413
Loading
Loading
Loading
Loading
+12 −3
Original line number Original line Diff line number Diff line
@@ -323,22 +323,31 @@ static inline int is_kernel(unsigned long addr)


void __init setup_arch(char **cmdline_p)
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);
		machine_desc = setup_machine_fdt(__dtb_start);
		if (!machine_desc)
		if (!machine_desc)
			panic("Embedded DT invalid\n");
			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
		 * setup_machine_fdt() would have populated @boot_command_line
		 */
		 */
		if (uboot_tag == 1) {
		if (uboot_tag == 1) {
			BUG_ON(is_kernel(unsigned long)uboot_arg);

			/* Ensure a whitespace between the 2 cmdlines */
			/* Ensure a whitespace between the 2 cmdlines */
			strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
			strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
			strlcat(boot_command_line, uboot_arg,
			strlcat(boot_command_line, uboot_arg,
				COMMAND_LINE_SIZE);
				COMMAND_LINE_SIZE);
		}
		}
	}


	/* Save unparsed command line copy for /proc/cmdline */
	/* Save unparsed command line copy for /proc/cmdline */
	*cmdline_p = boot_command_line;
	*cmdline_p = boot_command_line;