I updated my git repo, recompiled, and ran my rki image on the raspberry pi.
Looks good.
Alan

On 10/3/2013 8:56 AM, Gedare Bloom wrote:
Thanks Alan.

Patch committed with the fix for the struct definition, and also I
reworded the commit message a little bit.

Please verify,
Gedare

On Wed, Oct 2, 2013 at 10:53 AM, Alan Cudmore <alan.cudm...@gmail.com> wrote:
It looks good to me. I updated my RTEMS git and tools, then I compiled and
ran it on the raspberry Pi.

The only thing that did not work:

In the file arm-cp15-start.h, I had to move
typedef struct {
   uint32_t begin;
   uint32_t end;
   uint32_t flags;
} arm_cp15_start_section_config;

to be before
extern const arm_cp15_start_section_config bsp_mm_config_table[];

It did not compile if the bsp_mm_config_table declaration was first.


Alan


On 9/28/2013 12:07 PM, Gedare Bloom wrote:
Looks good on my end. Alan or Sebastian have any comments?
-Gedare

On Sat, Sep 28, 2013 at 4:08 AM, Hesham AL-Matary
<heshamelmat...@gmail.com> wrote:
The newly added ORed flag: ARM_CP15_CTRL_XP is vital to get RaspberryPi
MMU working properly and to share the container function between various
ARM BSPs. The new ORed flags do not affect the current BSPs that make use
of arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache
function.

The rest is of the patch targets MMU initialization for ARM
architectures,
desgined to be shared. Later patches make use of shared mminit
implementation.

---
   c/src/lib/libbsp/arm/raspberrypi/Makefile.am       |  9 ++-
   c/src/lib/libbsp/arm/raspberrypi/preinstall.am     |  8 +++
   .../libbsp/arm/raspberrypi/startup/bspstarthooks.c | 22 +------
   c/src/lib/libbsp/arm/raspberrypi/startup/linkcmds  |  4 +-
   .../arm/raspberrypi/startup/mm_config_table.c      | 70
++++++++++++++++++++++
   .../lib/libbsp/arm/shared/include/arm-cp15-start.h | 15 +++--
   c/src/lib/libbsp/arm/shared/mminit.c               | 24 ++++++++
   c/src/lib/libbsp/shared/include/mm.h               | 25 ++++++++
   8 files changed, 151 insertions(+), 26 deletions(-)
   create mode 100644
c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
   create mode 100644 c/src/lib/libbsp/arm/shared/mminit.c
   create mode 100644 c/src/lib/libbsp/shared/include/mm.h

diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
index 24d396c..a06979a 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
+++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
@@ -27,6 +27,7 @@ nodist_include_HEADERS = ../../shared/include/coverhd.h
\
   nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h

   include_bsp_HEADERS =
+include_bsp_HEADERS += ../../../libbsp/shared/include/mm.h
   include_bsp_HEADERS += ../../shared/include/utility.h
   include_bsp_HEADERS += ../../shared/include/irq-generic.h
   include_bsp_HEADERS += ../../shared/include/irq-info.h
@@ -35,6 +36,7 @@ include_bsp_HEADERS +=
../../shared/include/uart-output-char.h
   include_bsp_HEADERS += ../../shared/tod.h
   include_bsp_HEADERS += ../shared/include/linker-symbols.h
   include_bsp_HEADERS += ../shared/include/start.h
+include_bsp_HEADERS += ../shared/include/arm-cp15-start.h
   include_bsp_HEADERS += ../shared/lpc/include/lpc-timer.h
   include_bsp_HEADERS += ../shared/lpc/include/lpc-dma.h
   include_bsp_HEADERS += include/irq.h
@@ -83,7 +85,7 @@ libbsp_a_SOURCES += ../../shared/sbrk.c
   libbsp_a_SOURCES += ../../shared/src/stackalloc.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
@@ -91,6 +93,7 @@ libbsp_a_SOURCES += startup/bspstart.c

   # IRQ
   libbsp_a_SOURCES += ../../shared/src/irq-default-handler.c
+libbsp_a_SOURCES += ../shared/arm-cp15-set-exception-handler.c
   libbsp_a_SOURCES += ../../shared/src/irq-generic.c
   libbsp_a_SOURCES += ../../shared/src/irq-info.c
   libbsp_a_SOURCES += ../../shared/src/irq-legacy.c
