From b125767fdb477b0943bf40940c611698a8f5d36b Mon Sep 17 00:00:00 2001 From: Vincenzo Frascino Date: Wed, 8 Mar 2017 10:05:15 +0000 Subject: [PATCH] soc: arm: beetle: Add Initial MPU Support This patch adds initial MPU support to ARM Beetle. The boot configuration prevents the following security issues: * Prevent to read at an address that is reserved in the memory map. * Prevent to write into the boot Flash/ROM. * Prevent from running code located in SRAM. Change-Id: I64f1001369896fffb0647de6be605a95161c4695 Signed-off-by: Vincenzo Frascino --- arch/arm/core/cortex_m/mpu/Kconfig | 1 + arch/arm/soc/arm/beetle/Kconfig.series | 1 + arch/arm/soc/arm/beetle/Kconfig.soc | 8 +++++ arch/arm/soc/arm/beetle/Makefile | 1 + arch/arm/soc/arm/beetle/arm_mpu_regions.c | 40 +++++++++++++++++++++++ 5 files changed, 51 insertions(+) create mode 100644 arch/arm/soc/arm/beetle/arm_mpu_regions.c diff --git a/arch/arm/core/cortex_m/mpu/Kconfig b/arch/arm/core/cortex_m/mpu/Kconfig index 1fe13ae0408..892a242adaf 100644 --- a/arch/arm/core/cortex_m/mpu/Kconfig +++ b/arch/arm/core/cortex_m/mpu/Kconfig @@ -9,6 +9,7 @@ config ARM_MPU bool "ARM MPU Support" depends on CPU_HAS_MPU + depends on SOC_FAMILY_ARM || SOC_FAMILY_STM32 default n help MCU has ARM MPU diff --git a/arch/arm/soc/arm/beetle/Kconfig.series b/arch/arm/soc/arm/beetle/Kconfig.series index ecd754c8196..a0402548362 100644 --- a/arch/arm/soc/arm/beetle/Kconfig.series +++ b/arch/arm/soc/arm/beetle/Kconfig.series @@ -13,5 +13,6 @@ config SOC_SERIES_BEETLE select CPU_CORTEX_M3 select SOC_FAMILY_ARM select CPU_HAS_SYSTICK + select CPU_HAS_MPU help Enable support for Beetle MCU Series diff --git a/arch/arm/soc/arm/beetle/Kconfig.soc b/arch/arm/soc/arm/beetle/Kconfig.soc index 7972d329e62..42cbd8ca421 100644 --- a/arch/arm/soc/arm/beetle/Kconfig.soc +++ b/arch/arm/soc/arm/beetle/Kconfig.soc @@ -14,3 +14,11 @@ config SOC_BEETLE_R0 bool "ARM BEETLE R0" endchoice + +config ARM_MPU_ENABLE + bool "Enable MPU" + depends on CPU_HAS_MPU + select ARM_MPU + default n + help + Enable MPU diff --git a/arch/arm/soc/arm/beetle/Makefile b/arch/arm/soc/arm/beetle/Makefile index d53ee3b08b9..bb602229463 100644 --- a/arch/arm/soc/arm/beetle/Makefile +++ b/arch/arm/soc/arm/beetle/Makefile @@ -7,3 +7,4 @@ # obj-y += soc.o power.o +obj-$(CONFIG_ARM_MPU_ENABLE) += arm_mpu_regions.o diff --git a/arch/arm/soc/arm/beetle/arm_mpu_regions.c b/arch/arm/soc/arm/beetle/arm_mpu_regions.c new file mode 100644 index 00000000000..7417c76bcbd --- /dev/null +++ b/arch/arm/soc/arm/beetle/arm_mpu_regions.c @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2017 Linaro Limited. + * + * SPDX-License-Identifier: Apache-2.0 + */ + + #include + #include + +static struct arm_mpu_region mpu_regions[] = { + /* Region 0 */ + MPU_REGION_ENTRY("FLASH_0", + CONFIG_FLASH_BASE_ADDRESS, + REGION_FLASH_ATTR(REGION_256K)), + /* Region 1 */ + MPU_REGION_ENTRY("RAM_0", + CONFIG_SRAM_BASE_ADDRESS, + REGION_RAM_ATTR(REGION_128K)), + /* Region 2 */ + MPU_REGION_ENTRY("APB_0", + _BEETLE_APB_BASE, + REGION_IO_ATTR(REGION_64K)), + /* Region 3 */ + MPU_REGION_ENTRY("AHB_0", + _BEETLE_AHB_BASE, + REGION_IO_ATTR(REGION_64K)), + /* Region 4 */ + MPU_REGION_ENTRY("BITBAND_0", + _BEETLE_BITBAND_BASE, + REGION_IO_ATTR(REGION_32M)), + /* Region 5 */ + MPU_REGION_ENTRY("PPB_0", + _BEETLE_PPB_BASE, + REGION_PPB_ATTR(REGION_1M)), +}; + +struct arm_mpu_config mpu_config = { + .num_regions = ARRAY_SIZE(mpu_regions), + .mpu_regions = mpu_regions, +};