Skip to contentSkip to conversation

arm64 kexec-tools patches

PATCH In review Geoff Levand 4 participants 7 messages Sep 21, 2016 – Sep 29, 2016

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

v6 cover arm64 kexec-tools patches

This series adds the core support for kexec re-boot on ARM64.

Linux kernel support for ARM64 kexec reboot has been merged in v4.8-rc1 with the expectation that it will be included in the v4.8 stable kernel release.

For ARM64 kdump support see Takahiro's latest kdump patches [1].

[1] http://lists.infradead.org/pipermail/kexec

Changes for v6 (Sep , 2016, 2m):

o Remove the get_memory_ranges_dt() routine.
o Rename dtb_[12] to dtb_{proc,sys,user}.

Changes for v5 (Sep 1, 2016, 2m):

o Add common routine arm64_locate_kernel_segment().

Changes for v4 (Aug 18, 2016, 1m):

o Fix some error return values and error messages.
o Add enum arm64_header_page_size.
o Rename page_offset to vp_offset.

Changes for v3 (Aug 10, 2016, 1m):

o Rebase to 2.0.13.
o Add support for flag bits 1-3 to arm64 image-header.h.
o Fix OPT_ARCH_MAX value.
o Use fdt_pack() in dtb_set_property().
o Remove patch ("kexec: (bugfix) calc correct end address of memory ranges in device tree").

Changes for v2 (July 26, 2016, 0m):

o Inline some small routines.
o Reformat some dbgprintf messages.
o Remove debug_brk from entry.S
o Change arm64_image_header.flags to uint64_t.
o Look in iomem then dt for mem info.
o Remove check_cpu_nodes.
o Remove purgatory printing.

First submission v1 (July 20, 2016).

-Geoff

The following changes since commit 67488beb0a6ee8ad2c0b05f721a9e00041fab93a:

kexec-tools 2.0.13 (2016-08-08 12:26:44 +0200)

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/geoff/kexec-tools.git for-merge-arm64-v6

for you to fetch changes up to a9f1fafd7c248d33768177438742b90bc4338202:

arm64: Add support for binary image files (2016-09-21 11:04:03 -0700)

----------------------------------------------------------------
Geoff Levand (2):
kexec: Add common device tree routines
arm64: Add arm64 kexec support

Pratyush Anand (1):
arm64: Add support for binary image files

 configure.ac                            |   3 +
 kexec/Makefile                          |   5 +
 kexec/arch/arm64/Makefile               |  40 +++
 kexec/arch/arm64/crashdump-arm64.c      |  21 ++
 kexec/arch/arm64/crashdump-arm64.h      |  12 +
 kexec/arch/arm64/image-header.h         | 146 ++++++++
 kexec/arch/arm64/include/arch/options.h |  39 ++
 kexec/arch/arm64/kexec-arm64.c          | 615 ++++++++++++++++++++++++++++++++
 kexec/arch/arm64/kexec-arm64.h          |  71 ++++
 kexec/arch/arm64/kexec-elf-arm64.c      | 146 ++++++++
 kexec/arch/arm64/kexec-image-arm64.c    |  80 +++++
 kexec/dt-ops.c                          | 145 ++++++++
 kexec/dt-ops.h                          |  13 +
 kexec/kexec-syscall.h                   |   8 +-
 purgatory/Makefile                      |   1 +
 purgatory/arch/arm64/Makefile           |  18 +
 purgatory/arch/arm64/entry.S            |  51 +++
 purgatory/arch/arm64/purgatory-arm64.c  |  19 +
 18 files changed, 1431 insertions(+), 2 deletions(-)
 create mode 100644 kexec/arch/arm64/Makefile
 create mode 100644 kexec/arch/arm64/crashdump-arm64.c
 create mode 100644 kexec/arch/arm64/crashdump-arm64.h
 create mode 100644 kexec/arch/arm64/image-header.h
 create mode 100644 kexec/arch/arm64/include/arch/options.h
 create mode 100644 kexec/arch/arm64/kexec-arm64.c
 create mode 100644 kexec/arch/arm64/kexec-arm64.h
 create mode 100644 kexec/arch/arm64/kexec-elf-arm64.c
 create mode 100644 kexec/arch/arm64/kexec-image-arm64.c
 create mode 100644 kexec/dt-ops.c
 create mode 100644 kexec/dt-ops.h
 create mode 100644 purgatory/arch/arm64/Makefile
 create mode 100644 purgatory/arch/arm64/entry.S
 create mode 100644 purgatory/arch/arm64/purgatory-arm64.c
