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

config TILE
	def_bool y
	select HAVE_PERF_EVENTS
	select USE_PMC if PERF_EVENTS
	select HAVE_DMA_ATTRS
	select HAVE_DMA_API_DEBUG
	select HAVE_KVM if !TILEGX
	select GENERIC_FIND_FIRST_BIT
	select SYSCTL_EXCEPTION_TRACE
	select CC_OPTIMIZE_FOR_SIZE
	select HAVE_DEBUG_KMEMLEAK
	select GENERIC_IRQ_PROBE
	select GENERIC_PENDING_IRQ if SMP
	select GENERIC_IRQ_SHOW
	select HAVE_DEBUG_BUGVERBOSE
	select VIRT_TO_BUS
	select SYS_HYPERVISOR
	select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
	select ARCH_HAVE_NMI_SAFE_CMPXCHG
	select GENERIC_CLOCKEVENTS
	select MODULES_USE_ELF_RELA
	select HAVE_ARCH_TRACEHOOK
	select HAVE_SYSCALL_TRACEPOINTS
	select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
	select HAVE_DEBUG_STACKOVERFLOW
	select ARCH_WANT_FRAME_POINTERS

# FIXME: investigate whether we need/want these options.
#	select HAVE_IOREMAP_PROT
#	select HAVE_OPTPROBES
#	select HAVE_REGS_AND_STACK_ACCESS_API
#	select HAVE_HW_BREAKPOINT
#	select PERF_EVENTS
#	select HAVE_USER_RETURN_NOTIFIER
#	config NO_BOOTMEM
#	config ARCH_SUPPORTS_DEBUG_PAGEALLOC
#	config HUGETLB_PAGE_SIZE_VARIABLE

config MMU
	def_bool y

config GENERIC_CSUM
	def_bool y

config HAVE_ARCH_ALLOC_REMAP
	def_bool y

config HAVE_SETUP_PER_CPU_AREA
	def_bool y

config NEED_PER_CPU_PAGE_FIRST_CHUNK
	def_bool y

config SYS_SUPPORTS_HUGETLBFS
	def_bool y

# Support for additional huge page sizes besides HPAGE_SIZE.
# The software support is currently only present in the TILE-Gx
# hypervisor. TILEPro in any case does not support page sizes
# larger than the default HPAGE_SIZE.
config HUGETLB_SUPER_PAGES
	depends on HUGETLB_PAGE && TILEGX
	def_bool y

config GENERIC_TIME_VSYSCALL
	def_bool y

# Enable PMC if PERF_EVENTS, OPROFILE, or WATCHPOINTS are enabled.
config USE_PMC
	bool

# FIXME: tilegx can implement a more efficient rwsem.
config RWSEM_GENERIC_SPINLOCK
	def_bool y

# We only support gcc 4.4 and above, so this should work.
config ARCH_SUPPORTS_OPTIMIZED_INLINING
	def_bool y

config ARCH_PHYS_ADDR_T_64BIT
	def_bool y

config ARCH_DMA_ADDR_T_64BIT
	def_bool y

config NEED_DMA_MAP_STATE
	def_bool y

config ARCH_HAS_DMA_SET_COHERENT_MASK
	bool

config LOCKDEP_SUPPORT
	def_bool y

config STACKTRACE_SUPPORT
	def_bool y
	select STACKTRACE

# We use discontigmem for now; at some point we may want to switch
# to sparsemem (Tilera bug 7996).
config ARCH_DISCONTIGMEM_ENABLE
	def_bool y

config ARCH_DISCONTIGMEM_DEFAULT
	def_bool y

config TRACE_IRQFLAGS_SUPPORT
	def_bool y

config STRICT_DEVMEM
	def_bool y

# SMP is required for Tilera Linux.
config SMP
	def_bool y

config HVC_TILE
	depends on TTY
	select HVC_DRIVER
	select HVC_IRQ if TILEGX
	def_bool y

config TILEGX
	bool "Building for TILE-Gx (64-bit) processor"
	select SPARSE_IRQ
	select GENERIC_IRQ_LEGACY_ALLOC_HWIRQ
	select HAVE_FUNCTION_TRACER
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_DYNAMIC_FTRACE
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_KPROBES
	select HAVE_KRETPROBES
	select HAVE_ARCH_KGDB

config TILEPRO
	def_bool !TILEGX

config 64BIT
	def_bool TILEGX

config ARCH_DEFCONFIG
	string
	default "arch/tile/configs/tilepro_defconfig" if !TILEGX
	default "arch/tile/configs/tilegx_defconfig" if TILEGX

source "init/Kconfig"

