kexec.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _ASM_POWERPC_KEXEC_H
  3. #define _ASM_POWERPC_KEXEC_H
  4. #ifdef __KERNEL__
  5. #if defined(CONFIG_PPC_85xx) || defined(CONFIG_44x)
  6. /*
  7. * On FSL-BookE we setup a 1:1 mapping which covers the first 2GiB of memory
  8. * and therefore we can only deal with memory within this range
  9. */
  10. #define KEXEC_SOURCE_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
  11. #define KEXEC_DESTINATION_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
  12. #define KEXEC_CONTROL_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
  13. #else
  14. /*
  15. * Maximum page that is mapped directly into kernel memory.
  16. * XXX: Since we copy virt we can use any page we allocate
  17. */
  18. #define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
  19. /*
  20. * Maximum address we can reach in physical address mode.
  21. * XXX: I want to allow initrd in highmem. Otherwise set to rmo on LPAR.
  22. */
  23. #define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
  24. /* Maximum address we can use for the control code buffer */
  25. #ifdef __powerpc64__
  26. #define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
  27. #else
  28. /* TASK_SIZE, probably left over from use_mm ?? */
  29. #define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE
  30. #endif
  31. #endif
  32. #define KEXEC_CONTROL_PAGE_SIZE 4096
  33. /* The native architecture */
  34. #ifdef __powerpc64__
  35. #define KEXEC_ARCH KEXEC_ARCH_PPC64
  36. #else
  37. #define KEXEC_ARCH KEXEC_ARCH_PPC
  38. #endif
  39. #define KEXEC_STATE_NONE 0
  40. #define KEXEC_STATE_IRQS_OFF 1
  41. #define KEXEC_STATE_REAL_MODE 2
  42. #ifndef __ASSEMBLY__
  43. #include <asm/reg.h>
  44. typedef void (*crash_shutdown_t)(void);
  45. #ifdef CONFIG_KEXEC_CORE
  46. /*
  47. * This function is responsible for capturing register states if coming
  48. * via panic or invoking dump using sysrq-trigger.
  49. */
  50. static inline void crash_setup_regs(struct pt_regs *newregs,
  51. struct pt_regs *oldregs)
  52. {
  53. if (oldregs)
  54. memcpy(newregs, oldregs, sizeof(*newregs));
  55. else
  56. ppc_save_regs(newregs);
  57. }
  58. extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
  59. master to copy new code to 0 */
  60. extern int crashing_cpu;
  61. extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *));
  62. extern void crash_ipi_callback(struct pt_regs *);
  63. extern int crash_wake_offline;
  64. struct kimage;
  65. struct pt_regs;
  66. extern void default_machine_kexec(struct kimage *image);
  67. extern void default_machine_crash_shutdown(struct pt_regs *regs);
  68. extern int crash_shutdown_register(crash_shutdown_t handler);
  69. extern int crash_shutdown_unregister(crash_shutdown_t handler);
  70. extern void crash_kexec_prepare(void);
  71. extern void crash_kexec_secondary(struct pt_regs *regs);
  72. int __init overlaps_crashkernel(unsigned long start, unsigned long size);
  73. extern void reserve_crashkernel(void);
  74. extern void machine_kexec_mask_interrupts(void);
  75. static inline bool kdump_in_progress(void)
  76. {
  77. return crashing_cpu >= 0;
  78. }
  79. void relocate_new_kernel(unsigned long indirection_page, unsigned long reboot_code_buffer,
  80. unsigned long start_address) __noreturn;
  81. void kexec_copy_flush(struct kimage *image);
  82. #if defined(CONFIG_CRASH_DUMP) && defined(CONFIG_PPC_RTAS)
  83. void crash_free_reserved_phys_range(unsigned long begin, unsigned long end);
  84. #define crash_free_reserved_phys_range crash_free_reserved_phys_range
  85. #endif
  86. #ifdef CONFIG_KEXEC_FILE
  87. extern const struct kexec_file_ops kexec_elf64_ops;
  88. #define ARCH_HAS_KIMAGE_ARCH
  89. struct kimage_arch {
  90. struct crash_mem *exclude_ranges;
  91. unsigned long backup_start;
  92. void *backup_buf;
  93. void *fdt;
  94. };
  95. char *setup_kdump_cmdline(struct kimage *image, char *cmdline,
  96. unsigned long cmdline_len);
  97. int setup_purgatory(struct kimage *image, const void *slave_code,
  98. const void *fdt, unsigned long kernel_load_addr,
  99. unsigned long fdt_load_addr);
  100. #ifdef CONFIG_PPC64
  101. struct kexec_buf;
  102. int arch_kexec_kernel_image_probe(struct kimage *image, void *buf, unsigned long buf_len);
  103. #define arch_kexec_kernel_image_probe arch_kexec_kernel_image_probe
  104. int arch_kimage_file_post_load_cleanup(struct kimage *image);
  105. #define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
  106. int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
  107. #define arch_kexec_locate_mem_hole arch_kexec_locate_mem_hole
  108. int load_crashdump_segments_ppc64(struct kimage *image,
  109. struct kexec_buf *kbuf);
  110. int setup_purgatory_ppc64(struct kimage *image, const void *slave_code,
  111. const void *fdt, unsigned long kernel_load_addr,
  112. unsigned long fdt_load_addr);
  113. unsigned int kexec_extra_fdt_size_ppc64(struct kimage *image);
  114. int setup_new_fdt_ppc64(const struct kimage *image, void *fdt,
  115. unsigned long initrd_load_addr,
  116. unsigned long initrd_len, const char *cmdline);
  117. #endif /* CONFIG_PPC64 */
  118. #endif /* CONFIG_KEXEC_FILE */
  119. #else /* !CONFIG_KEXEC_CORE */
  120. static inline void crash_kexec_secondary(struct pt_regs *regs) { }
  121. static inline int overlaps_crashkernel(unsigned long start, unsigned long size)
  122. {
  123. return 0;
  124. }
  125. static inline void reserve_crashkernel(void) { ; }
  126. static inline int crash_shutdown_register(crash_shutdown_t handler)
  127. {
  128. return 0;
  129. }
  130. static inline int crash_shutdown_unregister(crash_shutdown_t handler)
  131. {
  132. return 0;
  133. }
  134. static inline bool kdump_in_progress(void)
  135. {
  136. return false;
  137. }
  138. static inline void crash_ipi_callback(struct pt_regs *regs) { }
  139. static inline void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *))
  140. {
  141. }
  142. #endif /* CONFIG_KEXEC_CORE */
  143. #ifdef CONFIG_PPC_BOOK3S_64
  144. #include <asm/book3s/64/kexec.h>
  145. #endif
  146. #ifndef reset_sprs
  147. #define reset_sprs reset_sprs
  148. static inline void reset_sprs(void)
  149. {
  150. }
  151. #endif
  152. #endif /* ! __ASSEMBLY__ */
  153. #endif /* __KERNEL__ */
  154. #endif /* _ASM_POWERPC_KEXEC_H */