diff options
author | Andrea Adami <andrea.adami@gmail.com> | 2018-12-17 19:17:48 +0100 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2018-12-18 18:44:59 -0800 |
commit | 62779390653d869f64ed655a3cd0b194a131a789 (patch) | |
tree | 24ccedd7c464666a02a8419f137fc7a73b3b4a7e /meta-initramfs | |
parent | afadc2ca4d72f5cdf3d191d96ec56057d9ca07b5 (diff) | |
download | meta-openembedded-62779390653d869f64ed655a3cd0b194a131a789.tar.gz |
kexec-tools-klibc: implement the --no-dtb option for older mips kernels
Fix borrowed from LEDE-DEV.
Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-initramfs')
-rw-r--r-- | meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch | 163 | ||||
-rw-r--r-- | meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb | 3 |
2 files changed, 166 insertions, 0 deletions
diff --git a/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch new file mode 100644 index 000000000..b3ef3c82d --- /dev/null +++ b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch | |||
@@ -0,0 +1,163 @@ | |||
1 | From 5ea7cd78cd252ffd3a9f3fbc8dc795d6e1596084 Mon Sep 17 00:00:00 2001 | ||
2 | From: Andrea Adami <andrea.adami@gmail.com> | ||
3 | Date: Mon, 17 Dec 2018 11:25:20 +0100 | ||
4 | Subject: [PATCH] kexec-tools: fix non-device tree devices on mips | ||
5 | |||
6 | Add additional argument '--no-dtb' which disables device tree | ||
7 | search in currently loaded kernel. | ||
8 | |||
9 | Taken from LEDE-DEV: | ||
10 | https://patchwork.ozlabs.org/patch/852961/ | ||
11 | |||
12 | Rebased for kexec-tools 2.0.18 | ||
13 | Removed ppc change (unwanted ?) | ||
14 | |||
15 | Signed-off-by: Konstantin Kuzov <master.nosferatu@gmail.com> | ||
16 | Signed-off-by: Andrea Adami <andrea.adami@gmail.com> | ||
17 | --- | ||
18 | kexec/arch/mips/include/arch/options.h | 4 +- | ||
19 | kexec/arch/mips/kexec-elf-mips.c | 58 ++++++++++++++------------ | ||
20 | kexec/arch/mips/kexec-mips.c | 4 ++ | ||
21 | kexec/arch/mips/kexec-mips.h | 1 + | ||
22 | 4 files changed, 39 insertions(+), 28 deletions(-) | ||
23 | |||
24 | diff --git a/kexec/arch/mips/include/arch/options.h b/kexec/arch/mips/include/arch/options.h | ||
25 | index 416e224..18d2811 100644 | ||
26 | --- a/kexec/arch/mips/include/arch/options.h | ||
27 | +++ b/kexec/arch/mips/include/arch/options.h | ||
28 | @@ -5,6 +5,7 @@ | ||
29 | #define OPT_APPEND (OPT_ARCH_MAX+0) | ||
30 | #define OPT_DTB (OPT_ARCH_MAX+1) | ||
31 | #define OPT_RAMDISK (OPT_ARCH_MAX+2) | ||
32 | +#define OPT_NO_DTB (OPT_ARCH_MAX+3) | ||
33 | |||
34 | /* Options relevant to the architecture (excluding loader-specific ones), | ||
35 | * in this case none: | ||
36 | @@ -14,7 +15,8 @@ | ||
37 | {"command-line", 1, 0, OPT_APPEND}, \ | ||
38 | {"append", 1, 0, OPT_APPEND}, \ | ||
39 | {"dtb", 1, 0, OPT_DTB }, \ | ||
40 | - {"initrd", 1, 0, OPT_RAMDISK }, | ||
41 | + {"initrd", 1, 0, OPT_RAMDISK }, \ | ||
42 | + {"no-dtb", 0, 0, OPT_NO_DTB }, | ||
43 | |||
44 | |||
45 | #define KEXEC_ARCH_OPT_STR KEXEC_OPT_STR "" | ||
46 | diff --git a/kexec/arch/mips/kexec-elf-mips.c b/kexec/arch/mips/kexec-elf-mips.c | ||
47 | index 849a7ba..5c0e535 100644 | ||
48 | --- a/kexec/arch/mips/kexec-elf-mips.c | ||
49 | +++ b/kexec/arch/mips/kexec-elf-mips.c | ||
50 | @@ -141,35 +141,37 @@ int elf_mips_load(int argc, char **argv, const char *buf, off_t len, | ||
51 | else | ||
52 | cmdline_addr = 0; | ||
53 | |||
54 | - /* MIPS systems that have been converted to use device tree | ||
55 | - * passed through UHI will use commandline in the DTB and | ||
56 | - * the DTB passed as a separate buffer. Note that | ||
57 | - * CMDLINE_PREFIX is skipped here intentionally, as it is | ||
58 | - * used only in the legacy method */ | ||
59 | - | ||
60 | - if (arch_options.dtb_file) { | ||
61 | - dtb_buf = slurp_file(arch_options.dtb_file, &dtb_length); | ||
62 | - } else { | ||
63 | - create_flatten_tree(&dtb_buf, &dtb_length, cmdline_buf + strlen(CMDLINE_PREFIX)); | ||
64 | - } | ||
65 | |||
66 | - if (arch_options.initrd_file) { | ||
67 | - initrd_buf = slurp_file(arch_options.initrd_file, &initrd_size); | ||
68 | + if (!arch_options.no_dtb) { | ||
69 | + /* MIPS systems that have been converted to use device tree | ||
70 | + * passed through UHI will use commandline in the DTB and | ||
71 | + * the DTB passed as a separate buffer. Note that | ||
72 | + * CMDLINE_PREFIX is skipped here intentionally, as it is | ||
73 | + * used only in the legacy method */ | ||
74 | + | ||
75 | + if (arch_options.dtb_file) { | ||
76 | + dtb_buf = slurp_file(arch_options.dtb_file, &dtb_length); | ||
77 | + } else { | ||
78 | + create_flatten_tree(&dtb_buf, &dtb_length, cmdline_buf + strlen(CMDLINE_PREFIX)); | ||
79 | + } | ||
80 | |||
81 | - /* Create initrd entries in dtb - although at this time | ||
82 | - * they would not point to the correct location */ | ||
83 | - dtb_set_initrd(&dtb_buf, &dtb_length, initrd_buf, initrd_buf + initrd_size); | ||
84 | + if (arch_options.initrd_file) { | ||
85 | + initrd_buf = slurp_file(arch_options.initrd_file, &initrd_size); | ||
86 | |||
87 | - initrd_base = add_buffer(info, initrd_buf, initrd_size, | ||
88 | - initrd_size, sizeof(void *), | ||
89 | - _ALIGN_UP(kernel_addr + kernel_size + dtb_length, | ||
90 | - pagesize), 0x0fffffff, 1); | ||
91 | + /* Create initrd entries in dtb - although at this time | ||
92 | + * they would not point to the correct location */ | ||
93 | + dtb_set_initrd(&dtb_buf, &dtb_length, initrd_buf, initrd_buf + initrd_size); | ||
94 | |||
95 | - /* Now that the buffer for initrd is prepared, update the dtb | ||
96 | - * with an appropriate location */ | ||
97 | - dtb_set_initrd(&dtb_buf, &dtb_length, initrd_base, initrd_base + initrd_size); | ||
98 | - } | ||
99 | + initrd_base = add_buffer(info, initrd_buf, initrd_size, | ||
100 | + initrd_size, sizeof(void *), | ||
101 | + _ALIGN_UP(kernel_addr + kernel_size + dtb_length, | ||
102 | + pagesize), 0x0fffffff, 1); | ||
103 | |||
104 | + /* Now that the buffer for initrd is prepared, update the dtb | ||
105 | + * with an appropriate location */ | ||
106 | + dtb_set_initrd(&dtb_buf, &dtb_length, initrd_base, initrd_base + initrd_size); | ||
107 | + } | ||
108 | + } | ||
109 | |||
110 | /* This is a legacy method for commandline passing used | ||
111 | * currently by Octeon CPUs only */ | ||
112 | @@ -177,9 +179,11 @@ int elf_mips_load(int argc, char **argv, const char *buf, off_t len, | ||
113 | sizeof(cmdline_buf), sizeof(void *), | ||
114 | cmdline_addr, 0x0fffffff, 1); | ||
115 | |||
116 | - add_buffer(info, dtb_buf, dtb_length, dtb_length, 0, | ||
117 | - _ALIGN_UP(kernel_addr + kernel_size, pagesize), | ||
118 | - 0x0fffffff, 1); | ||
119 | + if (!arch_options.no_dtb) { | ||
120 | + add_buffer(info, dtb_buf, dtb_length, dtb_length, 0, | ||
121 | + _ALIGN_UP(kernel_addr + kernel_size, pagesize), | ||
122 | + 0x0fffffff, 1); | ||
123 | + } | ||
124 | |||
125 | return 0; | ||
126 | } | ||
127 | diff --git a/kexec/arch/mips/kexec-mips.c b/kexec/arch/mips/kexec-mips.c | ||
128 | index 415c2ed..e557f8b 100644 | ||
129 | --- a/kexec/arch/mips/kexec-mips.c | ||
130 | +++ b/kexec/arch/mips/kexec-mips.c | ||
131 | @@ -89,6 +89,7 @@ void arch_usage(void) | ||
132 | " --append=STRING Set the kernel command line to STRING.\n" | ||
133 | " --dtb=FILE Use FILE as the device tree blob.\n" | ||
134 | " --initrd=FILE Use FILE as initial ramdisk.\n" | ||
135 | + " --no-dtb Don't try to find device tree\n" | ||
136 | ); | ||
137 | } | ||
138 | |||
139 | @@ -121,6 +122,9 @@ int arch_process_options(int argc, char **argv) | ||
140 | case OPT_RAMDISK: | ||
141 | arch_options.initrd_file = optarg; | ||
142 | break; | ||
143 | + case OPT_NO_DTB: | ||
144 | + arch_options.no_dtb = 1; | ||
145 | + break; | ||
146 | default: | ||
147 | break; | ||
148 | } | ||
149 | diff --git a/kexec/arch/mips/kexec-mips.h b/kexec/arch/mips/kexec-mips.h | ||
150 | index 222c815..90b21c3 100644 | ||
151 | --- a/kexec/arch/mips/kexec-mips.h | ||
152 | +++ b/kexec/arch/mips/kexec-mips.h | ||
153 | @@ -22,6 +22,7 @@ struct arch_options_t { | ||
154 | char *dtb_file; | ||
155 | char *initrd_file; | ||
156 | int core_header_type; | ||
157 | + int no_dtb; | ||
158 | }; | ||
159 | |||
160 | extern struct memory_ranges usablemem_rgns; | ||
161 | -- | ||
162 | 2.17.1 | ||
163 | |||
diff --git a/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb index 6ffa2aad6..ebf5ff5ae 100644 --- a/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb +++ b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb | |||
@@ -42,6 +42,9 @@ SRC_URI += "${BUILD_PATCHES} ${KLIBC_PATCHES} ${WARNING_FIXES} ${FROM_OE_CORE}" | |||
42 | 42 | ||
43 | SRC_URI_append_arm = " file://arm_crashdump.patch" | 43 | SRC_URI_append_arm = " file://arm_crashdump.patch" |
44 | 44 | ||
45 | SRC_URI_append_mips = " file://140-mips_disable_devicetree_support.patch" | ||
46 | SRC_URI_append_mipsel = " file://140-mips_disable_devicetree_support.patch" | ||
47 | |||
45 | SRC_URI_append_x86 = " file://x86_sys_io.patch file://x86_basename.patch \ | 48 | SRC_URI_append_x86 = " file://x86_sys_io.patch file://x86_basename.patch \ |
46 | file://x86_vfscanf.patch file://x86_kexec_test.patch" | 49 | file://x86_vfscanf.patch file://x86_kexec_test.patch" |
47 | 50 | ||