if ARCH_AT91

config HAVE_AT91_DATAFLASH_CARD
	bool

config HAVE_AT91_DBGU0
	bool

config HAVE_AT91_DBGU1
	bool

config AT91_SAM9_ALT_RESET
	bool
	default !ARCH_AT91X40

config AT91_SAM9G45_RESET
	bool
	default !ARCH_AT91X40

config SOC_AT91SAM9
	bool
	select GENERIC_CLOCKEVENTS
	select CPU_ARM926T

menu "Atmel AT91 System-on-Chip"

comment "Atmel AT91 Processor"

config SOC_AT91SAM9
	bool
	select CPU_ARM926T
	select AT91_SAM9_TIME
	select AT91_SAM9_SMC

config SOC_AT91RM9200
	bool "AT91RM9200"
	select CPU_ARM920T
	select GENERIC_CLOCKEVENTS
	select HAVE_AT91_DBGU0

config SOC_AT91SAM9260
	bool "AT91SAM9260, AT91SAM9XE or AT91SAM9G20"
	select SOC_AT91SAM9
	select HAVE_AT91_DBGU0
	select HAVE_NET_MACB
	help
	  Select this if you are using one of Atmel's AT91SAM9260, AT91SAM9XE
	  or AT91SAM9G20 SoC.

config SOC_AT91SAM9261
	bool "AT91SAM9261 or AT91SAM9G10"
	select SOC_AT91SAM9
	select HAVE_AT91_DBGU0
	select HAVE_FB_ATMEL
	help
	  Select this if you are using one of Atmel's AT91SAM9261 or AT91SAM9G10 SoC.

config SOC_AT91SAM9263
	bool "AT91SAM9263"
	select SOC_AT91SAM9
	select HAVE_AT91_DBGU1
	select HAVE_FB_ATMEL
	select HAVE_NET_MACB

config SOC_AT91SAM9RL
	bool "AT91SAM9RL"
	select SOC_AT91SAM9
	select HAVE_AT91_DBGU0
	select HAVE_FB_ATMEL

config SOC_AT91SAM9G45
	bool "AT91SAM9G45 or AT91SAM9M10 families"
	select SOC_AT91SAM9
	select HAVE_AT91_DBGU1
	select HAVE_FB_ATMEL
	select HAVE_NET_MACB
	help
	  Select this if you are using one of Atmel's AT91SAM9G45 family SoC.
	  This support covers AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11.

config SOC_AT91SAM9X5
	bool "AT91SAM9x5 family"
	select SOC_AT91SAM9
	select HAVE_AT91_DBGU0
	select HAVE_FB_ATMEL
	select HAVE_NET_MACB
	help
	  Select this if you are using one of Atmel's AT91SAM9x5 family SoC.
	  This means that your SAM9 name finishes with a '5' (except if it is
	  AT91SAM9G45!).
	  This support covers AT91SAM9G15, AT91SAM9G25, AT91SAM9X25, AT91SAM9G35
	  and AT91SAM9X35.

choice
	prompt "Atmel AT91 Processor Devices for non DT boards"

config ARCH_AT91_NONE
	bool "None"

config ARCH_AT91RM9200
	bool "AT91RM9200"
	select SOC_AT91RM9200

config ARCH_AT91SAM9260
	bool "AT91SAM9260 or AT91SAM9XE"
	select SOC_AT91SAM9260

config ARCH_AT91SAM9261
	bool "AT91SAM9261"
	select SOC_AT91SAM9261

config ARCH_AT91SAM9G10
	bool "AT91SAM9G10"
	select SOC_AT91SAM9261

config ARCH_AT91SAM9263
	bool "AT91SAM9263"
	select SOC_AT91SAM9263

config ARCH_AT91SAM9RL
	bool "AT91SAM9RL"
	select SOC_AT91SAM9RL

config ARCH_AT91SAM9G20
	bool "AT91SAM9G20"
	select SOC_AT91SAM9260

config ARCH_AT91SAM9G45
	bool "AT91SAM9G45"
	select SOC_AT91SAM9G45

config ARCH_AT91X40
	bool "AT91x40"
	depends on !MMU
	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

config MACH_RSI_EWS
	bool "RSI Embedded Webserver"
	depends on ARCH_AT91RM9200
	help
	  Select this if you are using RSIs EWS board.
endif

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

if ARCH_AT91SAM9260

comment "AT91SAM9260 Variants"

comment "AT91SAM9260 / AT91SAM9XE Board Type"

config MACH_AT91SAM9260EK
	bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	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/>

config MACH_FLEXIBITY
	bool "Flexibity Connect board"
	help
	  Select this if you are using Flexibity Connect board
	  <http://www.flexibity.com>

endif

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

if ARCH_AT91SAM9261

comment "AT91SAM9261 Board Type"

config MACH_AT91SAM9261EK
	bool "Atmel AT91SAM9261-EK Evaluation Kit"
	select HAVE_AT91_DATAFLASH_CARD
	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
	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
	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
	help
	  Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit
	  that embeds only one SD/MMC slot.

config MACH_AT91SAM9G20EK_2MMC
	depends on MACH_AT91SAM9G20EK
	bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"
	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.
	  <http://www.atmel.com/tools/SAM9G20-EK.aspx>

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_ACMENETUSFOXG20
	bool "Acme Systems srl FOX Board G20"
	help
	  Select this if you are using Acme Systems
	  FOX Board G20 <http://www.acmesystems.it>

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

config MACH_PCONTROL_G20
	bool "PControl G20 CPU module"
	help
	  Select this if you are using taskit's Stamp9G20 CPU module on this
	  carrier board, beeing the decentralized unit of a building automation
	  system; featuring nvram, eth-switch, iso-rs485, display, io

config MACH_GSIA18S
	bool "GS_IA18_S board"
	help
	  This enables support for the GS_IA18_S board
	  produced by GeoSIG Ltd company. This is an internet accelerograph.
	  <http://www.geosig.com>

config MACH_USB_A9G20
	bool "CALAO USB-A9G20"
	depends on ARCH_AT91SAM9G20
	help
	  Select this if you are using a Calao Systems USB-A9G20.
	  <http://www.calao-systems.com>

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_AT91SAM9M10G45EK
	bool "Atmel AT91SAM9M10G45-EK Evaluation Kits"
	help
	  Select this if you are using Atmel's AT91SAM9M10G45-EK Evaluation Kit.
	  Those boards can be populated with any SoC of AT91SAM9G45 or AT91SAM9M10
	  families: AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11.
	  <http://www.atmel.com/tools/SAM9M10-G45-EK.aspx>

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 "Generic Board Type"

config MACH_AT91SAM_DT
	bool "Atmel AT91SAM Evaluation Kits with device-tree support"
	select USE_OF
	help
	  Select this if you want to experiment device-tree with
	  an Atmel Evaluation Kit.

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

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.

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

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.

endmenu

endif
