#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#

mainmenu "uClinux/68k (w/o MMU) Kernel Configuration"

config M68K
	bool
	default y

config MMU
	bool
	default n

config FPU
	bool
	default n

config ZONE_DMA
	bool
	default y

config RWSEM_GENERIC_SPINLOCK
	bool
	default y

config RWSEM_XCHGADD_ALGORITHM
	bool
	default n

config ARCH_HAS_ILOG2_U32
	bool
	default n

config ARCH_HAS_ILOG2_U64
	bool
	default n

config GENERIC_FIND_NEXT_BIT
	bool
	default y

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_HARDIRQS
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config GENERIC_TIME
	bool
	default y

config TIME_LOW_RES
	bool
	default y

config NO_IOPORT
	def_bool y

source "init/Kconfig"

menu "Processor type and features"

choice
	prompt "CPU"
	default M68EZ328

config M68328
	bool "MC68328"
	help
	  Motorola 68328 processor support.

config M68EZ328
	bool "MC68EZ328"
	help
	  Motorola 68EX328 processor support.

config M68VZ328
	bool "MC68VZ328"
	help
	  Motorola 68VZ328 processor support.

config M68360
	bool "MC68360"
	help
	  Motorola 68360 processor support.

config M5206
	bool "MCF5206"
	help
	  Motorola ColdFire 5206 processor support.

config M5206e
	bool "MCF5206e"
	help
	  Motorola ColdFire 5206e processor support.

config M520x
	bool "MCF520x"
	help
	   Freescale Coldfire 5207/5208 processor support.

config M523x
	bool "MCF523x"
	help
	  Freescale Coldfire 5230/1/2/4/5 processor support

config M5249
	bool "MCF5249"
	help
	  Motorola ColdFire 5249 processor support.

config M5271
	bool "MCF5271"
	help
	  Freescale (Motorola) ColdFire 5270/5271 processor support.

config M5272
	bool "MCF5272"
	help
	  Motorola ColdFire 5272 processor support.

config M5275
	bool "MCF5275"
	help
	  Freescale (Motorola) ColdFire 5274/5275 processor support.

config M528x
	bool "MCF528x"
	help
	  Motorola ColdFire 5280/5282 processor support.

config M5307
	bool "MCF5307"
	help
	  Motorola ColdFire 5307 processor support.

config M532x
	bool "MCF532x"
	help
	  Freescale (Motorola) ColdFire 532x processor support.

config M5407
	bool "MCF5407"
	help
	  Motorola ColdFire 5407 processor support.

endchoice

config M527x
	bool
	depends on (M5271 || M5275)
	default y

config COLDFIRE
	bool
	depends on (M5206 || M5206e || M520x || M523x || M5249 || M527x || M5272 || M528x || M5307 || M532x || M5407)
	default y

config CLOCK_SET
	bool "Enable setting the CPU clock frequency"
	default n
	help
	  On some CPU's you do not need to know what the core CPU clock
	  frequency is. On these you can disable clock setting. On some
	  traditional 68K parts, and on all ColdFire parts you need to set
	  the appropriate CPU clock frequency. On these devices many of the
	  onboard peripherals derive their timing from the master CPU clock
	  frequency.

config CLOCK_FREQ
	int "Set the core clock frequency"
	default "66666666"
	depends on CLOCK_SET
	help
	  Define the CPU clock frequency in use. This is the core clock
	  frequency, it may or may not be the same as the external clock
	  crystal fitted to your board. Some processors have an internal
	  PLL and can have their frequency programmed at run time, others
	  use internal dividers. In general the kernel won't setup a PLL
	  if it is fitted (there are some exceptions). This value will be
	  specific to the exact CPU that you are using.

config CLOCK_DIV
	int "Set the core/bus clock divide ratio"
	default "1"
	depends on CLOCK_SET
	help
	  On many SoC style CPUs the master CPU clock is also used to drive 
	  on-chip peripherals. The clock that is distributed to these
	  peripherals is sometimes a fixed ratio of the master clock
	  frequency. If so then set this to the divider ratio of the
	  master clock to the peripheral clock. If not sure then select 1.

