[PATCH v2] powerpc/mpc85xx: Pass correct cpu compiler flags

Tom Rini trini at konsulko.com
Fri Dec 23 16:01:10 CET 2022


On Mon, Dec 19, 2022 at 10:41:52PM +0100, 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 -mcpu=8540 then it pass -me500 flag to GNU AS.
> So it is unnecessary to manually 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 and -mcpu=8548 flag names, for other cores
> -mcpu matches core name.
> 
> The only difference between gcc's -mcpu=8540 and -mcpu=8548 flags is
> support for double precision floating point SPE instructions. As U-Boot
> does not use floating point, it is fine to use -mcpu=8540 for both e500v1
> and e500v2 cores. Moreover gcc 9 completely removed e500 floating point
> support, so since gcc 9 -mcpu=8548 is just alias to -mcpu=8540.
> 
> 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>

Applied to u-boot/master, thanks!

-- 
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/20221223/e6aa300b/attachment.sig>


More information about the U-Boot mailing list