diff options
Diffstat (limited to 'arch/mips/kernel/setup.c')
-rw-r--r-- | arch/mips/kernel/setup.c | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index 397a70e651b5..bfcec8d9bfe4 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c | |||
@@ -442,6 +442,48 @@ static inline void bootmem_init(void) | |||
442 | #endif /* CONFIG_BLK_DEV_INITRD */ | 442 | #endif /* CONFIG_BLK_DEV_INITRD */ |
443 | } | 443 | } |
444 | 444 | ||
445 | /* | ||
446 | * arch_mem_init - initialize memory managment subsystem | ||
447 | * | ||
448 | * o plat_mem_setup() detects the memory configuration and will record detected | ||
449 | * memory areas using add_memory_region. | ||
450 | * o parse_cmdline_early() parses the command line for mem= options which, | ||
451 | * iff detected, will override the results of the automatic detection. | ||
452 | * | ||
453 | * At this stage the memory configuration of the system is known to the | ||
454 | * kernel but generic memory managment system is still entirely uninitialized. | ||
455 | * | ||
456 | * o bootmem_init() | ||
457 | * o sparse_init() | ||
458 | * o paging_init() | ||
459 | * | ||
460 | * At this stage the bootmem allocator is ready to use. | ||
461 | * | ||
462 | * NOTE: historically plat_mem_setup did the entire platform initialization. | ||
463 | * This was rather impractical because it meant plat_mem_setup had to | ||
464 | * get away without any kind of memory allocator. To keep old code from | ||
465 | * breaking plat_setup was just renamed to plat_setup and a second platform | ||
466 | * initialization hook for anything else was introduced. | ||
467 | */ | ||
468 | |||
469 | extern void plat_mem_setup(void); | ||
470 | |||
471 | static void __init arch_mem_init(char **cmdline_p) | ||
472 | { | ||
473 | /* call board setup routine */ | ||
474 | plat_mem_setup(); | ||
475 | |||
476 | strlcpy(command_line, arcs_cmdline, sizeof(command_line)); | ||
477 | strlcpy(saved_command_line, command_line, COMMAND_LINE_SIZE); | ||
478 | |||
479 | *cmdline_p = command_line; | ||
480 | |||
481 | parse_cmdline_early(); | ||
482 | bootmem_init(); | ||
483 | sparse_init(); | ||
484 | paging_init(); | ||
485 | } | ||
486 | |||
445 | static inline void resource_init(void) | 487 | static inline void resource_init(void) |
446 | { | 488 | { |
447 | int i; | 489 | int i; |
@@ -495,8 +537,6 @@ static inline void resource_init(void) | |||
495 | #undef MAXMEM | 537 | #undef MAXMEM |
496 | #undef MAXMEM_PFN | 538 | #undef MAXMEM_PFN |
497 | 539 | ||
498 | extern void plat_setup(void); | ||
499 | |||
500 | void __init setup_arch(char **cmdline_p) | 540 | void __init setup_arch(char **cmdline_p) |
501 | { | 541 | { |
502 | cpu_probe(); | 542 | cpu_probe(); |
@@ -511,18 +551,8 @@ void __init setup_arch(char **cmdline_p) | |||
511 | #endif | 551 | #endif |
512 | #endif | 552 | #endif |
513 | 553 | ||
514 | /* call board setup routine */ | 554 | arch_mem_init(cmdline_p); |
515 | plat_setup(); | ||
516 | 555 | ||
517 | strlcpy(command_line, arcs_cmdline, sizeof(command_line)); | ||
518 | strlcpy(saved_command_line, command_line, COMMAND_LINE_SIZE); | ||
519 | |||
520 | *cmdline_p = command_line; | ||
521 | |||
522 | parse_cmdline_early(); | ||
523 | bootmem_init(); | ||
524 | sparse_init(); | ||
525 | paging_init(); | ||
526 | resource_init(); | 556 | resource_init(); |
527 | #ifdef CONFIG_SMP | 557 | #ifdef CONFIG_SMP |
528 | plat_smp_setup(); | 558 | plat_smp_setup(); |