Signature · 7 lines
2.7.4


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
#1 lore raw

PATCH v6 1/3 kexec: Add common device tree routines

Common device tree routines that can be shared between all arches that have device tree support.

---
 kexec/Makefile |   4 ++
 kexec/dt-ops.c | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 kexec/dt-ops.h |  13 ++++++
 3 files changed, 162 insertions(+)
 create mode 100644 kexec/dt-ops.c
 create mode 100644 kexec/dt-ops.h
kexec/Makefile +4 -0
index e2aee84..cc3f08b 100644
@@ -73,6 +73,10 @@ dist				+= kexec/mem_regions.c kexec/mem_regions.h
 $(ARCH)_MEM_REGIONS		=
 KEXEC_SRCS			+= $($(ARCH)_MEM_REGIONS)
 
+dist				+= kexec/dt-ops.c kexec/dt-ops.h
+$(ARCH)_DT_OPS		=
+KEXEC_SRCS			+= $($(ARCH)_DT_OPS)
+
 include $(srcdir)/kexec/arch/alpha/Makefile
 include $(srcdir)/kexec/arch/arm/Makefile
 include $(srcdir)/kexec/arch/i386/Makefile
kexec/dt-ops.c new file +145 -0

145 lines not on this page · raw message

kexec/dt-ops.h new file +13 -0
new file mode 100644
index 0000000..e70d15d
@@ -0,0 +1,13 @@
+#if !defined(KEXEC_DT_OPS_H)
+#define KEXEC_DT_OPS_H
+
+#include <sys/types.h>
+
+int dtb_set_initrd(char **dtb, off_t *dtb_size, off_t start, off_t end);
+int dtb_set_bootargs(char **dtb, off_t *dtb_size, const char *command_line);
+int dtb_set_property(char **dtb, off_t *dtb_size, const char *node,
+	const char *prop, const void *value, int value_len);
+
+int dtb_delete_property(char *dtb, const char *node, const char *prop);
+
+#endif
Signature · 8 lines
2.7.4



_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
#2 lore raw

PATCH v6 2/3 arm64: Add arm64 kexec support

In reply to Geoff Levand

Add kexec reboot support for ARM64 platforms.

---
 configure.ac                            |   3 +
 kexec/Makefile                          |   1 +
 kexec/arch/arm64/Makefile               |  40 +++
 kexec/arch/arm64/crashdump-arm64.c      |  21 ++
 kexec/arch/arm64/crashdump-arm64.h      |  12 +
 kexec/arch/arm64/image-header.h         | 146 ++++++++
 kexec/arch/arm64/include/arch/options.h |  39 ++
 kexec/arch/arm64/kexec-arm64.c          | 615 ++++++++++++++++++++++++++++++++
 kexec/arch/arm64/kexec-arm64.h          |  71 ++++
 kexec/arch/arm64/kexec-elf-arm64.c      | 146 ++++++++
 kexec/arch/arm64/kexec-image-arm64.c    |  41 +++
 kexec/kexec-syscall.h                   |   8 +-
 purgatory/Makefile                      |   1 +
 purgatory/arch/arm64/Makefile           |  18 +
 purgatory/arch/arm64/entry.S            |  51 +++
 purgatory/arch/arm64/purgatory-arm64.c  |  19 +
 16 files changed, 1230 insertions(+), 2 deletions(-)
 create mode 100644 kexec/arch/arm64/Makefile
 create mode 100644 kexec/arch/arm64/crashdump-arm64.c
 create mode 100644 kexec/arch/arm64/crashdump-arm64.h
 create mode 100644 kexec/arch/arm64/image-header.h
 create mode 100644 kexec/arch/arm64/include/arch/options.h
 create mode 100644 kexec/arch/arm64/kexec-arm64.c
 create mode 100644 kexec/arch/arm64/kexec-arm64.h
 create mode 100644 kexec/arch/arm64/kexec-elf-arm64.c
 create mode 100644 kexec/arch/arm64/kexec-image-arm64.c
 create mode 100644 purgatory/arch/arm64/Makefile
 create mode 100644 purgatory/arch/arm64/entry.S
 create mode 100644 purgatory/arch/arm64/purgatory-arm64.c
