[rtems commit] bsp/imx: Adjust workspace according to device tree

Sebastian Huber sebh at rtems.org
Wed Oct 24 08:19:30 UTC 2018


Module:    rtems
Branch:    master
Commit:    01595a4f321ad890270a3bc3e21c98ba51163562
Changeset: http://git.rtems.org/rtems/commit/?id=01595a4f321ad890270a3bc3e21c98ba51163562

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Oct 24 10:17:58 2018 +0200

bsp/imx: Adjust workspace according to device tree

---

 bsps/arm/imx/start/bspstarthooks.c   | 53 ++++++++++++++++++++++++++++++++++--
 c/src/lib/libbsp/arm/imx/Makefile.am |  1 -
 2 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/bsps/arm/imx/start/bspstarthooks.c b/bsps/arm/imx/start/bspstarthooks.c
index c75b034..6a6b343 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 485a880..d9c55c8 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




More information about the vc mailing list