aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-02-13 21:13:20 -0500
committerDavid S. Miller <davem@davemloft.net>2008-04-24 02:32:08 -0400
commit3b2a7e23a9808e349bc5fb32327bacc5e81be79c (patch)
tree3f41f419a15df3210113e06bdd785f89f1a39a8c /arch/sparc64
parent4e82c9a606da2b1c1c7ea7dfd8052626a4c6d5d6 (diff)
[SPARC64]: Initialize LMB tables.
Call lmb_add() on available regions, and call lmb_reserve() on the main kernel image and the ramdisk (if any). Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64')
-rw-r--r--arch/sparc64/mm/init.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c
index 21e9267608c7..6eb76243fa9d 100644
--- a/arch/sparc64/mm/init.c
+++ b/arch/sparc64/mm/init.c
@@ -24,6 +24,7 @@
24#include <linux/cache.h> 24#include <linux/cache.h>
25#include <linux/sort.h> 25#include <linux/sort.h>
26#include <linux/percpu.h> 26#include <linux/percpu.h>
27#include <linux/lmb.h>
27 28
28#include <asm/head.h> 29#include <asm/head.h>
29#include <asm/system.h> 30#include <asm/system.h>
@@ -910,6 +911,8 @@ static void __init find_ramdisk(unsigned long phys_base)
910 911
911 initrd_start = ramdisk_image; 912 initrd_start = ramdisk_image;
912 initrd_end = ramdisk_image + sparc_ramdisk_size; 913 initrd_end = ramdisk_image + sparc_ramdisk_size;
914
915 lmb_reserve(initrd_start, initrd_end);
913 } 916 }
914#endif 917#endif
915} 918}
@@ -1337,15 +1340,24 @@ void __init paging_init(void)
1337 sun4v_ktsb_init(); 1340 sun4v_ktsb_init();
1338 } 1341 }
1339 1342
1343 lmb_init();
1344
1340 /* Find available physical memory... */ 1345 /* Find available physical memory... */
1341 read_obp_memory("available", &pavail[0], &pavail_ents); 1346 read_obp_memory("available", &pavail[0], &pavail_ents);
1342 1347
1343 phys_base = 0xffffffffffffffffUL; 1348 phys_base = 0xffffffffffffffffUL;
1344 for (i = 0; i < pavail_ents; i++) 1349 for (i = 0; i < pavail_ents; i++) {
1345 phys_base = min(phys_base, pavail[i].phys_addr); 1350 phys_base = min(phys_base, pavail[i].phys_addr);
1351 lmb_add(pavail[i].phys_addr, pavail[i].reg_size);
1352 }
1353
1354 lmb_reserve(kern_base, kern_size);
1346 1355
1347 find_ramdisk(phys_base); 1356 find_ramdisk(phys_base);
1348 1357
1358 lmb_analyze();
1359 lmb_dump_all();
1360
1349 set_bit(0, mmu_context_bmap); 1361 set_bit(0, mmu_context_bmap);
1350 1362
1351 shift = kern_base + PAGE_OFFSET - ((unsigned long)KERNBASE); 1363 shift = kern_base + PAGE_OFFSET - ((unsigned long)KERNBASE);