From a94bcc5a3e0108b81c298c3ced91861f38bf9b39 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 15 Jun 2012 13:44:08 +0200 Subject: bsp/lpc24xx: More flexible region configuration --- .../lib/libbsp/arm/lpc24xx/startup/bspstarthooks.c | 11 ++- .../libbsp/arm/lpc24xx/startup/start-config-mpu.c | 97 +++++++++++++--------- 2 files changed, 63 insertions(+), 45 deletions(-) (limited to 'c/src/lib/libbsp/arm/lpc24xx/startup') diff --git a/c/src/lib/libbsp/arm/lpc24xx/startup/bspstarthooks.c b/c/src/lib/libbsp/arm/lpc24xx/startup/bspstarthooks.c index 56373ec80f..3b198534c6 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/startup/bspstarthooks.c +++ b/c/src/lib/libbsp/arm/lpc24xx/startup/bspstarthooks.c @@ -495,16 +495,15 @@ static BSP_START_TEXT_SECTION void lpc24xx_init_mpu(void) { #ifdef ARM_MULTILIB_ARCH_V7M volatile ARMV7M_MPU *mpu = _ARMV7M_MPU; - size_t n = sizeof(lpc24xx_start_config_mpu_regions) - / sizeof(lpc24xx_start_config_mpu_regions [0]); + size_t region_count = lpc24xx_start_config_mpu_region_count; size_t i = 0; - for (i = 0; i < n; ++i) { - mpu->rbar = lpc24xx_start_config_mpu_regions [i].rbar; - mpu->rasr = lpc24xx_start_config_mpu_regions [i].rasr; + for (i = 0; i < region_count; ++i) { + mpu->rbar = lpc24xx_start_config_mpu_region [i].rbar; + mpu->rasr = lpc24xx_start_config_mpu_region [i].rasr; } - if (n > 0) { + if (region_count > 0) { mpu->ctrl = ARMV7M_MPU_CTRL_ENABLE; } #endif diff --git a/c/src/lib/libbsp/arm/lpc24xx/startup/start-config-mpu.c b/c/src/lib/libbsp/arm/lpc24xx/startup/start-config-mpu.c index b428de655d..b2cffbd2fc 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/startup/start-config-mpu.c +++ b/c/src/lib/libbsp/arm/lpc24xx/startup/start-config-mpu.c @@ -24,44 +24,63 @@ #ifdef ARM_MULTILIB_ARCH_V7M BSP_START_DATA_SECTION const ARMV7M_MPU_Region - lpc24xx_start_config_mpu_regions [LPC24XX_MPU_REGION_COUNT] = { - ARMV7M_MPU_REGION_INITIALIZER( - 0, - 0x00000000, - ARMV7M_MPU_SIZE_512_KB, - ARMV7M_MPU_ATTR_RX - ), - ARMV7M_MPU_REGION_INITIALIZER( - 1, - 0x10000000, - ARMV7M_MPU_SIZE_64_KB, - ARMV7M_MPU_ATTR_RWX - ), - ARMV7M_MPU_REGION_INITIALIZER( - 2, - 0x20000000, - ARMV7M_MPU_SIZE_32_KB, - ARMV7M_MPU_ATTR_RWX - ), - ARMV7M_MPU_REGION_INITIALIZER( - 3, - 0xa0000000, - ARMV7M_MPU_SIZE_32_MB, - ARMV7M_MPU_ATTR_RWX - ), - ARMV7M_MPU_REGION_INITIALIZER( - 4, - 0x20080000, - ARMV7M_MPU_SIZE_128_KB, - ARMV7M_MPU_ATTR_IO - ), - ARMV7M_MPU_REGION_INITIALIZER( - 5, - 0x40000000, - ARMV7M_MPU_SIZE_1_MB, - ARMV7M_MPU_ATTR_IO - ), - ARMV7M_MPU_REGION_DISABLED_INITIALIZER(6), - ARMV7M_MPU_REGION_DISABLED_INITIALIZER(7) + lpc24xx_start_config_mpu_region [] = { + #if defined(LPC24XX_EMC_IS42S32800D7) \ + || defined(LPC24XX_EMC_W9825G2JB75I) \ + || defined(LPC24XX_EMC_IS42S32800B) + ARMV7M_MPU_REGION_INITIALIZER( + 0, + 0x00000000, + ARMV7M_MPU_SIZE_512_KB, + ARMV7M_MPU_ATTR_RX + ), + ARMV7M_MPU_REGION_INITIALIZER( + 1, + 0x10000000, + ARMV7M_MPU_SIZE_64_KB, + ARMV7M_MPU_ATTR_RWX + ), + ARMV7M_MPU_REGION_INITIALIZER( + 2, + 0x20000000, + ARMV7M_MPU_SIZE_32_KB, + ARMV7M_MPU_ATTR_RWX + ), + ARMV7M_MPU_REGION_INITIALIZER( + 3, + 0xa0000000, + ARMV7M_MPU_SIZE_32_MB, + ARMV7M_MPU_ATTR_RWX + ), + ARMV7M_MPU_REGION_INITIALIZER( + 4, + 0x20080000, + ARMV7M_MPU_SIZE_128_KB, + ARMV7M_MPU_ATTR_IO + ), + ARMV7M_MPU_REGION_INITIALIZER( + 5, + 0x40000000, + ARMV7M_MPU_SIZE_1_MB, + ARMV7M_MPU_ATTR_IO + ), + #if defined(LPC24XX_EMC_M29W320E70) \ + || defined(LPC24XX_EMC_SST39VF3201) + ARMV7M_MPU_REGION_INITIALIZER( + 6, + 0x80000000, + ARMV7M_MPU_SIZE_4_MB, + ARMV7M_MPU_ATTR_RWX + ), + #else + ARMV7M_MPU_REGION_DISABLED_INITIALIZER(6), + #endif + ARMV7M_MPU_REGION_DISABLED_INITIALIZER(7) + #endif }; + + BSP_START_DATA_SECTION const size_t + lpc24xx_start_config_mpu_region_count = + sizeof(lpc24xx_start_config_mpu_region) + / sizeof(lpc24xx_start_config_mpu_region [0]); #endif -- cgit v1.2.3