# SPDX-License-Identifier: GPL-2.0-only
config ARCH_MICROCHIP
	bool

menuconfig ARCH_AT91
	bool "AT91/Microchip SoCs"
	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
	select PINCTRL
	select SOC_BUS
	select ARCH_MICROCHIP

if ARCH_AT91
config SOC_SAMV7
	bool "SAM Cortex-M7 family" if ARM_SINGLE_ARMV7M
	select COMMON_CLK_AT91
	select PINCTRL_AT91
	help
	  Select this if you are using an SoC from Microchip's SAME7, SAMS7 or SAMV7
	  families.

config SOC_SAMA5D2
	bool "SAMA5D2 family"
	depends on ARCH_MULTI_V7
	select SOC_SAMA5
	select CACHE_L2X0
	select HAVE_AT91_UTMI
	select HAVE_AT91_USB_CLK
	select HAVE_AT91_H32MX
	select HAVE_AT91_GENERATED_CLK
	select HAVE_AT91_AUDIO_PLL
	select HAVE_AT91_I2S_MUX_CLK
	select PINCTRL_AT91PIO4
	help
	  Select this if ou are using one of Microchip's SAMA5D2 family SoC.

config SOC_SAMA5D3
	bool "SAMA5D3 family"
	depends on ARCH_MULTI_V7
	select SOC_SAMA5
	select HAVE_AT91_UTMI
	select HAVE_AT91_SMD
	select HAVE_AT91_USB_CLK
	select PINCTRL_AT91
	help
	  Select this if you are using one of Microchip's SAMA5D3 family SoC.
	  This support covers SAMA5D31, SAMA5D33, SAMA5D34, SAMA5D35, SAMA5D36.

config SOC_SAMA5D4
	bool "SAMA5D4 family"
	depends on ARCH_MULTI_V7
	select SOC_SAMA5
	select CACHE_L2X0
	select HAVE_AT91_UTMI
	select HAVE_AT91_SMD
	select HAVE_AT91_USB_CLK
	select HAVE_AT91_H32MX
	select PINCTRL_AT91
	help
	  Select this if you are using one of Microchip's SAMA5D4 family SoC.

config SOC_SAMA7D65
	bool "SAMA7D65 family"
	depends on ARCH_MULTI_V7
	select HAVE_AT91_GENERATED_CLK
	select HAVE_AT91_SAM9X60_PLL
	select HAVE_AT91_USB_CLK
	select HAVE_AT91_UTMI
	select SOC_SAMA7
	help
	  Select this if you are using one of Microchip's SAMA7D65 family SoC.

config SOC_SAMA7G5
	bool "SAMA7G5 family"
	depends on ARCH_MULTI_V7
	select HAVE_AT91_GENERATED_CLK
	select HAVE_AT91_SAM9X60_PLL
	select HAVE_AT91_UTMI
	select PM_OPP
	select SOC_SAMA7
	help
	  Select this if you are using one of Microchip's SAMA7G5 family SoC.

config SOC_LAN966
	bool "ARMv7 based Microchip LAN966 SoC family"
	depends on ARCH_MULTI_V7
	select DW_APB_TIMER_OF
	select ARM_GIC
	select MEMORY
	help
	  This enables support for ARMv7 based Microchip LAN966 SoC family.

config SOC_AT91RM9200
	bool "AT91RM9200"
	depends on ARCH_MULTI_V4T
	select ATMEL_AIC_IRQ
	select ATMEL_PM if PM
	select ATMEL_ST
	select CPU_ARM920T
	select HAVE_AT91_USB_CLK
	select PINCTRL_AT91
	select SOC_SAM_V4_V5
	select SRAM if PM
	help
	  Select this if you are using Microchip's AT91RM9200 SoC.

config SOC_AT91SAM9
	bool "AT91SAM9"
	depends on ARCH_MULTI_V5
	select ATMEL_AIC_IRQ
	select ATMEL_PM if PM
	select CPU_ARM926T
	select HAVE_AT91_SMD
	select HAVE_AT91_USB_CLK
	select HAVE_AT91_UTMI
	select HAVE_FB_ATMEL
	select MEMORY
	select PINCTRL_AT91
	select SOC_SAM_V4_V5
	select SRAM if PM
	help
	  Select this if you are using one of those Microchip SoC:
	    AT91SAM9260
	    AT91SAM9261
	    AT91SAM9263
	    AT91SAM9G15
	    AT91SAM9G20
	    AT91SAM9G25
	    AT91SAM9G35
	    AT91SAM9G45
	    AT91SAM9G46
	    AT91SAM9M10
	    AT91SAM9M11
	    AT91SAM9N12
	    AT91SAM9RL
	    AT91SAM9X25
	    AT91SAM9X35
	    AT91SAM9XE

