Index: kernel/arch/arm32/src/mm/frame.c
===================================================================
--- kernel/arch/arm32/src/mm/frame.c	(revision e6c4b94cb4a5a3730c601df1c90e0fd495351478)
+++ kernel/arch/arm32/src/mm/frame.c	(revision 42f60375d47cb7fc7f3980f71a70729f8311995d)
@@ -45,8 +45,35 @@
 uintptr_t last_frame = 0;
 
+static void frame_common_arch_init(bool low)
+{
+	uintptr_t base;
+	size_t size;
+
+	machine_get_memory_extents(&base, &size);
+	base = ALIGN_UP(base, FRAME_SIZE);
+	size = ALIGN_DOWN(size, FRAME_SIZE);
+	
+	if (!frame_adjust_zone_bounds(low, &base, &size))
+		return;
+
+	if (low) {
+		zone_create(ADDR2PFN(base), SIZE2FRAMES(size),
+		    BOOT_PAGE_TABLE_START_FRAME +
+		    BOOT_PAGE_TABLE_SIZE_IN_FRAMES,
+		    ZONE_AVAILABLE | ZONE_LOWMEM);
+	} else {
+		pfn_t conf = zone_external_conf_alloc(SIZE2FRAMES(size));
+
+		zone_create(ADDR2PFN(base), SIZE2FRAMES(size), conf,
+		    ZONE_AVAILABLE | ZONE_HIGHMEM);
+	}
+	
+}
+
 /** Create low memory zones. */
 void frame_low_arch_init(void)
 {
-	uintptr_t mem_start, mem_end, mem_size;
+	uintptr_t mem_start;
+	size_t mem_size;
 
 	machine_get_memory_extents(&mem_start, &mem_size);
@@ -54,12 +81,6 @@
 	last_frame = ALIGN_DOWN(mem_start + mem_size, FRAME_SIZE);
 	
-	mem_start = ALIGN_UP(mem_start, FRAME_SIZE);
-	mem_end = min(ALIGN_DOWN(mem_start + mem_size, FRAME_SIZE),
-	    config.identity_size);
+	frame_common_arch_init(true);
 
-	zone_create(ADDR2PFN(mem_start), SIZE2FRAMES(mem_end - mem_start),
-	    BOOT_PAGE_TABLE_START_FRAME + BOOT_PAGE_TABLE_SIZE_IN_FRAMES,
-	    ZONE_AVAILABLE | ZONE_LOWMEM);
-	
 	/* blacklist boot page table */
 	frame_mark_unavailable(BOOT_PAGE_TABLE_START_FRAME,
@@ -72,21 +93,5 @@
 void frame_high_arch_init(void)
 {
-	uintptr_t mem_start, mem_end, mem_size;
-	size_t frames;
-	uintptr_t conf;
-
-	machine_get_memory_extents(&mem_start, &mem_size);
-
-	mem_end = ALIGN_DOWN(mem_start + mem_size, FRAME_SIZE);
-	if (mem_end <= config.identity_size) {
-		/* There is no high memory to init. */
-		return;
-	}
-
-	frames = SIZE2FRAMES(mem_end - config.identity_size);
-	conf = zone_external_conf_alloc(frames);
-
-	zone_create(ADDR2PFN(config.identity_size), frames, conf,
-	    ZONE_AVAILABLE | ZONE_HIGHMEM);
+	frame_common_arch_init(false);
 }
 
