[PATCH] sparc: Add workaround for GRLIB-TN-0011

Joel Sherrill joel at rtems.org
Tue Nov 23 17:13:06 UTC 2021


On Tue, Nov 23, 2021 at 9:34 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> Affected components are the GR712RC, UT699, UT699E, UT700, and
> LEON3FT-RTAX.  Strictly, the workaround is only necessary if the MMU is
> enabled.  Use __FIX_LEON3FT_B2BST to enable the workaround.  This is not
> 100% appropriate, but the best thing we can use to enable the
> workaround.
>
> Close #4551.
> ---
>  cpukit/score/cpu/sparc/cpu_asm.S | 10 ++++++++++
>  1 file changed, 10 insertions(+)
>
> diff --git a/cpukit/score/cpu/sparc/cpu_asm.S b/cpukit/score/cpu/sparc/cpu_asm.S
> index 45d1495af7..04b2b0119f 100644
> --- a/cpukit/score/cpu/sparc/cpu_asm.S
> +++ b/cpukit/score/cpu/sparc/cpu_asm.S
> @@ -190,6 +190,16 @@ done_flushing:
>          ! Try to update the is executing indicator of the heir context
>          mov     1, %g1
>
> +#if defined(__FIX_LEON3FT_B2BST)
> +        /*
> +         * This is a workaround for GRLIB-TN-0011.  Affected components are the
> +         * GR712RC, UT699, UT699E, UT700, and LEON3FT-RTAX.  Strictly, the
> +         * workaround is only necessary if the MMU is enabled.  Using the
> +         * __FIX_LEON3FT_B2BST is not 100% appropriate, but the best thing we
> +         * can use to enable the workaround.
> +         */
> +.align 16
> +#endif

Is there an assumption on the fill pattern here? If the "move 1, %g1" is
executed, it looks like the code will fall into the alignment fill
area. If those
are not guaranteed to be nops, then what instruction(s) are executed?

It probably is a nop but that should be checked and in the comment.

And this is in an SMP conditional section but I am unsure if all of those
are multi-core models.  What does this errata actually cover? Is it that
swap needs to be aligned? And it is just a coincidence that this is only
in an SMP build of RTEMS?

I'm ok with it but the comments and implicit assumptions need to be
enhanced.

>  .Ltry_update_is_executing:
>
>          swap    [%o1 + SPARC_CONTEXT_CONTROL_IS_EXECUTING_OFFSET], %g1
> --
> 2.31.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list