config SOC_SAM9X60
	bool "SAM9X60"
	depends on ARCH_MULTI_V5
	select ATMEL_AIC5_IRQ
	select ATMEL_PM if PM
	select CPU_ARM926T
	select HAVE_AT91_USB_CLK
	select HAVE_AT91_GENERATED_CLK
	select HAVE_AT91_SAM9X60_PLL
	select MEMORY
	select PINCTRL_AT91
	select SOC_SAM_V4_V5
	select SRAM if PM
	help
	  Select this if you are using Microchip's SAM9X60 SoC

config SOC_SAM9X7
	bool "SAM9X7"
	depends on ARCH_MULTI_V5
	select ATMEL_AIC5_IRQ
	select ATMEL_PM if PM
	select CPU_ARM926T
	select HAVE_AT91_USB_CLK
	select HAVE_AT91_GENERATED_CLK
	select HAVE_AT91_SAM9X60_PLL
	select MEMORY
	select PINCTRL_AT91
	select SOC_SAM_V4_V5
	select SRAM if PM
	help
	  Select this if you are using Microchip's SAM9X7 SoC

comment "Clocksource driver selection"

config ATMEL_CLOCKSOURCE_PIT
	bool "Periodic Interval Timer (PIT) support"
	depends on SOC_AT91SAM9 || SOC_SAM9X60 || SOC_SAM9X7 || SOC_SAMA5
	default SOC_AT91SAM9 || SOC_SAMA5
	select ATMEL_PIT
	help
	  Select this to get a clocksource based on the Atmel Periodic Interval
	  Timer. It has a relatively low resolution and the TC Block clocksource
	  should be preferred.

config ATMEL_CLOCKSOURCE_TCB
	bool "Timer Counter Blocks (TCB) support"
	default SOC_AT91RM9200 || SOC_AT91SAM9 || SOC_SAM9X60 || SOC_SAM9X7 || SOC_SAMA5
	select ATMEL_TCB_CLKSRC
	help
	  Select this to get a high precision clocksource based on a
	  TC block with a 5+ MHz base clock rate.
	  On platforms with 16-bit counters, two timer channels are combined
	  to make a single 32-bit timer.
	  It can also be used as a clock event device supporting oneshot mode.

config MICROCHIP_CLOCKSOURCE_PIT64B
	bool "64-bit Periodic Interval Timer (PIT64B) support"
	default SOC_SAM9X60 || SOC_SAM9X7 || SOC_SAMA7
	select MICROCHIP_PIT64B
	help
	  Select this to get a high resolution clockevent (SAM9X60) or
	  clocksource and clockevent (SAMA7G5) based on Microchip 64-bit
	  Periodic Interval Timer.

config HAVE_AT91_UTMI
	bool

config HAVE_AT91_USB_CLK
	bool

config COMMON_CLK_AT91
	bool
	select MFD_SYSCON

config HAVE_AT91_SMD
	bool

config HAVE_AT91_H32MX
	bool

config HAVE_AT91_GENERATED_CLK
	bool

config HAVE_AT91_AUDIO_PLL
	bool

config HAVE_AT91_I2S_MUX_CLK
	bool

config HAVE_AT91_SAM9X60_PLL
	bool

config SOC_SAM_V4_V5
	bool

config SOC_SAM_V7
	bool

config SOC_SAMA5
	bool
	select ATMEL_AIC5_IRQ
	select ATMEL_PM if PM
	select MEMORY
	select SOC_SAM_V7
	select SRAM if PM

config ATMEL_PM
	bool

config ATMEL_SECURE_PM
	bool "Atmel Secure PM support"
	depends on SOC_SAMA5D2 && ATMEL_PM
	select ARM_PSCI
	help
	  When running under a TEE, the suspend mode must be requested to be set
	  at TEE level. When enable, this option will use secure monitor calls
	  to set the suspend level. PSCI is then used to enter suspend.

config SOC_SAMA7
	bool
	select ARM_GIC
	select ATMEL_PM if PM
	select MEMORY
	select SOC_SAM_V7
	select SRAM if PM
endif