configure.ac +3 -0
index 736da6e..ba89075 100644
@@ -34,6 +34,9 @@ case $target_cpu in
 		ARCH="ppc64"
 		SUBARCH="LE"
 		;;
+	aarch64* )
+		ARCH="arm64"
+		;;
 	arm* )
 		ARCH="arm"
 		;;
kexec/Makefile +1 -0
index cc3f08b..39f365f 100644
@@ -79,6 +79,7 @@ KEXEC_SRCS			+= $($(ARCH)_DT_OPS)
 
 include $(srcdir)/kexec/arch/alpha/Makefile
 include $(srcdir)/kexec/arch/arm/Makefile
+include $(srcdir)/kexec/arch/arm64/Makefile
 include $(srcdir)/kexec/arch/i386/Makefile
 include $(srcdir)/kexec/arch/ia64/Makefile
 include $(srcdir)/kexec/arch/m68k/Makefile
kexec/arch/arm64/Makefile new file +40 -0
new file mode 100644
index 0000000..37414dc
@@ -0,0 +1,40 @@
+
+arm64_FS2DT += kexec/fs2dt.c
+arm64_FS2DT_INCLUDE += -include $(srcdir)/kexec/arch/arm64/kexec-arm64.h \
+	-include $(srcdir)/kexec/arch/arm64/crashdump-arm64.h
+
+arm64_DT_OPS += kexec/dt-ops.c
+
+arm64_CPPFLAGS += -I $(srcdir)/kexec/
+
+arm64_KEXEC_SRCS += \
+	kexec/arch/arm64/kexec-arm64.c \
+	kexec/arch/arm64/kexec-image-arm64.c \
+	kexec/arch/arm64/kexec-elf-arm64.c \
+	kexec/arch/arm64/crashdump-arm64.c
+
+arm64_ARCH_REUSE_INITRD =
+arm64_ADD_SEGMENT =
+arm64_VIRT_TO_PHYS =
+arm64_PHYS_TO_VIRT =
+
+dist += $(arm64_KEXEC_SRCS) \
+	kexec/arch/arm64/Makefile \
+	kexec/arch/arm64/kexec-arm64.h \
+	kexec/arch/arm64/crashdump-arm64.h
+
+ifdef HAVE_LIBFDT
+
+LIBS += -lfdt
+
+else
+
+include $(srcdir)/kexec/libfdt/Makefile.libfdt
+
+libfdt_SRCS += $(LIBFDT_SRCS:%=kexec/libfdt/%)
+
+arm64_CPPFLAGS += -I$(srcdir)/kexec/libfdt
+
+arm64_KEXEC_SRCS += $(libfdt_SRCS)
+
+endif
kexec/arch/arm64/crashdump-arm64.c new file +21 -0
new file mode 100644
index 0000000..d2272c8
@@ -0,0 +1,21 @@
+/*
+ * ARM64 crashdump.
+ */
+
+#define _GNU_SOURCE
+
+#include <errno.h>
+#include <linux/elf.h>
+
+#include "kexec.h"
+#include "crashdump.h"
+#include "crashdump-arm64.h"
+#include "kexec-arm64.h"
+#include "kexec-elf.h"
+
+struct memory_ranges usablemem_rgns = {};
+
+int is_crashkernel_mem_reserved(void)
+{
+	return 0;
+}
kexec/arch/arm64/crashdump-arm64.h new file +12 -0
new file mode 100644
index 0000000..f33c7a2
@@ -0,0 +1,12 @@
+/*
+ * ARM64 crashdump.
+ */
+
+#if !defined(CRASHDUMP_ARM64_H)
+#define CRASHDUMP_ARM64_H
+
+#include "kexec.h"
+
+extern struct memory_ranges usablemem_rgns;
+
+#endif
kexec/arch/arm64/image-header.h new file +146 -0