config OLDMASK
	bool "Old mask 5307 (1H55J) silicon"
	depends on M5307
	help
	  Build support for the older revision ColdFire 5307 silicon.
	  Specifically this is the 1H55J mask revision.

comment "Platform"

config PILOT3
	bool "Pilot 1000/5000, PalmPilot Personal/Pro, or PalmIII support"
	depends on M68328
	help
	  Support for the Palm Pilot 1000/5000, Personal/Pro and PalmIII.

config XCOPILOT_BUGS
	bool "(X)Copilot support"
	depends on PILOT3
	help
	  Support the bugs of Xcopilot.

config UC5272
        bool 'Arcturus Networks uC5272 dimm board support'
        depends on M5272
        help
          Support for the Arcturus Networks uC5272 dimm board.

config UC5282
       bool "Arcturus Networks uC5282 board support"
          depends on M528x
       help
          Support for the Arcturus Networks uC5282 dimm board.

config UCSIMM
	bool "uCsimm module support"
	depends on M68EZ328
	help
	  Support for the Arcturus Networks uCsimm module.

config UCDIMM
	bool "uDsimm module support"
	depends on M68VZ328
	help
	  Support for the Arcturus Networks uDsimm module.

config DRAGEN2
	bool "DragenEngine II board support"
	depends on M68VZ328
	help
	  Support for the DragenEngine II board.

config DIRECT_IO_ACCESS
	bool "Allow user to access IO directly"
	depends on (UCSIMM || UCDIMM || DRAGEN2)
	help
	  Disable the CPU internal registers protection in user mode,
          to allow a user application to read/write them.

config INIT_LCD
	bool "Initialize LCD"
	depends on (UCSIMM || UCDIMM || DRAGEN2)
	help
	  Initialize the LCD controller of the 68x328 processor.

config MEMORY_RESERVE
	int "Memory reservation (MiB)"
	depends on (UCSIMM || UCDIMM)
	help
	  Reserve certain memory regions on 68x328 based boards.

config UCQUICC
	bool "Lineo uCquicc board support"
	depends on M68360
	help
	  Support for the Lineo uCquicc board.

config ARN5206
	bool "Arnewsh 5206 board support"
	depends on M5206
	help
	  Support for the Arnewsh 5206 board.

config M5206eC3
	bool "Motorola M5206eC3 board support"
	depends on M5206e
	help
	  Support for the Motorola M5206eC3 board.

config ELITE
	bool "Motorola M5206eLITE board support"
	depends on M5206e
	help
	  Support for the Motorola M5206eLITE board.

config M5208EVB
	bool "Freescale M5208EVB board support"
	depends on M520x
	help
	  Support for the Freescale Coldfire M5208EVB.

config M5235EVB
	bool "Freescale M5235EVB support"
	depends on M523x
	help
	  Support for the Freescale M5235EVB board.

config M5249C3
	bool "Motorola M5249C3 board support"
	depends on M5249
	help
	  Support for the Motorola M5249C3 board.

config M5271EVB
	bool "Freescale (Motorola) M5271EVB board support"
	depends on M5271
	help
	  Support for the Freescale (Motorola) M5271EVB board.

config M5275EVB
	bool "Freescale (Motorola) M5275EVB board support"
	depends on M5275
	help
	  Support for the Freescale (Motorola) M5275EVB board.

config M5272C3
	bool "Motorola M5272C3 board support"
	depends on M5272
	help
	  Support for the Motorola M5272C3 board.

config COBRA5272
	bool "senTec COBRA5272 board support"
	depends on M5272
	help
	  Support for the senTec COBRA5272 board.

config AVNET5282
	bool "Avnet 5282 board support"
	depends on M528x
	help
	  Support for the Avnet 5282 board.  
	  
config M5282EVB
	bool "Motorola M5282EVB board support"
	depends on M528x
	help
	  Support for the Motorola M5282EVB board.

config COBRA5282
	bool "senTec COBRA5282 board support"
	depends on M528x
	help
	  Support for the senTec COBRA5282 board.
	  
config SOM5282EM
	bool "EMAC.Inc SOM5282EM board support"
	depends on M528x
	help
	  Support for the EMAC.Inc SOM5282EM module.  
	  
