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 |
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 --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); +
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