# SPDX-License-Identifier: GPL-2.0-only
menuconfig ARCH_MXC
	bool "Freescale i.MX family"
	depends on (ARCH_MULTI_V4_V5 && CPU_LITTLE_ENDIAN) || \
		ARCH_MULTI_V6_V7 || ARM_SINGLE_ARMV7M
	select CLKSRC_IMX_GPT
	select GENERIC_IRQ_CHIP
	select GPIOLIB
	select PINCTRL
	select PM_OPP if PM
	select SOC_BUS
	select SRAM
	help
	  Support for Freescale MXC/iMX-based family of processors

if ARCH_MXC

config MXC_TZIC
	bool

config MXC_AVIC
	bool

config HAVE_IMX_ANATOP
	bool

config HAVE_IMX_GPC
	bool
	select PM_GENERIC_DOMAINS if PM

config HAVE_IMX_MMDC
	bool

config HAVE_IMX_SRC
	def_bool y if SMP
	select ARCH_HAS_RESET_CONTROLLER

if ARCH_MULTI_V6

comment "ARM1136 platforms"

config SOC_IMX31
	bool "i.MX31 support"
	select CPU_V6
	select MXC_AVIC
	help
	  This enables support for Freescale i.MX31 processor

config SOC_IMX35
	bool "i.MX35 support"
	select MXC_AVIC
	select PINCTRL_IMX35
	help
	  This enables support for Freescale i.MX35 processor

endif

if ARCH_MULTI_V4T

config SOC_IMX1
	bool "i.MX1 support"
	select CPU_ARM920T
	select MXC_AVIC
	select PINCTRL_IMX1
	help
	  This enables support for Freescale i.MX1 processor

endif

if ARCH_MULTI_V5

config SOC_IMX25
	bool "i.MX25 support"
	select CPU_ARM926T
	select MXC_AVIC
	select PINCTRL_IMX25
	help
	  This enables support for Freescale i.MX25 processor

config SOC_IMX27
	bool "i.MX27 support"
	select CPU_ARM926T
	select MXC_AVIC
	select PINCTRL_IMX27
	help
	  This enables support for Freescale i.MX27 processor

endif

if ARCH_MULTI_V7

comment "Cortex-A platforms"

config SOC_IMX5
	bool
	select HAVE_IMX_SRC
	select MXC_TZIC

config SOC_IMX50
	bool "i.MX50 support"
	select PINCTRL_IMX50
	select SOC_IMX5

	help
	  This enables support for Freescale i.MX50 processor.

config SOC_IMX51
	bool "i.MX51 support"
	select PINCTRL_IMX51
	select SOC_IMX5
	help
	  This enables support for Freescale i.MX51 processor

config SOC_IMX53
	bool "i.MX53 support"
	select PINCTRL_IMX53
	select SOC_IMX5

	help
	  This enables support for Freescale i.MX53 processor.

config SOC_IMX6
	bool
	select ARM_CPU_SUSPEND if (PM || CPU_IDLE)
	select ARM_GIC
	select HAVE_IMX_ANATOP
	select HAVE_IMX_GPC
	select HAVE_IMX_MMDC
	select HAVE_IMX_SRC
	select MFD_SYSCON
	select PL310_ERRATA_769419 if CACHE_L2X0

config SOC_IMX6Q
	bool "i.MX6 Quad/DualLite support"
	select ARM_ERRATA_764369 if SMP
	select ARM_ERRATA_754322
	select ARM_ERRATA_775420
	select HAVE_ARM_SCU if SMP
	select HAVE_ARM_TWD
	select PINCTRL_IMX6Q
	select SOC_IMX6

	help
	  This enables support for Freescale i.MX6 Quad processor.

config SOC_IMX6SL
	bool "i.MX6 SoloLite support"
	select ARM_ERRATA_754322
	select ARM_ERRATA_775420
	select PINCTRL_IMX6SL
	select SOC_IMX6

	help
	  This enables support for Freescale i.MX6 SoloLite processor.

config SOC_IMX6SLL
	bool "i.MX6 SoloLiteLite support"
	select ARM_ERRATA_754322
	select ARM_ERRATA_775420
	select PINCTRL_IMX6SLL
	select SOC_IMX6

	help
	  This enables support for Freescale i.MX6 SoloLiteLite processor.

config SOC_IMX6SX
	bool "i.MX6 SoloX support"
	select ARM_ERRATA_754322
	select ARM_ERRATA_775420
	select PINCTRL_IMX6SX
	select SOC_IMX6

	help
	  This enables support for Freescale i.MX6 SoloX processor.

config SOC_IMX6UL
	bool "i.MX6 UltraLite support"
	select PINCTRL_IMX6UL
	select SOC_IMX6
	select ARM_ERRATA_814220

	help
	  This enables support for Freescale i.MX6 UltraLite processor.

config SOC_LS1021A
	bool "Freescale LS1021A support"
	select ARM_GIC
	select HAVE_ARM_ARCH_TIMER
	select ZONE_DMA if ARM_LPAE
	help
	  This enables support for Freescale LS1021A processor.

endif

if ARCH_MULTI_V7 || ARM_SINGLE_ARMV7M

comment "Cortex-A/Cortex-M asymmetric multiprocessing platforms"

config SOC_IMX7D_CA7
	bool
	select ARM_GIC
	select HAVE_ARM_ARCH_TIMER
	select HAVE_IMX_ANATOP
	select HAVE_IMX_MMDC
	select HAVE_IMX_SRC
	select IMX_GPCV2

config SOC_IMX7D_CM4
	bool
	select ARMV7M_SYSTICK

config SOC_IMX7D
	bool "i.MX7 Dual support"
	select PINCTRL_IMX7D
	select SOC_IMX7D_CA7 if ARCH_MULTI_V7
	select SOC_IMX7D_CM4 if ARM_SINGLE_ARMV7M
	select ARM_ERRATA_814220 if ARCH_MULTI_V7
	help
	  This enables support for Freescale i.MX7 Dual processor.

config SOC_IMX7ULP
	bool "i.MX7ULP support"
	select CLKSRC_IMX_TPM
	select PINCTRL_IMX7ULP
	select SOC_IMX7D_CA7 if ARCH_MULTI_V7
	select SOC_IMX7D_CM4 if ARM_SINGLE_ARMV7M
	help
	  This enables support for Freescale i.MX7 Ultra Low Power processor.

config SOC_IMXRT
	bool "i.MXRT support"
	depends on ARM_SINGLE_ARMV7M
	select ARMV7M_SYSTICK if ARM_SINGLE_ARMV7M
	help
	  This enables support for Freescale i.MXRT Crossover processor.

config SOC_VF610
	bool "Vybrid Family VF610 support"
	select ARM_GIC if ARCH_MULTI_V7
	select PINCTRL_VF610

	help
	  This enables support for Freescale Vybrid VF610 processor.

choice
	prompt "Clocksource for scheduler clock"
	depends on SOC_VF610
	default VF_USE_ARM_GLOBAL_TIMER

	config VF_USE_ARM_GLOBAL_TIMER
		bool "Use ARM Global Timer"
		depends on ARCH_MULTI_V7
		select ARM_GLOBAL_TIMER
		select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
		help
		  Use the ARM Global Timer as clocksource

	config VF_USE_PIT_TIMER
		bool "Use PIT timer"
		select VF_PIT_TIMER
		help
		  Use SoC Periodic Interrupt Timer (PIT) as clocksource

endchoice

endif

endif
