<div dir="ltr">Thanks for this. The Gaisler code is in transition to the 2 paragraph BSD <div>license, it appears that the new file has missed the SPDX marker at</div><div>the top. Also please ensure the license is formatted like the others. From</div><div>my quick review, it looks like the line breaks are in different places from</div><div>here:</div><div><br></div><div><a href="https://git.rtems.org/rtems/tree/cpukit/include/aio.h">https://git.rtems.org/rtems/tree/cpukit/include/aio.h</a><br></div><div><br></div><div>That one is based on the script I used to change them in bulk. If there</div><div>are discrepancies you spot on other code, feel free to let me know. </div><div>Changing all this has been quite tedious and it is easy to miss things.</div><div><br></div><div>--joel</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jul 14, 2022 at 6:22 AM Daniel Cederman <<a href="mailto:cederman@gaisler.com">cederman@gaisler.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">From: Martin Aberg <<a href="mailto:maberg@gaisler.com" target="_blank">maberg@gaisler.com</a>><br>
<br>
Remember the initial stack pointer in start.S. It can later be used to<br>
determine top of RAM.<br>
---<br>
 bsps/riscv/include/bsp/start.h                | 65 +++++++++++++++++++<br>
 .../shared/start/bspgetworkarea-fromstack.c   | 53 +++++++++++++++<br>
 bsps/riscv/shared/start/start.S               | 25 +++++++<br>
 3 files changed, 143 insertions(+)<br>
 create mode 100644 bsps/riscv/include/bsp/start.h<br>
 create mode 100644 bsps/riscv/shared/start/bspgetworkarea-fromstack.c<br>
<br>
diff --git a/bsps/riscv/include/bsp/start.h b/bsps/riscv/include/bsp/start.h<br>
new file mode 100644<br>
index 0000000000..6c9d57d4ed<br>
--- /dev/null<br>
+++ b/bsps/riscv/include/bsp/start.h<br>
@@ -0,0 +1,65 @@<br>
+/**<br>
+ * @file<br>
+ *<br>
+ * @ingroup RTEMSBSPsRISCVSharedStart<br>
+ *<br>
+ * @brief RISC-V start definitions.<br>
+ */<br>
+<br>
+/*<br>
+ * Copyright (c) 2021 Cobham Gaisler AB.<br>
+ *<br>
+ * Redistribution and use in source and binary forms, with or without<br>
+ * modification, are permitted provided that the following conditions<br>
+ * are met:<br>
+ * 1. Redistributions of source code must retain the above copyright<br>
+ *    notice, this list of conditions and the following disclaimer.<br>
+ * 2. Redistributions in binary form must reproduce the above copyright<br>
+ *    notice, this list of conditions and the following disclaimer in the<br>
+ *    documentation and/or other materials provided with the distribution.<br>
+ *<br>
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND<br>
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE<br>
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE<br>
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE<br>
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL<br>
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS<br>
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)<br>
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT<br>
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY<br>
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF<br>
+ * SUCH DAMAGE.<br>
+ */<br>
+<br>
+#ifndef LIBBSP_RISCV_SHARED_START_H<br>
+#define LIBBSP_RISCV_SHARED_START_H<br>
+<br>
+/**<br>
+ * @defgroup RTEMSBSPsRISCVSharedStart Start Support<br>
+ *<br>
+ * @ingroup RTEMSBSPsRISCVShared<br>
+ *<br>
+ * @brief Start support.<br>
+ *<br>
+ * @{<br>
+ */<br>
+<br>
+#include <stdint.h><br>
+<br>
+#ifdef __cplusplus<br>
+extern "C" {<br>
+#endif<br>
+<br>
+/*<br>
+ * This variable is initialized by the first CPU entering the BSP start code.<br>
+ * The value is the stack pointer at entry.<br>
+ */<br>
+extern uintptr_t riscv_start_stack_pointer;<br>
+<br>
+#ifdef __cplusplus<br>
+}<br>
+#endif<br>
+<br>
+/** @} */<br>
+<br>
+#endif /* LIBBSP_RISCV_SHARED_START_H */<br>
diff --git a/bsps/riscv/shared/start/bspgetworkarea-fromstack.c b/bsps/riscv/shared/start/bspgetworkarea-fromstack.c<br>
new file mode 100644<br>
index 0000000000..6885a77dc0<br>
--- /dev/null<br>
+++ b/bsps/riscv/shared/start/bspgetworkarea-fromstack.c<br>
@@ -0,0 +1,53 @@<br>
+/*<br>
+ *  This set of routines are the BSP specific initialization<br>
+ *  support routines.<br>
+ *<br>
+ *  COPYRIGHT (c) 1989-2020.<br>
+ *  On-Line Applications Research Corporation (OAR),<br>
+ *  Cobham Gaisler AB.<br>
+ *<br>
+ *  The license and distribution terms for this file may be<br>
+ *  found in the file LICENSE in this distribution or at<br>
+ *  <a href="http://www.rtems.org/license/LICENSE" rel="noreferrer" target="_blank">http://www.rtems.org/license/LICENSE</a>.<br>
+ */<br>
+<br>
+#include <bsp.h><br>
+#include <bsp/start.h><br>
+#include <bsp/bootcard.h><br>
+<br>
+#include <rtems/sysinit.h><br>
+<br>
+/*<br>
+ *  These are provided by the linkcmds for ALL of the BSPs which use this file.<br>
+ */<br>
+extern char WorkAreaBase[];<br>
+extern char RamEnd[];<br>
+<br>
+static Memory_Area _Memory_Areas[ 1 ];<br>
+<br>
+static void bsp_memory_initialize( void )<br>
+{<br>
+  char *end;<br>
+<br>
+  /* top of RAM inidicated by initial stack pointer */<br>
+  end = (char *) riscv_start_stack_pointer;<br>
+  if (end == 0) {<br>
+    /* fall back to linker symbol if not set */<br>
+    end = RamEnd;<br>
+  }<br>
+  _Memory_Initialize( &_Memory_Areas[ 0 ], WorkAreaBase, end );<br>
+}<br>
+<br>
+RTEMS_SYSINIT_ITEM(<br>
+  bsp_memory_initialize,<br>
+  RTEMS_SYSINIT_MEMORY,<br>
+  RTEMS_SYSINIT_ORDER_MIDDLE<br>
+);<br>
+<br>
+static const Memory_Information _Memory_Information =<br>
+  MEMORY_INFORMATION_INITIALIZER( _Memory_Areas );<br>
+<br>
+const Memory_Information *_Memory_Get( void )<br>
+{<br>
+  return &_Memory_Information;<br>
+}<br>
diff --git a/bsps/riscv/shared/start/start.S b/bsps/riscv/shared/start/start.S<br>
index 3702f8ac2f..21945a99f5 100644<br>
--- a/bsps/riscv/shared/start/start.S<br>
+++ b/bsps/riscv/shared/start/start.S<br>
@@ -35,6 +35,16 @@<br>
 #include <bsp/linker-symbols.h><br>
 #include <bspopts.h><br>
