powerpc/64: Set default CPU in Kconfig

Since commit 0069f3d14e ("powerpc/64e: Tie PPC_BOOK3E_64 to
PPC_E500MC"), the only possible BOOK3E/64 are E500, so no need of a
default CPU over the E5500.

When the user selects book3e, they must have an e500 compatible
compiler, and it won't work anymore with the default -mcpu=power64, see
commit d6b551b8f9 ("powerpc/64e: Fix build failure with GCC
12 (unrecognized opcode: `wrteei')").

For book3s/64, replace GENERIC_CPU by POWERPC64_CPU to match the PPC32
POWERPC_CPU, and set a default mpcu value in Kconfig directly.

When a user selects a particular CPU, they must ensure the compiler has
the requested capability. Therefore, remove hidden fallback, instead
offer user the possibility to say they want to use the toolchain
default.

Fixes: d6b551b8f9 ("powerpc/64e: Fix build failure with GCC 12 (unrecognized opcode: `wrteei')")
Reported-by: Pali Rohár <pali@kernel.org>
Tested-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/76c11197b058193dcb8e8b26adffba09cfbdab11.1674632329.git.christophe.leroy@csgroup.eu
This commit is contained in:
Christophe Leroy 2023-01-25 08:38:59 +01:00 committed by Michael Ellerman
parent 37251c7114
commit 45f7091aac
2 changed files with 12 additions and 22 deletions

View File

@ -146,19 +146,6 @@ CFLAGS-$(CONFIG_PPC32) += $(call cc-option, $(MULTIPLEWORD))
CFLAGS-$(CONFIG_PPC32) += $(call cc-option,-mno-readonly-in-sdata) CFLAGS-$(CONFIG_PPC32) += $(call cc-option,-mno-readonly-in-sdata)
ifdef CONFIG_PPC_BOOK3S_64
ifdef CONFIG_CPU_LITTLE_ENDIAN
CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power8
else
CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power4
endif
CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power10, \
$(call cc-option,-mtune=power9, \
$(call cc-option,-mtune=power8)))
else ifdef CONFIG_PPC_BOOK3E_64
CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64
endif
ifdef CONFIG_FUNCTION_TRACER ifdef CONFIG_FUNCTION_TRACER
CC_FLAGS_FTRACE := -pg CC_FLAGS_FTRACE := -pg
ifdef CONFIG_MPROFILE_KERNEL ifdef CONFIG_MPROFILE_KERNEL
@ -166,11 +153,12 @@ CC_FLAGS_FTRACE += -mprofile-kernel
endif endif
endif endif
CFLAGS-$(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) += $(call cc-option,-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_POWERPC64_CPU) += $(call cc-option,-mtune=power10, \
CFLAGS-$(CONFIG_E6500_CPU) += $(call cc-option,-mcpu=e6500,$(E5500_CPU)) $(call cc-option,-mtune=power9, \
$(call cc-option,-mtune=power8)))
asinstr := $(call as-instr,lis 9$(comma)foo@high,-DHAVE_AS_ATHIGH=1) asinstr := $(call as-instr,lis 9$(comma)foo@high,-DHAVE_AS_ATHIGH=1)

View File

@ -118,19 +118,18 @@ endchoice
choice choice
prompt "CPU selection" prompt "CPU selection"
default GENERIC_CPU
help help
This will create a kernel which is optimised for a particular CPU. This will create a kernel which is optimised for a particular CPU.
The resulting kernel may not run on other CPUs, so use this with care. The resulting kernel may not run on other CPUs, so use this with care.
If unsure, select Generic. If unsure, select Generic.
config GENERIC_CPU config POWERPC64_CPU
bool "Generic (POWER5 and PowerPC 970 and above)" bool "Generic (POWER5 and PowerPC 970 and above)"
depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN
select PPC_64S_HASH_MMU select PPC_64S_HASH_MMU
config GENERIC_CPU config POWERPC64_CPU
bool "Generic (POWER8 and above)" bool "Generic (POWER8 and above)"
depends on PPC_BOOK3S_64 && CPU_LITTLE_ENDIAN depends on PPC_BOOK3S_64 && CPU_LITTLE_ENDIAN
select ARCH_HAS_FAST_MULTIPLIER select ARCH_HAS_FAST_MULTIPLIER
@ -233,13 +232,12 @@ config E500MC_CPU
config TOOLCHAIN_DEFAULT_CPU config TOOLCHAIN_DEFAULT_CPU
bool "Rely on the toolchain's implicit default CPU" bool "Rely on the toolchain's implicit default CPU"
depends on PPC32
endchoice endchoice
config TARGET_CPU_BOOL config TARGET_CPU_BOOL
bool bool
default !GENERIC_CPU && !TOOLCHAIN_DEFAULT_CPU default !TOOLCHAIN_DEFAULT_CPU
config TARGET_CPU config TARGET_CPU
string string
@ -251,6 +249,10 @@ config TARGET_CPU
default "power8" if POWER8_CPU default "power8" if POWER8_CPU
default "power9" if POWER9_CPU default "power9" if POWER9_CPU
default "power10" if POWER10_CPU default "power10" if POWER10_CPU
default "e500mc64" if E5500_CPU
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 "405" if 405_CPU
default "440" if 440_CPU default "440" if 440_CPU
default "464" if 464_CPU default "464" if 464_CPU