if ARCH_S3C2410

menu "S3C24XX Implementations"

config MACH_ANUBIS
	bool "Simtec Electronics ANUBIS"
	select CPU_S3C2440
	help
	  Say Y gere if you are using the Simtec Electronics ANUBIS
	  development system

config MACH_OSIRIS
	bool "Simtec IM2440D20 (OSIRIS) module"
	select CPU_S3C2440
	help
	  Say Y here if you are using the Simtec IM2440D20 module, also
	  known as the Osiris.

config ARCH_BAST
	bool "Simtec Electronics BAST (EB2410ITX)"
	select CPU_S3C2410
	select ISA
	help
	  Say Y here if you are using the Simtec Electronics EB2410ITX
	  development board (also known as BAST)

	  Product page: <http://www.simtec.co.uk/products/EB2410ITX/>.

config BAST_PC104_IRQ
	bool "BAST PC104 IRQ support"
	depends on ARCH_BAST
	default y
	help
	  Say Y	here to enable the PC104 IRQ routing on the
	  Simtec BAST (EB2410ITX)

config ARCH_H1940
	bool "IPAQ H1940"
	select CPU_S3C2410
	help
	  Say Y here if you are using the HP IPAQ H1940

	  <http://www.handhelds.org/projects/h1940.html>.

config MACH_N30
	bool "Acer N30"
	select CPU_S3C2410
	help
	  Say Y here if you are using the Acer N30

	  <http://zoo.weinigel.se/n30>.

config MACH_SMDK
	bool
	help
	  Common machine code for SMDK2410 and SMDK2440

config ARCH_SMDK2410
	bool "SMDK2410/A9M2410"
	select CPU_S3C2410
	select MACH_SMDK
	help
	   Say Y here if you are using the SMDK2410 or the derived module A9M2410
           <http://www.fsforth.de>

config ARCH_S3C2440
	bool "SMDK2440"
	select CPU_S3C2440
	select MACH_SMDK
	help
	  Say Y here if you are using the SMDK2440.

config MACH_VR1000
	bool "Thorcom VR1000"
	select CPU_S3C2410
	help
	  Say Y here if you are using the Thorcom VR1000 board.

	  This linux port is currently being maintained by Simtec, on behalf
	  of Thorcom. Any queries, please contact Thorcom first.

config MACH_RX3715
	bool "HP iPAQ rx3715"
	select CPU_S3C2440
	help
	  Say Y here if you are using the HP iPAQ rx3715.

	  See <http://www.handhelds.org/projects/rx3715.html> for more
	  information on this project

config MACH_OTOM
 	bool "NexVision OTOM Board"
 	select CPU_S3C2410
	help
 	  Say Y here if you are using the Nex Vision OTOM board

config MACH_NEXCODER_2440
 	bool "NexVision NEXCODER 2440 Light Board"
 	select CPU_S3C2440
	help
 	  Say Y here if you are using the Nex Vision NEXCODER 2440 Light Board

endmenu

config CPU_S3C2410
	bool
	depends on ARCH_S3C2410
	help
	  Support for S3C2410 and S3C2410A family from the S3C24XX line
	  of Samsung Mobile CPUs.

config CPU_S3C2440
	bool
	depends on ARCH_S3C2410
	help
	  Support for S3C2440 Samsung Mobile CPU based systems.

comment "S3C2410 Boot"

config S3C2410_BOOT_WATCHDOG
	bool "S3C2410 Initialisation watchdog"
	depends on ARCH_S3C2410 && S3C2410_WATCHDOG
	help
	  Say y to enable the watchdog during the kernel decompression
	  stage. If the kernel fails to uncompress, then the watchdog
	  will trigger a reset and the system should restart.

	  Although this uses the same hardware unit as the kernel watchdog
	  driver, it is not a replacement for it. If you use this option,
	  you will have to use the watchdg driver to either stop the timeout
	  or restart it. If you do not, then your kernel will reboot after
	  startup.

	  The driver uses a fixed timeout value, so the exact time till the
	  system resets depends on the value of PCLK. The timeout on an
	  200MHz s3c2410 should be about 30 seconds.

config S3C2410_BOOT_ERROR_RESET
	bool "S3C2410 Reboot on decompression error"
	depends on ARCH_S3C2410
	help
	  Say y here to use the watchdog to reset the system if the
	  kernel decompressor detects an error during decompression.


comment "S3C2410 Setup"

config S3C2410_DMA
	bool "S3C2410 DMA support"
	depends on ARCH_S3C2410
	help
	  S3C2410 DMA support. This is needed for drivers like sound which
	  use the S3C2410's DMA system to move data to and from the
	  peripheral blocks.

config S3C2410_DMA_DEBUG
	bool "S3C2410 DMA support debug"
	depends on ARCH_S3C2410 && S3C2410_DMA
	help
	  Enable debugging output for the DMA code. This option sends info
	  to the kernel log, at priority KERN_DEBUG.

	  Note, it is easy to create and fill the log buffer in a small
	  amount of time, as well as using an significant percentage of
	  the CPU time doing so.


config S3C2410_PM_DEBUG
	bool "S3C2410 PM Suspend debug"
	depends on ARCH_S3C2410 && PM
	help
	  Say Y here if you want verbose debugging from the PM Suspend and
	  Resume code. See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt>
	  for more information.

config S3C2410_PM_CHECK
	bool "S3C2410 PM Suspend Memory CRC"
	depends on ARCH_S3C2410 && PM && CRC32
	help
 	  Enable the PM code's memory area checksum over sleep. This option
	  will generate CRCs of all blocks of memory, and store them before
	  going to sleep. The blocks are then checked on resume for any
	  errors.

config S3C2410_PM_CHECK_CHUNKSIZE
	int "S3C2410 PM Suspend CRC Chunksize (KiB)"
	depends on ARCH_S3C2410 && PM && S3C2410_PM_CHECK
	default 64
	help
	  Set the chunksize in Kilobytes of the CRC for checking memory
	  corruption over suspend and resume. A smaller value will mean that
	  the CRC data block will take more memory, but wil identify any
	  faults with better precision.

config PM_SIMTEC
	bool
	depends on PM && (ARCH_BAST || MACH_VR1000)
	default y

config S3C2410_LOWLEVEL_UART_PORT
	int "S3C2410 UART to use for low-level messages"
	default 0
	help
	  Choice of which UART port to use for the low-level messages,
	  such as the `Uncompressing...` at start time. The value of
	  this configuration should be between zero and two. The port
	  must have been initialised by the boot-loader before use.

	  Note, this does not affect the port used by the debug messages,
	  which is a separate configuration.

endif
