if ARCH_AT91

config HAVE_AT91_DATAFLASH_CARD
	bool

config HAVE_NAND_ATMEL_BUSWIDTH_16
	bool

config HAVE_AT91_USART3
	bool

config HAVE_AT91_USART4
	bool

config HAVE_AT91_USART5
	bool

menu "Atmel AT91 System-on-Chip"

choice
	prompt "Atmel AT91 Processor"

config ARCH_AT91RM9200
	bool "AT91RM9200"
	select CPU_ARM920T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_AT91_USART3

config ARCH_AT91SAM9260
	bool "AT91SAM9260 or AT91SAM9XE"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_AT91_USART3
	select HAVE_AT91_USART4
	select HAVE_AT91_USART5

config ARCH_AT91SAM9261
	bool "AT91SAM9261"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_FB_ATMEL

config ARCH_AT91SAM9G10
	bool "AT91SAM9G10"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_FB_ATMEL

config ARCH_AT91SAM9263
	bool "AT91SAM9263"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_FB_ATMEL

config ARCH_AT91SAM9RL
	bool "AT91SAM9RL"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_AT91_USART3
	select HAVE_FB_ATMEL

config ARCH_AT91SAM9G20
	bool "AT91SAM9G20"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_AT91_USART3
	select HAVE_AT91_USART4
	select HAVE_AT91_USART5

config ARCH_AT91SAM9G45
	bool "AT91SAM9G45"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_AT91_USART3
	select HAVE_FB_ATMEL

config ARCH_AT91CAP9
	bool "AT91CAP9"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select HAVE_FB_ATMEL

config ARCH_AT572D940HF
	bool "AT572D940HF"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS

config ARCH_AT91X40
	bool "AT91x40"

endchoice

config AT91_PMC_UNIT
	bool
	default !ARCH_AT91X40

# ----------------------------------------------------------

if ARCH_AT91RM9200

comment "AT91RM9200 Board Type"

config MACH_ONEARM
	bool "Ajeco 1ARM Single Board Computer"
	help
	  Select this if you are using Ajeco's 1ARM Single Board Computer.
	  <http://www.ajeco.fi/products.htm>

config ARCH_AT91RM9200DK
	bool "Atmel AT91RM9200-DK Development board"
	select HAVE_AT91_DATAFLASH_CARD
	help
	  Select this if you are using Atmel's AT91RM9200-DK Development board.
	  (Discontinued)

config MACH_AT91RM9200EK
	bool "Atmel AT91RM9200-EK Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	help
	  Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit.
	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3507>

config MACH_CSB337
	bool "Cogent CSB337"
	help
	  Select this if you are using Cogent's CSB337 board.
	  <http://www.cogcomp.com/csb_csb337.htm>

config MACH_CSB637
	bool "Cogent CSB637"
	help
	  Select this if you are using Cogent's CSB637 board.
	  <http://www.cogcomp.com/csb_csb637.htm>

config MACH_CARMEVA
	bool "Conitec ARM&EVA"
	help
	  Select this if you are using Conitec's AT91RM9200-MCU-Module.
	  <http://www.conitec.net/english/linuxboard.htm>

config MACH_ATEB9200
	bool "Embest ATEB9200"
	help
	  Select this if you are using Embest's ATEB9200 board.
	  <http://www.embedinfo.com/english/product/ATEB9200.asp>

config MACH_KB9200
	bool "KwikByte KB920x"
	help
	  Select this if you are using KwikByte's KB920x board.
	  <http://kwikbyte.com/KB9202_description_new.htm>

config MACH_PICOTUX2XX
	bool "picotux 200"
	help
	  Select this if you are using a picotux 200.
	  <http://www.picotux.com/>

config MACH_KAFA
	bool "Sperry-Sun KAFA board"
	help
	  Select this if you are using Sperry-Sun's KAFA board.

config MACH_ECBAT91
	bool "emQbit ECB_AT91 SBC"
	select HAVE_AT91_DATAFLASH_CARD
	help
	  Select this if you are using emQbit's ECB_AT91 board.
	  <http://wiki.emqbit.com/free-ecb-at91>

config MACH_YL9200
	bool "ucDragon YL-9200"
	help
	  Select this if you are using the ucDragon YL-9200 board.

