summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bsps/arm/imx/start/bspstarthooks.c53
-rw-r--r--c/src/lib/libbsp/arm/imx/Makefile.am1
2 files changed, 50 insertions, 4 deletions
diff --git a/bsps/arm/imx/start/bspstarthooks.c b/bsps/arm/imx/start/bspstarthooks.c
index c75b03415b..6a6b343af7 100644
--- a/bsps/arm/imx/start/bspstarthooks.c
+++ b/bsps/arm/imx/start/bspstarthooks.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013, 2018 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -15,11 +15,18 @@
#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION
#include <bsp.h>
+#include <bsp/bootcard.h>
+#include <bsp/fdt.h>
+#include <bsp/linker-symbols.h>
#include <bsp/start.h>
#include <bsp/arm-cp15-start.h>
#include <bsp/arm-a9mpcore-start.h>
-BSP_START_DATA_SECTION static const arm_cp15_start_section_config
+#include <libfdt.h>
+
+#define WORKSPACE_ENTRY_INDEX 8
+
+BSP_START_DATA_SECTION static arm_cp15_start_section_config
imx_mmu_config_table[] = {
ARMV7_CP15_START_DEFAULT_SECTIONS,
{
@@ -29,9 +36,38 @@ imx_mmu_config_table[] = {
}
};
+BSP_START_DATA_SECTION static char memory_path[] = "/memory";
+
BSP_START_TEXT_SECTION static void setup_mmu_and_cache(void)
{
- uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache(
+ const void *fdt;
+ int node;
+ uint32_t ctrl;
+
+ fdt = bsp_fdt_get();
+ node = fdt_path_offset_namelen(
+ fdt,
+ memory_path,
+ (int) sizeof(memory_path) - 1
+ );
+
+ if (node >= 0) {
+ int len;
+ const void *val;
+
+ val = fdt_getprop(fdt, node, "reg", &len);
+ if (len == 8) {
+ uint32_t begin;
+ uint32_t size;
+
+ begin = fdt32_to_cpu(((fdt32_t *) val)[0]);
+ size = fdt32_to_cpu(((fdt32_t *) val)[1]);
+
+ imx_mmu_config_table[WORKSPACE_ENTRY_INDEX].end = begin + size;
+ }
+ }
+
+ ctrl = arm_cp15_start_setup_mmu_and_cache(
ARM_CP15_CTRL_A,
ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z
);
@@ -65,3 +101,14 @@ BSP_START_TEXT_SECTION void bsp_start_hook_1(void)
setup_mmu_and_cache();
bsp_start_clear_bss();
}
+
+void bsp_work_area_initialize(void)
+{
+ uintptr_t begin;
+ uintptr_t end;
+
+ begin = imx_mmu_config_table[WORKSPACE_ENTRY_INDEX].begin;
+ end = imx_mmu_config_table[WORKSPACE_ENTRY_INDEX].end;
+
+ bsp_work_area_initialize_default((void *) begin, end - begin);
+}
diff --git a/c/src/lib/libbsp/arm/imx/Makefile.am b/c/src/lib/libbsp/arm/imx/Makefile.am
index 485a880402..d9c55c82d7 100644
--- a/c/src/lib/libbsp/arm/imx/Makefile.am
+++ b/c/src/lib/libbsp/arm/imx/Makefile.am
@@ -30,7 +30,6 @@ librtemsbsp_a_SOURCES =
# Shared
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c