config WILDFIRE
	bool "Intec Automation Inc. WildFire board support"
	depends on M528x
	help
	  Support for the Intec Automation Inc. WildFire.
	  
config WILDFIREMOD
	bool "Intec Automation Inc. WildFire module support"
	depends on M528x
	help
	  Support for the Intec Automation Inc. WildFire module.

config ARN5307
	bool "Arnewsh 5307 board support"
	depends on M5307
	help
	  Support for the Arnewsh 5307 board.

config M5307C3
	bool "Motorola M5307C3 board support"
	depends on M5307
	help
	  Support for the Motorola M5307C3 board.

config eLIA
	bool "Moreton Bay eLIA board support"
	depends on M5307
	help
	  Support for the Moreton Bay eLIA board.

config SECUREEDGEMP3
	bool "SnapGear SecureEdge/MP3 platform support"
	depends on M5307
	help
	  Support for the SnapGear SecureEdge/MP3 platform.

config M5329EVB
	bool "Freescale (Motorola) M5329EVB board support"
	depends on M532x
	help
	  Support for the Freescale (Motorola) M5329EVB board.

config COBRA5329
	bool "senTec COBRA5329 board support"
	depends on M532x
	help
	  Support for the senTec COBRA5329 board.

config M5407C3
	bool "Motorola M5407C3 board support"
	depends on M5407
	help
	  Support for the Motorola M5407C3 board.

config CLEOPATRA
	bool "Feith CLEOPATRA board support"
	depends on (M5307 || M5407)
	help
	  Support for the Feith Cleopatra boards.

config CANCam
	bool "Feith CANCam board support"
	depends on M5272
	help
	  Support for the Feith CANCam board.

config SCALES
	bool "Feith SCALES board support"
	depends on M5272
	help
	  Support for the Feith SCALES board.

config NETtel
	bool "SecureEdge/NETtel board support"
	depends on (M5206e || M5272 || M5307)
	help
	  Support for the SnapGear NETtel/SecureEdge/SnapGear boards.

config SNAPGEAR
	bool "SnapGear router board support"
	depends on NETtel
	help
	  Special additional support for SnapGear router boards.

config CPU16B
	bool "Sneha Technologies S.L. Sarasvati board support"
	depends on M5272
	help
	  Support for the SNEHA CPU16B board.

config MOD5272
	bool "Netburner MOD-5272 board support"
	depends on M5272
	help
	  Support for the Netburner MOD-5272 board.

config SAVANTrosie1
	bool "Savant Rosie1 board support"
	depends on M523x
	help
	  Support for the Savant Rosie1 board.

config ROMFS_FROM_ROM
	bool "ROMFS image not RAM resident"
	depends on (NETtel || SNAPGEAR)
	help
	  The ROMfs filesystem will stay resident in the FLASH/ROM, not be
	  moved into RAM.

config PILOT
	bool
	default y
	depends on (PILOT3 || PILOT5)

config ARNEWSH
	bool
	default y
	depends on (ARN5206 || ARN5307)

config FREESCALE
	bool
	default y
	depends on (M5206eC3 || M5208EVB || M5235EVB || M5249C3 || M5271EVB || M5272C3 || M5275EVB || M5282EVB || M5307C3 || M5329EVB || M5407C3)

config HW_FEITH
	bool
	default y
	depends on (CLEOPATRA || CANCam || SCALES)

config senTec
	bool
	default y
	depends on (COBRA5272 || COBRA5282)
	
config EMAC_INC
	bool
	default y
	depends on (SOM5282EM)

config SNEHA
        bool
	default y
	depends on CPU16B

config SAVANT
	bool
	default y
	depends on SAVANTrosie1

config AVNET
	bool
	default y
	depends on (AVNET5282)

config 4KSTACKS
	bool "Use 4Kb for kernel stacks instead of 8Kb"
	default y
	help
	  If you say Y here the kernel will use a 4Kb stacksize for the
	  kernel stack attached to each process/thread. This facilitates
	  running more threads on a system and also reduces the pressure
	  on the VM subsystem for higher order allocations.

comment "RAM configuration"

config RAMBASE
	hex "Address of the base of RAM"
	default "0"
	help
	  Define the address that RAM starts at. On many platforms this is
	  0, the base of the address space. And this is the default. Some
	  platforms choose to setup their RAM at other addresses within the
	  processor address space.

