diff options
author | Arnd Bergmann <arnd@arndb.de> | 2022-04-04 11:52:31 +0200 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2022-04-08 17:20:54 +0200 |
commit | 5d6f52671e76ca2d55d74e676ac4c38ceb14a2d3 (patch) | |
tree | 7eb2ac50db50a924718ae5bd99641f3e4879150d /arch/arm/Kconfig | |
parent | a3102fafdce6f150e5a46e1725bb1732f8953a01 (diff) |
ARM: rework endianess selection
Choosing big-endian vs little-endian kernels in Kconfig has not worked
correctly since the introduction of CONFIG_ARCH_MULTIPLATFORM a long
time ago.
The problems is that CONFIG_BIG_ENDIAN depends on
ARCH_SUPPORTS_BIG_ENDIAN, which can set by any one platform
in the config, but would actually have to be supported by all
of them.
This was mostly ok for ARMv6/ARMv7 builds, since these are BE8 and
tend to just work aside from problems in nonportable device drivers.
For ARMv4/v5 machines, CONFIG_BIG_ENDIAN and CONFIG_ARCH_MULTIPLATFORM
were never set together, so this was disabled on all those machines
except for IXP4xx.
As IXP4xx can now become part of ARCH_MULTIPLATFORM, it seems better to
formalize this logic: all ARMv4/v5 platforms get an explicit dependency
on being either big-endian (ixp4xx) or little-endian (the rest). We may
want to fix ixp4xx in the future to support both, but it does not work
in LE mode at the moment.
For the ARMv6/v7 platforms, there are two ways this could be handled
a) allow both modes only for platforms selecting
'ARCH_SUPPORTS_BIG_ENDIAN' today, but only LE mode for the
others, given that these were added intentionally at some
point.
b) allow both modes everwhere, given that it was already possible
to build that way by e.g. selecting ARCH_VIRT, and that the
list is not an accurate reflection of which platforms may or
may not work.
Out of these, I picked b) because it seemed slighly more logical
to me.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm/Kconfig')
-rw-r--r-- | arch/arm/Kconfig | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 94909cadb78a..4d98de155e20 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -349,6 +349,7 @@ config ARCH_MULTIPLATFORM config ARCH_FOOTBRIDGE bool "FootBridge" + depends on CPU_LITTLE_ENDIAN select CPU_SA110 select FOOTBRIDGE select NEED_MACH_MEMORY_H @@ -358,7 +359,7 @@ config ARCH_FOOTBRIDGE config ARCH_IXP4XX bool "IXP4xx-based" - select ARCH_SUPPORTS_BIG_ENDIAN + depends on CPU_BIG_ENDIAN select ARM_PATCH_PHYS_VIRT select CPU_XSCALE select GPIO_IXP4XX @@ -374,6 +375,7 @@ config ARCH_IXP4XX config ARCH_PXA bool "PXA2xx/PXA3xx-based" + depends on CPU_LITTLE_ENDIAN select ARCH_MTD_XIP select ARM_CPU_SUSPEND if PM select AUTO_ZRELADDR @@ -393,6 +395,7 @@ config ARCH_PXA config ARCH_RPC bool "RiscPC" depends on !CC_IS_CLANG && GCC_VERSION < 90100 && GCC_VERSION >= 60000 + depends on CPU_LITTLE_ENDIAN select ARCH_ACORN select ARCH_MAY_HAVE_PC_FDC select ARCH_SPARSEMEM_ENABLE @@ -411,6 +414,7 @@ config ARCH_RPC config ARCH_SA1100 bool "SA1100-based" + depends on CPU_LITTLE_ENDIAN select ARCH_MTD_XIP select ARCH_SPARSEMEM_ENABLE select CLKSRC_MMIO @@ -429,6 +433,7 @@ config ARCH_SA1100 config ARCH_OMAP1 bool "TI OMAP1" + depends on CPU_LITTLE_ENDIAN select ARCH_OMAP select CLKSRC_MMIO select GENERIC_IRQ_CHIP @@ -505,7 +510,6 @@ config ARCH_VIRT select ARM_GIC_V3_ITS if PCI select ARM_PSCI select HAVE_ARM_ARCH_TIMER - select ARCH_SUPPORTS_BIG_ENDIAN config ARCH_AIROHA bool "Airoha SoC Support" |