[rtems commit] bsps/arm: Fix for top of the address space

Sebastian Huber sebh at rtems.org
Wed Jul 17 08:08:13 UTC 2013


Module:    rtems
Branch:    master
Commit:    3923472555cba5ae5a045aa58c8552c7372698a9
Changeset: http://git.rtems.org/rtems/commit/?id=3923472555cba5ae5a045aa58c8552c7372698a9

Author:    Ric Claus <claus at slac.stanford.edu>
Date:      Wed Jul 17 08:42:35 2013 +0200

bsps/arm: Fix for top of the address space

---

 .../libbsp/arm/shared/arm-cp15-set-ttb-entries.c   |    5 +++--
 .../lib/libbsp/arm/shared/include/arm-cp15-start.h |    5 +++--
 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 fc311a1..9797d7b 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 8b38bf8..01f3104 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;
     }
   }
 }




More information about the vc mailing list