diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-05-02 17:42:20 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-05-03 17:30:55 +0200 |
commit | 037e8ae50621d218679826170abb39dae254df9c (patch) | |
tree | 2bc1824a107f8a0dcc88e08eac7549b4d9dea96b /c/src/lib/libbsp/arm/lpc32xx | |
parent | bsps/arm: Add arm_cp15_mmu_disable() (diff) | |
download | rtems-037e8ae50621d218679826170abb39dae254df9c.tar.bz2 |
bsps/arm: Add arm_cp15_set_trans*_table_entries()
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc32xx')
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/Makefile.am | 2 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/include/mmu.h | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c | 81 |
3 files changed, 6 insertions, 84 deletions
diff --git a/c/src/lib/libbsp/arm/lpc32xx/Makefile.am b/c/src/lib/libbsp/arm/lpc32xx/Makefile.am index 37a4793b39..166870c88a 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/Makefile.am +++ b/c/src/lib/libbsp/arm/lpc32xx/Makefile.am @@ -93,6 +93,7 @@ libbsp_a_SOURCES += ../../shared/src/stackalloc.c libbsp_a_SOURCES += ../../shared/src/uart-output-char.c libbsp_a_SOURCES += ../shared/abort/simple_abort.c libbsp_a_SOURCES += ../shared/startup/bsp-start-memcpy.S +libbsp_a_SOURCES += ../shared/arm-cp15-set-ttb-entries.c # Startup libbsp_a_SOURCES += startup/bspreset.c @@ -128,7 +129,6 @@ libbsp_a_SOURCES += ../../shared/tod.c \ libbsp_a_SOURCES += misc/boot.c libbsp_a_SOURCES += misc/emc.c libbsp_a_SOURCES += misc/i2c.c -libbsp_a_SOURCES += misc/mmu.c libbsp_a_SOURCES += misc/nand-mlc.c libbsp_a_SOURCES += misc/nand-mlc-erase-block-safe.c libbsp_a_SOURCES += misc/nand-mlc-read-blocks.c diff --git a/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h b/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h index eeebe59d20..8ed5cc7ada 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h +++ b/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h @@ -61,11 +61,14 @@ extern "C" { * * @return Previous section flags of the first modified entry. */ -uint32_t lpc32xx_set_translation_table_entries( +static inline uint32_t lpc32xx_set_translation_table_entries( const void *begin, const void *end, uint32_t section_flags -); +) +{ + return arm_cp15_set_translation_table_entries(begin, end, section_flags); +} /** @} */ diff --git a/c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c b/c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c deleted file mode 100644 index a6a06aa8bb..0000000000 --- a/c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @file - * - * @ingroup lpc32xx_mmu - * - * @brief MMU support implementation. - */ - -/* - * Copyright (c) 2010-2011 embedded brains GmbH. All rights reserved. - * - * embedded brains GmbH - * Obere Lagerstr. 30 - * 82178 Puchheim - * Germany - * <rtems@embedded-brains.de> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - */ - -#include <bsp/mmu.h> - -static uint32_t disable_mmu(void) -{ - uint32_t ctrl = 0; - - arm_cp15_data_cache_test_and_clean_and_invalidate(); - - ctrl = arm_cp15_get_control(); - arm_cp15_set_control(ctrl & ~ARM_CP15_CTRL_M); - - arm_cp15_tlb_invalidate(); - - return ctrl; -} - -static void restore_mmu_control(uint32_t ctrl) -{ - arm_cp15_set_control(ctrl); -} - -uint32_t set_translation_table_entries( - const void *begin, - const void *end, - uint32_t section_flags -) -{ - 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 ctrl = disable_mmu(); - uint32_t section_flags_of_first_entry = ttb [i]; - - while (i < iend) { - ttb [i] = (i << ARM_MMU_SECT_BASE_SHIFT) | section_flags; - ++i; - } - - restore_mmu_control(ctrl); - - return section_flags_of_first_entry; -} - -uint32_t lpc32xx_set_translation_table_entries( - const void *begin, - const void *end, - uint32_t section_flags -) -{ - rtems_interrupt_level level; - uint32_t section_flags_of_first_entry = 0; - - rtems_interrupt_disable(level); - section_flags_of_first_entry = - set_translation_table_entries(begin, end, section_flags); - rtems_interrupt_enable(level); - - return section_flags_of_first_entry; -} |