[PATCH u-boot] powerpc/mpc85xx: Pass correct cpu compiler flags

Tom Rini trini at konsulko.com
Tue Dec 13 22:33:14 CET 2022


On Tue, Dec 13, 2022 at 10:02:38PM +0100, Pali Rohár wrote:
> Vagrant and Aurelien, could you test if this change fully fixes your
> Debian issue?
> 
> Tom, do you have any opinion for this change? It should help building
> with binutils 2.38.

I have both of your toolchain flag patches in my queue to not forget for
v2023.01.

> 
> On Sunday 11 December 2022 15:12:04 Pali Rohár wrote:
> > When gcc's default cpu (selected by --with-cpu= during gcc's configure
> > phase) does not match target u-boot board cpu then u-boot binary does not
> > have to be compiled correctly. Lot of distributions sets gcc's default cpu
> > to generic powerpc variant which works fine.
> > 
> > U-Boot already pass -Wa,-me500 flag to gcc which instructs GNU AS to accept
> > e500 specific instructions when processing assembler source files (.S).
> > 
> > This affects also assembly files generated by gcc from C source files. And
> > because gcc for generic powerpc cpu puts '.machine ppc' at the beginning of
> > the generated assembly file, it basically overwrites -me500 flag by which
> > was GNU AS invoked (from U-boot build system).
> > 
> > It started to be an issue since binutils 2.38 which does not keep enabled
> > extra functional units selected by previous cpu. Hence issuing directive
> > '.machine ppc' (generated by gcc for generic powerpc) after '.machine e500'
> > (specifying at command line) disables usage of e500 specific instructions.
> > 
> > And compiling arch/powerpc/cpu/mpc85xx/tlb.c code throws following
> > assembler errors:
> > 
> >     {standard input}: Assembler messages:
> >     {standard input}:127: Error: unrecognized opcode: `tlbre'
> >     {standard input}:418: Error: unrecognized opcode: `tlbre'
> >     {standard input}:821: Error: unrecognized opcode: `msync'
> >     {standard input}:821: Error: unrecognized opcode: `tlbwe'
> >     {standard input}:884: Error: unrecognized opcode: `tlbsx'
> > 
> > This issue was already hit by Debian people and is reported in bug tracker:
> > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003490
> > 
> > Calling gcc with -mcpu=8540 flag fixes this issue because -mcpu=8540 tells
> > gcc to compile code for e500 core/cpu (overwriting gcc's default cpu) and
> > does not put '.machine ppc' directive into assembly anymore.
> > 
> > Also if gcc is invoked with -mpcu=8540 then it pass -me500 flag to GNU AS.
> > So it is needed to specify -Wa,-me500 flag because it is implicitly added.
> > 
> > Fix this issue properly by specifying correct -mcpu compiler flag for all
> > supported powerpc cores in U-Boot mpc85xx platform, which are: e500v1,
> > e500v2, e500mc, e5500 and e6500. For specifying e500v1 and e500v2 cores,
> > gcc has unintuitive -mcpu=8540 flag name, for other cores -mcpu matches
> > core name.
> > 
> > Older gcc versions (up to gcc 8) had also -mcpu=8548 flag for specifying
> > e500v2 cores but the only difference between -mcpu=8540 and -mcpu=8548 was
> > HW support of double precision floating point. So it is fine to use
> > -mcpu=8540 for both e500v1 and e500v2 cores as u-boot does not use floating
> > point arithmetic.
> > 
> > Note that U-Boot's CONFIG_E500 option is set also for other cpus, not only
> > for e500v1 and e500v2. So do not check for CONFIG_E500 and rather set e500
> > as last fallback value when no other mpc85xx cpu matches.
> > 
> > Signed-off-by: Pali Rohár <pali at kernel.org>
> > ---
> >  arch/powerpc/cpu/mpc85xx/config.mk | 12 +++++++++++-
> >  1 file changed, 11 insertions(+), 1 deletion(-)
> > 
> > diff --git a/arch/powerpc/cpu/mpc85xx/config.mk b/arch/powerpc/cpu/mpc85xx/config.mk
> > index 7a1d81cf2d76..b6b5d2053aea 100644
> > --- a/arch/powerpc/cpu/mpc85xx/config.mk
> > +++ b/arch/powerpc/cpu/mpc85xx/config.mk
> > @@ -3,7 +3,7 @@
> >  # (C) Copyright 2002,2003 Motorola Inc.
> >  # Xianghua Xiao, X.Xiao at motorola.com
> >  
> > -PLATFORM_CPPFLAGS += -Wa,-me500 -msoft-float -mno-string
> > +PLATFORM_CPPFLAGS += -msoft-float -mno-string
> >  PLATFORM_RELFLAGS += -msingle-pic-base -fno-jump-tables
> >  
> >  # -mspe=yes is needed to have -mno-spe accepted by a buggy GCC;
> > @@ -11,3 +11,13 @@ PLATFORM_RELFLAGS += -msingle-pic-base -fno-jump-tables
> >  # http://gcc.gnu.org/ml/gcc-patches/2008-04/msg00311.html
> >  PLATFORM_CPPFLAGS += $(call cc-option,-mspe=yes) \
> >  		   $(call cc-option,-mno-spe)
> > +
> > +ifdef CONFIG_E6500
> > +PLATFORM_CPPFLAGS += -mcpu=e6500
> > +else ifdef CONFIG_E5500
> > +PLATFORM_CPPFLAGS += -mcpu=e5500
> > +else ifdef CONFIG_E500MC
> > +PLATFORM_CPPFLAGS += -mcpu=e500mc
> > +else
> > +PLATFORM_CPPFLAGS += -mcpu=8540
> > +endif
> > -- 
> > 2.20.1
> > 

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20221213/273c7df4/attachment.sig>


More information about the U-Boot mailing list