diff mbox series

[LEDE-DEV] kexec-tools: fix non-device tree devices on mips

Message ID 20171226114756.19641-1-master.nosferatu@gmail.com
State Changes Requested
Delegated to: John Crispin
Headers show
Series [LEDE-DEV] kexec-tools: fix non-device tree devices on mips | expand

Commit Message

Konstantin Kuzov Dec. 26, 2017, 11:47 a.m. UTC
Add additional argument '--no-dtb' which disables device tree
search in currently loaded kernel.

Signed-off-by: Konstantin Kuzov <master.nosferatu@gmail.com>
---
 .../140-mips_disable_devicetree_support.patch      | 147 +++++++++++++++++++++
 1 file changed, 147 insertions(+)
 create mode 100644 package/boot/kexec-tools/patches/140-mips_disable_devicetree_support.patch

Comments

John Crispin Jan. 1, 2018, 11:22 a.m. UTC | #1
On 26/12/17 12:47, Konstantin Kuzov wrote:
> Add additional argument '--no-dtb' which disables device tree
> search in currently loaded kernel.
>
> Signed-off-by: Konstantin Kuzov <master.nosferatu@gmail.com>
Hi,

could you please rework this patch such that 
140-mips_disable_devicetree_support.patch is fully annotated. also 
please send this patch upstream first.

    John

> ---
>   .../140-mips_disable_devicetree_support.patch      | 147 +++++++++++++++++++++
>   1 file changed, 147 insertions(+)
>   create mode 100644 package/boot/kexec-tools/patches/140-mips_disable_devicetree_support.patch
>
> diff --git a/package/boot/kexec-tools/patches/140-mips_disable_devicetree_support.patch b/package/boot/kexec-tools/patches/140-mips_disable_devicetree_support.patch
> new file mode 100644
> index 0000000000..f862e2f58b
> --- /dev/null
> +++ b/package/boot/kexec-tools/patches/140-mips_disable_devicetree_support.patch
> @@ -0,0 +1,147 @@
> +diff -urN a/kexec/arch/mips/include/arch/options.h b/kexec/arch/mips/include/arch/options.h
> +--- a/kexec/arch/mips/include/arch/options.h	2016-12-09 12:42:06.000000000 +0300
> ++++ b/kexec/arch/mips/include/arch/options.h	2017-12-20 13:19:37.327807439 +0300
> +@@ -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 ""
> +diff -urN a/kexec/arch/mips/kexec-elf-mips.c b/kexec/arch/mips/kexec-elf-mips.c
> +--- a/kexec/arch/mips/kexec-elf-mips.c	2016-12-09 12:42:06.000000000 +0300
> ++++ b/kexec/arch/mips/kexec-elf-mips.c	2017-12-14 09:08:28.793909864 +0300
> +@@ -141,45 +141,49 @@
> + 	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, 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);
> ++		}
> + 	}
> +
> +-
> + 	/* 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;
> + }
> +diff -urN a/kexec/arch/mips/kexec-mips.c b/kexec/arch/mips/kexec-mips.c
> +--- a/kexec/arch/mips/kexec-mips.c	2017-12-14 09:07:45.775790753 +0300
> ++++ b/kexec/arch/mips/kexec-mips.c	2017-12-20 13:19:57.362395864 +0300
> +@@ -83,6 +83,7 @@
> + 	"    --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"
> + 	);
> + }
> +
> +@@ -115,6 +116,9 @@
> + 		case OPT_RAMDISK:
> + 			arch_options.initrd_file = optarg;
> + 			break;
> ++		case OPT_NO_DTB:
> ++			arch_options.no_dtb = 1;
> ++			break;
> + 		default:
> + 			break;
> + 		}
> +diff -urN a/kexec/arch/mips/kexec-mips.h b/kexec/arch/mips/kexec-mips.h
> +--- a/kexec/arch/mips/kexec-mips.h	2016-12-09 12:42:06.000000000 +0300
> ++++ b/kexec/arch/mips/kexec-mips.h	2017-12-14 09:08:28.794909844 +0300
> +@@ -22,6 +22,7 @@
> + 	char *dtb_file;
> + 	char *initrd_file;
> + 	int core_header_type;
> ++	int no_dtb;
> + };
> +
> + extern struct memory_ranges usablemem_rgns;
> +diff -urN a/kexec/arch/ppc/ops.h b/kexec/arch/ppc/ops.h
> +--- a/kexec/arch/ppc/ops.h	2016-12-09 12:42:06.000000000 +0300
> ++++ b/kexec/arch/ppc/ops.h	2017-12-20 13:19:12.232322959 +0300
> +@@ -14,7 +14,6 @@
> +
> + #define	COMMAND_LINE_SIZE	512
> + #define	MAX_PATH_LEN		256
> +-#define	MAX_PROP_LEN		256 /* What should this be? */
> +
> + typedef void (*kernel_entry_t)(unsigned long r3, unsigned long r4, void *r5);
> +
diff mbox series

