提交 99c62dd7 编写于 作者: K Kumar Gala 提交者: Paul Mackerras

[POWERPC] Remove and replace uses of PPC_MEMSTART with memstart_addr

A number of users of PPC_MEMSTART (40x, ppc_mmu_32) can just always
use 0 as we don't support booting these kernels at non-zero physical
addresses since their exception vectors must be at 0 (or 0xfffx_xxxx).

For the sub-arches that support relocatable interrupt vectors
(book-e), it's reasonable to have memory start at a non-zero physical
address.  For those cases use the variable memstart_addr instead of
the #define PPC_MEMSTART since the only uses of PPC_MEMSTART are for
initialization and in the future we can set memstart_addr at runtime
to have a relocatable kernel.
Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
Signed-off-by: NPaul Mackerras <paulus@samba.org>
上级 1993cbf4
...@@ -97,7 +97,7 @@ unsigned long __init mmu_mapin_ram(void) ...@@ -97,7 +97,7 @@ unsigned long __init mmu_mapin_ram(void)
phys_addr_t p; phys_addr_t p;
v = KERNELBASE; v = KERNELBASE;
p = PPC_MEMSTART; p = 0;
s = total_lowmem; s = total_lowmem;
if (__map_without_ltlbs) if (__map_without_ltlbs)
......
...@@ -53,13 +53,12 @@ ...@@ -53,13 +53,12 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/setup.h> #include <asm/setup.h>
#include "mmu_decl.h"
extern void loadcam_entry(unsigned int index); extern void loadcam_entry(unsigned int index);
unsigned int tlbcam_index; unsigned int tlbcam_index;
unsigned int num_tlbcam_entries; unsigned int num_tlbcam_entries;
static unsigned long __cam0, __cam1, __cam2; static unsigned long __cam0, __cam1, __cam2;
extern unsigned long total_lowmem;
extern unsigned long __max_low_memory;
extern unsigned long __initial_memory_limit;
#define MAX_LOW_MEM CONFIG_LOWMEM_SIZE #define MAX_LOW_MEM CONFIG_LOWMEM_SIZE
#define NUM_TLBCAMS (16) #define NUM_TLBCAMS (16)
...@@ -165,15 +164,15 @@ void invalidate_tlbcam_entry(int index) ...@@ -165,15 +164,15 @@ void invalidate_tlbcam_entry(int index)
void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1, void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1,
unsigned long cam2) unsigned long cam2)
{ {
settlbcam(0, PAGE_OFFSET, PPC_MEMSTART, cam0, _PAGE_KERNEL, 0); settlbcam(0, PAGE_OFFSET, memstart_addr, cam0, _PAGE_KERNEL, 0);
tlbcam_index++; tlbcam_index++;
if (cam1) { if (cam1) {
tlbcam_index++; tlbcam_index++;
settlbcam(1, PAGE_OFFSET+cam0, PPC_MEMSTART+cam0, cam1, _PAGE_KERNEL, 0); settlbcam(1, PAGE_OFFSET+cam0, memstart_addr+cam0, cam1, _PAGE_KERNEL, 0);
} }
if (cam2) { if (cam2) {
tlbcam_index++; tlbcam_index++;
settlbcam(2, PAGE_OFFSET+cam0+cam1, PPC_MEMSTART+cam0+cam1, cam2, _PAGE_KERNEL, 0); settlbcam(2, PAGE_OFFSET+cam0+cam1, memstart_addr+cam0+cam1, cam2, _PAGE_KERNEL, 0);
} }
} }
......
...@@ -59,8 +59,8 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); ...@@ -59,8 +59,8 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
unsigned long total_memory; unsigned long total_memory;
unsigned long total_lowmem; unsigned long total_lowmem;
unsigned long ppc_memstart; phys_addr_t memstart_addr;
unsigned long ppc_memoffset = PAGE_OFFSET; phys_addr_t lowmem_end_addr;
int boot_mapsize; int boot_mapsize;
#ifdef CONFIG_PPC_PMAC #ifdef CONFIG_PPC_PMAC
...@@ -145,8 +145,7 @@ void __init MMU_init(void) ...@@ -145,8 +145,7 @@ void __init MMU_init(void)
printk(KERN_WARNING "Only using first contiguous memory region"); printk(KERN_WARNING "Only using first contiguous memory region");
} }
total_memory = lmb_end_of_DRAM(); total_lowmem = total_memory = lmb_end_of_DRAM() - memstart_addr;
total_lowmem = total_memory;
#ifdef CONFIG_FSL_BOOKE #ifdef CONFIG_FSL_BOOKE
/* Freescale Book-E parts expect lowmem to be mapped by fixed TLB /* Freescale Book-E parts expect lowmem to be mapped by fixed TLB
......
...@@ -51,6 +51,7 @@ extern unsigned long __max_low_memory; ...@@ -51,6 +51,7 @@ extern unsigned long __max_low_memory;
extern unsigned long __initial_memory_limit; extern unsigned long __initial_memory_limit;
extern unsigned long total_memory; extern unsigned long total_memory;
extern unsigned long total_lowmem; extern unsigned long total_lowmem;
extern phys_addr_t memstart_addr;
/* ...and now those things that may be slightly different between processor /* ...and now those things that may be slightly different between processor
* architectures. -- Dan * architectures. -- Dan
......
...@@ -281,12 +281,13 @@ int map_page(unsigned long va, phys_addr_t pa, int flags) ...@@ -281,12 +281,13 @@ int map_page(unsigned long va, phys_addr_t pa, int flags)
*/ */
void __init mapin_ram(void) void __init mapin_ram(void)
{ {
unsigned long v, p, s, f; unsigned long v, s, f;
phys_addr_t p;
int ktext; int ktext;
s = mmu_mapin_ram(); s = mmu_mapin_ram();
v = KERNELBASE + s; v = KERNELBASE + s;
p = PPC_MEMSTART + s; p = memstart_addr + s;
for (; s < total_lowmem; s += PAGE_SIZE) { for (; s < total_lowmem; s += PAGE_SIZE) {
ktext = ((char *) v >= _stext && (char *) v < etext); ktext = ((char *) v >= _stext && (char *) v < etext);
f = ktext ?_PAGE_RAM_TEXT : _PAGE_RAM; f = ktext ?_PAGE_RAM_TEXT : _PAGE_RAM;
......
...@@ -82,7 +82,6 @@ unsigned long __init mmu_mapin_ram(void) ...@@ -82,7 +82,6 @@ unsigned long __init mmu_mapin_ram(void)
#else #else
unsigned long tot, bl, done; unsigned long tot, bl, done;
unsigned long max_size = (256<<20); unsigned long max_size = (256<<20);
unsigned long align;
if (__map_without_bats) { if (__map_without_bats) {
printk(KERN_DEBUG "RAM mapped without BATs\n"); printk(KERN_DEBUG "RAM mapped without BATs\n");
...@@ -93,19 +92,13 @@ unsigned long __init mmu_mapin_ram(void) ...@@ -93,19 +92,13 @@ unsigned long __init mmu_mapin_ram(void)
/* Make sure we don't map a block larger than the /* Make sure we don't map a block larger than the
smallest alignment of the physical address. */ smallest alignment of the physical address. */
/* alignment of PPC_MEMSTART */
align = ~(PPC_MEMSTART-1) & PPC_MEMSTART;
/* set BAT block size to MIN(max_size, align) */
if (align && align < max_size)
max_size = align;
tot = total_lowmem; tot = total_lowmem;
for (bl = 128<<10; bl < max_size; bl <<= 1) { for (bl = 128<<10; bl < max_size; bl <<= 1) {
if (bl * 2 > tot) if (bl * 2 > tot)
break; break;
} }
setbat(2, KERNELBASE, PPC_MEMSTART, bl, _PAGE_RAM); setbat(2, KERNELBASE, 0, bl, _PAGE_RAM);
done = (unsigned long)bat_addrs[2].limit - KERNELBASE + 1; done = (unsigned long)bat_addrs[2].limit - KERNELBASE + 1;
if ((done < tot) && !bat_addrs[3].limit) { if ((done < tot) && !bat_addrs[3].limit) {
/* use BAT3 to cover a bit more */ /* use BAT3 to cover a bit more */
...@@ -113,7 +106,7 @@ unsigned long __init mmu_mapin_ram(void) ...@@ -113,7 +106,7 @@ unsigned long __init mmu_mapin_ram(void)
for (bl = 128<<10; bl < max_size; bl <<= 1) for (bl = 128<<10; bl < max_size; bl <<= 1)
if (bl * 2 > tot) if (bl * 2 > tot)
break; break;
setbat(3, KERNELBASE+done, PPC_MEMSTART+done, bl, _PAGE_RAM); setbat(3, KERNELBASE+done, done, bl, _PAGE_RAM);
done = (unsigned long)bat_addrs[3].limit - KERNELBASE + 1; done = (unsigned long)bat_addrs[3].limit - KERNELBASE + 1;
} }
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
#define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32 #define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32
#define PPC_MEMSTART 0
#ifdef CONFIG_NOT_COHERENT_CACHE #ifdef CONFIG_NOT_COHERENT_CACHE
#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES #define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册