*/
 phys_addr_t arm_dma_limit;
 unsigned long arm_dma_pfn_limit;
-
-static void __init arm_adjust_dma_zone(unsigned long *size, unsigned long *hole,
-       unsigned long dma_size)
-{
-       if (size[0] <= dma_size)
-               return;
-
-       size[ZONE_NORMAL] = size[0] - dma_size;
-       size[ZONE_DMA] = dma_size;
-       hole[ZONE_NORMAL] = hole[0];
-       hole[ZONE_DMA] = 0;
-}
 #endif
 
 void __init setup_dma_zone(const struct machine_desc *mdesc)
 static void __init zone_sizes_init(unsigned long min, unsigned long max_low,
        unsigned long max_high)
 {
-       unsigned long zone_size[MAX_NR_ZONES], zhole_size[MAX_NR_ZONES];
-       struct memblock_region *reg;
-
-       /*
-        * initialise the zones.
-        */
-       memset(zone_size, 0, sizeof(zone_size));
+       unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0 };
 
-       /*
-        * The memory size has already been determined.  If we need
-        * to do anything fancy with the allocation of this memory
-        * to the zones, now is the time to do it.
-        */
-       zone_size[0] = max_low - min;
-#ifdef CONFIG_HIGHMEM
-       zone_size[ZONE_HIGHMEM] = max_high - max_low;
+#ifdef CONFIG_ZONE_DMA
+       max_zone_pfn[ZONE_DMA] = min(arm_dma_pfn_limit, max_low);
 #endif
-
-       /*
-        * Calculate the size of the holes.
-        *  holes = node_size - sum(bank_sizes)
-        */
-       memcpy(zhole_size, zone_size, sizeof(zhole_size));
-       for_each_memblock(memory, reg) {
-               unsigned long start = memblock_region_memory_base_pfn(reg);
-               unsigned long end = memblock_region_memory_end_pfn(reg);
-
-               if (start < max_low) {
-                       unsigned long low_end = min(end, max_low);
-                       zhole_size[0] -= low_end - start;
-               }
+       max_zone_pfn[ZONE_NORMAL] = max_low;
 #ifdef CONFIG_HIGHMEM
-               if (end > max_low) {
-                       unsigned long high_start = max(start, max_low);
-                       zhole_size[ZONE_HIGHMEM] -= end - high_start;
-               }
+       max_zone_pfn[ZONE_HIGHMEM] = max_high;
 #endif
-       }
-
-#ifdef CONFIG_ZONE_DMA
-       /*
-        * Adjust the sizes according to any special requirements for
-        * this machine type.
-        */
-       if (arm_dma_zone_size)
-               arm_adjust_dma_zone(zone_size, zhole_size,
-                       arm_dma_zone_size >> PAGE_SHIFT);
-#endif
-
-       free_area_init_node(0, zone_size, min, zhole_size);
+       free_area_init(max_zone_pfn);
 }
 
 #ifdef CONFIG_HAVE_ARCH_PFN_VALID
        sparse_init();
 
        /*
-        * Now free the memory - free_area_init_node needs
+        * Now free the memory - free_area_init needs
         * the sparse mem_map arrays initialized by sparse_init()
         * for memmap_init_zone(), otherwise all PFNs are invalid.
         */