From 3923472555cba5ae5a045aa58c8552c7372698a9 Mon Sep 17 00:00:00 2001 From: Ric Claus Date: Wed, 17 Jul 2013 08:42:35 +0200 Subject: bsps/arm: Fix for top of the address space --- c/src/lib/libbsp/arm/shared/arm-cp15-set-ttb-entries.c | 5 +++-- c/src/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 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; } } } -- cgit v1.2.3