config MACH_CPUAT91
	bool "Eukrea CPUAT91"
	help
	  Select this if you are using the Eukrea Electromatique's
	  CPUAT91 board <http://www.eukrea.com/>.

config MACH_ECO920
	bool "eco920"
	help
	  Select this if you are using the eco920 board

endif

# ----------------------------------------------------------

if ARCH_AT91SAM9260

comment "AT91SAM9260 Variants"

config ARCH_AT91SAM9260_SAM9XE
	bool "AT91SAM9XE"
	help
	  Select this if you are using Atmel's AT91SAM9XE System-on-Chip.
	  They are basically AT91SAM9260s with various sizes of embedded Flash.

comment "AT91SAM9260 / AT91SAM9XE Board Type"

config MACH_AT91SAM9260EK
	bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>

config MACH_CAM60
	bool "KwikByte KB9260 (CAM60) board"
	help
	  Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260.
	  <http://www.kwikbyte.com/KB9260.html>

config MACH_SAM9_L9260
	bool "Olimex SAM9-L9260 board"
	select HAVE_AT91_DATAFLASH_CARD
	help
	  Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260.
	  <http://www.olimex.com/dev/sam9-L9260.html>

config MACH_AFEB9260
	bool "Custom afeb9260 board v1"
	help
	  Select this if you are using custom afeb9260 board based on
	  open hardware design. Select this for revision 1 of the board.
	  <svn://194.85.238.22/home/users/george/svn/arm9eb>
	  <http://groups.google.com/group/arm9fpga-evolution-board>

config MACH_USB_A9260
	bool "CALAO USB-A9260"
	help
	  Select this if you are using a Calao Systems USB-A9260.
	  <http://www.calao-systems.com>

config MACH_QIL_A9260
	bool "CALAO QIL-A9260 board"
	help
	  Select this if you are using a Calao Systems QIL-A9260 Board.
	  <http://www.calao-systems.com>

config MACH_CPU9260
	bool "Eukrea CPU9260 board"
	help
	  Select this if you are using a Eukrea Electromatique's
	  CPU9260 Board <http://www.eukrea.com/>

endif

# ----------------------------------------------------------

if ARCH_AT91SAM9261

comment "AT91SAM9261 Board Type"

config MACH_AT91SAM9261EK
	bool "Atmel AT91SAM9261-EK Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit.
	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820>

endif

# ----------------------------------------------------------

if ARCH_AT91SAM9G10

comment "AT91SAM9G10 Board Type"

config MACH_AT91SAM9G10EK
	bool "Atmel AT91SAM9G10-EK Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit.
	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588>

endif

# ----------------------------------------------------------

if ARCH_AT91SAM9263

comment "AT91SAM9263 Board Type"

config MACH_AT91SAM9263EK
	bool "Atmel AT91SAM9263-EK Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit.
	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057>

config MACH_USB_A9263
	bool "CALAO USB-A9263"
	help
	  Select this if you are using a Calao Systems USB-A9263.
	  <http://www.calao-systems.com>

config MACH_NEOCORE926
	bool "Adeneo NEOCORE926"
	select HAVE_AT91_DATAFLASH_CARD
	help
	  Select this if you are using the Adeneo Neocore 926 board.

endif

# ----------------------------------------------------------

if ARCH_AT91SAM9RL

comment "AT91SAM9RL Board Type"

config MACH_AT91SAM9RLEK
	bool "Atmel AT91SAM9RL-EK Evaluation Kit"
	help
	  Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit.

endif

# ----------------------------------------------------------

if ARCH_AT91SAM9G20

comment "AT91SAM9G20 Board Type"

config MACH_AT91SAM9G20EK
	bool "Atmel AT91SAM9G20-EK Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit
	  that embeds only one SD/MMC slot.

config MACH_AT91SAM9G20EK_2MMC
	bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit
	  with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and
	  onwards.

config MACH_CPU9G20
	bool "Eukrea CPU9G20 board"
	help
	  Select this if you are using a Eukrea Electromatique's
	  CPU9G20 Board <http://www.eukrea.com/>

endif

# ----------------------------------------------------------

if ARCH_AT91SAM9G45

