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