@@ -127,6 +130,10 @@ libbsp_a_CPPFLAGS +=
-I$(srcdir)/../../../libcpu/arm/shared/include
   # Start hooks
   libbsp_a_SOURCES += startup/bspstarthooks.c

+# LIBMM
+libbsp_a_SOURCES += startup/mm_config_table.c
+libbsp_a_SOURCES += ../shared/mminit.c
+

###############################################################################
   # Network                                                    #

###############################################################################
diff --git a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
index 056c5f1..a638e64 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
+++ b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
@@ -62,6 +62,10 @@ $(PROJECT_INCLUDE)/bsp/bootcard.h:
../../shared/include/bootcard.h $(PROJECT_INC
          $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/bootcard.h
   PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/bootcard.h

+$(PROJECT_INCLUDE)/bsp/mm.h: ../../../libbsp/shared/include/mm.h
$(PROJECT_INCLUDE)/bsp/$(dirstamp)
+       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/mm.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/mm.h
+
   $(PROJECT_INCLUDE)/bsp/utility.h: ../../shared/include/utility.h
$(PROJECT_INCLUDE)/bsp/$(dirstamp)
          $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/utility.h
   PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/utility.h
@@ -94,6 +98,10 @@ $(PROJECT_INCLUDE)/bsp/start.h:
../shared/include/start.h $(PROJECT_INCLUDE)/bsp
          $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/start.h
   PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/start.h

+$(PROJECT_INCLUDE)/bsp/arm-cp15-start.h:
../shared/include/arm-cp15-start.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/arm-cp15-start.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/arm-cp15-start.h
+
   $(PROJECT_INCLUDE)/bsp/lpc-timer.h: ../shared/lpc/include/lpc-timer.h
$(PROJECT_INCLUDE)/bsp/$(dirstamp)
          $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/lpc-timer.h
   PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/lpc-timer.h
diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c
b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c
index a224168..71b2ff1 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c
+++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c
@@ -7,6 +7,7 @@
    */

   /*
+ * Copyright (c) 2013. Hesham AL-Matary
    * Copyright (c) 2013 by Alan Cudmore
    * based on work by:
    * Copyright (c) 2009
@@ -24,33 +25,16 @@
   #include <bspopts.h>
   #include <bsp/start.h>
   #include <bsp/raspberrypi.h>
-#include <bsp/mmu.h>
-
-static void BSP_START_TEXT_SECTION raspberrypi_cache_setup(void)
-{
-  uint32_t ctrl = 0;
-
-  /* Disable MMU and cache, basic settings */
-  ctrl = arm_cp15_get_control();
-  ctrl &= ~(ARM_CP15_CTRL_I | ARM_CP15_CTRL_R | ARM_CP15_CTRL_C
-    | ARM_CP15_CTRL_V | ARM_CP15_CTRL_M);
-  ctrl |= ARM_CP15_CTRL_S;
-  arm_cp15_set_control(ctrl);
-
-  arm_cp15_cache_invalidate();
-  arm_cp15_tlb_invalidate();
-
-}
-
+#include <bsp/mm.h>

   void BSP_START_TEXT_SECTION bsp_start_hook_0(void)
   {
-  raspberrypi_cache_setup();
   }


   void BSP_START_TEXT_SECTION bsp_start_hook_1(void)
   {
     bsp_start_copy_sections();
+  bsp_memory_management_initialize();
     bsp_start_clear_bss();
   }
diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/linkcmds
b/c/src/lib/libbsp/arm/raspberrypi/startup/linkcmds
index b9a0dd8..c12b348 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/startup/linkcmds
+++ b/c/src/lib/libbsp/arm/raspberrypi/startup/linkcmds
@@ -35,7 +35,8 @@

   MEMORY {
           VECTOR_RAM     (AIW) : ORIGIN = 0x0       , LENGTH = 0x8000
-        RAM            (AIW) : ORIGIN = 0x00008000, LENGTH = 128M -
0x8000
+        RAM            (AIW) : ORIGIN = 0x00008000, LENGTH = 128M - 48K
+       RAM_MMU        (AIW) : ORIGIN = 128M - 16k, LENGTH = 16k
   }

   REGION_ALIAS ("REGION_START", RAM);
