# SPDX-License-Identifier: GPL-2.0-only

menu "Platform selection"
	depends on MMU

comment "CPU Core family selection"

config ARCH_MULTI_V4
	bool "ARMv4 based platforms (FA526, StrongARM)"
	depends on !ARCH_MULTI_V6_V7
	# https://github.com/llvm/llvm-project/issues/50764
	depends on !LD_IS_LLD || LLD_VERSION >= 160000
	select ARCH_MULTI_V4_V5
	select CPU_FA526 if !(CPU_SA110 || CPU_SA1100)

config ARCH_MULTI_V4T
	bool "ARMv4T based platforms (ARM720T, ARM920T, ...)"
	depends on !ARCH_MULTI_V6_V7
	# https://github.com/llvm/llvm-project/issues/50764
	depends on !LD_IS_LLD || LLD_VERSION >= 160000
	select ARCH_MULTI_V4_V5
	select CPU_ARM920T if !(CPU_ARM7TDMI || CPU_ARM720T || \
		CPU_ARM740T || CPU_ARM9TDMI || CPU_ARM922T || \
		CPU_ARM925T || CPU_ARM940T)

config ARCH_MULTI_V5
	bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
	depends on !ARCH_MULTI_V6_V7
	select ARCH_MULTI_V4_V5
	select CPU_ARM926T if !(CPU_ARM946E || CPU_ARM1020 || \
		CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || \
		CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_FEROCEON)

config ARCH_MULTI_V4_V5
	bool

config ARCH_MULTI_V6
	bool "ARMv6 based platforms (ARM11)"
	select ARCH_MULTI_V6_V7
	select CPU_V6K

config ARCH_MULTI_V7
	bool "ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)"
	default y
	select ARCH_MULTI_V6_V7
	select CPU_V7
	select HAVE_SMP

config ARCH_MULTI_V6_V7
	bool
	select MIGHT_HAVE_CACHE_L2X0

config ARCH_MULTI_CPU_AUTO
	def_bool !(ARCH_MULTI_V4 || ARCH_MULTI_V4T || ARCH_MULTI_V6_V7)
	select ARCH_MULTI_V5

endmenu

config ARCH_VIRT
	bool "Dummy Virtual Machine"
	depends on ARCH_MULTI_V7
	select ARM_AMBA
	select ARM_GIC
	select ARM_GIC_V2M if PCI
	select ARM_GIC_V3
	select ARM_GIC_V3_ITS if PCI
	select ARM_PSCI
	select HAVE_ARM_ARCH_TIMER

config ARCH_AIROHA
	bool "Airoha SoC Support"
	depends on ARCH_MULTI_V7
	select ARM_AMBA
	select ARM_GIC
	select ARM_GIC_V3
	select ARM_PSCI
	select HAVE_ARM_ARCH_TIMER
	help
	  Support for Airoha EN7523 SoCs

config MACH_ASM9260
	bool "Alphascale ASM9260"
	depends on ARCH_MULTI_V5
	depends on CPU_LITTLE_ENDIAN
	select CPU_ARM926T
	select ASM9260_TIMER
	help
	  Support for Alphascale ASM9260 based platform.

menuconfig ARCH_MOXART
	bool "MOXA ART SoC"
	depends on ARCH_MULTI_V4
	depends on CPU_LITTLE_ENDIAN
	select CPU_FA526
	select ARM_DMA_MEM_BUFFERABLE
	select FARADAY_FTINTC010
	select FTTMR010_TIMER
	select GPIOLIB
	select PHYLIB if NETDEVICES
	help
	  Say Y here if you want to run your kernel on hardware with a
	  MOXA ART SoC.
	  The MOXA ART SoC is based on a Faraday FA526 ARMv4 32-bit
	  192 MHz CPU with MMU and 16KB/8KB D/I-cache (UC-7112-LX).
	  Used on models UC-7101, UC-7112/UC-7110, IA240/IA241, IA3341.

if ARCH_MOXART

config MACH_UC7112LX
	bool "MOXA UC-7112-LX"
	depends on ARCH_MOXART
	help
	  Say Y here if you intend to run this kernel on a MOXA
	  UC-7112-LX embedded computer.

endif

config ARCH_NSPIRE
	bool "TI-NSPIRE based"
	depends on ARCH_MULTI_V4T
	depends on CPU_LITTLE_ENDIAN
	select CPU_ARM926T
	select GENERIC_IRQ_CHIP
	select ARM_AMBA
	select ARM_VIC
	select ARM_TIMER_SP804
	select NSPIRE_TIMER
	select POWER_RESET
	select POWER_RESET_SYSCON
	help
	  This enables support for systems using the TI-NSPIRE CPU

config ARCH_RDA
	bool "RDA Micro SoCs"
	depends on ARCH_MULTI_V7
	select RDA_INTC
	select RDA_TIMER
	help
	  This enables support for the RDA Micro 8810PL SoC family.

menuconfig ARCH_SUNPLUS
	bool "Sunplus SoCs"
	depends on ARCH_MULTI_V7
	help
	  Support for Sunplus SoC family: SP7021 and succeeding SoC-based systems,
	  such as the Banana Pi BPI-F2S development board (and derivatives).
	  (<http://www.sinovoip.com.cn/ecp_view.asp?id=586>)
	  (<https://tibbo.com/store/plus1.html>)

if ARCH_SUNPLUS

config SOC_SP7021
	bool "Sunplus SP7021 SoC support"
	default ARCH_SUNPLUS
	select HAVE_ARM_ARCH_TIMER
	select ARM_GIC
	select ARM_PSCI
	select PINCTRL
	select PINCTRL_SPPCTL
	select SERIAL_SUNPLUS if TTY
	select SERIAL_SUNPLUS_CONSOLE if TTY
	help
	  Support for Sunplus SP7021 SoC. It is based on ARM 4-core
	  Cortex-A7 with various peripherals (e.g.: I2C, SPI, SDIO,
	  Ethernet, etc.), FPGA interface,  chip-to-chip bus.
	  It is designed for industrial control.

endif

config ARCH_UNIPHIER
	bool "Socionext UniPhier SoCs"
	depends on ARCH_MULTI_V7
	select ARCH_HAS_RESET_CONTROLLER
	select ARM_AMBA
	select ARM_GLOBAL_TIMER
	select ARM_GIC
	select HAVE_ARM_SCU
	select HAVE_ARM_TWD if SMP
	select PINCTRL
	select RESET_CONTROLLER
	help
	  Support for UniPhier SoC family developed by Socionext Inc.
	  (formerly, System LSI Business Division of Panasonic Corporation)
