summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-06-15 13:44:08 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-06-15 15:59:36 +0200
commita94bcc5a3e0108b81c298c3ced91861f38bf9b39 (patch)
treeb1592e3019ad8d4e26477cb94a9cebded686e30a
parentbsp/lpc24xx: Fix timing for M29W320E70 (diff)
downloadrtems-a94bcc5a3e0108b81c298c3ced91861f38bf9b39.tar.bz2
bsp/lpc24xx: More flexible region configuration
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/include/start-config.h5
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/startup/bspstarthooks.c11
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/startup/start-config-mpu.c97
3 files changed, 67 insertions, 46 deletions
diff --git a/c/src/lib/libbsp/arm/lpc24xx/include/start-config.h b/c/src/lib/libbsp/arm/lpc24xx/include/start-config.h
index 648fa13a31..9d6173f741 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/include/start-config.h
+++ b/c/src/lib/libbsp/arm/lpc24xx/include/start-config.h
@@ -105,7 +105,10 @@ extern BSP_START_DATA_SECTION const size_t
lpc24xx_start_config_emc_static_chip_count;
extern BSP_START_DATA_SECTION const ARMV7M_MPU_Region
- lpc24xx_start_config_mpu_regions [LPC24XX_MPU_REGION_COUNT];
+ lpc24xx_start_config_mpu_region [];
+
+extern BSP_START_DATA_SECTION const size_t
+ lpc24xx_start_config_mpu_region_count;
#ifdef __cplusplus
}
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