Patch

diff --git a/package/boot/kexec-tools/patches/140-mips_disable_devicetree_support.patch b/package/boot/kexec-tools/patches/140-mips_disable_devicetree_support.patch
new file mode 100644
index 0000000000..f862e2f58b
--- /dev/null
+++ b/package/boot/kexec-tools/patches/140-mips_disable_devicetree_support.patch
@@ -0,0 +1,147 @@ 
+diff -urN a/kexec/arch/mips/include/arch/options.h b/kexec/arch/mips/include/arch/options.h
+--- a/kexec/arch/mips/include/arch/options.h	2016-12-09 12:42:06.000000000 +0300
++++ b/kexec/arch/mips/include/arch/options.h	2017-12-20 13:19:37.327807439 +0300
+@@ -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 ""
+diff -urN a/kexec/arch/mips/kexec-elf-mips.c b/kexec/arch/mips/kexec-elf-mips.c
+--- a/kexec/arch/mips/kexec-elf-mips.c	2016-12-09 12:42:06.000000000 +0300
++++ b/kexec/arch/mips/kexec-elf-mips.c	2017-12-14 09:08:28.793909864 +0300
+@@ -141,45 +141,49 @@
+ 	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, 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);
++		}
+ 	}
+ 
+-
+ 	/* 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;
+ }
+diff -urN a/kexec/arch/mips/kexec-mips.c b/kexec/arch/mips/kexec-mips.c
+--- a/kexec/arch/mips/kexec-mips.c	2017-12-14 09:07:45.775790753 +0300
++++ b/kexec/arch/mips/kexec-mips.c	2017-12-20 13:19:57.362395864 +0300
+@@ -83,6 +83,7 @@
+ 	"    --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"
+ 	);
+ }
+ 
+@@ -115,6 +116,9 @@
+ 		case OPT_RAMDISK:
+ 			arch_options.initrd_file = optarg;
+ 			break;
++		case OPT_NO_DTB:
++			arch_options.no_dtb = 1;
++			break;
+ 		default:
+ 			break;
+ 		}
+diff -urN a/kexec/arch/mips/kexec-mips.h b/kexec/arch/mips/kexec-mips.h
+--- a/kexec/arch/mips/kexec-mips.h	2016-12-09 12:42:06.000000000 +0300
++++ b/kexec/arch/mips/kexec-mips.h	2017-12-14 09:08:28.794909844 +0300
+@@ -22,6 +22,7 @@
+ 	char *dtb_file;
+ 	char *initrd_file;
+ 	int core_header_type;
++	int no_dtb;
+ };
+ 
+ extern struct memory_ranges usablemem_rgns;
+diff -urN a/kexec/arch/ppc/ops.h b/kexec/arch/ppc/ops.h
+--- a/kexec/arch/ppc/ops.h	2016-12-09 12:42:06.000000000 +0300
++++ b/kexec/arch/ppc/ops.h	2017-12-20 13:19:12.232322959 +0300
+@@ -14,7 +14,6 @@
+ 
+ #define	COMMAND_LINE_SIZE	512
+ #define	MAX_PATH_LEN		256
+-#define	MAX_PROP_LEN		256 /* What should this be? */
+ 
+ typedef void (*kernel_entry_t)(unsigned long r3, unsigned long r4, void *r5);
+