meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch
Khem Raj d3529a351d
kexec-tools-klibc: Update to latest 2.0.32 release
Add riscv64 support
Rework klibc support patches

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Cc: Andrea Adami <andrea.adami@gmail.com>
2025-12-14 10:11:17 -08:00

165 lines
5.5 KiB
Diff

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>
---
Upstream-Status: Pending
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
@@ -6,6 +6,7 @@
#define OPT_DTB (OPT_ARCH_MAX+1)
#define OPT_RAMDISK (OPT_ARCH_MAX+2)
#define OPT_REUSE_CMDLINE (OPT_ARCH_MAX+3)
+#define OPT_NO_DTB (OPT_ARCH_MAX+4)
/* Options relevant to the architecture (excluding loader-specific ones),
* in this case none:
@@ -16,8 +17,8 @@
{"append", 1, 0, OPT_APPEND}, \
{"dtb", 1, 0, OPT_DTB }, \
{"initrd", 1, 0, OPT_RAMDISK }, \
- { "reuse-cmdline", 0, NULL, OPT_REUSE_CMDLINE },
-
+ { "reuse-cmdline", 0, NULL, OPT_REUSE_CMDLINE }, \
+ {"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
@@ -196,36 +196,38 @@ 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, (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);
-
- /* Add the initrd parameters to cmdline */
- patch_initrd_info(cmdline_buf, 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);
+
+ /* Add the initrd parameters to cmdline */
+ patch_initrd_info(cmdline_buf, initrd_base, initrd_size);
+ }
}
/* This is a legacy method for commandline passing used
* currently by Octeon CPUs only */
@@ -233,10 +235,11 @@ int elf_mips_load(int argc, char **argv,
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
@@ -90,6 +90,7 @@ void arch_usage(void)
" --dtb=FILE Use FILE as the device tree blob.\n"
" --initrd=FILE Use FILE as initial ramdisk.\n"
" --reuse-cmdline Use kernel command line from running system.\n"
+ " --no-dtb Don't try to find device tree.\n"
);
}
@@ -127,6 +128,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;