[PATCH 26/26] leon,tn-0018: work around GRLIB-TN-0018 errata
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Oct 16 05:33:48 UTC 2020
On 23/09/2020 12:24, Daniel Hellstrom wrote:
>> >> Command line defines are discouraged and in cpukit only multilib
>> >> defined defines should be used. Can't you the existing
>> >> __FIX_LEON3FT_B2BST define to enable the errata workarounds?
>> >
>> > For UT700, for example, it is true that B2BST also needs to be
>> > defined, but in general a user may have TN0018 but not the B2BST
>> since
>> > it was fixed in HW several years ago.
>> You mean users building for a custom chip design and a BSP which
>> is not
>> integrated in the RTEMS Project?
>>
> Yes. Maybe that should not be our primary focus for RTEMS though.
>
>
>> > There is no fix needed to the compiler or newlib affecting the
>> > multilibs, the workaround can be implemented purely in the run-time
>> > time time which simplifies the impact on the user. When building
>> > multiple BSPs this is very convenient too since the configure
>> line can
>> > remain the same regardless of the work around. The compiler does
>> not
>> > emit any information about TN0018 or UT700 for example.
>> So far the rule was to use only multilib defined defines and CPU
>> options
>> in the cpukit. I am not sure what we should do to address issues like
>> this. Maybe add CPU-specific CPU options?
>>
> We could turn on __FIX_LEON3FT_TN0018 define for the multilibs defined
> in GCC, but make it RTEMS specific? Please see attached GCC patch. This
> would take care of the mainstream users, and the other LEON3 users could
> enable the fix by adding the -D manually by specifying the target CFLAGS
> when doing RTEMS configure? I could live with that.
>
> When building with the GCC patch it gives:
>
> daniel at daniel:/opt/rcc-1.3.0-gcc/src/samples$ sparc-gaisler-rtems5-gcc
> -dM -E empty.c -mcpu=leon3 -mfix-gr712rc |grep TN0018
> #define __FIX_LEON3FT_TN0018 1
> daniel at daniel:/opt/rcc-1.3.0-gcc/src/samples$ sparc-gaisler-rtems5-gcc
> -dM -E empty.c -mcpu=leon3 -mfix-ut700 |grep TN0018
> #define __FIX_LEON3FT_TN0018 1
> daniel at daniel:/opt/rcc-1.3.0-gcc/src/samples$ sparc-gaisler-rtems5-gcc
> -dM -E empty.c -mcpu=leon3 -mfix-ut699 |grep TN0018
> #define __FIX_LEON3FT_TN0018 1
> daniel at daniel:/opt/rcc-1.3.0-gcc/src/samples$ sparc-gaisler-rtems5-gcc
> -dM -E empty.c -mcpu=leon3 |grep TN0018
> daniel at daniel:/opt/rcc-1.3.0-gcc/src/samples$ sparc-gaisler-rtems5-gcc
> -dM -E empty.c -mcpu=leon |grep TN0018
We already have multilibs for these variants:
sparc-rtems6-gcc -print-multi-lib
.;
soft;@msoft-float
v8;@mcpu=v8
leon3;@mcpu=leon3
leon3v7;@mcpu=leon3v7
leon;@mcpu=leon
leon3/gr712rc;@mcpu=leon3 at mfix-gr712rc
leon3v7/gr712rc;@mcpu=leon3v7 at mfix-gr712rc
leon/ut699;@mcpu=leon at mfix-ut699
leon/at697f;@mcpu=leon at mfix-at697f
soft/v8;@msoft-float at mcpu=v8
soft/leon3;@msoft-float at mcpu=leon3
soft/leon3v7;@msoft-float at mcpu=leon3v7
soft/leon;@msoft-float at mcpu=leon
soft/leon3/gr712rc;@msoft-float at mcpu=leon3 at mfix-gr712rc
soft/leon3v7/gr712rc;@msoft-float at mcpu=leon3v7 at mfix-gr712rc
soft/leon/ut699;@msoft-float at mcpu=leon at mfix-ut699
soft/leon/at697f;@msoft-float at mcpu=leon at mfix-at697f
So adding a built-in define __FIX_LEON3FT_TN0018 to GCC 10 (and clang)
would be my preferred way to add this define for RTEMS. External users
can still define __FIX_LEON3FT_TN0018 on the command line or a header
file if needed.
Independent of this we need a ticket for the TN0018.
--
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.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list