146 lines not on this page · raw message

kexec/arch/arm64/include/arch/options.h new file +39 -0
new file mode 100644
index 0000000..a17d933
@@ -0,0 +1,39 @@
+#if !defined(KEXEC_ARCH_ARM64_OPTIONS_H)
+#define KEXEC_ARCH_ARM64_OPTIONS_H
+
+#define OPT_APPEND		((OPT_MAX)+0)
+#define OPT_DTB			((OPT_MAX)+1)
+#define OPT_INITRD		((OPT_MAX)+2)
+#define OPT_REUSE_CMDLINE	((OPT_MAX)+3)
+#define OPT_ARCH_MAX		((OPT_MAX)+4)
+
+#define KEXEC_ARCH_OPTIONS \
+	KEXEC_OPTIONS \
+	{ "append",        1, NULL, OPT_APPEND }, \
+	{ "command-line",  1, NULL, OPT_APPEND }, \
+	{ "dtb",           1, NULL, OPT_DTB }, \
+	{ "initrd",        1, NULL, OPT_INITRD }, \
+	{ "ramdisk",       1, NULL, OPT_INITRD }, \
+	{ "reuse-cmdline", 0, NULL, OPT_REUSE_CMDLINE }, \
+
+#define KEXEC_ARCH_OPT_STR KEXEC_OPT_STR /* Only accept long arch options. */
+#define KEXEC_ALL_OPTIONS KEXEC_ARCH_OPTIONS
+#define KEXEC_ALL_OPT_STR KEXEC_ARCH_OPT_STR
+
+static const char arm64_opts_usage[] __attribute__ ((unused)) =
+"     --append=STRING       Set the kernel command line to STRING.\n"
+"     --command-line=STRING Set the kernel command line to STRING.\n"
+"     --dtb=FILE            Use FILE as the device tree blob.\n"
+"     --initrd=FILE         Use FILE as the kernel initial ramdisk.\n"
+"     --ramdisk=FILE        Use FILE as the kernel initial ramdisk.\n"
+"     --reuse-cmdline       Use kernel command line from running system.\n";
+
+struct arm64_opts {
+	const char *command_line;
+	const char *dtb;
+	const char *initrd;
+};
+
+extern struct arm64_opts arm64_opts;
+
+#endif
kexec/arch/arm64/kexec-arm64.c new file +615 -0

615 lines not on this page · raw message

kexec/arch/arm64/kexec-arm64.h new file +71 -0

71 lines not on this page · raw message

kexec/arch/arm64/kexec-elf-arm64.c new file +146 -0

146 lines not on this page · raw message

kexec/arch/arm64/kexec-image-arm64.c new file +41 -0

41 lines not on this page · raw message

kexec/kexec-syscall.h +6 -2
index ce2e20b..c0d0bea 100644
@@ -39,8 +39,8 @@
 #ifdef __s390__
 #define __NR_kexec_load		277
 #endif
-#ifdef __arm__
-#define __NR_kexec_load		__NR_SYSCALL_BASE + 347  
+#if defined(__arm__) || defined(__arm64__)
+#define __NR_kexec_load		__NR_SYSCALL_BASE + 347
 #endif
 #if defined(__mips__)
 #define __NR_kexec_load                4311