source "kernel/Kconfig.freezer"

menu "Tilera-specific configuration"

config NR_CPUS
	int "Maximum number of tiles (2-255)"
	range 2 255
	depends on SMP
	default "64"
	---help---
	  Building with 64 is the recommended value, but a slightly
	  smaller kernel memory footprint results from using a smaller
	  value on chips with fewer tiles.

if TILEGX

choice
	prompt "Kernel page size"
	default PAGE_SIZE_64KB
	help
	  This lets you select the page size of the kernel.  For best
	  performance on memory-intensive applications, a page size of 64KB
	  is recommended.  For workloads involving many small files, many
	  connections, etc., it may be better to select 16KB, which uses
	  memory more efficiently at some cost in TLB performance.

	  Note that this option is TILE-Gx specific; currently
	  TILEPro page size is set by rebuilding the hypervisor.

config PAGE_SIZE_16KB
	bool "16KB"

config PAGE_SIZE_64KB
	bool "64KB"

endchoice

endif

source "kernel/Kconfig.hz"

config KEXEC
	bool "kexec system call"
	---help---
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
	  but it is independent of the system firmware.   It is used
	  to implement the "mboot" Tilera booter.

	  The name comes from the similarity to the exec system call.

config COMPAT
	bool "Support 32-bit TILE-Gx binaries in addition to 64-bit"
	depends on TILEGX
	select COMPAT_BINFMT_ELF
	default y
	---help---
	  If enabled, the kernel will support running TILE-Gx binaries
	  that were built with the -m32 option.

config SYSVIPC_COMPAT
	def_bool y
	depends on COMPAT && SYSVIPC

# We do not currently support disabling HIGHMEM on tilepro.
config HIGHMEM
	bool # "Support for more than 512 MB of RAM"
	default !TILEGX
	---help---
	  Linux can use the full amount of RAM in the system by
	  default.  However, the address space of TILE processors is
	  only 4 Gigabytes large. That means that, if you have a large
	  amount of physical memory, not all of it can be "permanently
	  mapped" by the kernel. The physical memory that's not
	  permanently mapped is called "high memory".

	  If you are compiling a kernel which will never run on a
	  machine with more than 512 MB total physical RAM, answer
	  "false" here. This will result in the kernel mapping all of
	  physical memory into the top 1 GB of virtual memory space.

	  If unsure, say "true".

config ZONE_DMA
	def_bool y

config IOMMU_HELPER
	bool

config NEED_SG_DMA_LENGTH
	bool

config SWIOTLB
	bool
	default TILEGX
	select IOMMU_HELPER
	select NEED_SG_DMA_LENGTH
	select ARCH_HAS_DMA_SET_COHERENT_MASK

# We do not currently support disabling NUMA.
config NUMA
	bool # "NUMA Memory Allocation and Scheduler Support"
	depends on SMP && DISCONTIGMEM
	default y
	---help---
	  NUMA memory allocation is required for TILE processors
	  unless booting with memory striping enabled in the
	  hypervisor, or with only a single memory controller.
	  It is recommended that this option always be enabled.

config NODES_SHIFT
	int "Log base 2 of the max number of memory controllers"
	default 2
	depends on NEED_MULTIPLE_NODES
	---help---
	  By default, 2, i.e. 2^2 == 4 DDR2 controllers.
	  In a system with more controllers, this value should be raised.

choice
	depends on !TILEGX
	prompt "Memory split" if EXPERT
	default VMSPLIT_3G
	---help---
	  Select the desired split between kernel and user memory.

	  If the address range available to the kernel is less than the
	  physical memory installed, the remaining memory will be available
	  as "high memory". Accessing high memory is a little more costly
	  than low memory, as it needs to be mapped into the kernel first.
	  Note that increasing the kernel address space limits the range
	  available to user programs, making the address space there
	  tighter.  Selecting anything other than the default 3G/1G split
	  will also likely make your kernel incompatible with binary-only
	  kernel modules.

	  If you are not absolutely sure what you are doing, leave this
	  option alone!

	config VMSPLIT_3_75G
		bool "3.75G/0.25G user/kernel split (no kernel networking)"
	config VMSPLIT_3_5G
		bool "3.5G/0.5G user/kernel split"
	config VMSPLIT_3G
		bool "3G/1G user/kernel split"
	config VMSPLIT_2_75G
		bool "2.75G/1.25G user/kernel split (for full 1G low memory)"
	config VMSPLIT_2_5G
		bool "2.5G/1.5G user/kernel split"
	config VMSPLIT_2_25G
		bool "2.25G/1.75G user/kernel split"
	config VMSPLIT_2G
		bool "2G/2G user/kernel split"
	config VMSPLIT_1G
		bool "1G/3G user/kernel split"
