[PATCH 5/5] bsps/sparc: Simplify memory initialization

Gedare Bloom gedare at rtems.org
Tue Jun 8 14:03:15 UTC 2021


These patches look OK, with the register fixes you noted. I guess at
some time, loading initialized data from the ROM was needed, but now
it is not?

Gedare

On Tue, Jun 8, 2021 at 3:21 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> Directly initialize the memory in the start sequence defined by start.S
> instead of using a system initialization handler.  This avoids using the
> global variable rdb_start which used a memory location which was shared
> with _ERC32_MEC_Timer_Control_Mirror.  This change makes it possible to
> use _Memory_Allocate() even before the system initialization is started.
>
> Change license to BSD-2-Clause according to file history and
> re-licensing agreement.
>
> Update #3053.
> ---
>  bsps/sparc/shared/start/bspgetworkarea.c | 59 ++++++++++++++----------
>  bsps/sparc/shared/start/start.S          | 14 ++----
>  2 files changed, 39 insertions(+), 34 deletions(-)
>
> diff --git a/bsps/sparc/shared/start/bspgetworkarea.c b/bsps/sparc/shared/start/bspgetworkarea.c
> index 3fbeb824f2..6ceda38c07 100644
> --- a/bsps/sparc/shared/start/bspgetworkarea.c
> +++ b/bsps/sparc/shared/start/bspgetworkarea.c
> @@ -1,44 +1,55 @@
> +/**
> + * @file
> + *
> + * @ingroup RTEMSScoreMemory
> + *
> + * @brief This source file contains an implementation of _Memory_Get().
> + */
> +
>  /*
> - *  This set of routines are the BSP specific initialization
> - *  support routines.
> + * SPDX-License-Identifier: BSD-2-Clause
>   *
> - *  COPYRIGHT (c) 1989-2008.
> - *  On-Line Applications Research Corporation (OAR).
> + * Copyright (C) 2019, 2021 embedded brains GmbH
>   *
> - *  The license and distribution terms for this file may be
> - *  found in the file LICENSE in this distribution or at
> - *  http://www.rtems.org/license/LICENSE.
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> + * POSSIBILITY OF SUCH DAMAGE.
>   */
>
>  #include <bsp.h>
> -#include <bsp/bootcard.h>
>
> -#include <rtems/sysinit.h>
> +#include <rtems/score/memory.h>
>
> -/* Tells us where to put the workspace in case remote debugger is present.  */
> -extern uintptr_t rdb_start;
> +/* This function is called only by the start sequence defined in start.S */
> +void _SPARC_Memory_initialize( void *end_of_usable_ram );
>
>  static Memory_Area _Memory_Areas[ 1 ];
>
>  static const Memory_Information _Memory_Information =
>    MEMORY_INFORMATION_INITIALIZER( _Memory_Areas );
>
> -static void bsp_memory_initialize( void )
> +void _SPARC_Memory_initialize( void *end_of_usable_ram )
>  {
> -  void      *begin;
> -  uintptr_t  size;
> -
> -  begin = &end;
> -  size = rdb_start - (uintptr_t)begin;
> -  _Memory_Initialize_by_size( &_Memory_Areas[ 0 ], begin, size );
> +  _Memory_Initialize( &_Memory_Areas[ 0 ], &end, end_of_usable_ram );
>  }
>
> -RTEMS_SYSINIT_ITEM(
> -  bsp_memory_initialize,
> -  RTEMS_SYSINIT_MEMORY,
> -  RTEMS_SYSINIT_ORDER_MIDDLE
> -);
> -
>  const Memory_Information *_Memory_Get( void )
>  {
>    return &_Memory_Information;
> diff --git a/bsps/sparc/shared/start/start.S b/bsps/sparc/shared/start/start.S
> index 807e5d1ca3..8a5830ae03 100644
> --- a/bsps/sparc/shared/start/start.S
> +++ b/bsps/sparc/shared/start/start.S
> @@ -178,16 +178,10 @@ SYM(trap_table):
>     MEC timer control register mirror is so we can stop the timers
>     from an external debugger. It is needed because the control
>     register is write-only. Trap 0x7C cannot occure in ERC32...
> -
> -   We also use this location to store the last location of the
> -   usable RAM in order not to overwrite the remote debugger with
> -   the RTEMS work-space area.
> -
>  */
>
> -       .global SYM(_ERC32_MEC_Timer_Control_Mirror), SYM(rdb_start), SYM(CLOCK_SPEED)
> +       .global SYM(_ERC32_MEC_Timer_Control_Mirror), SYM(CLOCK_SPEED)
>
> -SYM(rdb_start):
>  SYM(_ERC32_MEC_Timer_Control_Mirror):
>
>    BAD_TRAP; BAD_TRAP;                           ! 7C - 7D undefined
> @@ -320,9 +314,6 @@ SYM(hard_reset):
>         st      %l7, [%l0]
>  #endif
>
> -       set     SYM(rdb_start), %g5     ! End of RAM
> -       st      %o0, [%g5]
> -
>          /* clear the bss */
>
>          sethi %hi(__bss_start), %g2     ! g2 = start of bss
> @@ -338,6 +329,9 @@ SYM(hard_reset):
>          bleu,a .Lzerobss
>          nop
>
> +        call    SYM(_SPARC_Memory_initialize)
> +         nop ! o0 = end of usable RAM provided by the initial stack pointer
> +
>          call    SYM(boot_card)          ! does not return
>           mov    %g0, %i0                ! command line
>
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list