#
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

choice
	prompt "Nios II configuration selection"
	depends on NIOS2
	gsource "arch/nios2/soc/*/Kconfig.soc"
endchoice

menu "Nios II Options"
	depends on NIOS2

config ARCH
	string
	default "nios2"

config ARCH_DEFCONFIG
	string
	default "arch/nios2/defconfig"

menu "Nios II Gen 2 Processor Options"

config CPU_NIOS2_GEN2
	bool
	default y
	select BUILD_OUTPUT_HEX
	help
	  This option signifies the use of a Nios II Gen 2 CPU

endmenu

menu "Nios II Family Options"

config XIP
	bool
	default y

config GEN_ISR_TABLES
	default y

config GEN_IRQ_VECTOR_TABLE
	default n

config NUM_IRQS
	int
	default 32

config HAS_MUL_INSTRUCTION
	bool
	default n

config HAS_DIV_INSTRUCTION
	bool
	default n

config HAS_MULX_INSTRUCTION
	bool
	default n

config INCLUDE_RESET_VECTOR
	bool "Include Reset vector"
	default y
	help
	  Include the reset vector stub, which enables instruction/data caches
	  and then jumps to __start. This code is typically located at the very
	  beginning of flash memory. You may need to omit this if using the
	  nios2-download tool since it refuses to load data anywhere other than
	  RAM.

config EXTRA_EXCEPTION_INFO
	bool "Extra exception debug information"
	default n
	help
	  Have exceptions print additional useful debugging information in
	  human-readable form, at the expense of code size. For example,
	  the cause code for an exception will be supplemented by a string
	  describing what that cause code means.

choice
prompt "Global Pointer options"
default GP_GLOBAL

config GP_NONE
	bool "No global pointer"
	help
	  Do not use global pointer relative offsets at all

config GP_LOCAL
	bool "Local data global pointer references"
	help
	  Use global pointer relative offsets for small globals declared in the
	  same C file as the code that uses it.

config GP_GLOBAL
	bool "Global data global pointer references"
	help
	  Use global pointer relative offsets for small globals declared
	  anywhere in the executable. Note that if any small globals that are put
	  in alternate sections (such as _k_task_list_ptr) they must be declared
	  in headers with proper __attribute__((section)) or the linker will
	  error out.

config GP_ALL_DATA
	bool "All data global pointer references"
	help
	  Use GP relative access for all data in the program, not just
	  small data. Use this if your board has 64K or less of RAM.

endchoice

endmenu

gsource "arch/nios2/soc/*/Kconfig"

endmenu
