diff options
Diffstat (limited to 'arch/sh/kernel/setup.c')
-rw-r--r-- | arch/sh/kernel/setup.c | 63 |
1 files changed, 25 insertions, 38 deletions
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c index 2c9ab2842765..f6a2db12ad78 100644 --- a/arch/sh/kernel/setup.c +++ b/arch/sh/kernel/setup.c | |||
@@ -95,6 +95,7 @@ unsigned long memory_start; | |||
95 | EXPORT_SYMBOL(memory_start); | 95 | EXPORT_SYMBOL(memory_start); |
96 | unsigned long memory_end = 0; | 96 | unsigned long memory_end = 0; |
97 | EXPORT_SYMBOL(memory_end); | 97 | EXPORT_SYMBOL(memory_end); |
98 | unsigned long memory_limit = 0; | ||
98 | 99 | ||
99 | static struct resource mem_resources[MAX_NUMNODES]; | 100 | static struct resource mem_resources[MAX_NUMNODES]; |
100 | 101 | ||
@@ -102,21 +103,12 @@ int l1i_cache_shape, l1d_cache_shape, l2_cache_shape; | |||
102 | 103 | ||
103 | static int __init early_parse_mem(char *p) | 104 | static int __init early_parse_mem(char *p) |
104 | { | 105 | { |
105 | unsigned long size; | 106 | if (!p) |
107 | return 1; | ||
106 | 108 | ||
107 | memory_start = (unsigned long)__va(__MEMORY_START); | 109 | memory_limit = PAGE_ALIGN(memparse(p, &p)); |
108 | size = memparse(p, &p); | ||
109 | |||
110 | if (size > __MEMORY_SIZE) { | ||
111 | printk(KERN_ERR | ||
112 | "Using mem= to increase the size of kernel memory " | ||
113 | "is not allowed.\n" | ||
114 | " Recompile the kernel with the correct value for " | ||
115 | "CONFIG_MEMORY_SIZE.\n"); | ||
116 | return 0; | ||
117 | } | ||
118 | 110 | ||
119 | memory_end = memory_start + size; | 111 | pr_notice("Memory limited to %ldMB\n", memory_limit >> 20); |
120 | 112 | ||
121 | return 0; | 113 | return 0; |
122 | } | 114 | } |
@@ -252,7 +244,7 @@ void __init do_init_bootmem(void) | |||
252 | { | 244 | { |
253 | unsigned long bootmap_size; | 245 | unsigned long bootmap_size; |
254 | unsigned long bootmap_pages, bootmem_paddr; | 246 | unsigned long bootmap_pages, bootmem_paddr; |
255 | u64 total_pages = (lmb_end_of_DRAM() - __MEMORY_START) >> PAGE_SHIFT; | 247 | u64 total_pages = lmb_phys_mem_size() >> PAGE_SHIFT; |
256 | int i; | 248 | int i; |
257 | 249 | ||
258 | bootmap_pages = bootmem_bootmap_pages(total_pages); | 250 | bootmap_pages = bootmem_bootmap_pages(total_pages); |
@@ -277,12 +269,6 @@ void __init do_init_bootmem(void) | |||
277 | } | 269 | } |
278 | 270 | ||
279 | /* | 271 | /* |
280 | * Handle additional early reservations | ||
281 | */ | ||
282 | check_for_initrd(); | ||
283 | reserve_crashkernel(); | ||
284 | |||
285 | /* | ||
286 | * Add all physical memory to the bootmem map and mark each | 272 | * Add all physical memory to the bootmem map and mark each |
287 | * area as present. | 273 | * area as present. |
288 | */ | 274 | */ |
@@ -299,7 +285,7 @@ void __init do_init_bootmem(void) | |||
299 | sparse_memory_present_with_active_regions(0); | 285 | sparse_memory_present_with_active_regions(0); |
300 | } | 286 | } |
301 | 287 | ||
302 | static void __init setup_memory(void) | 288 | static void __init early_reserve_mem(void) |
303 | { | 289 | { |
304 | unsigned long start_pfn; | 290 | unsigned long start_pfn; |
305 | 291 | ||
@@ -326,11 +312,11 @@ static void __init setup_memory(void) | |||
326 | if (CONFIG_ZERO_PAGE_OFFSET != 0) | 312 | if (CONFIG_ZERO_PAGE_OFFSET != 0) |
327 | lmb_reserve(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET); | 313 | lmb_reserve(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET); |
328 | 314 | ||
329 | lmb_analyze(); | 315 | /* |
330 | lmb_dump_all(); | 316 | * Handle additional early reservations |
331 | 317 | */ | |
332 | do_init_bootmem(); | 318 | check_for_initrd(); |
333 | plat_mem_setup(); | 319 | reserve_crashkernel(); |
334 | } | 320 | } |
335 | 321 | ||
336 | /* | 322 | /* |
@@ -397,10 +383,6 @@ void __init setup_arch(char **cmdline_p) | |||
397 | bss_resource.start = virt_to_phys(__bss_start); | 383 | bss_resource.start = virt_to_phys(__bss_start); |
398 | bss_resource.end = virt_to_phys(_ebss)-1; | 384 | bss_resource.end = virt_to_phys(_ebss)-1; |
399 | 385 | ||
400 | memory_start = (unsigned long)__va(__MEMORY_START); | ||
401 | if (!memory_end) | ||
402 | memory_end = memory_start + __MEMORY_SIZE; | ||
403 | |||
404 | #ifdef CONFIG_CMDLINE_OVERWRITE | 386 | #ifdef CONFIG_CMDLINE_OVERWRITE |
405 | strlcpy(command_line, CONFIG_CMDLINE, sizeof(command_line)); | 387 | strlcpy(command_line, CONFIG_CMDLINE, sizeof(command_line)); |
406 | #else | 388 | #else |
@@ -417,8 +399,6 @@ void __init setup_arch(char **cmdline_p) | |||
417 | 399 | ||
418 | parse_early_param(); | 400 | parse_early_param(); |
419 | 401 | ||
420 | uncached_init(); | ||
421 | |||
422 | plat_early_device_setup(); | 402 | plat_early_device_setup(); |
423 | 403 | ||
424 | /* Let earlyprintk output early console messages */ | 404 | /* Let earlyprintk output early console messages */ |
@@ -429,21 +409,28 @@ void __init setup_arch(char **cmdline_p) | |||
429 | sh_mv_setup(); | 409 | sh_mv_setup(); |
430 | sh_mv.mv_mem_init(); | 410 | sh_mv.mv_mem_init(); |
431 | 411 | ||
432 | /* | 412 | early_reserve_mem(); |
433 | * Find the highest page frame number we have available | 413 | |
434 | */ | 414 | lmb_enforce_memory_limit(memory_limit); |
435 | max_pfn = PFN_DOWN(__pa(memory_end)); | 415 | lmb_analyze(); |
416 | |||
417 | lmb_dump_all(); | ||
436 | 418 | ||
437 | /* | 419 | /* |
438 | * Determine low and high memory ranges: | 420 | * Determine low and high memory ranges: |
439 | */ | 421 | */ |
440 | max_low_pfn = max_pfn; | 422 | max_low_pfn = max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; |
441 | min_low_pfn = __MEMORY_START >> PAGE_SHIFT; | 423 | min_low_pfn = __MEMORY_START >> PAGE_SHIFT; |
442 | 424 | ||
443 | nodes_clear(node_online_map); | 425 | nodes_clear(node_online_map); |
444 | 426 | ||
427 | memory_start = (unsigned long)__va(__MEMORY_START); | ||
428 | memory_end = memory_start + (memory_limit ?: lmb_phys_mem_size()); | ||
429 | |||
430 | uncached_init(); | ||
445 | pmb_init(); | 431 | pmb_init(); |
446 | setup_memory(); | 432 | do_init_bootmem(); |
433 | plat_mem_setup(); | ||
447 | sparse_init(); | 434 | sparse_init(); |
448 | 435 | ||
449 | #ifdef CONFIG_DUMMY_CONSOLE | 436 | #ifdef CONFIG_DUMMY_CONSOLE |