diff --git a/arch/arm/src/stm32h7/Make.defs b/arch/arm/src/stm32h7/Make.defs index f78faa6b8ed..2085559f52b 100644 --- a/arch/arm/src/stm32h7/Make.defs +++ b/arch/arm/src/stm32h7/Make.defs @@ -66,7 +66,7 @@ ifeq ($(CONFIG_STM32H7_PROGMEM),y) CMN_CSRCS += stm32_flash.c endif -ifeq ($(CONFIG_ARM_MPU),y) +ifneq ($(filter y,$(CONFIG_ARM_MPU) $(CONFIG_ARM_MPU_EARLY_RESET)),) CMN_CSRCS += arm_mpu.c endif diff --git a/arch/arm/src/stm32h7/stm32_mpuinit.c b/arch/arm/src/stm32h7/stm32_mpuinit.c index 12c02e908b8..7194aafd66d 100644 --- a/arch/arm/src/stm32h7/stm32_mpuinit.c +++ b/arch/arm/src/stm32h7/stm32_mpuinit.c @@ -70,6 +70,10 @@ void stm32_mpuinitialize(void) mpu_showtype(); + /* Reset MPU if enabled */ + + mpu_reset(); + /* Configure user flash and SRAM space */ mpu_user_flash(USERSPACE->us_textstart, diff --git a/arch/arm/src/stm32h7/stm32_start.c b/arch/arm/src/stm32h7/stm32_start.c index 5b33d03fb7f..b1c1535ae82 100644 --- a/arch/arm/src/stm32h7/stm32_start.c +++ b/arch/arm/src/stm32h7/stm32_start.c @@ -36,6 +36,7 @@ #include "arm_internal.h" #include "barriers.h" #include "nvic.h" +#include "mpu.h" #include "stm32_rcc.h" #include "stm32_userspace.h" @@ -276,7 +277,11 @@ void __start(void) "r"(CONFIG_IDLETHREAD_STACKSIZE - 64) :); #endif - /* Clear .bss. We'll do this inline (vs. calling memset) just to be + /* If enabled reset the MPU */ + + mpu_early_reset(); + +/* Clear .bss. We'll do this inline (vs. calling memset) just to be * certain that there are no issues with the state of global variables. */