mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
powerpc/fsl-booke: Fix CONFIG_RELOCATABLE support on FSL Book-E ppc32
The following commit broke CONFIG_RELOCATABLE support on FSL Book-E
parts:
commit 549e8152de
Author: Paul Mackerras <paulus@samba.org>
Date: Sat Aug 30 11:43:47 2008 +1000
powerpc: Make the 64-bit kernel as a position-independent executable
The change to __va and __pa to use PAGE_OFFSET & MEMORY_START causes
problems on the Book-E parts because we don't know MEMORY_START until
after we parse the device tree. We need __va to work properly to even
parse the device tree so we have a chicken an egg. So go back to using
he other definition of __va/__pa on CONFIG_BOOKE and use the
PAGE_OFFSET/MEMORY_START version on "Classic" PPC64.
Also updated casts to handle phys_addr_t being a different size from
unsigned long (ie 36-bit physical on PPC32).
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
parent
b4d0a038e0
commit
dbc9632a8c
@ -108,8 +108,21 @@ extern phys_addr_t kernstart_addr;
|
||||
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
|
||||
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
|
||||
|
||||
#define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET - MEMORY_START))
|
||||
/*
|
||||
* On Book-E parts we need __va to parse the device tree and we can't
|
||||
* determine MEMORY_START until then. However we can determine PHYSICAL_START
|
||||
* from information at hand (program counter, TLB lookup).
|
||||
*
|
||||
* On non-Book-E PPC64 PAGE_OFFSET and MEMORY_START are constants so use
|
||||
* the other definitions for __va & __pa.
|
||||
*/
|
||||
#ifdef CONFIG_BOOKE
|
||||
#define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) - PHYSICAL_START + KERNELBASE))
|
||||
#define __pa(x) ((unsigned long)(x) + PHYSICAL_START - KERNELBASE)
|
||||
#else
|
||||
#define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) + PAGE_OFFSET - MEMORY_START))
|
||||
#define __pa(x) ((unsigned long)(x) - PAGE_OFFSET + MEMORY_START)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Unfortunately the PLT is in the BSS in the PPC32 ELF ABI,
|
||||
|
Loading…
Reference in New Issue
Block a user