[PATCH] bsp/leon3: Move SMP data to start.S

Joel Sherrill joel at rtems.org
Fri Feb 10 14:22:16 UTC 2023


Looks ok.

On Fri, Feb 10, 2023 at 3:57 AM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> The LEON3_Boot_Cpu global object is only used by start.S.  Move the
> definition
> of this object to start.S and use a local symbol .Lbootcpuindex for it.
>
> Use a compare-and-swap instruction to assign the boot CPU.  This allows a
> concurrent initialization.
>
> Close #4845.
> ---
>  bsps/sparc/leon3/start/bspstart.c |  5 -----
>  bsps/sparc/shared/start/start.S   | 35 +++++++++++++++++++++----------
>  2 files changed, 24 insertions(+), 16 deletions(-)
>
> diff --git a/bsps/sparc/leon3/start/bspstart.c
> b/bsps/sparc/leon3/start/bspstart.c
> index d93d73aca8..61f888247f 100644
> --- a/bsps/sparc/leon3/start/bspstart.c
> +++ b/bsps/sparc/leon3/start/bspstart.c
> @@ -59,11 +59,6 @@ int CPU_SPARC_HAS_SNOOPING;
>  /* Index of CPU, in an AMP system CPU-index may be non-zero */
>  uint32_t LEON3_Cpu_Index = 0;
>
> -#if defined(RTEMS_SMP)
> -/* Index of the boot CPU. Set by the first CPU at boot to its CPU ID. */
> -int LEON3_Boot_Cpu = -1;
> -#endif
> -
>  /*
>   * set_snooping
>   *
> diff --git a/bsps/sparc/shared/start/start.S
> b/bsps/sparc/shared/start/start.S
> index a67c6bc163..01f1353758 100644
> --- a/bsps/sparc/shared/start/start.S
> +++ b/bsps/sparc/shared/start/start.S
> @@ -493,17 +493,13 @@ SYM(hard_reset):
>          mov     %sp, %fp ! set frame pointer
>
>  #if defined(START_LEON3_ENABLE_SMP)
> -       /* If LEON3_Boot_Cpu < 0 then assign us as boot CPU and continue.
> */
> -        set     SYM(LEON3_Boot_Cpu), %l0
> -        ld      [%l0], %l1
> -        tst     %l1
> -       bneg    .Lbootcpu
> -        nop
> -
> -       call    SYM(bsp_start_on_secondary_processor) ! does not return
> -        mov    %g6, %o0
> -.Lbootcpu:
> -       st      %l7, [%l0]
> +        /* If .Lbootcpuindex < 0 then assign us as boot CPU and continue.
> */
> +        set     SYM(.Lbootcpuindex), %l0
> +        mov     -1, %l1
> +        casa    [ %l0 ] (10), %l1, %l7
> +        cmp     %l1, %l7
> +        bne     .Lbootsecondarycpu
> +         nop
>  #endif
>
>          /* clear the bss */
> @@ -527,4 +523,21 @@ SYM(hard_reset):
>          call    SYM(boot_card)          ! does not return
>           mov    %g0, %o0                ! command line
>
> +#if defined(START_LEON3_ENABLE_SMP)
> +.Lbootsecondarycpu:
> +        call    SYM(bsp_start_on_secondary_processor) ! does not return
> +         mov    %g6, %o0
> +
> +        /*
> +         * This is the index of the boot CPU.  Set by the first CPU at
> boot to
> +         * its CPU index.
> +         */
> +        .section .data, "aw"
> +        .align  4
> +        .type   .Lbootcpuindex, #object
> +        .size   .Lbootcpuindex, 4
> +.Lbootcpuindex:
> +        .long   -1
> +#endif
> +
>  /* end of file */
> --
> 2.35.3
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20230210/22a75e8a/attachment.htm>


More information about the devel mailing list