summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/shared
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/shared')
-rw-r--r--c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h25
-rw-r--r--c/src/lib/libbsp/arm/shared/mminit.c24
2 files changed, 39 insertions, 10 deletions
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 01f3104ade..88f903b1dc 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
@@ -1,4 +1,5 @@
/*
+ * Copyright (c) 2013 Hesham AL-Matary.
* Copyright (c) 2009-2013 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
@@ -16,13 +17,21 @@
#define LIBBSP_ARM_SHARED_ARM_CP15_START_H
#include <libcpu/arm-cp15.h>
-
#include <bsp/start.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
+typedef struct {
+ uint32_t begin;
+ uint32_t end;
+ uint32_t flags;
+} arm_cp15_start_section_config;
+
+extern const arm_cp15_start_section_config bsp_mm_config_table[];
+extern const size_t bsp_mm_config_table_size;
+
BSP_START_TEXT_SECTION static inline void
arm_cp15_set_domain_access_control(uint32_t val);
@@ -47,12 +56,6 @@ arm_cp15_get_multiprocessor_affinity(void);
BSP_START_TEXT_SECTION static inline uint32_t
arm_cortex_a9_get_multiprocessor_cpu_id(void);
-typedef struct {
- uint32_t begin;
- uint32_t end;
- uint32_t flags;
-} arm_cp15_start_section_config;
-
BSP_START_TEXT_SECTION static inline void
arm_cp15_start_set_translation_table_entries(
uint32_t *ttb,
@@ -87,9 +90,9 @@ arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache(
arm_cp15_set_domain_access_control(dac);
arm_cp15_set_translation_table_base(ttb);
- /* Initialize translation table with invalid entries */
+ /* Initialize translation table with fixed-map read-write entries */
for (i = 0; i < ARM_MMU_TRANSLATION_TABLE_ENTRY_COUNT; ++i) {
- ttb [i] = 0;
+ ttb [i] = (i << ARM_MMU_SECT_BASE_SHIFT) | ARMV7_MMU_DATA_READ_WRITE;
}
for (i = 0; i < config_count; ++i) {
@@ -97,7 +100,9 @@ arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache(
}
/* Enable MMU and cache */
- ctrl |= ARM_CP15_CTRL_I | ARM_CP15_CTRL_C | ARM_CP15_CTRL_M;
+ ctrl |= ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_S | ARM_CP15_CTRL_I |
+ ARM_CP15_CTRL_C | ARM_CP15_CTRL_M | ARM_CP15_CTRL_XP;
+
arm_cp15_set_control(ctrl);
}
diff --git a/c/src/lib/libbsp/arm/shared/mminit.c b/c/src/lib/libbsp/arm/shared/mminit.c
new file mode 100644
index 0000000000..23e71e62a7
--- /dev/null
+++ b/c/src/lib/libbsp/arm/shared/mminit.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2013 Hesham AL-Matary.
+ *
+ * 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/arm-cp15-start.h>
+#include <bsp/linker-symbols.h>
+#include <bsp/mm.h>
+#include <bsp/start.h>
+
+BSP_START_TEXT_SECTION void bsp_memory_management_initialize(void)
+{
+ uint32_t ctrl = arm_cp15_get_control();
+
+ arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache(
+ ctrl,
+ (uint32_t *) bsp_translation_table_base,
+ ARM_MMU_DEFAULT_CLIENT_DOMAIN,
+ &bsp_mm_config_table[0],
+ bsp_mm_config_table_size
+ );
+}