From 7bd94a64cd5424e74ad49dbda65a15e83670268f Mon Sep 17 00:00:00 2001
From: Andrea Adami <andrea.adami@gmail.com>
Date: Mon, 17 Dec 2018 11:25:20 +0100
Subject: [PATCH] kexec-tools: fix non-device tree devices on mips

Add additional argument '--no-dtb' which disables device tree
search in currently loaded kernel.

Taken from LEDE-DEV:
https://patchwork.ozlabs.org/patch/852961/

Rebased for kexec-tools 2.0.18
Removed ppc change (unwanted ?)

Signed-off-by: Konstantin Kuzov <master.nosferatu@gmail.com>
Signed-off-by: Andrea Adami <andrea.adami@gmail.com>

---
 kexec/arch/mips/include/arch/options.h |  4 +-
 kexec/arch/mips/kexec-elf-mips.c       | 58 ++++++++++++++------------
 kexec/arch/mips/kexec-mips.c           |  4 ++
 kexec/arch/mips/kexec-mips.h           |  1 +
 4 files changed, 39 insertions(+), 28 deletions(-)

--- a/kexec/arch/mips/include/arch/options.h
+++ b/kexec/arch/mips/include/arch/options.h
@@ -5,6 +5,7 @@
 #define OPT_APPEND	(OPT_ARCH_MAX+0)
 #define OPT_DTB		(OPT_ARCH_MAX+1)
 #define OPT_RAMDISK	(OPT_ARCH_MAX+2)
+#define OPT_NO_DTB	(OPT_ARCH_MAX+3)
 
 /* Options relevant to the architecture (excluding loader-specific ones),
  * in this case none:
@@ -14,7 +15,8 @@
 	{"command-line", 1, 0, OPT_APPEND}, \
 	{"append",	 1, 0, OPT_APPEND}, \
 	{"dtb",		1, 0, OPT_DTB }, \
-	{"initrd",	1, 0, OPT_RAMDISK },
+	{"initrd",	1, 0, OPT_RAMDISK }, \
+	{"no-dtb",	0, 0, OPT_NO_DTB },
 
 
 #define KEXEC_ARCH_OPT_STR KEXEC_OPT_STR ""
--- a/kexec/arch/mips/kexec-elf-mips.c
+++ b/kexec/arch/mips/kexec-elf-mips.c
@@ -141,45 +141,49 @@ int elf_mips_load(int argc, char **argv,
 	else
 		cmdline_addr = 0;
 
-	/* MIPS systems that have been converted to use device tree
-	 * passed through UHI will use commandline in the DTB and
-	 * the DTB passed as a separate buffer. Note that
-	 * CMDLINE_PREFIX is skipped here intentionally, as it is
-	 * used only in the legacy method */
-
-	if (arch_options.dtb_file) {
-		dtb_buf = slurp_file(arch_options.dtb_file, &dtb_length);
-	} else {
-		create_flatten_tree(&dtb_buf, &dtb_length, cmdline_buf + strlen(CMDLINE_PREFIX));
-	}
-
-	if (arch_options.initrd_file) {
-		initrd_buf = slurp_file(arch_options.initrd_file, &initrd_size);
 
-		/* Create initrd entries in dtb - although at this time
-		 * they would not point to the correct location */
-		dtb_set_initrd(&dtb_buf, &dtb_length, initrd_buf, initrd_buf + initrd_size);
-
-		initrd_base = add_buffer(info, initrd_buf, initrd_size,
-					initrd_size, sizeof(void *),
-					_ALIGN_UP(kernel_addr + kernel_size + dtb_length,
-						pagesize), 0x0fffffff, 1);
-
-		/* Now that the buffer for initrd is prepared, update the dtb
-		 * with an appropriate location */
-		dtb_set_initrd(&dtb_buf, &dtb_length, initrd_base, initrd_base + initrd_size);
+	if (!arch_options.no_dtb) {
+		/* MIPS systems that have been converted to use device tree
+		 * passed through UHI will use commandline in the DTB and
+		 * the DTB passed as a separate buffer. Note that
+		 * CMDLINE_PREFIX is skipped here intentionally, as it is
+		 * used only in the legacy method */
+
+		if (arch_options.dtb_file) {
+			dtb_buf = slurp_file(arch_options.dtb_file, &dtb_length);
+		} else {
+			create_flatten_tree(&dtb_buf, &dtb_length, cmdline_buf + strlen(CMDLINE_PREFIX));
+		}
+
+		if (arch_options.initrd_file) {
+			initrd_buf = slurp_file(arch_options.initrd_file, &initrd_size);
+
+			/* Create initrd entries in dtb - although at this time
+			 * they would not point to the correct location */
+			dtb_set_initrd(&dtb_buf, &dtb_length, (off_t)initrd_buf, (off_t)initrd_buf + initrd_size);
+
+			initrd_base = add_buffer(info, initrd_buf, initrd_size,
+						initrd_size, sizeof(void *),
+						_ALIGN_UP(kernel_addr + kernel_size + dtb_length,
+							pagesize), 0x0fffffff, 1);
+
+			/* Now that the buffer for initrd is prepared, update the dtb
+			 * with an appropriate location */
+			dtb_set_initrd(&dtb_buf, &dtb_length, initrd_base, initrd_base + initrd_size);
+		}
 	}
 
-
 	/* This is a legacy method for commandline passing used
 	 * currently by Octeon CPUs only */
 	add_buffer(info, cmdline_buf, sizeof(cmdline_buf),
 			sizeof(cmdline_buf), sizeof(void *),
 			cmdline_addr, 0x0fffffff, 1);
 
-	add_buffer(info, dtb_buf, dtb_length, dtb_length, 0,
-		_ALIGN_UP(kernel_addr + kernel_size, pagesize),
-		0x0fffffff, 1);
+	if (!arch_options.no_dtb) {
+		add_buffer(info, dtb_buf, dtb_length, dtb_length, 0,
+			_ALIGN_UP(kernel_addr + kernel_size, pagesize),
+			0x0fffffff, 1);
+	}
 
 	return 0;
 }
--- a/kexec/arch/mips/kexec-mips.c
+++ b/kexec/arch/mips/kexec-mips.c
@@ -89,6 +89,7 @@ void arch_usage(void)
 	"    --append=STRING       Set the kernel command line to STRING.\n"
 	"    --dtb=FILE            Use FILE as the device tree blob.\n"
 	"    --initrd=FILE         Use FILE as initial ramdisk.\n"
+	"    --no-dtb              Don't try to find device tree\n"
 	);
 }
 
@@ -121,6 +122,9 @@ int arch_process_options(int argc, char
 		case OPT_RAMDISK:
 			arch_options.initrd_file = optarg;
 			break;
+		case OPT_NO_DTB:
+			arch_options.no_dtb = 1;
+			break;
 		default:
 			break;
 		}
--- a/kexec/arch/mips/kexec-mips.h
+++ b/kexec/arch/mips/kexec-mips.h
@@ -22,6 +22,7 @@ struct arch_options_t {
 	char *dtb_file;
 	char *initrd_file;
 	int core_header_type;
+	int no_dtb;
 };
 
 extern struct memory_ranges usablemem_rgns;
