Index: kernel/arch/arm32/include/arch/asm.h
===================================================================
--- kernel/arch/arm32/include/arch/asm.h	(revision 74dcc07b9461a25cd636e0895ebb5da941fb869f)
+++ kernel/arch/arm32/include/arch/asm.h	(revision 3ee38a9dcd227dbf80f86e5c09528654f270cfba)
@@ -38,4 +38,5 @@
 
 #include <typedefs.h>
+#include <arch/cp15.h>
 #include <arch/stack.h>
 #include <config.h>
@@ -51,7 +52,7 @@
  * chapter 2.3.8 p.2-22 (52 in the PDF)
  *
- * @note Although mcr p15, 0, R0, c7, c0, 4 is defined in ARM Architecture
- * reference manual for armv4/5 CP15 implementation is mandatory only for
- * armv6+.
+ * @note Although CP15WFI (mcr p15, 0, R0, c7, c0, 4) is defined in ARM
+ * Architecture reference manual for armv4/5, CP15 implementation is mandatory
+ * only for armv6+.
  */
 NO_TRACE static inline void cpu_sleep(void)
@@ -60,5 +61,5 @@
 	asm volatile ( "wfe" );
 #elif defined(PROCESSOR_ARCH_armv6) | defined(PROCESSOR_arm926ej_s) | defined(PROCESSOR_arm920t)
-	asm volatile ( "mcr p15, 0, R0, c7, c0, 4" );
+	WFI_write(0);
 #endif
 }
Index: kernel/arch/arm32/include/arch/mm/page_armv4.h
===================================================================
--- kernel/arch/arm32/include/arch/mm/page_armv4.h	(revision 74dcc07b9461a25cd636e0895ebb5da941fb869f)
+++ kernel/arch/arm32/include/arch/mm/page_armv4.h	(revision 3ee38a9dcd227dbf80f86e5c09528654f270cfba)
@@ -41,4 +41,6 @@
 #error "Do not include arch specific page.h directly use generic page.h instead"
 #endif
+
+#include <arch/cp15.h>
 
 /* Macros for querying the last-level PTE entries. */
@@ -128,8 +130,5 @@
 NO_TRACE static inline void set_ptl0_addr(pte_t *pt)
 {
-	asm volatile (
-		"mcr p15, 0, %[pt], c2, c0, 0\n"
-		:: [pt] "r" (pt)
-	);
+	TTBR0_write((uint32_t)pt);
 }
 
Index: kernel/arch/arm32/include/arch/mm/page_armv6.h
===================================================================
--- kernel/arch/arm32/include/arch/mm/page_armv6.h	(revision 74dcc07b9461a25cd636e0895ebb5da941fb869f)
+++ kernel/arch/arm32/include/arch/mm/page_armv6.h	(revision 3ee38a9dcd227dbf80f86e5c09528654f270cfba)
@@ -40,4 +40,6 @@
 #error "Do not include arch specific page.h directly use generic page.h instead"
 #endif
+
+#include <arch/cp15.h>
 
 /* Macros for querying the last-level PTE entries. */
@@ -132,8 +134,5 @@
 NO_TRACE static inline void set_ptl0_addr(pte_t *pt)
 {
-	asm volatile (
-		"mcr p15, 0, %[pt], c2, c0, 0\n"
-		:: [pt] "r" (pt)
-	);
+	TTBR0_write((uint32_t)pt);
 }
 
