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_CLOCKEVENTS
	select HAVE_AT91_USART3

config ARCH_AT91SAM9260
	bool "AT91SAM9260 or AT91SAM9XE"
	select CPU_ARM926T
	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_CLOCKEVENTS
	select HAVE_FB_ATMEL

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

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

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

config ARCH_AT91SAM9G20
	bool "AT91SAM9G20"
	select CPU_ARM926T
	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_CLOCKEVENTS
	select HAVE_AT91_USART3
	select HAVE_FB_ATMEL

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

config ARCH_AT572D940HF
	bool "AT572D940HF"
	select CPU_ARM926T
	select GENERIC_CLOCKEVENTS

config ARCH_AT91X40
	bool "AT91x40"
	select ARCH_USES_GETTIMEOFFSET

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/>

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.php>

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://www.kwikbyte.com/KB9202.html>

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/>

config MACH_PORTUXG20
	bool "taskit PortuxG20"
	help
	  Select this if you are using taskit's PortuxG20.
	  <http://www.taskit.de/en/>

config MACH_STAMP9G20
	bool "taskit Stamp9G20 CPU module"
	help
	  Select this if you are using taskit's Stamp9G20 CPU module on its
	  evaluation board.
	  <http://www.taskit.de/en/>

endif

if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20)
comment "AT91SAM9260/AT91SAM9G20 boards"

config MACH_SNAPPER_9260
        bool "Bluewater Systems Snapper 9260/9G20 module"
        help
          Select this if you are using the Bluewater Systems Snapper 9260 or
          Snapper 9G20 modules.
          <http://www.bluewatersys.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