@@ -108,6 +108,7 @@ static inline long kexec_file_load(int kernel_fd, int initrd_fd,
 #define KEXEC_ARCH_PPC64   (21 << 16)
 #define KEXEC_ARCH_IA_64   (50 << 16)
 #define KEXEC_ARCH_ARM     (40 << 16)
+#define KEXEC_ARCH_ARM64   (183 << 16)
 #define KEXEC_ARCH_S390    (22 << 16)
 #define KEXEC_ARCH_SH      (42 << 16)
 #define KEXEC_ARCH_MIPS_LE (10 << 16)
@@ -153,5 +154,8 @@ static inline long kexec_file_load(int kernel_fd, int initrd_fd,
 #ifdef __m68k__
 #define KEXEC_ARCH_NATIVE	KEXEC_ARCH_68K
 #endif
+#if defined(__arm64__)
+#define KEXEC_ARCH_NATIVE	KEXEC_ARCH_ARM64
+#endif
 
 #endif /* KEXEC_SYSCALL_H */
purgatory/Makefile +1 -0
index 2b5c061..ca0443c 100644
@@ -19,6 +19,7 @@ dist += purgatory/Makefile $(PURGATORY_SRCS)				\
 
 include $(srcdir)/purgatory/arch/alpha/Makefile
 include $(srcdir)/purgatory/arch/arm/Makefile
+include $(srcdir)/purgatory/arch/arm64/Makefile
 include $(srcdir)/purgatory/arch/i386/Makefile
 include $(srcdir)/purgatory/arch/ia64/Makefile
 include $(srcdir)/purgatory/arch/mips/Makefile
purgatory/arch/arm64/Makefile new file +18 -0
new file mode 100644
index 0000000..636abea
@@ -0,0 +1,18 @@
+
+arm64_PURGATORY_EXTRA_CFLAGS = \
+	-mcmodel=large \
+	-fno-stack-protector \
+	-fno-asynchronous-unwind-tables \
+	-Wundef \
+	-Werror-implicit-function-declaration \
+	-Wdeclaration-after-statement \
+	-Werror=implicit-int \
+	-Werror=strict-prototypes
+
+arm64_PURGATORY_SRCS += \
+	purgatory/arch/arm64/entry.S \
+	purgatory/arch/arm64/purgatory-arm64.c
+
+dist += \
+	$(arm64_PURGATORY_SRCS) \
+	purgatory/arch/arm64/Makefile
purgatory/arch/arm64/entry.S new file +51 -0

52 lines not on this page · raw message

purgatory/arch/arm64/purgatory-arm64.c new file +19 -0
new file mode 100644
index 0000000..fe50fcf
@@ -0,0 +1,19 @@
+/*
+ * ARM64 purgatory.
+ */
+
+#include <stdint.h>
+#include <purgatory.h>
+
+void putchar(int ch)
+{
+	/* Nothing for now */
+}
+
+void post_verification_setup_arch(void)
+{
+}
+
+void setup_arch(void)
+{
+}
Signature · 8 lines
2.7.4



_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
#3 lore raw

PATCH v6 3/3 arm64: Add support for binary image files

In reply to Geoff Levand

From: Pratyush Anand <[email protected]>

[Reworked and cleaned up]
---
 kexec/arch/arm64/kexec-image-arm64.c | 49 ++++++++++++++++++++++++++++++++----
 1 file changed, 44 insertions(+), 5 deletions(-)
kexec/arch/arm64/kexec-image-arm64.c +44 -5
index 42d2ea7..960ed96 100644
@@ -3,7 +3,9 @@
  */
 
 #define _GNU_SOURCE
+
 #include "kexec-arm64.h"
+#include <limits.h>
 
 int image_arm64_probe(const char *kernel_buf, off_t kernel_size)
 {
@@ -21,14 +23,53 @@ int image_arm64_probe(const char *kernel_buf, off_t kernel_size)
 		return -1;
 	}
 
-	fprintf(stderr, "kexec: ARM64 binary image files are currently NOT SUPPORTED.\n");
-	return -1;
+	return 0;
 }
 
 int image_arm64_load(int argc, char **argv, const char *kernel_buf,
 	off_t kernel_size, struct kexec_info *info)
 {
-	return -1;
+	const struct arm64_image_header *header;
+	unsigned long kernel_segment;
+	int result;
+
+	header = (const struct arm64_image_header *)(kernel_buf);
+
+	if (arm64_process_image_header(header))
+		return -1;
+
+        kernel_segment = arm64_locate_kernel_segment(info);
+
+        if (kernel_segment == ULONG_MAX) {
+                dbgprintf("%s: Kernel segment is not allocated\n", __func__);
+                result = -EFAILED;
+                goto exit;
+        }
+
+	dbgprintf("%s: kernel_segment: %016lx\n", __func__, kernel_segment);
+	dbgprintf("%s: text_offset:    %016lx\n", __func__,
+		arm64_mem.text_offset);
+	dbgprintf("%s: image_size:     %016lx\n", __func__,
+		arm64_mem.image_size);
+	dbgprintf("%s: phys_offset:    %016lx\n", __func__,
+		arm64_mem.phys_offset);
+	dbgprintf("%s: vp_offset:      %016lx\n", __func__,
+		arm64_mem.vp_offset);
+	dbgprintf("%s: PE format:      %s\n", __func__,
+		(arm64_header_check_pe_sig(header) ? "yes" : "no"));
+
+	/* load the kernel */
+	add_segment_phys_virt(info, kernel_buf, kernel_size,
+			kernel_segment + arm64_mem.text_offset,
+			arm64_mem.image_size, 0);
+
+	result = arm64_load_other_segments(info, kernel_segment
+		+ arm64_mem.text_offset);
+
+exit:
+        if (result)
+                fprintf(stderr, "kexec: load failed.\n");
+        return result;
 }
 
 void image_arm64_usage(void)
@@ -36,6 +77,4 @@ void image_arm64_usage(void)
 	printf(
 "     An ARM64 binary image, compressed or not, big or little endian.\n"
 "     Typically an Image, Image.gz or Image.lzma file.\n\n");
-	printf(
-"     ARM64 binary image files are currently NOT SUPPORTED.\n\n");
 }
