Commit 5d6f5267 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

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: default avatarArnd Bergmann <arnd@arndb.de>
parent a3102faf
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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"
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
config MACH_ASM9260
	bool "Alphascale ASM9260"
	depends on ARCH_MULTI_V5
	depends on CPU_LITTLE_ENDIAN
	select CPU_ARM926T
	select ASM9260_TIMER
	help
+1 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
menuconfig ARCH_ASPEED
	bool "Aspeed BMC architectures"
	depends on ARCH_MULTI_V5 || ARCH_MULTI_V6 || ARCH_MULTI_V7
	depends on (CPU_LITTLE_ENDIAN && ARCH_MULTI_V5) || ARCH_MULTI_V6 || ARCH_MULTI_V7
	select SRAM
	select WATCHDOG
	select ASPEED_WATCHDOG
+2 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
menuconfig ARCH_AT91
	bool "AT91/Microchip SoCs"
	depends on ARCH_MULTI_V4T || ARCH_MULTI_V5 || ARCH_MULTI_V7 || ARM_SINGLE_ARMV7M
	depends on (CPU_LITTLE_ENDIAN && (ARCH_MULTI_V4T || ARCH_MULTI_V5)) || \
		ARCH_MULTI_V7 || ARM_SINGLE_ARMV7M
	select ARM_CPU_SUSPEND if PM && ARCH_MULTI_V7
	select COMMON_CLK_AT91
	select GPIOLIB
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
menuconfig ARCH_CLPS711X
	bool "Cirrus Logic EP721x/EP731x-based"
	depends on ARCH_MULTI_V4T
	depends on CPU_LITTLE_ENDIAN
	select CLPS711X_TIMER
	select CPU_ARM720T
	select GPIOLIB
Loading