if ETRAX_ARCH_V10

menu "CRIS v10 options"

# ETRAX 100LX v1 has a MMU "feature" requiring a low mapping
config CRIS_LOW_MAP
	bool
	depends on ETRAX_ARCH_V10 && ETRAX100LX
	default y

config ETRAX_DRAM_VIRTUAL_BASE
	hex
	depends on ETRAX_ARCH_V10
	default "c0000000" if !ETRAX100LX
	default "60000000" if ETRAX100LX

choice
	prompt "Product LED port"
	depends on ETRAX_ARCH_V10
	default ETRAX_PA_LEDS

config ETRAX_PA_LEDS
	bool "Port-PA-LEDs"
	help
	  The ETRAX network driver is responsible for flashing LED's when
	  packets arrive and are sent.  It uses macros defined in
	  <file:arch/cris/include/asm/io.h>, and those macros are defined after
	  what YOU choose in this option.  The actual bits used are configured
	  separately.  Select this if the LEDs are on port PA.  Some products
	  put the leds on PB or a memory-mapped latch (CSP0) instead.

config ETRAX_PB_LEDS
	bool "Port-PB-LEDs"
	help
	  The ETRAX network driver is responsible for flashing LED's when
	  packets arrive and are sent.  It uses macros defined in
	  <file:arch/cris/include/asm/io.h>, and those macros are defined after
	  what YOU choose in this option.  The actual bits used are configured
	  separately.  Select this if the LEDs are on port PB.  Some products
	  put the leds on PA or a memory-mapped latch (CSP0) instead.

config ETRAX_CSP0_LEDS
	bool "Port-CSP0-LEDs"
	help
	  The ETRAX network driver is responsible for flashing LED's when
	  packets arrive and are sent. It uses macros defined in
	  <file:arch/cris/include/asm/io.h>, and those macros are defined after
	  what YOU choose in this option.  The actual bits used are configured
	  separately.  Select this if the LEDs are on a memory-mapped latch
	  using chip select CSP0, this is mapped at 0x90000000.
	  Some products put the leds on PA or PB instead.

config ETRAX_NO_LEDS
	bool "None"
	help
	  Select this option if you don't have any LED at all.

endchoice

config ETRAX_LED1G
	int "First green LED bit"
	depends on ETRAX_ARCH_V10 && !ETRAX_NO_LEDS
	default "2"
	help
	  Bit to use for the first green LED.
	  Most Axis products use bit 2 here.

config ETRAX_LED1R
	int "First red LED bit"
	depends on ETRAX_ARCH_V10 && !ETRAX_NO_LEDS
	default "3"
	help
	  Bit to use for the first red LED.
	  Most Axis products use bit 3 here.
	  For products with only one controllable LED,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED2G
	int "Second green LED bit"
	depends on ETRAX_ARCH_V10 && !ETRAX_NO_LEDS
	default "4"
	help
	  Bit to use for the second green LED. The "Active" LED.
	  Most Axis products use bit 4 here.
	  For products with only one controllable LED,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED2R
	int "Second red LED bit"
	depends on ETRAX_ARCH_V10 && !ETRAX_NO_LEDS
	default "5"
	help
	  Bit to use for the second red LED.
	  Most Axis products use bit 5 here.
	  For products with only one controllable LED,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED3G
	int "Third green LED bit"
	depends on ETRAX_ARCH_V10 && !ETRAX_NO_LEDS
	default "2"
	help
	  Bit to use for the third green LED. The "Drive" LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED3R
	int "Third red LED bit"
	depends on ETRAX_ARCH_V10 && !ETRAX_NO_LEDS
	default "2"
	help
	  Bit to use for the third red LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED4R
	int "Fourth red LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the fourth red LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED4G
	int "Fourth green LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the fourth green LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED5R
	int "Fifth red LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the fifth red LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED5G
	int "Fifth green LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the fifth green LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED6R
	int "Sixth red LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the sixth red LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED6G
	int "Sixth green LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the sixth green LED. The "Drive" LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED7R
	int "Seventh red LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the seventh red LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED7G
	int "Seventh green LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the seventh green LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED8Y
	int "Eighth yellow LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the eighth yellow LED. The "Drive" LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED9Y
	int "Ninth yellow LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the ninth yellow LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED10Y
	int "Tenth yellow LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the tenth yellow LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED11Y
	int "Eleventh yellow LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the eleventh yellow LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).

config ETRAX_LED12R
	int "Twelfth red LED bit"
	depends on ETRAX_CSP0_LEDS
	default "2"
	help
	  Bit to use for the twelfth red LED.
	  For products with only one or two controllable LEDs,
	  set this to same as CONFIG_ETRAX_LED1G (normally 2).


choice
	prompt "Product rescue-port"
	depends on ETRAX_ARCH_V10
	default ETRAX_RESCUE_SER0

config ETRAX_RESCUE_SER0
	bool "Serial-0"
	help
	  Select one of the four serial ports as a rescue port.  The default
	  is port 0.

config ETRAX_RESCUE_SER1
	bool "Serial-1"
	help
	  Use serial port 1 as the rescue port.

config ETRAX_RESCUE_SER2
	bool "Serial-2"
	help
	  Use serial port 2 as the rescue port.

