]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - arch/powerpc/include/asm/kexec.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[mirror_ubuntu-bionic-kernel.git] / arch / powerpc / include / asm / kexec.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
e1df870d
ME
2#ifndef _ASM_POWERPC_KEXEC_H
3#define _ASM_POWERPC_KEXEC_H
88ced031 4#ifdef __KERNEL__
e1df870d 5
674bfa48 6#if defined(CONFIG_FSL_BOOKE) || defined(CONFIG_44x)
b3df895a
SAS
7
8/*
9 * On FSL-BookE we setup a 1:1 mapping which covers the first 2GiB of memory
10 * and therefore we can only deal with memory within this range
11 */
23dcab8f
KG
12#define KEXEC_SOURCE_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
13#define KEXEC_DESTINATION_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
14#define KEXEC_CONTROL_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
b3df895a
SAS
15
16#else
17
e1df870d
ME
18/*
19 * Maximum page that is mapped directly into kernel memory.
20 * XXX: Since we copy virt we can use any page we allocate
21 */
22#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
23
24/*
25 * Maximum address we can reach in physical address mode.
26 * XXX: I want to allow initrd in highmem. Otherwise set to rmo on LPAR.
27 */
28#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
29
30/* Maximum address we can use for the control code buffer */
31#ifdef __powerpc64__
32#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
33#else
34/* TASK_SIZE, probably left over from use_mm ?? */
35#define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE
36#endif
b3df895a 37#endif
e1df870d 38
163f6876 39#define KEXEC_CONTROL_PAGE_SIZE 4096
e1df870d
ME
40
41/* The native architecture */
42#ifdef __powerpc64__
43#define KEXEC_ARCH KEXEC_ARCH_PPC64
44#else
45#define KEXEC_ARCH KEXEC_ARCH_PPC
46#endif
47
1fc711f7
MN
48#define KEXEC_STATE_NONE 0
49#define KEXEC_STATE_IRQS_OFF 1
50#define KEXEC_STATE_REAL_MODE 2
51
2babf5c2 52#ifndef __ASSEMBLY__
73753313 53#include <asm/reg.h>
2babf5c2 54
aee10c61
AB
55typedef void (*crash_shutdown_t)(void);
56
da665885 57#ifdef CONFIG_KEXEC_CORE
cc532915 58
8385a6a3
HM
59/*
60 * This function is responsible for capturing register states if coming
61 * via panic or invoking dump using sysrq-trigger.
62 */
63static inline void crash_setup_regs(struct pt_regs *newregs,
64 struct pt_regs *oldregs)
65{
66 if (oldregs)
67 memcpy(newregs, oldregs, sizeof(*newregs));
73753313
AV
68 else
69 ppc_save_regs(newregs);
73753313 70}
8385a6a3 71
e1df870d
ME
72extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
73 master to copy new code to 0 */
cc532915
ME
74extern int crashing_cpu;
75extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *));
e1df870d 76
3d1229d6 77struct kimage;
cc532915 78struct pt_regs;
3d1229d6
ME
79extern void default_machine_kexec(struct kimage *image);
80extern int default_machine_kexec_prepare(struct kimage *image);
cc532915 81extern void default_machine_crash_shutdown(struct pt_regs *regs);
496b010e
MN
82extern int crash_shutdown_register(crash_shutdown_t handler);
83extern int crash_shutdown_unregister(crash_shutdown_t handler);
cc532915 84
c0ce7d08 85extern void crash_kexec_secondary(struct pt_regs *regs);
2babf5c2 86extern int overlaps_crashkernel(unsigned long start, unsigned long size);
35dd5432 87extern void reserve_crashkernel(void);
c71635d2 88extern void machine_kexec_mask_interrupts(void);
2babf5c2 89
c1caae3d
HB
90static inline bool kdump_in_progress(void)
91{
92 return crashing_cpu >= 0;
93}
94
a0458284
TJB
95#ifdef CONFIG_KEXEC_FILE
96extern struct kexec_file_ops kexec_elf64_ops;
97
ab6b1d1f
TJB
98#ifdef CONFIG_IMA_KEXEC
99#define ARCH_HAS_KIMAGE_ARCH
100
101struct kimage_arch {
102 phys_addr_t ima_buffer_addr;
103 size_t ima_buffer_size;
104};
105#endif
106
a0458284
TJB
107int setup_purgatory(struct kimage *image, const void *slave_code,
108 const void *fdt, unsigned long kernel_load_addr,
109 unsigned long fdt_load_addr);
ab6b1d1f
TJB
110int setup_new_fdt(const struct kimage *image, void *fdt,
111 unsigned long initrd_load_addr, unsigned long initrd_len,
112 const char *cmdline);
467d2782 113int delete_fdt_mem_rsv(void *fdt, unsigned long start, unsigned long size);
a0458284
TJB
114#endif /* CONFIG_KEXEC_FILE */
115
da665885 116#else /* !CONFIG_KEXEC_CORE */
c0ce7d08 117static inline void crash_kexec_secondary(struct pt_regs *regs) { }
2babf5c2
ME
118
119static inline int overlaps_crashkernel(unsigned long start, unsigned long size)
120{
121 return 0;
122}
39931e41 123
35dd5432
ME
124static inline void reserve_crashkernel(void) { ; }
125
aee10c61
AB
126static inline int crash_shutdown_register(crash_shutdown_t handler)
127{
128 return 0;
129}
130
131static inline int crash_shutdown_unregister(crash_shutdown_t handler)
132{
133 return 0;
134}
135
c1caae3d
HB
136static inline bool kdump_in_progress(void)
137{
138 return false;
139}
140
da665885 141#endif /* CONFIG_KEXEC_CORE */
2babf5c2 142#endif /* ! __ASSEMBLY__ */
88ced031 143#endif /* __KERNEL__ */
e1df870d 144#endif /* _ASM_POWERPC_KEXEC_H */