Index: kernel/arch/arm32/include/mm/frame.h
===================================================================
--- kernel/arch/arm32/include/mm/frame.h	(revision 1c01e6cdfeee9466652e3b2b78ee532b3b041b26)
+++ kernel/arch/arm32/include/mm/frame.h	(revision 40c8c17482d672e755c855c6fd5664b0e933e483)
@@ -61,6 +61,4 @@
 #endif
 
-extern uintptr_t last_frame;
-
 extern void frame_low_arch_init(void);
 extern void frame_high_arch_init(void);
Index: kernel/arch/arm32/src/mm/frame.c
===================================================================
--- kernel/arch/arm32/src/mm/frame.c	(revision 1c01e6cdfeee9466652e3b2b78ee532b3b041b26)
+++ kernel/arch/arm32/src/mm/frame.c	(revision 40c8c17482d672e755c855c6fd5664b0e933e483)
@@ -41,8 +41,4 @@
 #include <macros.h>
 
-// TODO: remove me
-/** Address of the last frame in the memory. */
-uintptr_t last_frame = 0;
-
 static void frame_common_arch_init(bool low)
 {
@@ -74,11 +70,4 @@
 void frame_low_arch_init(void)
 {
-	uintptr_t mem_start;
-	size_t mem_size;
-
-	machine_get_memory_extents(&mem_start, &mem_size);
-	// TODO: remove me
-	last_frame = ALIGN_DOWN(mem_start + mem_size, FRAME_SIZE);
-	
 	frame_common_arch_init(true);
 
Index: kernel/arch/arm32/src/mm/page.c
===================================================================
--- kernel/arch/arm32/src/mm/page.c	(revision 1c01e6cdfeee9466652e3b2b78ee532b3b041b26)
+++ kernel/arch/arm32/src/mm/page.c	(revision 40c8c17482d672e755c855c6fd5664b0e933e483)
@@ -58,7 +58,9 @@
 	
 	uintptr_t cur;
+
 	/* Kernel identity mapping */
 	for (cur = PHYSMEM_START_ADDR;
-	    cur < min(config.identity_base, last_frame); cur += FRAME_SIZE)
+	    cur < min(config.identity_size, config.physmem_end);
+	    cur += FRAME_SIZE)
 		page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags);
 	
