Linux Audio

Check our new training course

Loading...
v5.9
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * kexec for arm64
  4 *
  5 * Copyright (C) Linaro.
  6 * Copyright (C) Huawei Futurewei Technologies.
 
 
 
 
  7 */
  8
  9#ifndef _ARM64_KEXEC_H
 10#define _ARM64_KEXEC_H
 11
 12/* Maximum physical address we can use pages from */
 13
 14#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
 15
 16/* Maximum address we can reach in physical address mode */
 17
 18#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
 19
 20/* Maximum address we can use for the control code buffer */
 21
 22#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
 23
 24#define KEXEC_CONTROL_PAGE_SIZE 4096
 25
 26#define KEXEC_ARCH KEXEC_ARCH_AARCH64
 27
 28#ifndef __ASSEMBLY__
 29
 30/**
 31 * crash_setup_regs() - save registers for the panic kernel
 32 *
 33 * @newregs: registers are saved here
 34 * @oldregs: registers to be saved (may be %NULL)
 35 */
 36
 37static inline void crash_setup_regs(struct pt_regs *newregs,
 38				    struct pt_regs *oldregs)
 39{
 40	if (oldregs) {
 41		memcpy(newregs, oldregs, sizeof(*newregs));
 42	} else {
 43		u64 tmp1, tmp2;
 44
 45		__asm__ __volatile__ (
 46			"stp	 x0,   x1, [%2, #16 *  0]\n"
 47			"stp	 x2,   x3, [%2, #16 *  1]\n"
 48			"stp	 x4,   x5, [%2, #16 *  2]\n"
 49			"stp	 x6,   x7, [%2, #16 *  3]\n"
 50			"stp	 x8,   x9, [%2, #16 *  4]\n"
 51			"stp	x10,  x11, [%2, #16 *  5]\n"
 52			"stp	x12,  x13, [%2, #16 *  6]\n"
 53			"stp	x14,  x15, [%2, #16 *  7]\n"
 54			"stp	x16,  x17, [%2, #16 *  8]\n"
 55			"stp	x18,  x19, [%2, #16 *  9]\n"
 56			"stp	x20,  x21, [%2, #16 * 10]\n"
 57			"stp	x22,  x23, [%2, #16 * 11]\n"
 58			"stp	x24,  x25, [%2, #16 * 12]\n"
 59			"stp	x26,  x27, [%2, #16 * 13]\n"
 60			"stp	x28,  x29, [%2, #16 * 14]\n"
 61			"mov	 %0,  sp\n"
 62			"stp	x30,  %0,  [%2, #16 * 15]\n"
 63
 64			"/* faked current PSTATE */\n"
 65			"mrs	 %0, CurrentEL\n"
 66			"mrs	 %1, SPSEL\n"
 67			"orr	 %0, %0, %1\n"
 68			"mrs	 %1, DAIF\n"
 69			"orr	 %0, %0, %1\n"
 70			"mrs	 %1, NZCV\n"
 71			"orr	 %0, %0, %1\n"
 72			/* pc */
 73			"adr	 %1, 1f\n"
 74		"1:\n"
 75			"stp	 %1, %0,   [%2, #16 * 16]\n"
 76			: "=&r" (tmp1), "=&r" (tmp2)
 77			: "r" (newregs)
 78			: "memory"
 79		);
 80	}
 81}
 82
 83#if defined(CONFIG_KEXEC_CORE) && defined(CONFIG_HIBERNATION)
 84extern bool crash_is_nosave(unsigned long pfn);
 85extern void crash_prepare_suspend(void);
 86extern void crash_post_resume(void);
 87#else
 88static inline bool crash_is_nosave(unsigned long pfn) {return false; }
 89static inline void crash_prepare_suspend(void) {}
 90static inline void crash_post_resume(void) {}
 91#endif
 92
 93#ifdef CONFIG_KEXEC_FILE
 94#define ARCH_HAS_KIMAGE_ARCH
 95
 96struct kimage_arch {
 97	void *dtb;
 98	unsigned long dtb_mem;
 99	/* Core ELF header buffer */
100	void *elf_headers;
101	unsigned long elf_headers_mem;
102	unsigned long elf_headers_sz;
103};
104
105extern const struct kexec_file_ops kexec_image_ops;
106
107struct kimage;
108
109extern int arch_kimage_file_post_load_cleanup(struct kimage *image);
110extern int load_other_segments(struct kimage *image,
111		unsigned long kernel_load_addr, unsigned long kernel_size,
112		char *initrd, unsigned long initrd_len,
113		char *cmdline);
114#endif
115
116#endif /* __ASSEMBLY__ */
117
118#endif
v4.10.11
 
 1/*
 2 * kexec for arm64
 3 *
 4 * Copyright (C) Linaro.
 5 * Copyright (C) Huawei Futurewei Technologies.
 6 *
 7 * This program is free software; you can redistribute it and/or modify
 8 * it under the terms of the GNU General Public License version 2 as
 9 * published by the Free Software Foundation.
10 */
11
12#ifndef _ARM64_KEXEC_H
13#define _ARM64_KEXEC_H
14
15/* Maximum physical address we can use pages from */
16
17#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
18
19/* Maximum address we can reach in physical address mode */
20
21#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
22
23/* Maximum address we can use for the control code buffer */
24
25#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
26
27#define KEXEC_CONTROL_PAGE_SIZE 4096
28
29#define KEXEC_ARCH KEXEC_ARCH_AARCH64
30
31#ifndef __ASSEMBLY__
32
33/**
34 * crash_setup_regs() - save registers for the panic kernel
35 *
36 * @newregs: registers are saved here
37 * @oldregs: registers to be saved (may be %NULL)
38 */
39
40static inline void crash_setup_regs(struct pt_regs *newregs,
41				    struct pt_regs *oldregs)
42{
43	/* Empty routine needed to avoid build errors. */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
46#endif /* __ASSEMBLY__ */
47
48#endif