endchoice

config PAGE_OFFSET
	hex
	depends on !64BIT
	default 0xF0000000 if VMSPLIT_3_75G
	default 0xE0000000 if VMSPLIT_3_5G
	default 0xB0000000 if VMSPLIT_2_75G
	default 0xA0000000 if VMSPLIT_2_5G
	default 0x90000000 if VMSPLIT_2_25G
	default 0x80000000 if VMSPLIT_2G
	default 0x40000000 if VMSPLIT_1G
	default 0xC0000000

source "mm/Kconfig"

source "kernel/Kconfig.preempt"

config CMDLINE_BOOL
	bool "Built-in kernel command line"
	default n
	---help---
	  Allow for specifying boot arguments to the kernel at
	  build time.  On some systems (e.g. embedded ones), it is
	  necessary or convenient to provide some or all of the
	  kernel boot arguments with the kernel itself (that is,
	  to not rely on the boot loader to provide them.)

	  To compile command line arguments into the kernel,
	  set this option to 'Y', then fill in the
	  the boot arguments in CONFIG_CMDLINE.

	  Systems with fully functional boot loaders (e.g. mboot, or
	  if booting over PCI) should leave this option set to 'N'.

config CMDLINE
	string "Built-in kernel command string"
	depends on CMDLINE_BOOL
	default ""
	---help---
	  Enter arguments here that should be compiled into the kernel
	  image and used at boot time.  If the boot loader provides a
	  command line at boot time, it is appended to this string to
	  form the full kernel command line, when the system boots.

	  However, you can use the CONFIG_CMDLINE_OVERRIDE option to
	  change this behavior.

	  In most cases, the command line (whether built-in or provided
	  by the boot loader) should specify the device for the root
	  file system.

config CMDLINE_OVERRIDE
	bool "Built-in command line overrides boot loader arguments"
	default n
	depends on CMDLINE_BOOL
	---help---
	  Set this option to 'Y' to have the kernel ignore the boot loader
	  command line, and use ONLY the built-in command line.

	  This is used to work around broken boot loaders.  This should
	  be set to 'N' under normal conditions.

config VMALLOC_RESERVE
	hex
	default 0x2000000

config HARDWALL
	bool "Hardwall support to allow access to user dynamic network"
	default y

config KERNEL_PL
	int "Processor protection level for kernel"
	range 1 2
	default 2 if TILEGX
	default 1 if !TILEGX
	---help---
	  Since MDE 4.2, the Tilera hypervisor runs the kernel
	  at PL2 by default.  If running under an older hypervisor,
	  or as a KVM guest, you must run at PL1.  (The current
	  hypervisor may also be recompiled with "make HV_PL=2" to
	  allow it to run a kernel at PL1, but clients running at PL1
	  are not expected to be supported indefinitely.)

	  If you're not sure, don't change the default.

source "arch/tile/gxio/Kconfig"

endmenu  # Tilera-specific configuration

menu "Bus options"

config PCI
	bool "PCI support"
	default y
	select PCI_DOMAINS
	select GENERIC_PCI_IOMAP
	select TILE_GXIO_TRIO if TILEGX
	select PCI_MSI if TILEGX
	---help---
	  Enable PCI root complex support, so PCIe endpoint devices can
	  be attached to the Tile chip.  Many, but not all, PCI devices
	  are supported under Tilera's root complex driver.

config PCI_DOMAINS
	bool

config NO_IOMEM
	def_bool !PCI

config NO_IOPORT_MAP
	def_bool !PCI

config TILE_PCI_IO
	bool "PCI I/O space support"
	default n
	depends on PCI
	depends on TILEGX
	---help---
	  Enable PCI I/O space support on TILEGx. Since the PCI I/O space
	  is used by few modern PCIe endpoint devices, its support is disabled
	  by default to save the TRIO PIO Region resource for other purposes.

source "drivers/pci/Kconfig"

source "drivers/pci/pcie/Kconfig"

config TILE_USB
	tristate "Tilera USB host adapter support"
	default y
	depends on USB
	depends on TILEGX
	select TILE_GXIO_USB_HOST
	---help---
	  Provides USB host adapter support for the built-in EHCI and OHCI
	  interfaces on TILE-Gx chips.

source "drivers/pci/hotplug/Kconfig"

endmenu

menu "Executable file formats"

source "fs/Kconfig.binfmt"

endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/tile/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"

source "arch/tile/kvm/Kconfig"
