summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/lpc32xx
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-05-02 17:42:20 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-05-03 17:30:55 +0200
commit037e8ae50621d218679826170abb39dae254df9c (patch)
tree2bc1824a107f8a0dcc88e08eac7549b4d9dea96b /c/src/lib/libbsp/arm/lpc32xx
parentbsps/arm: Add arm_cp15_mmu_disable() (diff)
downloadrtems-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.am2
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/include/mmu.h7
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c81
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;
-}