diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2011-09-16 11:39:58 -0400 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2011-10-12 00:30:40 -0400 |
commit | ba14f6491768acad5cf50a3c7dc8927b7614d692 (patch) | |
tree | b2a9d9fc14031f6ea6d844580557de4e6eed8a07 /arch/powerpc/kernel/prom.c | |
parent | 5c4a5b8de65d08a436d112307204542a4d559ee2 (diff) |
powerpc: respect mem= setting for early memory limit setup
For those MMUs that have some form of bolt'd linear mapping (TLB)
required its rare that one ever sets mem= smaller than the size of that
mapping.
However, on Book-E 64 parts the initial linear mapping is quite large
(1G) so its quite reasonable that mem= is set smaller than that.
We need to parse the command line for mem= limit and constrain the
amount of memory we map initially by it if need be.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/prom.c')
-rw-r--r-- | arch/powerpc/kernel/prom.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 831a201e03d2..8ad825c063c4 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -737,12 +737,15 @@ void __init early_init_devtree(void *params) | |||
737 | 737 | ||
738 | of_scan_flat_dt(early_init_dt_scan_root, NULL); | 738 | of_scan_flat_dt(early_init_dt_scan_root, NULL); |
739 | of_scan_flat_dt(early_init_dt_scan_memory_ppc, NULL); | 739 | of_scan_flat_dt(early_init_dt_scan_memory_ppc, NULL); |
740 | setup_initial_memory_limit(memstart_addr, first_memblock_size); | ||
741 | 740 | ||
742 | /* Save command line for /proc/cmdline and then parse parameters */ | 741 | /* Save command line for /proc/cmdline and then parse parameters */ |
743 | strlcpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE); | 742 | strlcpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE); |
744 | parse_early_param(); | 743 | parse_early_param(); |
745 | 744 | ||
745 | /* make sure we've parsed cmdline for mem= before this */ | ||
746 | if (memory_limit) | ||
747 | first_memblock_size = min(first_memblock_size, memory_limit); | ||
748 | setup_initial_memory_limit(memstart_addr, first_memblock_size); | ||
746 | /* Reserve MEMBLOCK regions used by kernel, initrd, dt, etc... */ | 749 | /* Reserve MEMBLOCK regions used by kernel, initrd, dt, etc... */ |
747 | memblock_reserve(PHYSICAL_START, __pa(klimit) - PHYSICAL_START); | 750 | memblock_reserve(PHYSICAL_START, __pa(klimit) - PHYSICAL_START); |
748 | /* If relocatable, reserve first 32k for interrupt vectors etc. */ | 751 | /* If relocatable, reserve first 32k for interrupt vectors etc. */ |