2022-12-15 21:00:06

by Pali Rohár

[permalink] [raw]
Subject: Re: [PATCH v1] powerpc/64: Set default CPU in Kconfig

Hello!

On Wednesday 07 December 2022 14:38:40 Christophe Leroy wrote:
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
...
> @@ -166,11 +153,12 @@ CC_FLAGS_FTRACE += -mprofile-kernel
> endif
> endif
>
> -CFLAGS-$(CONFIG_TARGET_CPU_BOOL) += $(call cc-option,-mcpu=$(CONFIG_TARGET_CPU))
> -AFLAGS-$(CONFIG_TARGET_CPU_BOOL) += $(call cc-option,-mcpu=$(CONFIG_TARGET_CPU))
> +CFLAGS-$(CONFIG_TARGET_CPU_BOOL) += -mcpu=$(CONFIG_TARGET_CPU)
> +AFLAGS-$(CONFIG_TARGET_CPU_BOOL) += -mcpu=$(CONFIG_TARGET_CPU)
>
> -CFLAGS-$(CONFIG_E5500_CPU) += $(call cc-option,-mcpu=e500mc64,-mcpu=powerpc64)
> -CFLAGS-$(CONFIG_E6500_CPU) += $(call cc-option,-mcpu=e6500,$(E5500_CPU))
> +CFLAGS-$(CONFIG_POWERPC64_CPU) += $(call cc-option,-mtune=power10, \
> + $(call cc-option,-mtune=power9, \
> + $(call cc-option,-mtune=power8)))
>
> asinstr := $(call as-instr,lis 9$(comma)foo@high,-DHAVE_AS_ATHIGH=1)
>
> diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
...
> @@ -251,6 +249,10 @@ config TARGET_CPU
> default "power8" if POWER8_CPU
> default "power9" if POWER9_CPU
> default "power10" if POWER10_CPU
> + default "e500mc64" if E5500_CPU

Now I'm looking at this change again... and should not E5500_CPU rather
enforce -mcpu=e5500 flag? I know that your patch moves e500mc64 flag
from the Makefile to Kconfig, but maybe it could be changed in some
other followup patch...

Anyway, do you know what is e500mc64 core? I was trying to find some
information about it, but it looks like some unreleased freescale core
which predates e5500 core. ISA (without extensions like altivec) seems
to be same for e500mc64, e5500 and e6500 cores and difference is only
pipeline definitions in gcc config files. So if my understanding is
correct then kernel binary compiled with any of these -mcpu= flag should
work on any of those cores. Just for mismatches core binary will not be
optimized for speed.

> + default "e6500" if E6500_CPU
> + default "power4" if POWERPC64_CPU && !CPU_LITTLE_ENDIAN
> + default "power8" if POWERPC64_CPU && CPU_LITTLE_ENDIAN
> default "405" if 405_CPU
> default "440" if 440_CPU
> default "464" if 464_CPU
> --
> 2.38.1
>


2022-12-16 20:14:01

by Segher Boessenkool

[permalink] [raw]
Subject: Re: [PATCH v1] powerpc/64: Set default CPU in Kconfig

Hi!

On Thu, Dec 15, 2022 at 09:42:02PM +0100, Pali Roh?r wrote:
> On Wednesday 07 December 2022 14:38:40 Christophe Leroy wrote:
> > default "power8" if POWER8_CPU
> > default "power9" if POWER9_CPU
> > default "power10" if POWER10_CPU
> > + default "e500mc64" if E5500_CPU
>
> Now I'm looking at this change again... and should not E5500_CPU rather
> enforce -mcpu=e5500 flag? I know that your patch moves e500mc64 flag
> from the Makefile to Kconfig, but maybe it could be changed in some
> other followup patch...
>
> Anyway, do you know what is e500mc64 core? I was trying to find some
> information about it, but it looks like some unreleased freescale core
> which predates e5500 core.

It looks that way yes. It was submitted at
<https://gcc.gnu.org/pipermail/gcc-patches/2009-November/273251.html>
and committed as <https://gcc.gnu.org/g:b17f98b1c541>. It looks as if
it was based on the e500mc core, while e5500 is a new core (or
significantly different anyway).

> ISA (without extensions like altivec) seems
> to be same for e500mc64, e5500 and e6500 cores and difference is only
> pipeline definitions in gcc config files. So if my understanding is
> correct then kernel binary compiled with any of these -mcpu= flag should
> work on any of those cores. Just for mismatches core binary will not be
> optimized for speed.

It appears the E500MC64 never made it outside of FSL, so it is best not
to use it at all, imo.


Segher

2022-12-16 23:28:27

by Pali Rohár

[permalink] [raw]
Subject: Re: [PATCH v1] powerpc/64: Set default CPU in Kconfig

On Friday 16 December 2022 13:15:43 Segher Boessenkool wrote:
> > Anyway, do you know what is e500mc64 core? I was trying to find some
> > information about it, but it looks like some unreleased freescale core
> > which predates e5500 core.
>
> It looks that way yes. It was submitted at
> <https://gcc.gnu.org/pipermail/gcc-patches/2009-November/273251.html>
> and committed as <https://gcc.gnu.org/g:b17f98b1c541>. It looks as if
> it was based on the e500mc core, while e5500 is a new core (or
> significantly different anyway).

Just a two old Freescale PDF files which I found and mention e500mc-64:
https://web.archive.org/web/20121215191707/http://www.freescale.com/files/ftf_2010/Americas/FTF10_ENT_F0453.pdf
https://web.archive.org/web/20120905164305/http://www.freescale.com/files/ftf_2010/Americas/FTF10_ENT_F0273.pdf

On page 6 in both documents is described P5020 with e500mc-64 cores. But
production version of P5020 contains e5500 cores.

Some other documents are also on nxp.com website:
https://www.google.com/search?q=%22e500mc-64%22+site%3Anxp.com

https://www.nxp.com/files-static/training/doc/MULTICORE_MORE.pdf
https://www.nxp.com/docs/en/supporting-information/WBNR_FTF10_NET_F0707.pdf
https://www.nxp.com/docs/en/supporting-information/WBNR_FTF10_NET_F0704.pdf

> > ISA (without extensions like altivec) seems
> > to be same for e500mc64, e5500 and e6500 cores and difference is only
> > pipeline definitions in gcc config files. So if my understanding is
> > correct then kernel binary compiled with any of these -mcpu= flag should
> > work on any of those cores. Just for mismatches core binary will not be
> > optimized for speed.
>
> It appears the E500MC64 never made it outside of FSL, so it is best not
> to use it at all, imo.

Yes, it really makes sense to not use e500mc64 flag. Maybe gcc
documentation could be updated to mention this fact?