diff options
Diffstat (limited to 'arch/arm/kernel/setup.c')
-rw-r--r-- | arch/arm/kernel/setup.c | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index f5120ca08671..8a16ee5d8a95 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -631,15 +631,8 @@ void __init dump_machine_table(void) | |||
631 | 631 | ||
632 | int __init arm_add_memory(u64 start, u64 size) | 632 | int __init arm_add_memory(u64 start, u64 size) |
633 | { | 633 | { |
634 | struct membank *bank = &meminfo.bank[meminfo.nr_banks]; | ||
635 | u64 aligned_start; | 634 | u64 aligned_start; |
636 | 635 | ||
637 | if (meminfo.nr_banks >= NR_BANKS) { | ||
638 | pr_crit("NR_BANKS too low, ignoring memory at 0x%08llx\n", | ||
639 | (long long)start); | ||
640 | return -EINVAL; | ||
641 | } | ||
642 | |||
643 | /* | 636 | /* |
644 | * Ensure that start/size are aligned to a page boundary. | 637 | * Ensure that start/size are aligned to a page boundary. |
645 | * Size is appropriately rounded down, start is rounded up. | 638 | * Size is appropriately rounded down, start is rounded up. |
@@ -680,17 +673,17 @@ int __init arm_add_memory(u64 start, u64 size) | |||
680 | aligned_start = PHYS_OFFSET; | 673 | aligned_start = PHYS_OFFSET; |
681 | } | 674 | } |
682 | 675 | ||
683 | bank->start = aligned_start; | 676 | start = aligned_start; |
684 | bank->size = size & ~(phys_addr_t)(PAGE_SIZE - 1); | 677 | size = size & ~(phys_addr_t)(PAGE_SIZE - 1); |
685 | 678 | ||
686 | /* | 679 | /* |
687 | * Check whether this memory region has non-zero size or | 680 | * Check whether this memory region has non-zero size or |
688 | * invalid node number. | 681 | * invalid node number. |
689 | */ | 682 | */ |
690 | if (bank->size == 0) | 683 | if (size == 0) |
691 | return -EINVAL; | 684 | return -EINVAL; |
692 | 685 | ||
693 | meminfo.nr_banks++; | 686 | memblock_add(start, size); |
694 | return 0; | 687 | return 0; |
695 | } | 688 | } |
696 | 689 | ||
@@ -698,6 +691,7 @@ int __init arm_add_memory(u64 start, u64 size) | |||
698 | * Pick out the memory size. We look for mem=size@start, | 691 | * Pick out the memory size. We look for mem=size@start, |
699 | * where start and size are "size[KkMm]" | 692 | * where start and size are "size[KkMm]" |
700 | */ | 693 | */ |
694 | |||
701 | static int __init early_mem(char *p) | 695 | static int __init early_mem(char *p) |
702 | { | 696 | { |
703 | static int usermem __initdata = 0; | 697 | static int usermem __initdata = 0; |
@@ -712,7 +706,8 @@ static int __init early_mem(char *p) | |||
712 | */ | 706 | */ |
713 | if (usermem == 0) { | 707 | if (usermem == 0) { |
714 | usermem = 1; | 708 | usermem = 1; |
715 | meminfo.nr_banks = 0; | 709 | memblock_remove(memblock_start_of_DRAM(), |
710 | memblock_end_of_DRAM() - memblock_start_of_DRAM()); | ||
716 | } | 711 | } |
717 | 712 | ||
718 | start = PHYS_OFFSET; | 713 | start = PHYS_OFFSET; |
@@ -857,13 +852,6 @@ static void __init reserve_crashkernel(void) | |||
857 | static inline void reserve_crashkernel(void) {} | 852 | static inline void reserve_crashkernel(void) {} |
858 | #endif /* CONFIG_KEXEC */ | 853 | #endif /* CONFIG_KEXEC */ |
859 | 854 | ||
860 | static int __init meminfo_cmp(const void *_a, const void *_b) | ||
861 | { | ||
862 | const struct membank *a = _a, *b = _b; | ||
863 | long cmp = bank_pfn_start(a) - bank_pfn_start(b); | ||
864 | return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; | ||
865 | } | ||
866 | |||
867 | void __init hyp_mode_check(void) | 855 | void __init hyp_mode_check(void) |
868 | { | 856 | { |
869 | #ifdef CONFIG_ARM_VIRT_EXT | 857 | #ifdef CONFIG_ARM_VIRT_EXT |
@@ -906,12 +894,10 @@ void __init setup_arch(char **cmdline_p) | |||
906 | 894 | ||
907 | parse_early_param(); | 895 | parse_early_param(); |
908 | 896 | ||
909 | sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL); | ||
910 | |||
911 | early_paging_init(mdesc, lookup_processor_type(read_cpuid_id())); | 897 | early_paging_init(mdesc, lookup_processor_type(read_cpuid_id())); |
912 | setup_dma_zone(mdesc); | 898 | setup_dma_zone(mdesc); |
913 | sanity_check_meminfo(); | 899 | sanity_check_meminfo(); |
914 | arm_memblock_init(&meminfo, mdesc); | 900 | arm_memblock_init(mdesc); |
915 | 901 | ||
916 | paging_init(mdesc); | 902 | paging_init(mdesc); |
917 | request_standard_resources(mdesc); | 903 | request_standard_resources(mdesc); |