comment "AT91SAM9G45 Board Type"

config MACH_AT91SAM9G45EKES
	bool "Atmel AT91SAM9G45-EKES Evaluation Kit"
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using Atmel's AT91SAM9G45-EKES Evaluation Kit.
	  "ES" at the end of the name means that this board is an
	  Engineering Sample.

endif

# ----------------------------------------------------------

if ARCH_AT91CAP9

comment "AT91CAP9 Board Type"

config MACH_AT91CAP9ADK
	bool "Atmel AT91CAP9A-DK Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using Atmel's AT91CAP9A-DK Evaluation Kit.
	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4138>

endif

# ----------------------------------------------------------

if ARCH_AT572D940HF

comment "AT572D940HF Board Type"

config MACH_AT572D940HFEB
	bool "AT572D940HF-EK"
	depends on ARCH_AT572D940HF
	select HAVE_AT91_DATAFLASH_CARD
	select HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  Select this if you are using Atmel's AT572D940HF-EK evaluation kit.
	  <http://www.atmel.com/products/diopsis/default.asp>

endif

# ----------------------------------------------------------

if ARCH_AT91X40

comment "AT91X40 Board Type"

config MACH_AT91EB01
	bool "Atmel AT91EB01 Evaluation Kit"
	help
	  Select this if you are using Atmel's AT91EB01 Evaluation Kit.
	  It is also a popular target for simulators such as GDB's
	  ARM simulator (commonly known as the ARMulator) and the
	  Skyeye simulator.

endif

# ----------------------------------------------------------

comment "AT91 Board Options"

config MTD_AT91_DATAFLASH_CARD
	bool "Enable DataFlash Card support"
	depends on HAVE_AT91_DATAFLASH_CARD
	help
	  Enable support for the DataFlash card.

config MTD_NAND_ATMEL_BUSWIDTH_16
	bool "Enable 16-bit data bus interface to NAND flash"
	depends on HAVE_NAND_ATMEL_BUSWIDTH_16
	help
	  On AT91SAM926x boards both types of NAND flash can be present
	  (8 and 16 bit data bus width).

# ----------------------------------------------------------

comment "AT91 Feature Selections"

config AT91_PROGRAMMABLE_CLOCKS
	bool "Programmable Clocks"
	help
	  Select this if you need to program one or more of the PCK0..PCK3
	  programmable clock outputs.

config AT91_SLOW_CLOCK
	bool "Suspend-to-RAM disables main oscillator"
	depends on SUSPEND
	help
	  Select this if you want Suspend-to-RAM to save the most power
	  possible (without powering off the CPU) by disabling the PLLs
	  and main oscillator so that only the 32 KiHz clock is available.

	  When only that slow-clock is available, some peripherals lose
	  functionality.  Many can't issue wakeup events unless faster
	  clocks are available.  Some lose their operating state and
	  need to be completely re-initialized.

config AT91_TIMER_HZ
       int "Kernel HZ (jiffies per second)"
       range 32 1024
       depends on ARCH_AT91
       default "128" if ARCH_AT91RM9200
       default "100"
       help
	  On AT91rm9200 chips where you're using a system clock derived
	  from the 32768 Hz hardware clock, this tick rate should divide
	  it exactly: use a power-of-two value, such as 128 or 256, to
	  reduce timing errors caused by rounding.

	  On AT91sam926x chips, or otherwise when using a higher precision
	  system clock (of at least several MHz), rounding is less of a
	  problem so it can be safer to use a decimal values like 100.

choice
	prompt "Select a UART for early kernel messages"

config AT91_EARLY_DBGU
	bool "DBGU"

config AT91_EARLY_USART0
	bool "USART0"

config AT91_EARLY_USART1
	bool "USART1"

config AT91_EARLY_USART2
	bool "USART2"
	depends on ! ARCH_AT91X40

config AT91_EARLY_USART3
	bool "USART3"
	depends on HAVE_AT91_USART3

config AT91_EARLY_USART4
	bool "USART4"
	depends on HAVE_AT91_USART4

config AT91_EARLY_USART5
	bool "USART5"
	depends on HAVE_AT91_USART5

endchoice

endmenu

endif