Signature · 7 lines
2.7.4


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
#4 lore raw
In reply to Geoff Levand

Hi Geoff,

Quoted 1 line · Geoff Levand

This series adds the core support for kexec re-boot on ARM64.

I tested this series with mustang and seattle and they work.

So you can use my "Tested-By: Pratyush Anand <[email protected]>".

Just one Nitpick: In patch 2/3 arm64_header_check_msb(), arm64_header_page_size() and arm64_header_placement() have been defined but they have not been used anywhere. So, may be they can be removed.

~Pratyush

Quoted 101 lines

Linux kernel support for ARM64 kexec reboot has been merged in v4.8-rc1 with the expectation that it will be included in the v4.8 stable kernel release.

For ARM64 kdump support see Takahiro's latest kdump patches [1].

[1] http://lists.infradead.org/pipermail/kexec

Changes for v6 (Sep , 2016, 2m):

o Remove the get_memory_ranges_dt() routine.
o Rename dtb_[12] to dtb_{proc,sys,user}.

Changes for v5 (Sep 1, 2016, 2m):

o Add common routine arm64_locate_kernel_segment().

Changes for v4 (Aug 18, 2016, 1m):

o Fix some error return values and error messages.
o Add enum arm64_header_page_size.
o Rename page_offset to vp_offset.

Changes for v3 (Aug 10, 2016, 1m):

o Rebase to 2.0.13.
o Add support for flag bits 1-3 to arm64 image-header.h.
o Fix OPT_ARCH_MAX value.
o Use fdt_pack() in dtb_set_property().
o Remove patch ("kexec: (bugfix) calc correct end address of memory ranges in device tree").

Changes for v2 (July 26, 2016, 0m):

o Inline some small routines.
o Reformat some dbgprintf messages.
o Remove debug_brk from entry.S
o Change arm64_image_header.flags to uint64_t.
o Look in iomem then dt for mem info.
o Remove check_cpu_nodes.
o Remove purgatory printing.

First submission v1 (July 20, 2016).

-Geoff

The following changes since commit 67488beb0a6ee8ad2c0b05f721a9e00041fab93a:

kexec-tools 2.0.13 (2016-08-08 12:26:44 +0200)

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/geoff/kexec-tools.git for-merge-arm64-v6

