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

config C6X
	def_bool y
	select CLKDEV_LOOKUP
	select GENERIC_ATOMIC64
	select GENERIC_IRQ_SHOW
	select HAVE_ARCH_TRACEHOOK
	select HAVE_DMA_API_DEBUG
	select HAVE_GENERIC_HARDIRQS
	select HAVE_MEMBLOCK
	select SPARSE_IRQ
	select IRQ_DOMAIN
	select OF
	select OF_EARLY_FLATTREE
	select GENERIC_CLOCKEVENTS
	select GENERIC_KERNEL_THREAD
	select MODULES_USE_ELF_RELA

config MMU
	def_bool n

config FPU
	def_bool n

config RWSEM_GENERIC_SPINLOCK
	def_bool y

config GENERIC_CALIBRATE_DELAY
	def_bool y

config GENERIC_HWEIGHT
	def_bool y

config GENERIC_BUG
	def_bool y

config COMMON_CLKDEV
	def_bool y

config C6X_BIG_KERNEL
	bool "Build a big kernel"
	help
	  The C6X function call instruction has a limited range of +/- 2MiB.
	  This is sufficient for most kernels, but some kernel configurations
	  with lots of compiled-in functionality may require a larger range
	  for function calls. Use this option to have the compiler generate
	  function calls with 32-bit range. This will make the kernel both
	  larger and slower.

	  If unsure, say N.

source "init/Kconfig"

# Use the generic interrupt handling code in kernel/irq/

source "kernel/Kconfig.freezer"

config CMDLINE_BOOL
	bool "Default bootloader kernel arguments"

config CMDLINE
	string "Kernel command line"
	depends on CMDLINE_BOOL
	default "console=ttyS0,57600"
	help
	  On some architectures there is currently no way for the boot loader
	  to pass arguments to the kernel. For these architectures, you should
	  supply some command-line options at build time by entering them
	  here.

config CMDLINE_FORCE
	bool "Force default kernel command string"
	depends on CMDLINE_BOOL
	default n
	help
	  Set this to have arguments from the default kernel command string
	  override those passed by the boot loader.

config CPU_BIG_ENDIAN
	bool "Build big-endian kernel"
	default n
	help
	  Say Y if you plan on running a kernel in big-endian mode.
	  Note that your board must be properly built and your board
	  port must properly enable any big-endian related features
	  of your chipset/board/processor.

config FORCE_MAX_ZONEORDER
	int "Maximum zone order"
	default "13"
	help
	  The kernel memory allocator divides physically contiguous memory
	  blocks into "zones", where each zone is a power of two number of
	  pages.  This option selects the largest power of two that the kernel
	  keeps in the memory allocator.  If you need to allocate very large
	  blocks of physically contiguous memory, then you may need to
	  increase this value.

	  This config option is actually maximum order plus one. For example,
	  a value of 11 means that the largest free memory block is 2^10 pages.

menu "Processor type and features"

source "arch/c6x/platforms/Kconfig"

config TMS320C6X_CACHES_ON
	bool "L2 cache support"
	default y

config KERNEL_RAM_BASE_ADDRESS
	hex "Virtual address of memory base"
	default 0xe0000000 if SOC_TMS320C6455
	default 0xe0000000 if SOC_TMS320C6457
	default 0xe0000000 if SOC_TMS320C6472
	default 0x80000000

source "mm/Kconfig"

source "kernel/Kconfig.preempt"

source "kernel/Kconfig.hz"

endmenu

menu "Executable file formats"

source "fs/Kconfig.binfmt"

endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"

menu "Kernel hacking"

source "lib/Kconfig.debug"

config ACCESS_CHECK
	bool "Check the user pointer address"
	default y
	help
	  Usually the pointer transfer from user space is checked to see if its
	  address is in the kernel space.

	  Say N here to disable that check to improve the performance.

endmenu
