aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/kernel/setup.c')
-rw-r--r--arch/arm/kernel/setup.c30
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
632int __init arm_add_memory(u64 start, u64 size) 632int __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
701static int __init early_mem(char *p) 695static 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)
857static inline void reserve_crashkernel(void) {} 852static inline void reserve_crashkernel(void) {}
858#endif /* CONFIG_KEXEC */ 853#endif /* CONFIG_KEXEC */
859 854
860static 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
867void __init hyp_mode_check(void) 855void __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);