# 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

#
# 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

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.

#
# 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 located 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>

#
# 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
	prompt "Starting vector for user-configurable interrupts"
	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.

source "arch/*/Kconfig"

source "boards/Kconfig"
