Commit 47310413 authored by Michael Ellerman's avatar Michael Ellerman Committed by Paul Mackerras

[PATCH] powerpc: Kdump header cleanup

We need to know the base address of the kdump kernel even when we're not a
kdump kernel, so add a #define for it. Move the logic that sets the kdump
kernelbase into kdump.h instead of page.h.

Rename kdump_setup() to setup_kdump_trampoline() to make it clearer what it's
doing, and add an empty definition for the !CRASH_DUMP case to avoid a
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 2babf5c2
...@@ -25,6 +25,11 @@ ...@@ -25,6 +25,11 @@
#define DBG(fmt...) #define DBG(fmt...)
#endif #endif
void reserve_kdump_trampoline(void)
{
lmb_reserve(0, KDUMP_RESERVE_LIMIT);
}
static void __init create_trampoline(unsigned long addr) static void __init create_trampoline(unsigned long addr)
{ {
/* The maximum range of a single instruction branch, is the current /* The maximum range of a single instruction branch, is the current
...@@ -39,11 +44,11 @@ static void __init create_trampoline(unsigned long addr) ...@@ -39,11 +44,11 @@ static void __init create_trampoline(unsigned long addr)
create_branch(addr + 4, addr + PHYSICAL_START, 0); create_branch(addr + 4, addr + PHYSICAL_START, 0);
} }
void __init kdump_setup(void) void __init setup_kdump_trampoline(void)
{ {
unsigned long i; unsigned long i;
DBG(" -> kdump_setup()\n"); DBG(" -> setup_kdump_trampoline()\n");
for (i = KDUMP_TRAMPOLINE_START; i < KDUMP_TRAMPOLINE_END; i += 8) { for (i = KDUMP_TRAMPOLINE_START; i < KDUMP_TRAMPOLINE_END; i += 8) {
create_trampoline(i); create_trampoline(i);
...@@ -52,7 +57,7 @@ void __init kdump_setup(void) ...@@ -52,7 +57,7 @@ void __init kdump_setup(void)
create_trampoline(__pa(system_reset_fwnmi) - PHYSICAL_START); create_trampoline(__pa(system_reset_fwnmi) - PHYSICAL_START);
create_trampoline(__pa(machine_check_fwnmi) - PHYSICAL_START); create_trampoline(__pa(machine_check_fwnmi) - PHYSICAL_START);
DBG(" <- kdump_setup()\n"); DBG(" <- setup_kdump_trampoline()\n");
} }
#ifdef CONFIG_PROC_VMCORE #ifdef CONFIG_PROC_VMCORE
......
...@@ -1326,9 +1326,7 @@ void __init early_init_devtree(void *params) ...@@ -1326,9 +1326,7 @@ void __init early_init_devtree(void *params)
/* Reserve LMB regions used by kernel, initrd, dt, etc... */ /* Reserve LMB regions used by kernel, initrd, dt, etc... */
lmb_reserve(PHYSICAL_START, __pa(klimit) - PHYSICAL_START); lmb_reserve(PHYSICAL_START, __pa(klimit) - PHYSICAL_START);
#ifdef CONFIG_CRASH_DUMP reserve_kdump_trampoline();
lmb_reserve(0, KDUMP_RESERVE_LIMIT);
#endif
early_reserve_mem(); early_reserve_mem();
lmb_enforce_memory_limit(memory_limit); lmb_enforce_memory_limit(memory_limit);
......
...@@ -193,9 +193,7 @@ void __init early_setup(unsigned long dt_ptr) ...@@ -193,9 +193,7 @@ void __init early_setup(unsigned long dt_ptr)
/* Probe the machine type */ /* Probe the machine type */
probe_machine(); probe_machine();
#ifdef CONFIG_CRASH_DUMP setup_kdump_trampoline();
kdump_setup();
#endif
DBG("Found, Initializing memory management...\n"); DBG("Found, Initializing memory management...\n");
......
#ifndef _PPC64_KDUMP_H #ifndef _PPC64_KDUMP_H
#define _PPC64_KDUMP_H #define _PPC64_KDUMP_H
/* Kdump kernel runs at 32 MB, change at your peril. */
#define KDUMP_KERNELBASE 0x2000000
/* How many bytes to reserve at zero for kdump. The reserve limit should /* How many bytes to reserve at zero for kdump. The reserve limit should
* be greater or equal to the trampoline's end address. */ * be greater or equal to the trampoline's end address.
* Reserve to the end of the FWNMI area, see head_64.S */
#define KDUMP_RESERVE_LIMIT 0x8000 #define KDUMP_RESERVE_LIMIT 0x8000
#ifdef CONFIG_CRASH_DUMP
#define PHYSICAL_START KDUMP_KERNELBASE
#define KDUMP_TRAMPOLINE_START 0x0100 #define KDUMP_TRAMPOLINE_START 0x0100
#define KDUMP_TRAMPOLINE_END 0x3000 #define KDUMP_TRAMPOLINE_END 0x3000
extern void kdump_setup(void); #else /* !CONFIG_CRASH_DUMP */
#define PHYSICAL_START 0x0
#endif /* CONFIG_CRASH_DUMP */
#ifndef __ASSEMBLY__
#ifdef CONFIG_CRASH_DUMP
extern void reserve_kdump_trampoline(void);
extern void setup_kdump_trampoline(void);
#else /* !CONFIG_CRASH_DUMP */
static inline void reserve_kdump_trampoline(void) { ; }
static inline void setup_kdump_trampoline(void) { ; }
#endif /* CONFIG_CRASH_DUMP */
#endif /* __ASSEMBLY__ */
#endif /* __PPC64_KDUMP_H */ #endif /* __PPC64_KDUMP_H */
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/config.h> #include <linux/config.h>
#include <asm/asm-compat.h> #include <asm/asm-compat.h>
#include <asm/kdump.h>
/* /*
* On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software * On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software
...@@ -52,13 +53,6 @@ ...@@ -52,13 +53,6 @@
* If you want to test if something's a kernel address, use is_kernel_addr(). * If you want to test if something's a kernel address, use is_kernel_addr().
*/ */
#ifdef CONFIG_CRASH_DUMP
/* Kdump kernel runs at 32 MB, change at your peril. */
#define PHYSICAL_START 0x2000000
#else
#define PHYSICAL_START 0x0
#endif
#define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START) #define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START)
#define KERNELBASE (PAGE_OFFSET + PHYSICAL_START) #define KERNELBASE (PAGE_OFFSET + PHYSICAL_START)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment