On 04/07/16 01:52, pp...@cmp.felk.cvut.cz wrote:
From: Pavel Pisa <p...@cmp.felk.cvut.cz>

When HYP mode is detected at startup then setup HYP mode
vectors table (for future extensions) clean exceptions
switching to HYP mode and switch CPU to ARM SVC mode.

BSPs which want to use this support need to include next option
in their configure.ac

   RTEMS_BSPOPTS_SET([BSP_START_IN_HYP_SUPPORT],[*],[1])
   RTEMS_BSPOPTS_HELP([BSP_START_IN_HYP_SUPPORT], [Support start of BSP in ARM 
HYP mode])
   AM_CONDITIONAL(BSP_START_IN_HYP_SUPPORT,test "$BSP_START_IN_HYP_SUPPORT" = 
"1")

and need to include next lines in corresponding Makefile.am

   if BSP_START_IN_HYP_SUPPORT
   libbsp_a_SOURCES += ../shared/startup/bsp-start-in-hyp-support.S
   endif
---
  .../lib/libbsp/arm/shared/include/linker-symbols.h |  4 ++
  c/src/lib/libbsp/arm/shared/include/start.h        | 13 +++-
  c/src/lib/libbsp/arm/shared/start/start.S          | 73 +++++++++++++++++++-
  .../arm/shared/startup/bsp-start-in-hyp-support.S  | 77 ++++++++++++++++++++++
  c/src/lib/libbsp/arm/shared/startup/linkcmds.base  |  9 ++-
  5 files changed, 170 insertions(+), 6 deletions(-)
  create mode 100644 
c/src/lib/libbsp/arm/shared/startup/bsp-start-in-hyp-support.S

diff --git a/c/src/lib/libbsp/arm/shared/include/linker-symbols.h 
b/c/src/lib/libbsp/arm/shared/include/linker-symbols.h
index 7446259..1a996f5 100644
--- a/c/src/lib/libbsp/arm/shared/include/linker-symbols.h
+++ b/c/src/lib/libbsp/arm/shared/include/linker-symbols.h
@@ -59,6 +59,10 @@ LINKER_SYMBOL(bsp_stack_und_begin)
  LINKER_SYMBOL(bsp_stack_und_end)
  LINKER_SYMBOL(bsp_stack_und_size)
+LINKER_SYMBOL(bsp_stack_hyp_begin)
+LINKER_SYMBOL(bsp_stack_hyp_end)
+LINKER_SYMBOL(bsp_stack_hyp_size)
+
  LINKER_SYMBOL(bsp_stack_svc_begin)
  LINKER_SYMBOL(bsp_stack_svc_end)
  LINKER_SYMBOL(bsp_stack_svc_size)
diff --git a/c/src/lib/libbsp/arm/shared/include/start.h 
b/c/src/lib/libbsp/arm/shared/include/start.h
index f61eed3..bf8eed4 100644
--- a/c/src/lib/libbsp/arm/shared/include/start.h
+++ b/c/src/lib/libbsp/arm/shared/include/start.h
@@ -45,6 +45,15 @@ extern "C" {
#define BSP_START_DATA_SECTION __attribute__((section(".bsp_start_data"))) +/*
+* Many ARM boot loaders pass arguments to loaded OS kernel
+*/
+#ifdef BSP_START_HOOKS_WITH_LOADER_ARGS
+#define BSP_START_HOOKS_LOADER_ARGS int saved_psr, int saved_machid, int 
saved_dtb_adr
+#else
+#define BSP_START_HOOKS_LOADER_ARGS void
+#endif
+
  /**
  * @brief System start entry.
  */
@@ -57,7 +66,7 @@ void _start(void);
  * stack pointers are initialized but before the copying of the exception
  * vectors.
  */
-void bsp_start_hook_0(void);
+void bsp_start_hook_0(BSP_START_HOOKS_LOADER_ARGS);

Do we really need the saved_psr and saved_machid? I think it is sufficient to pass the DTB address or NULL to bsp_start_hook_0() for all BSPs. We should avoid this conditional parameter list.

/**
  * @brief Start entry hook 1.
@@ -65,7 +74,7 @@ void bsp_start_hook_0(void);
  * This hook will be called from the start entry code after copying of the
  * exception vectors but before the call to boot_card().
  */
-void bsp_start_hook_1(void);
+void bsp_start_hook_1(BSP_START_HOOKS_LOADER_ARGS);

These parameters are not set up in start.S in this patch.

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.hu...@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

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

Reply via email to