diff options
author | Paul Mackerras <paulus@samba.org> | 2008-11-24 11:53:58 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-11-24 11:53:58 +1100 |
commit | be542fa56b1b5b269a70b4df219d0cbd871f16d2 (patch) | |
tree | a08049a8dd9ef1265b90d01d203da4e3ec0045fc /arch/powerpc | |
parent | 11bac8a026dd38380b52a914ec9bf65fb2ad13e2 (diff) | |
parent | 6612d9b0b8208c2ade3a16b8302a271ec81d45f6 (diff) | |
download | linux-be542fa56b1b5b269a70b4df219d0cbd871f16d2.tar.bz2 |
Merge branch 'merge' of ssh://master.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx into merge
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/kernel/cpu_setup_44x.S | 7 | ||||
-rw-r--r-- | arch/powerpc/mm/40x_mmu.c | 16 |
2 files changed, 20 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/cpu_setup_44x.S b/arch/powerpc/kernel/cpu_setup_44x.S index 80cac984d85d..31c18b52affb 100644 --- a/arch/powerpc/kernel/cpu_setup_44x.S +++ b/arch/powerpc/kernel/cpu_setup_44x.S @@ -34,7 +34,12 @@ _GLOBAL(__setup_cpu_440grx) blr _GLOBAL(__setup_cpu_460ex) _GLOBAL(__setup_cpu_460gt) - b __init_fpu_44x + mflr r4 + bl __init_fpu_44x + bl __fixup_440A_mcheck + mtlr r4 + blr + _GLOBAL(__setup_cpu_440gx) _GLOBAL(__setup_cpu_440spe) b __fixup_440A_mcheck diff --git a/arch/powerpc/mm/40x_mmu.c b/arch/powerpc/mm/40x_mmu.c index cecbbc76f624..29954dc28942 100644 --- a/arch/powerpc/mm/40x_mmu.c +++ b/arch/powerpc/mm/40x_mmu.c @@ -93,7 +93,7 @@ void __init MMU_init_hw(void) unsigned long __init mmu_mapin_ram(void) { - unsigned long v, s; + unsigned long v, s, mapped; phys_addr_t p; v = KERNELBASE; @@ -130,5 +130,17 @@ unsigned long __init mmu_mapin_ram(void) s -= LARGE_PAGE_SIZE_4M; } - return total_lowmem - s; + mapped = total_lowmem - s; + + /* If the size of RAM is not an exact power of two, we may not + * have covered RAM in its entirety with 16 and 4 MiB + * pages. Consequently, restrict the top end of RAM currently + * allocable so that calls to the LMB to allocate PTEs for "tail" + * coverage with normal-sized pages (or other reasons) do not + * attempt to allocate outside the allowed range. + */ + + __initial_memory_limit_addr = memstart_addr + mapped; + + return mapped; } |