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

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

source "arch/*/Kconfig"

source "boards/Kconfig"