config RAMSIZE
	hex "Size of RAM (in bytes)"
	default "0x400000"
	help
	  Define the size of the system RAM. If you select 0 then the
	  kernel will try to probe the RAM size at runtime. This is not
	  supported on all CPU types.

config VECTORBASE
	hex "Address of the base of system vectors"
	default "0"
	help
	  Define the address of the system vectors. Commonly this is
	  put at the start of RAM, but it doesn't have to be. On ColdFire
	  platforms this address is programmed into the VBR register, thus
	  actually setting the address to use.

config KERNELBASE
	hex "Address of the base of kernel code"
	default "0x400"
	help
	  Typically on m68k systems the kernel will not start at the base
	  of RAM, but usually some small offset from it. Define the start
	  address of the kernel here. The most common setup will have the
	  processor vectors at the base of RAM and then the start of the
	  kernel. On some platforms some RAM is reserved for boot loaders
	  and the kernel starts after that. The 0x400 default was based on
	  a system with the RAM based at address 0, and leaving enough room
	  for the theoretical maximum number of 256 vectors.

choice
	prompt "RAM bus width"
	default RAMAUTOBIT

config RAMAUTOBIT
	bool "AUTO"
	help
	  Select the physical RAM data bus size. Not needed on most platforms,
	  so you can generally choose AUTO.

config RAM8BIT
	bool "8bit"
	help
	  Configure RAM bus to be 8 bits wide.

config RAM16BIT
	bool "16bit"
	help
	  Configure RAM bus to be 16 bits wide.

config RAM32BIT
	bool "32bit"
	help
	  Configure RAM bus to be 32 bits wide.

endchoice

comment "ROM configuration"

config ROM
	bool "Specify ROM linker regions"
	default n
	help
	  Define a ROM region for the linker script. This creates a kernel
	  that can be stored in flash, with possibly the text, and data
	  regions being copied out to RAM at startup.

config ROMBASE
	hex "Address of the base of ROM device"
	default "0"
	depends on ROM
	help
	  Define the address that the ROM region starts at. Some platforms
	  use this to set their chip select region accordingly for the boot
	  device.

config ROMVEC
	hex "Address of the base of the ROM vectors"
	default "0"
	depends on ROM
	help
	  This is almost always the same as the base of the ROM. Since on all
	  68000 type variants the vectors are at the base of the boot device
	  on system startup.

config ROMVECSIZE
	hex "Size of ROM vector region (in bytes)"
	default "0x400"
	depends on ROM
	help
	  Define the size of the vector region in ROM. For most 68000
	  variants this would be 0x400 bytes in size. Set to 0 if you do
	  not want a vector region at the start of the ROM.

config ROMSTART
	hex "Address of the base of system image in ROM"
	default "0x400"
	depends on ROM
	help
	  Define the start address of the system image in ROM. Commonly this
	  is strait after the ROM vectors.

config ROMSIZE
	hex "Size of the ROM device"
	default "0x100000"
	depends on ROM
	help
	  Size of the ROM device. On some platforms this is used to setup
	  the chip select that controls the boot ROM device.

choice
	prompt "Kernel executes from"
	---help---
	  Choose the memory type that the kernel will be running in.

config RAMKERNEL
	bool "RAM"
	help
	  The kernel will be resident in RAM when running.

config ROMKERNEL
	bool "ROM"
	help
	  The kernel will be resident in FLASH/ROM when running. This is
	  often referred to as Execute-in-Place (XIP), since the kernel
	  code executes from the position it is stored in the FLASH/ROM.

endchoice

source "mm/Kconfig"

endmenu

config ISA_DMA_API
	bool
	depends on !M5272
	default y

menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"

config PCI
	bool "PCI support"
	help
	  Support for PCI bus.

config COMEMPCI
	bool "CO-MEM lite PCI controller support"
	depends on (M5307 || M5407)

source "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/Kconfig"

endmenu

menu "Executable file formats"

source "fs/Kconfig.binfmt"

endmenu

menu "Power management options"

config PM
	bool "Power Management support"
	help
	  Support processor power management modes

endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/m68knommu/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
