# 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
	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
	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_HPE
	bool "HPE SoC support"
	depends on ARCH_MULTI_V7
	help
	  This enables support for HPE ARM based BMC chips.

if ARCH_HPE

config ARCH_HPE_GXP
	bool "HPE GXP SoC"
	depends on ARCH_MULTI_V7
	select ARM_VIC
	select GENERIC_IRQ_CHIP
	select CLKSRC_MMIO
	help
	  HPE GXP is the name of the HPE Soc. This SoC is used to implement many
	  BMC features at HPE. It supports ARMv7 architecture based on the Cortex
	  A9 core. It is capable of using an AXI bus to which a memory controller
	  is attached. It has multiple SPI interfaces to connect boot flash and
	  BIOS flash. It uses a 10/100/1000 MAC for network connectivity. It
	  has multiple i2c engines to drive connectivity with a host
	  infrastructure.

endif

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)
