From b703f91ee44686fa099ee6768d63a52a79f81b1a Mon Sep 17 00:00:00 2001 From: Nathan Chong Date: Tue, 20 Dec 2016 17:14:51 +0000 Subject: [PATCH] Fix enabling v7M MPU too early See issue #380. Move call to vmpu_mpu_lock() after vmpu_load_box(). This guarantees that all RBAR/RASR registers have been written-to (by vmpu_mpu_invalidate()) before the MPU is enabled. --- core/vmpu/src/armv7m/vmpu_armv7m.c | 2 -- core/vmpu/src/vmpu.c | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/vmpu/src/armv7m/vmpu_armv7m.c b/core/vmpu/src/armv7m/vmpu_armv7m.c index 09b607dd..8d76e395 100644 --- a/core/vmpu/src/armv7m/vmpu_armv7m.c +++ b/core/vmpu/src/armv7m/vmpu_armv7m.c @@ -401,8 +401,6 @@ void vmpu_arch_init(void) /* Initialize static MPU regions. */ vmpu_arch_init_hw(); - vmpu_mpu_lock(); - /* Dump MPU configuration in debug mode. */ #ifndef NDEBUG debug_mpu_config(); diff --git a/core/vmpu/src/vmpu.c b/core/vmpu/src/vmpu.c index 22675c70..c8b1d70b 100644 --- a/core/vmpu/src/vmpu.c +++ b/core/vmpu/src/vmpu.c @@ -517,6 +517,9 @@ void vmpu_init_post(void) /* load boxes */ vmpu_load_boxes(); + + /* enable mpu */ + vmpu_mpu_lock(); } static int copy_box_namespace(const char *src, char *dst)