# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
#		http://www.samsung.com/

# Configuration options for the EXYNOS

menuconfig ARCH_EXYNOS
	bool "Samsung EXYNOS"
	depends on ARCH_MULTI_V7
	select ARCH_HAS_HOLES_MEMORYMODEL
	select ARCH_SUPPORTS_BIG_ENDIAN
	select ARM_AMBA
	select ARM_GIC
	select COMMON_CLK_SAMSUNG
	select EXYNOS_CHIPID
	select EXYNOS_THERMAL
	select EXYNOS_PMU
	select EXYNOS_SROM
	select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS
	select GPIOLIB
	select HAVE_ARM_ARCH_TIMER if ARCH_EXYNOS5 && VIRTUALIZATION
	select HAVE_ARM_SCU if SMP
	select HAVE_S3C2410_I2C if I2C
	select HAVE_S3C2410_WATCHDOG if WATCHDOG
	select HAVE_S3C_RTC if RTC_CLASS
	select PINCTRL
	select PINCTRL_EXYNOS
	select PM_GENERIC_DOMAINS if PM
	select S5P_DEV_MFC
	select SAMSUNG_MC
	select SOC_SAMSUNG
	select SRAM
	select THERMAL
	select THERMAL_OF
	select MFD_SYSCON
	select MEMORY
	select CLKSRC_EXYNOS_MCT
	select POWER_RESET
	select POWER_RESET_SYSCON
	select POWER_RESET_SYSCON_POWEROFF
	help
	  Support for SAMSUNG EXYNOS SoCs (EXYNOS4/5)

if ARCH_EXYNOS

config S5P_DEV_MFC
	bool
	help
	  Compile in setup memory (init) code for MFC

config ARCH_EXYNOS3
	bool "SAMSUNG EXYNOS3"
	default y
	select ARM_CPU_SUSPEND if PM
	help
	  Samsung EXYNOS3 (Cortex-A7) SoC based systems

config ARCH_EXYNOS4
	bool "SAMSUNG EXYNOS4"
	default y
	select ARM_CPU_SUSPEND if PM_SLEEP
	select CLKSRC_SAMSUNG_PWM if CPU_EXYNOS4210
	select CPU_EXYNOS4210
	select GIC_NON_BANKED
	select MIGHT_HAVE_CACHE_L2X0
	help
	  Samsung EXYNOS4 (Cortex-A9) SoC based systems

config ARCH_EXYNOS5
	bool "SAMSUNG EXYNOS5"
	default y
	help
	  Samsung EXYNOS5 (Cortex-A15/A7) SoC based systems

comment "EXYNOS SoCs"

config SOC_EXYNOS3250
	bool "SAMSUNG EXYNOS3250"
	default y
	depends on ARCH_EXYNOS3

config CPU_EXYNOS4210
	bool "SAMSUNG EXYNOS4210"
	default y
	depends on ARCH_EXYNOS4

config SOC_EXYNOS4412
	bool "SAMSUNG EXYNOS4412"
	default y
	depends on ARCH_EXYNOS4

config SOC_EXYNOS5250
	bool "SAMSUNG EXYNOS5250"
	default y
	depends on ARCH_EXYNOS5

config SOC_EXYNOS5260
	bool "SAMSUNG EXYNOS5260"
	default y
	depends on ARCH_EXYNOS5

config SOC_EXYNOS5410
	bool "SAMSUNG EXYNOS5410"
	default y
	depends on ARCH_EXYNOS5

config SOC_EXYNOS5420
	bool "SAMSUNG EXYNOS5420"
	default y
	depends on ARCH_EXYNOS5
	select EXYNOS_MCPM if SMP
	select ARM_CCI400_PORT_CTRL
	select ARM_CPU_SUSPEND

config SOC_EXYNOS5800
	bool "SAMSUNG EXYNOS5800"
	default y
	depends on SOC_EXYNOS5420

config EXYNOS_MCPM
	bool
	select MCPM

config EXYNOS_CPU_SUSPEND
	bool
	select ARM_CPU_SUSPEND
	default PM_SLEEP || ARM_EXYNOS_CPUIDLE

endif
