Index: kernel/arch/arm32/src/ras.c
===================================================================
--- kernel/arch/arm32/src/ras.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
+++ kernel/arch/arm32/src/ras.c	(revision bf3dd35e1dbbdb751e833d8750fe09a54f590040)
@@ -38,4 +38,5 @@
 #include <mm/frame.h>
 #include <mm/page.h>
+#include <mm/km.h>
 #include <mm/tlb.h>
 #include <mm/asid.h>
@@ -50,18 +51,16 @@
 void ras_init(void)
 {
-	ras_page = frame_alloc(ONE_FRAME, FRAME_KA);
-	memsetb(ras_page, FRAME_SIZE, 0); 
+	uintptr_t frame;
+
+	frame = (uintptr_t) frame_alloc(ONE_FRAME,
+	    FRAME_ATOMIC | FRAME_HIGHMEM);
+	if (!frame)
+		frame = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_LOWMEM);
+	ras_page = (uintptr_t *) km_map(frame,
+	    PAGE_SIZE, PAGE_READ | PAGE_WRITE | PAGE_USER | PAGE_CACHEABLE);
+
+	memsetb(ras_page, PAGE_SIZE, 0); 
 	ras_page[RAS_START] = 0;
 	ras_page[RAS_END] = 0xffffffff;
-	/*
-	 * Userspace needs to be able to write to this page. The page is 
-	 * cached in TLB as PAGE_KERNEL. Purge it from TLB and map it
-	 * read/write PAGE_USER.
-	 */
-	tlb_invalidate_pages(ASID_KERNEL, (uintptr_t)ras_page, 1);
-	page_table_lock(AS, true);
-	page_mapping_insert(AS, (uintptr_t)ras_page, (uintptr_t)KA2PA(ras_page),
-	    PAGE_READ | PAGE_WRITE | PAGE_USER);
-	page_table_unlock(AS, true);
 }
 