@@ -58,5 +59,6 @@ bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ?
bsp_stack_irq_size : 4096;
   bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size
: 1024;

   bsp_section_robarrier_align = DEFINED (bsp_section_robarrier_align) ?
bsp_section_robarrier_align : 1M;
+bsp_translation_table_base = ORIGIN (RAM_MMU);

   INCLUDE linkcmds.armv4
diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
b/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
new file mode 100644
index 0000000..fd85513
--- /dev/null
+++ b/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2013 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  <i...@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/start.h>
+#include <bsp/arm-cp15-start.h>
+
+#ifdef RTEMS_SMP
+  #define MMU_DATA_READ_WRITE ARMV7_MMU_DATA_READ_WRITE_SHAREABLE
+#else
+  #define MMU_DATA_READ_WRITE ARMV7_MMU_DATA_READ_WRITE_CACHED
+#endif
+
+BSP_START_DATA_SECTION const arm_cp15_start_section_config
+bsp_mm_config_table[] = {
+  {
+    .begin = (uint32_t) bsp_section_fast_text_begin,
+    .end = (uint32_t) bsp_section_fast_text_end,
+    .flags = ARMV7_MMU_CODE_CACHED
+  }, {
+    .begin = (uint32_t) bsp_section_fast_data_begin,
+    .end = (uint32_t) bsp_section_fast_data_end,
+    .flags = MMU_DATA_READ_WRITE
+  }, {
+    .begin = (uint32_t) bsp_section_start_begin,
+    .end = (uint32_t) bsp_section_start_end,
+    .flags = ARMV7_MMU_CODE_CACHED
+  }, {
+    .begin = (uint32_t) bsp_section_vector_begin,
+    .end = (uint32_t) bsp_section_vector_end,
+    .flags = MMU_DATA_READ_WRITE
+  }, {
+    .begin = (uint32_t) bsp_section_text_begin,
+    .end = (uint32_t) bsp_section_text_end,
+    .flags = ARMV7_MMU_CODE_CACHED
+  }, {
+    .begin = (uint32_t) bsp_section_rodata_begin,
+    .end = (uint32_t) bsp_section_rodata_end,
+    .flags = ARMV7_MMU_DATA_READ_ONLY_CACHED
+  }, {
+    .begin = (uint32_t) bsp_section_data_begin,
+    .end = (uint32_t) bsp_section_data_end,
+    .flags = MMU_DATA_READ_WRITE
+  }, {
+    .begin = (uint32_t) bsp_section_bss_begin,
+    .end = (uint32_t) bsp_section_bss_end,
+    .flags = MMU_DATA_READ_WRITE
+  }, {
+    .begin = (uint32_t) bsp_section_work_begin,
+    .end = (uint32_t) bsp_section_work_end,
+    .flags = MMU_DATA_READ_WRITE
+  }, {
+    .begin = (uint32_t) bsp_section_stack_begin,
+    .end = (uint32_t) bsp_section_stack_end,
+    .flags = MMU_DATA_READ_WRITE
+  }
+};
+
+BSP_START_DATA_SECTION const size_t bsp_mm_config_table_size =
+RTEMS_ARRAY_SIZE(&bsp_mm_config_table);
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 01f3104..6a2598b 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,15 @@
   #define LIBBSP_ARM_SHARED_ARM_CP15_START_H

   #include <libcpu/arm-cp15.h>
-
   #include <bsp/start.h>

   #ifdef __cplusplus
   extern "C" {
   #endif /* __cplusplus */

+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);

@@ -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 0000000..0ea9805
--- /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
+  );
+}
diff --git a/c/src/lib/libbsp/shared/include/mm.h
b/c/src/lib/libbsp/shared/include/mm.h
new file mode 100644
index 0000000..1a1eb7f
--- /dev/null
+++ b/c/src/lib/libbsp/shared/include/mm.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2013 Hesham AL-Matary.
+ * Copyright (c) 2013 Gedare Bloom.
+ *
+ * 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.
+ */
+
+#ifndef __LIBBSP_MM_H
+#define __LIBBSP_MM_H
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void bsp_memory_management_initialize(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--
1.8.3.1

_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org
http://www.rtems.org/mailman/listinfo/rtems-devel


_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org
http://www.rtems.org/mailman/listinfo/rtems-devel

Reply via email to