for you to fetch changes up to a9f1fafd7c248d33768177438742b90bc4338202:

arm64: Add support for binary image files (2016-09-21 11:04:03 -0700)

----------------------------------------------------------------
Geoff Levand (2):
kexec: Add common device tree routines
arm64: Add arm64 kexec support

Pratyush Anand (1):
arm64: Add support for binary image files

 configure.ac                            |   3 +
 kexec/Makefile                          |   5 +
 kexec/arch/arm64/Makefile               |  40 +++
 kexec/arch/arm64/crashdump-arm64.c      |  21 ++
 kexec/arch/arm64/crashdump-arm64.h      |  12 +
 kexec/arch/arm64/image-header.h         | 146 ++++++++
 kexec/arch/arm64/include/arch/options.h |  39 ++
 kexec/arch/arm64/kexec-arm64.c          | 615 ++++++++++++++++++++++++++++++++
 kexec/arch/arm64/kexec-arm64.h          |  71 ++++
 kexec/arch/arm64/kexec-elf-arm64.c      | 146 ++++++++
 kexec/arch/arm64/kexec-image-arm64.c    |  80 +++++
 kexec/dt-ops.c                          | 145 ++++++++
 kexec/dt-ops.h                          |  13 +
 kexec/kexec-syscall.h                   |   8 +-
 purgatory/Makefile                      |   1 +
 purgatory/arch/arm64/Makefile           |  18 +
 purgatory/arch/arm64/entry.S            |  51 +++
 purgatory/arch/arm64/purgatory-arm64.c  |  19 +
 18 files changed, 1431 insertions(+), 2 deletions(-)
 create mode 100644 kexec/arch/arm64/Makefile
 create mode 100644 kexec/arch/arm64/crashdump-arm64.c
 create mode 100644 kexec/arch/arm64/crashdump-arm64.h
 create mode 100644 kexec/arch/arm64/image-header.h
 create mode 100644 kexec/arch/arm64/include/arch/options.h
 create mode 100644 kexec/arch/arm64/kexec-arm64.c
 create mode 100644 kexec/arch/arm64/kexec-arm64.h
 create mode 100644 kexec/arch/arm64/kexec-elf-arm64.c
 create mode 100644 kexec/arch/arm64/kexec-image-arm64.c
 create mode 100644 kexec/dt-ops.c
 create mode 100644 kexec/dt-ops.h
 create mode 100644 purgatory/arch/arm64/Makefile
 create mode 100644 purgatory/arch/arm64/entry.S
 create mode 100644 purgatory/arch/arm64/purgatory-arm64.c
Signature · 1 line
2.7.4
Tested-by on the v6 series
#5 lore raw
In reply to Geoff Levand
Quoted 2 lines · Geoff Levand

This series adds the core support for kexec re-boot on ARM64.

I also tested on seattle.

Quoted 89 lines

Linux kernel support for ARM64 kexec reboot has been merged in v4.8-rc1 with the expectation that it will be included in the v4.8 stable kernel release.

For ARM64 kdump support see Takahiro's latest kdump patches [1].

[1] http://lists.infradead.org/pipermail/kexec

Changes for v6 (Sep , 2016, 2m):

o Remove the get_memory_ranges_dt() routine.
o Rename dtb_[12] to dtb_{proc,sys,user}.

Changes for v5 (Sep 1, 2016, 2m):

o Add common routine arm64_locate_kernel_segment().

Changes for v4 (Aug 18, 2016, 1m):

o Fix some error return values and error messages.
o Add enum arm64_header_page_size.
o Rename page_offset to vp_offset.

Changes for v3 (Aug 10, 2016, 1m):

o Rebase to 2.0.13.
o Add support for flag bits 1-3 to arm64 image-header.h.
o Fix OPT_ARCH_MAX value.
o Use fdt_pack() in dtb_set_property().
o Remove patch ("kexec: (bugfix) calc correct end address of memory ranges in device tree").

Changes for v2 (July 26, 2016, 0m):