<br>
+#if __riscv_xlen == 32<br>
+#define PTR_ALIGN 2<br>
+#define PTR_SIZE 4<br>
+#define PTR_VALUE .word<br>
+#elif __riscv_xlen == 64<br>
+#define PTR_ALIGN 3<br>
+#define PTR_SIZE 8<br>
+#define PTR_VALUE .dword<br>
+#endif<br>
+<br>
 PUBLIC(_start)<br>
<br>
        .section        .bsp_start_text, "wax", @progbits<br>
@@ -60,6 +70,9 @@ SYM(_start):<br>
        LADDR   t0, _RISCV_Exception_handler<br>
        csrw    mtvec, t0<br>
<br>
+       /* Save stack pointer so it can mark end of work area later on */<br>
+       mv      t3, sp<br>
+<br>
        /* Load stack pointer and branch to secondary processor start if necessary */<br>
 #ifdef RTEMS_SMP<br>
        LADDR   sp, _ISR_Stack_area_begin<br>
@@ -75,6 +88,9 @@ SYM(_start):<br>
        LADDR   sp, _ISR_Stack_area_end<br>
 #endif<br>
<br>
+       LADDR   t0, riscv_start_stack_pointer<br>
+       SREG    t3, 0(t0)<br>
+<br>
 #ifdef BSP_START_COPY_FDT_FROM_U_BOOT<br>
        mv      a0, a1<br>
        call    bsp_fdt_copy<br>
@@ -146,3 +162,12 @@ SYM(_start):<br>
 #endif<br>
<br>
 #endif /* RTEMS_SMP */<br>
+<br>
+       .section        .data, "aw"<br>
+       .align  PTR_ALIGN<br>
+<br>
+       .globl  riscv_start_stack_pointer<br>
+       .type   riscv_start_stack_pointer, @object<br>
+       .size   riscv_start_stack_pointer, PTR_SIZE<br>
+riscv_start_stack_pointer:<br>
+       PTR_VALUE       0<br>
-- <br>
2.34.1<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div>