summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRic Claus <claus@slac.stanford.edu>2013-07-17 08:42:35 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-07-17 10:13:34 +0200
commit3923472555cba5ae5a045aa58c8552c7372698a9 (patch)
treed8a1d1cdf58a8e51e855a8042bdb96e3d6a95c1d
parentbsp/xilinx-zynq: Provide BSP variants (diff)
downloadrtems-3923472555cba5ae5a045aa58c8552c7372698a9.tar.bz2
bsps/arm: Fix for top of the address space
-rw-r--r--c/src/lib/libbsp/arm/shared/arm-cp15-set-ttb-entries.c5
-rw-r--r--c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h5
2 files changed, 6 insertions, 4 deletions
diff --git a/c/src/lib/libbsp/arm/shared/arm-cp15-set-ttb-entries.c b/c/src/lib/libbsp/arm/shared/arm-cp15-set-ttb-entries.c
index fc311a13e3..9797d7bef1 100644
--- a/c/src/lib/libbsp/arm/shared/arm-cp15-set-ttb-entries.c
+++ b/c/src/lib/libbsp/arm/shared/arm-cp15-set-ttb-entries.c
@@ -24,6 +24,7 @@ static uint32_t set_translation_table_entries(
uint32_t *ttb = arm_cp15_get_translation_table_base();
uint32_t i = ARM_MMU_SECT_GET_INDEX(begin);
uint32_t iend = ARM_MMU_SECT_GET_INDEX(ARM_MMU_SECT_MVA_ALIGN_UP(end));
+ uint32_t index_mask = (1U << (32 - ARM_MMU_SECT_BASE_SHIFT)) - 1U;
uint32_t ctrl;
uint32_t section_flags_of_first_entry;
@@ -31,12 +32,12 @@ static uint32_t set_translation_table_entries(
arm_cp15_tlb_invalidate();
section_flags_of_first_entry = ttb [i];
- while (i < iend) {
+ while (i != iend) {
uint32_t addr = i << ARM_MMU_SECT_BASE_SHIFT;
ttb [i] = addr | section_flags;
- ++i;
+ i = (i + 1U) & index_mask;
}
arm_cp15_set_control(ctrl);
diff --git a/c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h b/c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h
index 8b38bf8401..01f3104ade 100644
--- a/c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h
+++ b/c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h
@@ -62,11 +62,12 @@ arm_cp15_start_set_translation_table_entries(
uint32_t i = ARM_MMU_SECT_GET_INDEX(config->begin);
uint32_t iend =
ARM_MMU_SECT_GET_INDEX(ARM_MMU_SECT_MVA_ALIGN_UP(config->end));
+ uint32_t index_mask = (1U << (32 - ARM_MMU_SECT_BASE_SHIFT)) - 1U;
if (config->begin != config->end) {
- while (i < iend) {
+ while (i != iend) {
ttb [i] = (i << ARM_MMU_SECT_BASE_SHIFT) | config->flags;
- ++i;
+ i = (i + 1U) & index_mask;
}
}
}