Merge branches 'alignment', 'fixes', 'l2c' (early part) and 'misc' into for-next
[pandora-kernel.git] / arch / arm / kernel / setup.c
index 50e198c..8a16ee5 100644 (file)
@@ -72,6 +72,7 @@ static int __init fpe_setup(char *line)
 __setup("fpe=", fpe_setup);
 #endif
 
+extern void init_default_cache_policy(unsigned long);
 extern void paging_init(const struct machine_desc *desc);
 extern void early_paging_init(const struct machine_desc *,
                              struct proc_info_list *);
@@ -590,7 +591,7 @@ static void __init setup_processor(void)
 
        pr_info("CPU: %s [%08x] revision %d (ARMv%s), cr=%08lx\n",
                cpu_name, read_cpuid_id(), read_cpuid_id() & 15,
-               proc_arch[cpu_architecture()], cr_alignment);
+               proc_arch[cpu_architecture()], get_cr());
 
        snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c",
                 list->arch_name, ENDIANNESS);
@@ -603,7 +604,9 @@ static void __init setup_processor(void)
 #ifndef CONFIG_ARM_THUMB
        elf_hwcap &= ~(HWCAP_THUMB | HWCAP_IDIVT);
 #endif
-
+#ifdef CONFIG_MMU
+       init_default_cache_policy(list->__cpu_mm_mmu_flags);
+#endif
        erratum_a15_798181_init();
 
        feat_v6_fixup();
@@ -628,15 +631,8 @@ void __init dump_machine_table(void)
 
 int __init arm_add_memory(u64 start, u64 size)
 {
-       struct membank *bank = &meminfo.bank[meminfo.nr_banks];
        u64 aligned_start;
 
-       if (meminfo.nr_banks >= NR_BANKS) {
-               pr_crit("NR_BANKS too low, ignoring memory at 0x%08llx\n",
-                       (long long)start);
-               return -EINVAL;
-       }
-
        /*
         * Ensure that start/size are aligned to a page boundary.
         * Size is appropriately rounded down, start is rounded up.
@@ -677,17 +673,17 @@ int __init arm_add_memory(u64 start, u64 size)
                aligned_start = PHYS_OFFSET;
        }
 
-       bank->start = aligned_start;
-       bank->size = size & ~(phys_addr_t)(PAGE_SIZE - 1);
+       start = aligned_start;
+       size = size & ~(phys_addr_t)(PAGE_SIZE - 1);
 
        /*
         * Check whether this memory region has non-zero size or
         * invalid node number.
         */
-       if (bank->size == 0)
+       if (size == 0)
                return -EINVAL;
 
-       meminfo.nr_banks++;
+       memblock_add(start, size);
        return 0;
 }
 
@@ -695,6 +691,7 @@ int __init arm_add_memory(u64 start, u64 size)
  * Pick out the memory size.  We look for mem=size@start,
  * where start and size are "size[KkMm]"
  */
+
 static int __init early_mem(char *p)
 {
        static int usermem __initdata = 0;
@@ -709,7 +706,8 @@ static int __init early_mem(char *p)
         */
        if (usermem == 0) {
                usermem = 1;
-               meminfo.nr_banks = 0;
+               memblock_remove(memblock_start_of_DRAM(),
+                       memblock_end_of_DRAM() - memblock_start_of_DRAM());
        }
 
        start = PHYS_OFFSET;
@@ -854,13 +852,6 @@ static void __init reserve_crashkernel(void)
 static inline void reserve_crashkernel(void) {}
 #endif /* CONFIG_KEXEC */
 
-static int __init meminfo_cmp(const void *_a, const void *_b)
-{
-       const struct membank *a = _a, *b = _b;
-       long cmp = bank_pfn_start(a) - bank_pfn_start(b);
-       return cmp < 0 ? -1 : cmp > 0 ? 1 : 0;
-}
-
 void __init hyp_mode_check(void)
 {
 #ifdef CONFIG_ARM_VIRT_EXT
@@ -903,12 +894,10 @@ void __init setup_arch(char **cmdline_p)
 
        parse_early_param();
 
-       sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL);
-
        early_paging_init(mdesc, lookup_processor_type(read_cpuid_id()));
        setup_dma_zone(mdesc);
        sanity_check_meminfo();
-       arm_memblock_init(&meminfo, mdesc);
+       arm_memblock_init(mdesc);
 
        paging_init(mdesc);
        request_standard_resources(mdesc);