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

config TMS320C6X
	def_bool y
	select CLKDEV_LOOKUP
	select GENERIC_IRQ_SHOW
	select HAVE_ARCH_TRACEHOOK
	select HAVE_DMA_API_DEBUG
	select HAVE_GENERIC_HARDIRQS
	select HAVE_MEMBLOCK
	select HAVE_SPARSE_IRQ
	select OF
	select OF_EARLY_FLATTREE

config MMU
	def_bool n

config ZONE_DMA
	def_bool y

config FPU
	def_bool n

config HIGHMEM
	def_bool n

config NUMA
	def_bool n

config RWSEM_GENERIC_SPINLOCK
	def_bool y

config RWSEM_XCHGADD_ALGORITHM
	def_bool n

config GENERIC_CALIBRATE_DELAY
	def_bool y

config GENERIC_HWEIGHT
	def_bool y

config GENERIC_CLOCKEVENTS
	def_bool y

config GENERIC_CLOCKEVENTS_BROADCAST
	bool

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"
source "kernel/time/Kconfig"

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