config ETRAX_RESCUE_SER3
	bool "Serial-3"
	help
	  Use serial port 3 as the rescue port.

endchoice

config ETRAX_DEF_R_WAITSTATES
	hex "R_WAITSTATES"
	depends on ETRAX_ARCH_V10
	default "95a6"
	help
	  Waitstates for SRAM, Flash and peripherals (not DRAM).  95f8 is a
	  good choice for most Axis products...

config ETRAX_DEF_R_BUS_CONFIG
	hex "R_BUS_CONFIG"
	depends on ETRAX_ARCH_V10
	default "104"
	help
	  Assorted bits controlling write mode, DMA burst length etc.  104 is
	  a good choice for most Axis products...

config ETRAX_SDRAM
	bool "SDRAM support"
	depends on ETRAX_ARCH_V10
	help
	  Enable this if you use SDRAM chips and configure
	  R_SDRAM_CONFIG and R_SDRAM_TIMING as well.

config ETRAX_DEF_R_DRAM_CONFIG
	hex "R_DRAM_CONFIG"
	depends on ETRAX_ARCH_V10 && !ETRAX_SDRAM
	default "1a200040"
	help
	  The R_DRAM_CONFIG register specifies everything on how the DRAM
	  chips in the system are connected to the ETRAX CPU.  This is
	  different depending on the manufacturer, chip type and number of
	  chips.  So this value often needs to be different for each Axis
	  product.

config ETRAX_DEF_R_DRAM_TIMING
	hex "R_DRAM_TIMING"
	depends on ETRAX_ARCH_V10 && !ETRAX_SDRAM
	default "5611"
	help
	  Different DRAM chips have different speeds.  Current Axis products
	  use 50ns DRAM chips which can use the timing: 5611.

config ETRAX_DEF_R_SDRAM_CONFIG
	hex "R_SDRAM_CONFIG"
	depends on ETRAX_ARCH_V10 && ETRAX_SDRAM
	default "d2fa7878"
	help
	  The R_SDRAM_CONFIG register specifies everything on how the SDRAM
	  chips in the system are connected to the ETRAX CPU.  This is
	  different depending on the manufacturer, chip type and number of
	  chips.  So this value often needs to be different for each Axis
	  product.

config ETRAX_DEF_R_SDRAM_TIMING
	hex "R_SDRAM_TIMING"
	depends on ETRAX_ARCH_V10 && ETRAX_SDRAM
	default "80004801"
	help
	  Different SDRAM chips have different timing.

config ETRAX_DEF_R_PORT_PA_DIR
	hex "R_PORT_PA_DIR"
	depends on ETRAX_ARCH_V10
	default "1c"
	help
	  Configures the direction of general port A bits.  1 is out, 0 is in.
	  This is often totally different depending on the product used.
	  There are some guidelines though - if you know that only LED's are
	  connected to port PA, then they are usually connected to bits 2-4
	  and you can therefore use 1c.  On other boards which don't have the
	  LED's at the general ports, these bits are used for all kinds of
	  stuff.  If you don't know what to use, it is always safe to put all
	  as inputs, although floating inputs isn't good.

config ETRAX_DEF_R_PORT_PA_DATA
	hex "R_PORT_PA_DATA"
	depends on ETRAX_ARCH_V10
	default "00"
	help
	  Configures the initial data for the general port A bits.  Most
	  products should use 00 here.

config ETRAX_DEF_R_PORT_PB_CONFIG
	hex "R_PORT_PB_CONFIG"
	depends on ETRAX_ARCH_V10
	default "00"
	help
	  Configures the type of the general port B bits.  1 is chip select,
	  0 is port.  Most products should use 00 here.

config ETRAX_DEF_R_PORT_PB_DIR
	hex "R_PORT_PB_DIR"
	depends on ETRAX_ARCH_V10
	default "00"
	help
	  Configures the direction of general port B bits. 1 is out, 0 is in.
	  This is often totally different depending on the product used.  Bits
	  0 and 1 on port PB are usually used for I2C communication, but the
	  kernel I2C driver sets the appropriate directions itself so you
	  don't need to take that into consideration when setting this option.
	  If you don't know what to use, it is always safe to put all as
	  inputs.

config ETRAX_DEF_R_PORT_PB_DATA
	hex "R_PORT_PB_DATA"
	depends on ETRAX_ARCH_V10
	default "ff"
	help
	  Configures the initial data for the general port A bits.  Most
	  products should use FF here.

config ETRAX_SOFT_SHUTDOWN
	bool "Software Shutdown Support"
	depends on ETRAX_ARCH_V10
	help
	  Enable this if ETRAX is used with a power-supply that can be turned
	  off and on with PS_ON signal. Gives the possibility to detect
	  powerbutton and then do a power off after unmounting disks.

config ETRAX_SHUTDOWN_BIT
	int "Shutdown bit on port CSP0"
	depends on ETRAX_SOFT_SHUTDOWN
	default "12"
	help
	  Configure what pin on CSPO-port that is used for controlling power
	  supply.

config ETRAX_POWERBUTTON_BIT
	int "Power button bit on port G"
	depends on ETRAX_SOFT_SHUTDOWN
	default "25"
	help
	  Configure where power button is connected.

endmenu

endif
