diff --git a/Makefile.dep b/Makefile.dep index 3ffd024adb..5c468b343c 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -26,6 +26,10 @@ ifneq (,$(filter ssp,$(USEMODULE))) FEATURES_REQUIRED += ssp endif +ifneq (,$(filter mpu_stack_guard,$(USEMODULE))) + FEATURES_REQUIRED += cortexm_mpu +endif + ifneq (,$(filter csma_sender,$(USEMODULE))) USEMODULE += random USEMODULE += xtimer diff --git a/cpu/cc2538/Makefile.features b/cpu/cc2538/Makefile.features index 69cede1a6b..10c9ca7571 100644 --- a/cpu/cc2538/Makefile.features +++ b/cpu/cc2538/Makefile.features @@ -4,6 +4,8 @@ FEATURES_PROVIDED += periph_cpuid FEATURES_PROVIDED += periph_gpio periph_gpio_irq FEATURES_PROVIDED += periph_hwrng FEATURES_PROVIDED += periph_uart_modecfg + +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += puf_sram -include $(RIOTCPU)/cortexm_common/Makefile.features diff --git a/cpu/cc26x0/Makefile.features b/cpu/cc26x0/Makefile.features index ad7cec435c..d2a863032e 100644 --- a/cpu/cc26x0/Makefile.features +++ b/cpu/cc26x0/Makefile.features @@ -1,3 +1,5 @@ CPU_ARCH = cortex-m3 +FEATURES_PROVIDED += cortexm_mpu + -include $(RIOTCPU)/cc26xx_cc13xx/Makefile.features diff --git a/cpu/cc26x2_cc13x2/Makefile.features b/cpu/cc26x2_cc13x2/Makefile.features index aadc616882..1f6134e83d 100644 --- a/cpu/cc26x2_cc13x2/Makefile.features +++ b/cpu/cc26x2_cc13x2/Makefile.features @@ -1,3 +1,5 @@ CPU_ARCH = cortex-m4f +FEATURES_PROVIDED += cortexm_mpu + -include $(RIOTCPU)/cc26xx_cc13xx/Makefile.features diff --git a/cpu/efm32/Makefile.features b/cpu/efm32/Makefile.features index 88e91a46b6..ac11c70577 100644 --- a/cpu/efm32/Makefile.features +++ b/cpu/efm32/Makefile.features @@ -4,6 +4,7 @@ include $(RIOTCPU)/efm32/efm32-features.mk CPU_ARCH = $(EFM32_ARCHITECTURE) FEATURES_PROVIDED += arch_efm32 +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_cpuid FEATURES_PROVIDED += periph_flashpage FEATURES_PROVIDED += periph_flashpage_raw diff --git a/cpu/ezr32wg/Makefile.features b/cpu/ezr32wg/Makefile.features index 9dc1b14696..343e1f208d 100644 --- a/cpu/ezr32wg/Makefile.features +++ b/cpu/ezr32wg/Makefile.features @@ -1,5 +1,6 @@ CPU_ARCH = cortex-m4f +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_cpuid FEATURES_PROVIDED += periph_gpio periph_gpio_irq diff --git a/cpu/lm4f120/Makefile.features b/cpu/lm4f120/Makefile.features index 1a39817cab..15ef943f2c 100644 --- a/cpu/lm4f120/Makefile.features +++ b/cpu/lm4f120/Makefile.features @@ -1,3 +1,5 @@ CPU_ARCH = cortex-m4f +FEATURES_PROVIDED += cortexm_mpu + -include $(RIOTCPU)/cortexm_common/Makefile.features diff --git a/cpu/lpc1768/Makefile.features b/cpu/lpc1768/Makefile.features index 3ca489e477..738302a045 100644 --- a/cpu/lpc1768/Makefile.features +++ b/cpu/lpc1768/Makefile.features @@ -2,6 +2,7 @@ CPU_ARCH = cortex-m3 # This CPU only implements one CPU_MODEL with the same name CPU_MODEL = lpc1768 +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_cpuid FEATURES_PROVIDED += periph_pm diff --git a/cpu/nrf52/Makefile.features b/cpu/nrf52/Makefile.features index a1fd08a7dd..e429f3cbe9 100644 --- a/cpu/nrf52/Makefile.features +++ b/cpu/nrf52/Makefile.features @@ -8,4 +8,7 @@ FEATURES_PROVIDED += periph_adc # feature to mark this FEATURES_PROVIDED += ble_nimble_netif +# all nrf52 have an MPU +FEATURES_PROVIDED += cortexm_mpu + -include $(RIOTCPU)/nrf5x_common/Makefile.features diff --git a/cpu/sam3/Makefile.features b/cpu/sam3/Makefile.features index 7b69420421..642671c077 100644 --- a/cpu/sam3/Makefile.features +++ b/cpu/sam3/Makefile.features @@ -1,6 +1,7 @@ CPU_ARCH = cortex-m3 CPU_FAM = sam3 +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_cpuid FEATURES_PROVIDED += periph_hwrng diff --git a/cpu/samd5x/Makefile.features b/cpu/samd5x/Makefile.features index 43c9adf808..de7c61abc3 100644 --- a/cpu/samd5x/Makefile.features +++ b/cpu/samd5x/Makefile.features @@ -3,5 +3,6 @@ CPU_FAM = samd5x FEATURES_PROVIDED += periph_hwrng FEATURES_PROVIDED += backup_ram +FEATURES_PROVIDED += cortexm_mpu include $(RIOTCPU)/sam0_common/Makefile.features diff --git a/cpu/saml1x/Makefile.features b/cpu/saml1x/Makefile.features index 069dcd034f..33527b32db 100644 --- a/cpu/saml1x/Makefile.features +++ b/cpu/saml1x/Makefile.features @@ -1,6 +1,7 @@ CPU_ARCH = cortex-m23 CPU_FAM = saml1x +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_hwrng include $(RIOTCPU)/sam0_common/Makefile.features diff --git a/cpu/stm32f2/Makefile.features b/cpu/stm32f2/Makefile.features index 3f3eab0636..0e2abb4aea 100644 --- a/cpu/stm32f2/Makefile.features +++ b/cpu/stm32f2/Makefile.features @@ -2,5 +2,6 @@ CPU_ARCH = cortex-m3 CPU_FAM = stm32f2 FEATURES_PROVIDED += periph_hwrng +FEATURES_PROVIDED += cortexm_mpu -include $(RIOTCPU)/stm32_common/Makefile.features diff --git a/cpu/stm32f3/Makefile.features b/cpu/stm32f3/Makefile.features index a83d6a1e08..b5704d6c02 100644 --- a/cpu/stm32f3/Makefile.features +++ b/cpu/stm32f3/Makefile.features @@ -4,4 +4,10 @@ CPU_FAM = stm32f3 FEATURES_PROVIDED += periph_flashpage FEATURES_PROVIDED += periph_flashpage_raw +# only some stm32f3 have an MPU +STM32F3_WITH_MPU += stm32f303re stm32f303vc stm32f303ze +ifneq (, $(filter $(CPU_MODEL), $(STM32F3_WITH_MPU))) + FEATURES_PROVIDED += cortexm_mpu +endif + -include $(RIOTCPU)/stm32_common/Makefile.features diff --git a/cpu/stm32f4/Makefile.features b/cpu/stm32f4/Makefile.features index 2cdb93058f..1ba7af83cc 100644 --- a/cpu/stm32f4/Makefile.features +++ b/cpu/stm32f4/Makefile.features @@ -1,6 +1,7 @@ CPU_ARCH = cortex-m4f CPU_FAM = stm32f4 +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_hwrng # the granularity of provided feature definition for STMs is currently by CPU diff --git a/cpu/stm32f7/Makefile.features b/cpu/stm32f7/Makefile.features index e1903cd920..455c644c2e 100644 --- a/cpu/stm32f7/Makefile.features +++ b/cpu/stm32f7/Makefile.features @@ -1,5 +1,6 @@ CPU_ARCH = cortex-m7 CPU_FAM = stm32f7 +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_hwrng -include $(RIOTCPU)/stm32_common/Makefile.features diff --git a/cpu/stm32l0/Makefile.features b/cpu/stm32l0/Makefile.features index dac7c11b39..5691c37cf4 100644 --- a/cpu/stm32l0/Makefile.features +++ b/cpu/stm32l0/Makefile.features @@ -8,4 +8,10 @@ FEATURES_PROVIDED += periph_hwrng BOARDS_WITHOUT_HWRNG += nucleo-l031k6 +# only some stm32l0 have an MPU +STM32L0_WITH_MPU += stm32l052t8 +ifneq (, $(filter $(CPU_MODEL), $(STM32L0_WITH_MPU))) + FEATURES_PROVIDED += cortexm_mpu +endif + -include $(RIOTCPU)/stm32_common/Makefile.features diff --git a/cpu/stm32l1/Makefile.features b/cpu/stm32l1/Makefile.features index 4e83fb8e1a..010619595f 100644 --- a/cpu/stm32l1/Makefile.features +++ b/cpu/stm32l1/Makefile.features @@ -1,6 +1,7 @@ CPU_ARCH = cortex-m3 CPU_FAM = stm32l1 +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_eeprom FEATURES_PROVIDED += periph_flashpage FEATURES_PROVIDED += periph_flashpage_raw diff --git a/cpu/stm32l4/Makefile.features b/cpu/stm32l4/Makefile.features index b077625a3e..8f438a44c6 100644 --- a/cpu/stm32l4/Makefile.features +++ b/cpu/stm32l4/Makefile.features @@ -1,6 +1,7 @@ CPU_ARCH = cortex-m4f CPU_FAM = stm32l4 +FEATURES_PROVIDED += cortexm_mpu FEATURES_PROVIDED += periph_flashpage FEATURES_PROVIDED += periph_flashpage_raw FEATURES_PROVIDED += periph_hwrng diff --git a/tests/mpu_stack_guard/Makefile b/tests/mpu_stack_guard/Makefile index d45349e49e..64552cf758 100644 --- a/tests/mpu_stack_guard/Makefile +++ b/tests/mpu_stack_guard/Makefile @@ -1,44 +1,6 @@ BOARD ?= samr21-xpro include ../Makefile.tests_common -BOARD_WHITELIST += arduino-due # cortex-m3 -BOARD_WHITELIST += arduino-zero # cortex-m0plus -BOARD_WHITELIST += cc2538dk # cortex-m3 -BOARD_WHITELIST += cc2650stk # cortex-m3 -BOARD_WHITELIST += ek-lm4f120xl # cortex-m4f -BOARD_WHITELIST += f4vi1 # cortex-m4f -BOARD_WHITELIST += fox # cortex-m3 -BOARD_WHITELIST += frdm-k64f # cortex-m4 -BOARD_WHITELIST += ikea-tradfri # cortex-m4f -BOARD_WHITELIST += iotlab-a8-m3 # cortex-m3 -BOARD_WHITELIST += iotlab-m3 # cortex-m3 -BOARD_WHITELIST += limifrog-v1 # cortex-m3 -BOARD_WHITELIST += maple-mini # cortex-m3 -BOARD_WHITELIST += mbed_lpc1768 # cortex-m3 -BOARD_WHITELIST += msbiot # cortex-m4f -BOARD_WHITELIST += mulle # cortex-m4 -BOARD_WHITELIST += nrf52dk # cortex-m4f -BOARD_WHITELIST += nucleo-f103rb # cortex-m3 -BOARD_WHITELIST += nucleo-f207zg # cortex-m3 -BOARD_WHITELIST += nucleo-f303re # cortex-m4f -BOARD_WHITELIST += nucleo-f334r8 # cortex-m4f -BOARD_WHITELIST += nucleo-f401re # cortex-m4f -BOARD_WHITELIST += nucleo-f446re # cortex-m4f -BOARD_WHITELIST += nucleo-l152re # cortex-m3 -BOARD_WHITELIST += openmote-cc2538 # cortex-m3 -BOARD_WHITELIST += pba-d-01-kw2x # cortex-m4 -BOARD_WHITELIST += remote # cortex-m3 -BOARD_WHITELIST += samd21-xpro # cortex-m0plus -BOARD_WHITELIST += saml21-xpro # cortex-m0plus -BOARD_WHITELIST += samr21-xpro # cortex-m0plus -BOARD_WHITELIST += sltb001a # cortex-m4f -BOARD_WHITELIST += slwstk6220a # cortex-m4f -BOARD_WHITELIST += sodaq-autonomo # cortex-m0plus -BOARD_WHITELIST += spark-core # cortex-m3 -BOARD_WHITELIST += stm32f3discovery # cortex-m4f -BOARD_WHITELIST += stm32f4discovery # cortex-m4f -BOARD_WHITELIST += udoo # cortex-m3 - USEMODULE += mpu_stack_guard include $(RIOTBASE)/Makefile.include diff --git a/tests/mpu_stack_guard/Makefile.ci b/tests/mpu_stack_guard/Makefile.ci deleted file mode 100644 index 518b330a9e..0000000000 --- a/tests/mpu_stack_guard/Makefile.ci +++ /dev/null @@ -1,3 +0,0 @@ -BOARD_INSUFFICIENT_MEMORY := \ - stm32f030f4-demo \ - # diff --git a/tests/mpu_stack_guard/main.c b/tests/mpu_stack_guard/main.c index 04e33360a2..b656931147 100644 --- a/tests/mpu_stack_guard/main.c +++ b/tests/mpu_stack_guard/main.c @@ -22,6 +22,14 @@ #include "cpu.h" #include "thread.h" +#include "mpu.h" + +/* RIOT's MPU headers gracefully fail when no MPU is present. + * Use this to catch if RIOT's features are correctly gating MPU use. + */ +#if !__MPU_PRESENT +#error "(!__MPU_PRESENT)" +#endif #define CANARY_VALUE 0xdeadbeef