diff options
Diffstat (limited to 'arch/powerpc/mm/init_32.c')
-rw-r--r-- | arch/powerpc/mm/init_32.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c index e1f5ded851f6..977cb1ee5e72 100644 --- a/arch/powerpc/mm/init_32.c +++ b/arch/powerpc/mm/init_32.c | |||
@@ -41,7 +41,6 @@ | |||
41 | #include <asm/machdep.h> | 41 | #include <asm/machdep.h> |
42 | #include <asm/btext.h> | 42 | #include <asm/btext.h> |
43 | #include <asm/tlb.h> | 43 | #include <asm/tlb.h> |
44 | #include <asm/prom.h> | ||
45 | #include <asm/lmb.h> | 44 | #include <asm/lmb.h> |
46 | #include <asm/sections.h> | 45 | #include <asm/sections.h> |
47 | 46 | ||
@@ -133,6 +132,9 @@ void __init MMU_init(void) | |||
133 | /* 601 can only access 16MB at the moment */ | 132 | /* 601 can only access 16MB at the moment */ |
134 | if (PVR_VER(mfspr(SPRN_PVR)) == 1) | 133 | if (PVR_VER(mfspr(SPRN_PVR)) == 1) |
135 | __initial_memory_limit = 0x01000000; | 134 | __initial_memory_limit = 0x01000000; |
135 | /* 8xx can only access 8MB at the moment */ | ||
136 | if (PVR_VER(mfspr(SPRN_PVR)) == 0x50) | ||
137 | __initial_memory_limit = 0x00800000; | ||
136 | 138 | ||
137 | /* parse args from command line */ | 139 | /* parse args from command line */ |
138 | MMU_setup(); | 140 | MMU_setup(); |
@@ -256,3 +258,40 @@ void free_initrd_mem(unsigned long start, unsigned long end) | |||
256 | } | 258 | } |
257 | } | 259 | } |
258 | #endif | 260 | #endif |
261 | |||
262 | #ifdef CONFIG_PROC_KCORE | ||
263 | static struct kcore_list kcore_vmem; | ||
264 | |||
265 | static int __init setup_kcore(void) | ||
266 | { | ||
267 | int i; | ||
268 | |||
269 | for (i = 0; i < lmb.memory.cnt; i++) { | ||
270 | unsigned long base; | ||
271 | unsigned long size; | ||
272 | struct kcore_list *kcore_mem; | ||
273 | |||
274 | base = lmb.memory.region[i].base; | ||
275 | size = lmb.memory.region[i].size; | ||
276 | |||
277 | kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC); | ||
278 | if (!kcore_mem) | ||
279 | panic("%s: kmalloc failed\n", __FUNCTION__); | ||
280 | |||
281 | /* must stay under 32 bits */ | ||
282 | if ( 0xfffffffful - (unsigned long)__va(base) < size) { | ||
283 | size = 0xfffffffful - (unsigned long)(__va(base)); | ||
284 | printk(KERN_DEBUG "setup_kcore: restrict size=%lx\n", | ||
285 | size); | ||
286 | } | ||
287 | |||
288 | kclist_add(kcore_mem, __va(base), size); | ||
289 | } | ||
290 | |||
291 | kclist_add(&kcore_vmem, (void *)VMALLOC_START, | ||
292 | VMALLOC_END-VMALLOC_START); | ||
293 | |||
294 | return 0; | ||
295 | } | ||
296 | module_init(setup_kcore); | ||
297 | #endif | ||