o Inline some small routines.
o Reformat some dbgprintf messages.
o Remove debug_brk from entry.S
o Change arm64_image_header.flags to uint64_t.
o Look in iomem then dt for mem info.
o Remove check_cpu_nodes.
o Remove purgatory printing.

First submission v1 (July 20, 2016).

-Geoff

The following changes since commit 67488beb0a6ee8ad2c0b05f721a9e00041fab93a:

kexec-tools 2.0.13 (2016-08-08 12:26:44 +0200)

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/geoff/kexec-tools.git for-merge-arm64-v6

for you to fetch changes up to a9f1fafd7c248d33768177438742b90bc4338202:

arm64: Add support for binary image files (2016-09-21 11:04:03 -0700)

----------------------------------------------------------------
Geoff Levand (2):
kexec: Add common device tree routines
arm64: Add arm64 kexec support

Pratyush Anand (1):
arm64: Add support for binary image files

 configure.ac                            |   3 +
 kexec/Makefile                          |   5 +
 kexec/arch/arm64/Makefile               |  40 +++
 kexec/arch/arm64/crashdump-arm64.c      |  21 ++
 kexec/arch/arm64/crashdump-arm64.h      |  12 +
 kexec/arch/arm64/image-header.h         | 146 ++++++++
 kexec/arch/arm64/include/arch/options.h |  39 ++
 kexec/arch/arm64/kexec-arm64.c          | 615 ++++++++++++++++++++++++++++++++
 kexec/arch/arm64/kexec-arm64.h          |  71 ++++
 kexec/arch/arm64/kexec-elf-arm64.c      | 146 ++++++++
 kexec/arch/arm64/kexec-image-arm64.c    |  80 +++++
 kexec/dt-ops.c                          | 145 ++++++++
 kexec/dt-ops.h                          |  13 +
 kexec/kexec-syscall.h                   |   8 +-
 purgatory/Makefile                      |   1 +
 purgatory/arch/arm64/Makefile           |  18 +
 purgatory/arch/arm64/entry.S            |  51 +++
 purgatory/arch/arm64/purgatory-arm64.c  |  19 +
 18 files changed, 1431 insertions(+), 2 deletions(-)
 create mode 100644 kexec/arch/arm64/Makefile
 create mode 100644 kexec/arch/arm64/crashdump-arm64.c
 create mode 100644 kexec/arch/arm64/crashdump-arm64.h
 create mode 100644 kexec/arch/arm64/image-header.h
 create mode 100644 kexec/arch/arm64/include/arch/options.h
 create mode 100644 kexec/arch/arm64/kexec-arm64.c
Quoted 9 lines
 create mode 100644 kexec/arch/arm64/kexec-arm64.h
 create mode 100644 kexec/arch/arm64/kexec-elf-arm64.c
 create mode 100644 kexec/arch/arm64/kexec-image-arm64.c
 create mode 100644 kexec/dt-ops.c
 create mode 100644 kexec/dt-ops.h
 create mode 100644 purgatory/arch/arm64/Makefile
 create mode 100644 purgatory/arch/arm64/entry.S
 create mode 100644 purgatory/arch/arm64/purgatory-arm64.c

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

#6 lore raw
Quoted 9 lines · Matthias Brugger
Quoted 2 lines · Geoff Levand

This series adds the core support for kexec re-boot on ARM64.

I also tested on seattle.

Quoted 5 lines · Pratyush Anand

Hi Geoff,

Quoted 1 line · Geoff Levand

This series adds the core support for kexec re-boot on ARM64.

Quoted 7 lines

I tested this series with mustang and seattle and they work.

So you can use my "Tested-By: Pratyush Anand <[email protected]>".

Just one Nitpick: In patch 2/3 arm64_header_check_msb(), arm64_header_page_size() and arm64_header_placement() have been defined but they have not been used anywhere. So, may be they can be removed.

Thanks everyone, I have queued this up with the above tags.

Please consider a follow-up patch to remove the functions mentioned above.

FWIW I tested v5 of this patchset on Renesas Gen3 R-Car H3 and M3-W and it seems to work fine.

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec