# Kconfig - general architecture configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2015 Intel Corporation
# Copyright (c) 2016 Cadence Design Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#


choice
	prompt "Architecture"
	default X86

config ARC
	bool "ARC architecture"

config ARM
	bool "ARM architecture"

config X86
	bool "x86 architecture"
	select ATOMIC_OPERATIONS_BUILTIN

config NIOS2
	bool "Nios II Gen 2 architecture"
	select ATOMIC_OPERATIONS_C

config RISCV32
	bool "RISCV32 architecture"

config XTENSA
	bool "Xtensa architecture"

endchoice


menu "General Architecture Options"

config HW_STACK_PROTECTION
	bool "Hardware Stack Protection"
	depends on ARCH_HAS_STACK_PROTECTION
	help
	  Select this option to enable hardware stack protection.

config USERSPACE
	bool "User mode threads"
	depends on ARCH_HAS_USERSPACE
	select HW_STACK_PROTECTION
	help
	When enabled, threads may be created or dropped down to user mode,
	which has significantly restricted permissions and must interact
	with the kernel via system calls. See Zephyr documentation for more
	details	about this feature.

config MAX_THREAD_BYTES
	int "Bytes to use when tracking object thread permissions"
	default 2
	depends on USERSPACE
	help
	Every kernel object will have an associated bitfield to store
	thread permissions for that object. This controls the size of the
	bitfield (in bytes) and imposes a limit on how many threads can
	be created in the system.

config SIMPLE_FATAL_ERROR_HANDLER
	prompt "Simple system fatal error handler"
	bool
	default n
	default y if !MULTITHREADING
	help
	Provides an implementation of _SysFatalErrorHandler() that hard hangs
	instead of aborting the faulting thread, and does not print anything,
	for footprint-concerned systems. Only enable this option if you do not
	want debug capabilities in case of system fatal error.

menu "Interrupt Configuration"
#
# Interrupt related configs
#
config GEN_ISR_TABLES
	bool
	prompt "Use generated IRQ tables"
	default n
	help
	This option controls whether a platform uses the gen_isr_tables
	script to generate its interrupt tables. This mechanism will create
	an appropriate hardware vector table and/or software IRQ table.

config GEN_IRQ_VECTOR_TABLE
	bool
	prompt "Generate an interrupt vector table"
	default y
	depends on GEN_ISR_TABLES
	help
	This option controls whether a platform using gen_isr_tables
	needs an interrupt vector table created. Only disable this if the
	platform does not use a vector table at all, or requires the vector
	table to be in a format that is not an array of function pointers
	indexed by IRQ line. In the latter case, the vector table must be
	supplied by the application or architecture code.

config GEN_SW_ISR_TABLE
	bool
	prompt "Generate a software ISR table"
	default y
	depends on GEN_ISR_TABLES
	help
	This option controls whether a platform using gen_isr_tables
	needs a software ISR table table created. This is an array of struct
	_isr_table_entry containing the interrupt service routine and supplied
	parameter.

config GEN_IRQ_START_VECTOR
	int
	default 0
	depends on GEN_ISR_TABLES
	help
	On some architectures, part of the vector table may be reserved for
	system exceptions and is declared separately from the tables
	created by gen_isr_tables.py. When creating these tables, this value
	will be subtracted from CONFIG_NUM_IRQS to properly size them.
	This is a hidden option which needs to be set per architecture and
	left alone.

endmenu # Interrupt configuration

endmenu

#
# Architecture Capabilities
#
config ARCH_HAS_STACK_PROTECTION
	bool

config ARCH_HAS_USERSPACE
	bool

#
# Hidden PM feature configs which are to be selected by
# individual SoC.
#
config SYS_POWER_LOW_POWER_STATE_SUPPORTED
	# Hidden
	bool
	default n
	help
	This option signifies that the target supports the SYS_POWER_LOW_POWER_STATE
	configuration option.

config SYS_POWER_DEEP_SLEEP_SUPPORTED
	# Hidden
	bool
	default n
	help
	This option signifies that the target supports the SYS_POWER_DEEP_SLEEP
	configuration option.

config BOOTLOADER_CONTEXT_RESTORE_SUPPORTED
	# Hidden
	bool
	default n
	help
	This option signifies that the target has options of bootloaders
	that support context restore upon resume from deep sleep

#
# End hidden PM feature configs
#

config ARCH
	string
	help
	System architecture string.

config SOC
	string
	help
	SoC name which can be found under arch/<arch>/soc/<soc name>.
	This option holds the directory name used by the build system to locate
	the correct linker and header files for the SoC. This option will go away
	once all SoCs are using family/series structure.

config SOC_SERIES
	string
	help
	SoC series name which can be found under arch/<arch>/soc/<family>/<series>.
	This option holds the directory name used by the build system to locate
	the correct linker and header files.

config SOC_FAMILY
	string
	help
	SoC family name which can be found under arch/<arch>/soc/<family>.
	This option holds the directory name used by the build system to locate
	the correct linker and header files.

config BOARD
	string
	help
	This option holds the name of the board and is used to locate the files
	related to the board in the source tree (under boards/).
	The Board is the first location where we search for a linker.ld file,
	if not found we look for the linker file in
	arch/<arch>/soc/<family>/<series>


source "arch/*/Kconfig"

source "boards/Kconfig"
