You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1183 lines
37 KiB
1183 lines
37 KiB
# 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 |
|
|
|
# Include these first so that any properties (e.g. defaults) below can be |
|
# overridden (by defining symbols in multiple locations) |
|
|
|
source "$(KCONFIG_BINARY_DIR)/arch/Kconfig" |
|
|
|
# ToDo: Generate a Kconfig.arch for loading of additional arch in HWMv2. |
|
osource "$(KCONFIG_BINARY_DIR)/Kconfig.arch" |
|
|
|
# Architecture symbols |
|
# |
|
# Should be 'select'ed by low-level symbols like SOC_SERIES_* or, lacking that, |
|
# by SOC_*. |
|
|
|
config ARC |
|
bool |
|
select ARCH_IS_SET |
|
imply XIP |
|
select ARCH_HAS_THREAD_LOCAL_STORAGE |
|
select ARCH_SUPPORTS_ROM_START |
|
select ARCH_HAS_DIRECTED_IPIS |
|
help |
|
ARC architecture |
|
|
|
config ARM |
|
bool |
|
select ARCH_IS_SET |
|
select ARCH_SUPPORTS_COREDUMP if CPU_CORTEX_M |
|
select ARCH_SUPPORTS_COREDUMP_THREADS if CPU_CORTEX_M |
|
select ARCH_SUPPORTS_COREDUMP_STACK_PTR if CPU_CORTEX_M |
|
# FIXME: current state of the code for all ARM requires this, but |
|
# is really only necessary for Cortex-M with ARM MPU! |
|
select GEN_PRIV_STACKS |
|
select ARCH_HAS_THREAD_LOCAL_STORAGE if CPU_AARCH32_CORTEX_R || CPU_CORTEX_M || CPU_AARCH32_CORTEX_A |
|
select BARRIER_OPERATIONS_ARCH |
|
help |
|
ARM architecture |
|
|
|
config ARM64 |
|
bool |
|
select ARCH_IS_SET |
|
select 64BIT |
|
select ARCH_SUPPORTS_COREDUMP |
|
select HAS_ARM_SMCCC |
|
select ARCH_HAS_THREAD_LOCAL_STORAGE |
|
select USE_SWITCH |
|
select USE_SWITCH_SUPPORTED |
|
select BARRIER_OPERATIONS_ARCH |
|
select ARCH_HAS_DIRECTED_IPIS |
|
select ARCH_HAS_DEMAND_PAGING |
|
select ARCH_HAS_DEMAND_MAPPING |
|
select ARCH_SUPPORTS_EVICTION_TRACKING |
|
select EVICTION_TRACKING if DEMAND_PAGING |
|
help |
|
ARM64 (AArch64) architecture |
|
|
|
config MIPS |
|
bool |
|
select ARCH_IS_SET |
|
select ATOMIC_OPERATIONS_C |
|
help |
|
MIPS architecture |
|
|
|
config SPARC |
|
bool |
|
select ARCH_IS_SET |
|
select USE_SWITCH |
|
select USE_SWITCH_SUPPORTED |
|
select BIG_ENDIAN |
|
select ATOMIC_OPERATIONS_BUILTIN if SPARC_CASA |
|
select ATOMIC_OPERATIONS_C if !SPARC_CASA |
|
select ARCH_HAS_THREAD_LOCAL_STORAGE |
|
select ARCH_HAS_EXTRA_EXCEPTION_INFO |
|
help |
|
SPARC architecture |
|
|
|
config X86 |
|
bool |
|
select ARCH_IS_SET |
|
select ATOMIC_OPERATIONS_BUILTIN |
|
select ARCH_SUPPORTS_COREDUMP |
|
select ARCH_SUPPORTS_COREDUMP_PRIV_STACKS |
|
select ARCH_SUPPORTS_ROM_START if !X86_64 |
|
select CPU_HAS_MMU |
|
select ARCH_MEM_DOMAIN_DATA if USERSPACE && !X86_COMMON_PAGE_TABLE |
|
select ARCH_MEM_DOMAIN_SYNCHRONOUS_API if USERSPACE |
|
select ARCH_HAS_GDBSTUB if !X86_64 |
|
select ARCH_HAS_TIMING_FUNCTIONS |
|
select ARCH_HAS_THREAD_LOCAL_STORAGE |
|
select ARCH_HAS_DEMAND_PAGING if !X86_64 |
|
select ARCH_HAS_DEMAND_MAPPING if ARCH_HAS_DEMAND_PAGING |
|
select NEED_LIBC_MEM_PARTITION if USERSPACE && TIMING_FUNCTIONS \ |
|
&& !BOARD_HAS_TIMING_FUNCTIONS \ |
|
&& !SOC_HAS_TIMING_FUNCTIONS |
|
select ARCH_HAS_STACK_CANARIES_TLS |
|
select ARCH_SUPPORTS_MEM_MAPPED_STACKS if X86_MMU && !DEMAND_PAGING |
|
select ARCH_HAS_THREAD_PRIV_STACK_SPACE_GET if USERSPACE |
|
help |
|
x86 architecture |
|
|
|
config RISCV |
|
bool |
|
select ARCH_IS_SET |
|
select ATOMIC_OPERATIONS_C if !RISCV_ISA_EXT_A |
|
select ATOMIC_OPERATIONS_BUILTIN if RISCV_ISA_EXT_A |
|
select ARCH_SUPPORTS_COREDUMP |
|
select ARCH_SUPPORTS_COREDUMP_PRIV_STACKS |
|
select ARCH_SUPPORTS_ROM_START if !SOC_FAMILY_ESPRESSIF_ESP32 |
|
select ARCH_SUPPORTS_EMPTY_IRQ_SPURIOUS |
|
select ARCH_HAS_CODE_DATA_RELOCATION |
|
select ARCH_HAS_THREAD_LOCAL_STORAGE |
|
select USE_SWITCH_SUPPORTED |
|
select USE_SWITCH |
|
select SCHED_IPI_SUPPORTED if SMP |
|
select ARCH_HAS_DIRECTED_IPIS |
|
select BARRIER_OPERATIONS_BUILTIN |
|
select ARCH_HAS_THREAD_PRIV_STACK_SPACE_GET if USERSPACE |
|
help |
|
RISCV architecture |
|
|
|
config XTENSA |
|
bool |
|
select ARCH_IS_SET |
|
select USE_SWITCH |
|
select USE_SWITCH_SUPPORTED |
|
select ARCH_HAS_CODE_DATA_RELOCATION |
|
select ARCH_HAS_TIMING_FUNCTIONS |
|
select ARCH_MEM_DOMAIN_DATA if USERSPACE |
|
select ARCH_HAS_DIRECTED_IPIS |
|
select THREAD_STACK_INFO |
|
select ARCH_HAS_THREAD_PRIV_STACK_SPACE_GET if USERSPACE |
|
help |
|
Xtensa architecture |
|
|
|
config ARCH_POSIX |
|
bool |
|
select ARCH_IS_SET |
|
select ATOMIC_OPERATIONS_BUILTIN |
|
select ARCH_HAS_CUSTOM_SWAP_TO_MAIN |
|
select ARCH_HAS_CUSTOM_BUSY_WAIT |
|
select ARCH_HAS_THREAD_ABORT |
|
select ARCH_HAS_THREAD_NAME_HOOK |
|
select NATIVE_BUILD |
|
select HAS_COVERAGE_SUPPORT |
|
select BARRIER_OPERATIONS_BUILTIN |
|
# POSIX arch based targets get their memory cleared on entry by the host OS |
|
select SKIP_BSS_CLEAR |
|
# Override the C standard used for compilation to C 2011 |
|
# This is due to some tests using _Static_assert which is a 2011 feature, but |
|
# otherwise relying on compilers supporting it also when set to C99. |
|
# This was in general ok, but with some host compilers and C library versions |
|
# it led to problems. So we override it to 2011 for the native targets. |
|
select REQUIRES_STD_C11 |
|
help |
|
POSIX (native) architecture |
|
|
|
config RX |
|
bool |
|
select ARCH_IS_SET |
|
select ATOMIC_OPERATIONS_C |
|
select USE_SWITCH |
|
select USE_SWITCH_SUPPORTED |
|
help |
|
Renesas RX architecture |
|
|
|
config ARCH_IS_SET |
|
bool |
|
help |
|
Helper symbol to detect SoCs forgetting to select one of the arch |
|
symbols above. See the top-level CMakeLists.txt. |
|
|
|
menu "General Architecture Options" |
|
|
|
source "arch/common/Kconfig" |
|
|
|
module = ARCH |
|
module-str = arch |
|
source "subsys/logging/Kconfig.template.log_config" |
|
|
|
config BIG_ENDIAN |
|
bool |
|
help |
|
This option tells the build system that the target system is big-endian. |
|
Little-endian architecture is the default and should leave this option |
|
unselected. This option is selected by arch/$ARCH/Kconfig, |
|
soc/**/Kconfig, or boards/**/Kconfig and the user should generally avoid |
|
modifying it. The option is used to select linker script OUTPUT_FORMAT, |
|
the toolchain flags (TOOLCHAIN_C_FLAGS, TOOLCHAIN_LD_FLAGS), and command |
|
line option for gen_isr_tables.py. |
|
|
|
config LITTLE_ENDIAN |
|
# Hidden Kconfig option representing the default little-endian architecture |
|
# This is just the opposite of BIG_ENDIAN and is used for non-negative |
|
# conditional compilation |
|
bool |
|
depends on !BIG_ENDIAN |
|
default y |
|
|
|
config 64BIT |
|
bool |
|
help |
|
This option tells the build system that the target system is |
|
using a 64-bit address space, meaning that pointer and long types |
|
are 64 bits wide. This option is selected by arch/$ARCH/Kconfig, |
|
soc/**/Kconfig, or boards/**/Kconfig and the user should generally |
|
avoid modifying it. |
|
|
|
# Workaround for not being able to have commas in macro arguments |
|
DT_CHOSEN_Z_SRAM := zephyr,sram |
|
|
|
config SRAM_SIZE |
|
int "SRAM Size in kB" |
|
default $(dt_chosen_reg_size_int,$(DT_CHOSEN_Z_SRAM),0,K) |
|
help |
|
The SRAM size in kB. The default value comes from /chosen/zephyr,sram in |
|
devicetree. The user should generally avoid changing it via menuconfig or |
|
in configuration files. |
|
|
|
config SRAM_BASE_ADDRESS |
|
hex "SRAM Base Address" |
|
default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_SRAM)) |
|
help |
|
The SRAM base address. The default value comes from |
|
/chosen/zephyr,sram in devicetree. The user should generally avoid |
|
changing it via menuconfig or in configuration files. |
|
|
|
if ARC || ARM || ARM64 || X86 || RISCV || RX |
|
|
|
# Workaround for not being able to have commas in macro arguments |
|
DT_CHOSEN_Z_FLASH := zephyr,flash |
|
|
|
config FLASH_SIZE |
|
int "Flash Size in kB" |
|
default $(dt_chosen_reg_size_int,$(DT_CHOSEN_Z_FLASH),0,K) if (XIP && (ARM ||ARM64)) || !ARM |
|
default 0 if !XIP |
|
help |
|
This option specifies the size of the flash in kB. It is normally set by |
|
the board's defconfig file and the user should generally avoid modifying |
|
it via the menu configuration. |
|
|
|
config FLASH_BASE_ADDRESS |
|
hex "Flash Base Address" |
|
default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_FLASH)) if (XIP && (ARM || ARM64)) || !ARM |
|
default 0 if !XIP |
|
help |
|
This option specifies the base address of the flash on the board. It is |
|
normally set by the board's defconfig file and the user should generally |
|
avoid modifying it via the menu configuration. |
|
|
|
endif # ARM || ARM64 || ARC || X86 || RISCV || RX |
|
|
|
if ARCH_HAS_TRUSTED_EXECUTION |
|
|
|
config TRUSTED_EXECUTION_SECURE |
|
bool "Trusted Execution: Secure firmware image" |
|
help |
|
Select this option to enable building a Secure firmware |
|
image for a platform that supports Trusted Execution. A |
|
Secure firmware image will execute in Secure state. It may |
|
allow the CPU to execute in Non-Secure (Normal) state. |
|
Therefore, a Secure firmware image shall be able to |
|
configure security attributions of CPU resources (memory |
|
areas, peripherals, interrupts, etc.) as well as to handle |
|
faults, related to security violations. It may optionally |
|
allow certain functions to be called from the Non-Secure |
|
(Normal) domain. |
|
|
|
config TRUSTED_EXECUTION_NONSECURE |
|
depends on !TRUSTED_EXECUTION_SECURE |
|
bool "Trusted Execution: Non-Secure firmware image" |
|
help |
|
Select this option to enable building a Non-Secure |
|
firmware image for a platform that supports Trusted |
|
Execution. A Non-Secure firmware image will execute |
|
in Non-Secure (Normal) state. Therefore, it shall not |
|
access CPU resources (memory areas, peripherals, |
|
interrupts etc.) belonging to the Secure domain. |
|
|
|
endif # ARCH_HAS_TRUSTED_EXECUTION |
|
|
|
config HW_STACK_PROTECTION |
|
bool "Hardware Stack Protection" |
|
depends on ARCH_HAS_STACK_PROTECTION |
|
help |
|
Select this option to enable hardware-based platform features to |
|
catch stack overflows when the system is running in privileged |
|
mode. If CONFIG_USERSPACE is not enabled, the system is always |
|
running in privileged mode. |
|
|
|
Note that this does not necessarily prevent corruption and assertions |
|
about the overall system state when a fault is triggered cannot be |
|
made. |
|
|
|
config USERSPACE |
|
bool "User mode threads" |
|
depends on ARCH_HAS_USERSPACE |
|
depends on RUNTIME_ERROR_CHECKS |
|
depends on SRAM_REGION_PERMISSIONS |
|
select THREAD_STACK_INFO |
|
select LINKER_USE_NO_RELAX |
|
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. |
|
|
|
If a user thread overflows its stack, this will be caught and the |
|
kernel itself will be shielded from harm. Enabling this option |
|
may or may not catch stack overflows when the system is in |
|
privileged mode or handling a system call; to ensure these are always |
|
caught, enable CONFIG_HW_STACK_PROTECTION. |
|
|
|
config PRIVILEGED_STACK_SIZE |
|
int "Size of privileged stack" |
|
default 2048 if EMUL |
|
default 1024 |
|
depends on USERSPACE |
|
help |
|
This option sets the privileged stack region size that will be used |
|
in addition to the user mode thread stack. During normal execution, |
|
this region will be inaccessible from user mode. During system calls, |
|
this region will be utilized by the system call. This value must be |
|
a multiple of the minimum stack alignment. |
|
|
|
config KOBJECT_TEXT_AREA |
|
int "Size of kobject text area" |
|
default 1024 if UBSAN |
|
default 512 if COVERAGE_GCOV |
|
default 512 if NO_OPTIMIZATIONS |
|
default 512 if STACK_CANARIES && RISCV |
|
default 256 |
|
depends on USERSPACE |
|
help |
|
Size of kernel object text area. Used in linker script. |
|
|
|
config KOBJECT_DATA_AREA_RESERVE_EXTRA_PERCENT |
|
int "Reserve extra kobject data area (in percentage)" |
|
default 100 |
|
depends on USERSPACE |
|
help |
|
Multiplication factor used to calculate the size of placeholder to |
|
reserve space for kobject metadata hash table. The hash table is |
|
generated via gperf is highly dependent on the absolute addresses of |
|
kobjects which might change between prebuilts. To reserve enough |
|
space for the hash table during final linking passes to keep |
|
kobjects in same place, the size of reserved space is calculated |
|
from the first prebuilt plus additional space calculated with |
|
this percentage (of the kobject data area in first prebuilt). |
|
|
|
config KOBJECT_RODATA_AREA_EXTRA_BYTES |
|
int "Reserve extra bytes for kobject rodata area" |
|
default 16 |
|
depends on USERSPACE |
|
help |
|
Reserve a few more bytes for the RODATA region for kobject metadata. |
|
This is to account for the uncertainty of tables generated by gperf. |
|
|
|
config GEN_PRIV_STACKS |
|
bool |
|
help |
|
Selected if the architecture requires that privilege elevation stacks |
|
be allocated in a separate memory area. This is typical of arches |
|
whose MPUs require regions to be power-of-two aligned/sized. |
|
|
|
FIXME: This should be removed and replaced with checks against |
|
CONFIG_MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT, but both ARM and ARC |
|
changes will be necessary for this. |
|
|
|
config STACK_GROWS_UP |
|
bool "Stack grows towards higher memory addresses" |
|
help |
|
Select this option if the architecture has upward growing thread |
|
stacks. This is not common. |
|
|
|
config NO_UNUSED_STACK_INSPECTION |
|
bool |
|
help |
|
Selected if the architecture will generate a fault if unused stack |
|
memory is examined, which is the region between the current stack |
|
pointer and the deepest available address in the current stack |
|
region. |
|
|
|
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 DYNAMIC_OBJECTS |
|
bool "Allow kernel objects to be allocated at runtime" |
|
depends on USERSPACE |
|
help |
|
Enabling this option allows for kernel objects to be requested from |
|
the calling thread's resource pool, at a slight cost in performance |
|
due to the supplemental run-time tables required to validate such |
|
objects. |
|
|
|
Objects allocated in this way can be freed with a supervisor-only |
|
API call, or when the number of references to that object drops to |
|
zero. |
|
|
|
config NOCACHE_MEMORY |
|
bool "Support for uncached memory" |
|
depends on ARCH_HAS_NOCACHE_MEMORY_SUPPORT |
|
help |
|
Add a "nocache" read-write memory section that is configured to |
|
not be cached. This memory section can be used to perform DMA |
|
transfers when cache coherence issues are not optimal or can not |
|
be solved using cache maintenance operations. |
|
|
|
config FRAME_POINTER |
|
bool "Compile the kernel with frame pointers" |
|
select OVERRIDE_FRAME_POINTER_DEFAULT |
|
help |
|
Select Y here to gain precise stack traces at the expense of slightly |
|
increased size and decreased speed. |
|
|
|
config ARCH_STACKWALK |
|
bool "Compile the stack walking function" |
|
default y |
|
depends on ARCH_HAS_STACKWALK |
|
help |
|
Select Y here to compile the `arch_stack_walk()` function |
|
|
|
config ARCH_STACKWALK_MAX_FRAMES |
|
int "Max depth for stack walk function" |
|
default 8 |
|
depends on ARCH_STACKWALK |
|
help |
|
Depending on implementation, this can place a hard limit on the depths of the stack |
|
for the stack walk function to examine. |
|
|
|
menu "Interrupt Configuration" |
|
|
|
config TOOLCHAIN_SUPPORTS_ISR_TABLES_LOCAL_DECLARATION |
|
bool |
|
help |
|
Hidden option to signal that toolchain supports local declaration of |
|
interrupt tables. |
|
|
|
config ISR_TABLES_LOCAL_DECLARATION_SUPPORTED |
|
bool |
|
default y |
|
# Userspace is currently not supported |
|
depends on !USERSPACE |
|
# List of currently supported architectures |
|
depends on ARM || ARM64 || RISCV |
|
# List of currently supported toolchains |
|
depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "zephyr" || "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "gnuarmemb" || "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "llvm" || TOOLCHAIN_SUPPORTS_ISR_TABLES_LOCAL_DECLARATION |
|
|
|
config ISR_TABLES_LOCAL_DECLARATION |
|
bool "ISR tables created locally and placed by linker" |
|
depends on ISR_TABLES_LOCAL_DECLARATION_SUPPORTED |
|
help |
|
Enable new scheme of interrupt tables generation. |
|
This is totally different generator that would create tables entries locally |
|
where the IRQ_CONNECT macro is called and then use the linker script to position it |
|
in the right place in memory. |
|
The most important advantage of such approach is that the generated interrupt tables |
|
are LTO compatible. |
|
The drawback is that the support on the architecture port is required. |
|
|
|
config DYNAMIC_INTERRUPTS |
|
bool "Installation of IRQs at runtime" |
|
help |
|
Enable installation of interrupts at runtime, which will move some |
|
interrupt-related data structures to RAM instead of ROM, and |
|
on some architectures increase code size. |
|
|
|
config SHARED_INTERRUPTS |
|
bool "Set this to enable support for shared interrupts" |
|
depends on GEN_SW_ISR_TABLE |
|
select EXPERIMENTAL |
|
help |
|
Set this to enable support for shared interrupts. Use this with |
|
caution as enabling this will increase the image size by a |
|
non-negligible amount. |
|
|
|
config SHARED_IRQ_MAX_NUM_CLIENTS |
|
int "Maximum number of clients allowed per shared interrupt" |
|
default 2 |
|
depends on SHARED_INTERRUPTS |
|
help |
|
This option controls the maximum number of clients allowed |
|
per shared interrupt. Set this according to your needs. |
|
|
|
config GEN_ISR_TABLES |
|
bool "Use generated IRQ tables" |
|
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 "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 ARCH_IRQ_VECTOR_TABLE_ALIGN |
|
int "Alignment size of the interrupt vector table" |
|
default 4 |
|
depends on GEN_IRQ_VECTOR_TABLE |
|
help |
|
This option controls alignment size of generated |
|
_irq_vector_table. Some architecture needs an IRQ vector table |
|
to be aligned to architecture specific size. The default |
|
size is 0 for no alignment. |
|
|
|
config ARCH_DEVICE_STATE_ALIGN |
|
int "Alignment size of device state" |
|
default 4 |
|
help |
|
This option controls alignment size of device state. |
|
|
|
choice IRQ_VECTOR_TABLE_TYPE |
|
prompt "IRQ vector table type" |
|
depends on GEN_IRQ_VECTOR_TABLE |
|
default IRQ_VECTOR_TABLE_JUMP_BY_CODE if (RISCV && !RISCV_HAS_CLIC) |
|
default IRQ_VECTOR_TABLE_JUMP_BY_ADDRESS |
|
|
|
config IRQ_VECTOR_TABLE_JUMP_BY_ADDRESS |
|
bool "Jump by address" |
|
help |
|
The IRQ vector table contains the address of the interrupt handler. |
|
|
|
config IRQ_VECTOR_TABLE_JUMP_BY_CODE |
|
bool "Jump by code" |
|
help |
|
The IRQ vector table contains the opcode of a jump instruction to the |
|
interrupt handler address. |
|
|
|
endchoice |
|
|
|
config GEN_SW_ISR_TABLE |
|
bool "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 ARCH_SW_ISR_TABLE_ALIGN |
|
int "Alignment size of a software ISR table" |
|
default 64 if RISCV_HAS_CLIC |
|
default 4 |
|
depends on GEN_SW_ISR_TABLE |
|
help |
|
This option controls alignment size of generated |
|
_sw_isr_table. Some architecture needs a software ISR table |
|
to be aligned to architecture specific size. The default |
|
size is 4. |
|
|
|
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. |
|
|
|
config IRQ_OFFLOAD |
|
bool "IRQ offload" |
|
depends on TEST |
|
help |
|
Enable irq_offload() API which allows functions to be synchronously |
|
run in interrupt context. Only useful for test cases that need |
|
to validate the correctness of kernel objects in IRQ context. |
|
|
|
config SRAM_VECTOR_TABLE |
|
bool "Place the vector table in SRAM instead of flash" |
|
depends on ARCH_HAS_VECTOR_TABLE_RELOCATION |
|
depends on XIP |
|
depends on !ROMSTART_RELOCATION_ROM |
|
help |
|
When XiP is enabled, this option will result in the vector table being |
|
relocated from Flash to SRAM. |
|
|
|
config IRQ_OFFLOAD_NESTED |
|
bool "irq_offload() supports nested IRQs" |
|
depends on IRQ_OFFLOAD |
|
default y if ARM64 || X86 || RISCV || XTENSA |
|
help |
|
When set by the platform layers, indicates that |
|
irq_offload() may legally be called in interrupt context to |
|
cause a synchronous nested interrupt on the current CPU. |
|
Not all hardware is capable. |
|
|
|
config EXCEPTION_DEBUG |
|
bool "Unhandled exception debugging" |
|
default y |
|
depends on PRINTK || LOG |
|
help |
|
Install handlers for various CPU exception/trap vectors to |
|
make debugging them easier, at a small expense in code size. |
|
This prints out the specific exception vector and any associated |
|
error codes. |
|
|
|
config EXTRA_EXCEPTION_INFO |
|
bool "Collect extra exception info" |
|
depends on ARCH_HAS_EXTRA_EXCEPTION_INFO |
|
help |
|
This option enables the collection of extra information, such as |
|
register state, when a fault occurs. This information can be useful |
|
to collect for post-mortem analysis and debug of issues. |
|
|
|
config SIMPLIFIED_EXCEPTION_CODES |
|
bool "Convert arch specific exception codes to K_ERR_CPU_EXCEPTION" |
|
default y if ZTEST |
|
help |
|
The same piece of faulty code (NULL dereference, etc) can result in |
|
a multitude of potential exception codes at the CPU level, depending |
|
upon whether addresses exist, an MPU is configured, the particular |
|
implementation of the CPU or any number of other reasons. Enabling |
|
this option collapses all the architecture specific exception codes |
|
down to the generic K_ERR_CPU_EXCEPTION, which makes testing code |
|
much more portable. |
|
|
|
config EMPTY_IRQ_SPURIOUS |
|
bool "Create empty spurious interrupt handler" |
|
depends on ARCH_SUPPORTS_EMPTY_IRQ_SPURIOUS |
|
help |
|
This option changes body of spurious interrupt handler. When enabled, |
|
handler contains only an infinite while loop, when disabled, handler |
|
contains the whole Zephyr fault handling procedure. |
|
|
|
endmenu # Interrupt configuration |
|
|
|
config INIT_ARCH_HW_AT_BOOT |
|
bool "Initialize internal architecture state at boot" |
|
depends on ARCH_SUPPORTS_ARCH_HW_INIT |
|
help |
|
This option instructs Zephyr to force the initialization |
|
of the internal architectural state (for example ARCH-level |
|
HW registers and system control blocks) during boot to |
|
the reset values as specified by the corresponding |
|
architecture manual. The option is useful when the Zephyr |
|
firmware image is chain-loaded, for example, by a debugger |
|
or a bootloader, and we need to guarantee that the internal |
|
states of the architecture core blocks are restored to the |
|
reset values (as specified by the architecture). |
|
|
|
Note: the functionality is architecture-specific. For the |
|
implementation details refer to each architecture where |
|
this feature is supported. |
|
|
|
endmenu |
|
|
|
# |
|
# Architecture Capabilities |
|
# |
|
|
|
config ARCH_HAS_SINGLE_THREAD_SUPPORT |
|
bool |
|
|
|
config ARCH_HAS_TIMING_FUNCTIONS |
|
bool |
|
|
|
config ARCH_HAS_TRUSTED_EXECUTION |
|
bool |
|
|
|
config ARCH_HAS_STACK_PROTECTION |
|
bool |
|
|
|
config ARCH_HAS_USERSPACE |
|
bool |
|
|
|
config ARCH_HAS_EXECUTABLE_PAGE_BIT |
|
bool |
|
|
|
config ARCH_HAS_NOCACHE_MEMORY_SUPPORT |
|
bool |
|
|
|
config ARCH_HAS_RAMFUNC_SUPPORT |
|
bool |
|
|
|
config ARCH_HAS_VECTOR_TABLE_RELOCATION |
|
bool |
|
|
|
config ARCH_HAS_NESTED_EXCEPTION_DETECTION |
|
bool |
|
|
|
config ARCH_SUPPORTS_COREDUMP |
|
bool |
|
|
|
config ARCH_SUPPORTS_COREDUMP_THREADS |
|
bool |
|
|
|
config ARCH_SUPPORTS_COREDUMP_PRIV_STACKS |
|
bool |
|
|
|
config ARCH_SUPPORTS_COREDUMP_STACK_PTR |
|
bool |
|
|
|
config ARCH_SUPPORTS_ARCH_HW_INIT |
|
bool |
|
|
|
config ARCH_SUPPORTS_ROM_START |
|
bool |
|
|
|
config ARCH_SUPPORTS_EMPTY_IRQ_SPURIOUS |
|
bool |
|
|
|
config ARCH_SUPPORTS_EVICTION_TRACKING |
|
bool |
|
help |
|
Architecture code supports page tracking for eviction algorithms |
|
when demand paging is enabled. |
|
|
|
config ARCH_HAS_EXTRA_EXCEPTION_INFO |
|
bool |
|
|
|
config ARCH_HAS_GDBSTUB |
|
bool |
|
|
|
config ARCH_HAS_COHERENCE |
|
bool |
|
help |
|
When selected, the architecture supports the |
|
arch_mem_coherent() API and can link into incoherent/cached |
|
memory using the ".cached" linker section. |
|
|
|
config ARCH_HAS_THREAD_LOCAL_STORAGE |
|
bool |
|
|
|
config ARCH_HAS_SUSPEND_TO_RAM |
|
bool |
|
help |
|
When selected, the architecture supports suspend-to-RAM (S2RAM). |
|
|
|
config ARCH_HAS_STACK_CANARIES_TLS |
|
bool |
|
|
|
config ARCH_SUPPORTS_MEM_MAPPED_STACKS |
|
bool |
|
help |
|
Select when the architecture supports memory mapped stacks. |
|
|
|
config ARCH_HAS_THREAD_PRIV_STACK_SPACE_GET |
|
bool |
|
help |
|
Select when the architecture implements arch_thread_priv_stack_space_get(). |
|
|
|
# |
|
# Other architecture related options |
|
# |
|
|
|
config ARCH_HAS_THREAD_ABORT |
|
bool |
|
|
|
config ARCH_HAS_CODE_DATA_RELOCATION |
|
bool |
|
help |
|
When selected, the architecture/SoC implements support for |
|
CODE_DATA_RELOCATION in its linker scripts. |
|
|
|
# |
|
# Hidden CPU family configs |
|
# |
|
|
|
config CPU_HAS_TEE |
|
bool |
|
help |
|
This option is enabled when the CPU has support for Trusted |
|
Execution Environment (e.g. when it has a security attribution |
|
unit). |
|
|
|
config CPU_HAS_DCLS |
|
bool |
|
help |
|
This option is enabled when the processor hardware has support for |
|
Dual-redundant Core Lock-step (DCLS) topology. |
|
|
|
config CPU_HAS_FPU |
|
bool |
|
help |
|
This option is enabled when the CPU has hardware floating point |
|
unit. |
|
|
|
config CPU_HAS_DSP |
|
bool |
|
help |
|
This option is enabled when the CPU has hardware DSP unit. |
|
|
|
config CPU_HAS_FPU_DOUBLE_PRECISION |
|
bool |
|
select CPU_HAS_FPU |
|
help |
|
When enabled, this indicates that the CPU has a double floating point |
|
precision unit. |
|
|
|
config CPU_HAS_MPU |
|
bool |
|
help |
|
This option is enabled when the CPU has a Memory Protection Unit (MPU). |
|
|
|
config CPU_HAS_MMU |
|
bool |
|
help |
|
This hidden option is selected when the CPU has a Memory Management Unit |
|
(MMU). |
|
|
|
config ARCH_HAS_DEMAND_PAGING |
|
bool |
|
help |
|
This hidden configuration should be selected by the architecture if |
|
demand paging is supported. |
|
|
|
config ARCH_HAS_DEMAND_MAPPING |
|
bool |
|
help |
|
This hidden configuration should be selected by the architecture if |
|
demand paging is supported and arch_mem_map() supports |
|
K_MEM_MAP_UNPAGED. |
|
|
|
config ARCH_HAS_RESERVED_PAGE_FRAMES |
|
bool |
|
help |
|
This hidden configuration should be selected by the architecture if |
|
certain RAM page frames need to be marked as reserved and never used for |
|
memory mappings. The architecture will need to implement |
|
arch_reserved_pages_update(). |
|
|
|
config ARCH_HAS_DIRECTED_IPIS |
|
bool |
|
help |
|
This hidden configuration should be selected by the architecture if |
|
it has an implementation for arch_sched_directed_ipi() which allows |
|
for IPIs to be directed to specific CPUs. |
|
|
|
config CPU_HAS_DCACHE |
|
bool |
|
help |
|
This hidden configuration should be selected when the CPU has a d-cache. |
|
|
|
config CPU_CACHE_INCOHERENT |
|
bool |
|
help |
|
This hidden configuration should be selected when the CPU has |
|
incoherent cache. This applies to intra-CPU multiprocessing |
|
incoherence and makes only sense when MP_MAX_NUM_CPUS > 1. |
|
|
|
config CPU_HAS_ICACHE |
|
bool |
|
help |
|
This hidden configuration should be selected when the CPU has an i-cache. |
|
|
|
config ARCH_MAPS_ALL_RAM |
|
bool |
|
help |
|
This hidden option is selected by the architecture to inform the kernel |
|
that all RAM is mapped at boot, and not just the bounds of the Zephyr image. |
|
If RAM starts at 0x0, the first page must remain un-mapped to catch NULL |
|
pointer dereferences. With this enabled, the kernel will not assume that |
|
virtual memory addresses past the kernel image are available for mappings, |
|
but instead takes into account an entire RAM mapping instead. |
|
|
|
This is typically set by architectures which need direct access to all memory. |
|
It is the architecture's responsibility to mark reserved memory regions |
|
as such in arch_reserved_pages_update(). |
|
|
|
Although the kernel will not disturb this RAM mapping by re-mapping the associated |
|
virtual addresses elsewhere, this is limited to only management of the |
|
virtual address space. The kernel's page frame ontology will not consider |
|
this mapping at all; non-kernel pages will be considered free (unless marked |
|
as reserved) and K_MEM_PAGE_FRAME_MAPPED will not be set. |
|
|
|
config DCLS |
|
bool "Processor is configured in DCLS mode" |
|
depends on CPU_HAS_DCLS |
|
default y |
|
help |
|
This option is enabled when the processor hardware is configured in |
|
Dual-redundant Core Lock-step (DCLS) topology. For the processor that |
|
supports DCLS, but is configured in split-lock mode (by default or |
|
changed at flash time), this option should be disabled. |
|
|
|
menuconfig MPU |
|
bool "MPU features" |
|
depends on CPU_HAS_MPU |
|
help |
|
This option, when enabled, indicates to the core kernel that an MPU |
|
is enabled. |
|
|
|
if MPU |
|
module = MPU |
|
module-str = mpu |
|
source "subsys/logging/Kconfig.template.log_config" |
|
|
|
config MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT |
|
bool |
|
help |
|
This option is enabled when the MPU requires a power of two alignment |
|
and size for MPU regions. |
|
|
|
config MPU_REQUIRES_NON_OVERLAPPING_REGIONS |
|
bool |
|
help |
|
This option is enabled when the MPU requires the active (i.e. enabled) |
|
MPU regions to be non-overlapping with each other. |
|
|
|
config MPU_GAP_FILLING |
|
bool "Force MPU to be filling in background memory regions" |
|
depends on MPU_REQUIRES_NON_OVERLAPPING_REGIONS |
|
default y if !USERSPACE |
|
help |
|
This Kconfig option instructs the MPU driver to enforce |
|
a full kernel SRAM partitioning, when it programs the |
|
dynamic MPU regions (user thread stack, PRIV stack guard |
|
and application memory domains) during context-switch. We |
|
allow this to be a configurable option, in order to be able |
|
to switch the option off and have an increased number of MPU |
|
regions available for application memory domain programming. |
|
|
|
Notes: |
|
An increased number of MPU regions should only be required, |
|
when building with USERSPACE support. As a result, when we |
|
build without USERSPACE support, gap filling should always |
|
be required. |
|
|
|
When the option is switched off, access to memory areas not |
|
covered by explicit MPU regions is restricted to privileged |
|
code on an ARCH-specific basis. Refer to ARCH-specific |
|
documentation for more information on how this option is |
|
used. |
|
|
|
endif # MPU |
|
|
|
config SRAM_REGION_PERMISSIONS |
|
bool "Assign appropriate permissions to kernel areas in SRAM" |
|
depends on MMU || MPU |
|
default y |
|
help |
|
This option indicates that memory protection hardware |
|
is present, enabled, and regions have been configured at boot for memory |
|
ranges within the kernel image. |
|
|
|
If this option is turned on, certain areas of the kernel image will |
|
have the following access policies applied for all threads, including |
|
supervisor threads: |
|
|
|
1) All program text will be have read-only, execute memory permission |
|
2) All read-only data will have read-only permission, and execution |
|
disabled if the hardware supports it. |
|
3) All other RAM addresses will have read-write permission, and |
|
execution disabled if the hardware supports it. |
|
|
|
Options such as USERSPACE or HW_STACK_PROTECTION may additionally |
|
impose additional policies on the memory map, which may be global |
|
or local to the current running thread. |
|
|
|
This option may consume additional memory to satisfy memory protection |
|
hardware alignment constraints. |
|
|
|
If this option is disabled, the entire kernel will have default memory |
|
access permissions set, typically read/write/execute. It may be desirable |
|
to turn this off on MMU systems which are using the MMU for demand |
|
paging, do not need memory protection, and would rather not use up |
|
RAM for the alignment between regions. |
|
|
|
config CODE_DATA_RELOCATION |
|
bool "Support code/data section relocation" |
|
depends on ARCH_HAS_CODE_DATA_RELOCATION |
|
help |
|
Enable support for relocating .text, data and .bss sections from specified |
|
files and placing them in a chosen memory region. Files to relocate and |
|
the target regions should be specified in CMakeLists.txt using |
|
zephyr_code_relocate(). |
|
|
|
menu "DSP Options" |
|
|
|
config DSP_SHARING |
|
bool "DSP register sharing" |
|
depends on CPU_HAS_DSP |
|
help |
|
This option enables preservation of the hardware DSP registers |
|
across context switches to allow multiple threads to perform concurrent |
|
DSP operations. |
|
endmenu |
|
|
|
menu "Floating Point Options" |
|
|
|
config FPU |
|
bool "Floating point unit (FPU)" |
|
depends on CPU_HAS_FPU |
|
help |
|
This option enables the hardware Floating Point Unit (FPU), in order to |
|
support using the floating point registers and instructions. |
|
|
|
When this option is enabled, by default, threads may use the floating |
|
point registers only in an exclusive manner, and this usually means that |
|
only one thread may perform floating point operations. |
|
|
|
If it is necessary for multiple threads to perform concurrent floating |
|
point operations, the "FPU register sharing" option must be enabled to |
|
preserve the floating point registers across context switches. |
|
|
|
Note that this option cannot be selected for the platforms that do not |
|
include a hardware floating point unit; the floating point support for |
|
those platforms is dependent on the availability of the toolchain- |
|
provided software floating point library. |
|
|
|
config FPU_SHARING |
|
bool "FPU register sharing" |
|
depends on FPU && MULTITHREADING |
|
help |
|
This option enables preservation of the hardware floating point registers |
|
across context switches to allow multiple threads to perform concurrent |
|
floating point operations. |
|
|
|
Note that some compiler configurations may activate a floating point |
|
context by generating FP instructions for any thread, and that |
|
context must be preserved when switching such threads in and out. |
|
The developers can still disable the FP sharing mode in their |
|
application projects, and switch to Unshared FP registers mode, |
|
if it is guaranteed that the image code does not generate FP |
|
instructions outside the single thread context that is allowed |
|
to do so. |
|
|
|
endmenu |
|
|
|
menu "Cache Options" |
|
|
|
config DCACHE |
|
bool "Data cache (d-cache) support" |
|
depends on CPU_HAS_DCACHE |
|
default y |
|
help |
|
This option enables the support for the data cache (d-cache). |
|
|
|
config ICACHE |
|
bool "Instruction cache (i-cache) support" |
|
depends on CPU_HAS_ICACHE |
|
default y |
|
help |
|
This option enables the support for the instruction cache (i-cache). |
|
|
|
config CACHE_DOUBLEMAP |
|
bool "Cache double-mapping support" |
|
depends on CPU_CACHE_INCOHERENT |
|
default y |
|
help |
|
Double-mapping behavior where a pointer can be cheaply converted to |
|
point to the same cached/uncached memory at different locations. |
|
|
|
This applies to intra-CPU multiprocessing incoherence and makes only |
|
sense when MP_MAX_NUM_CPUS > 1. |
|
|
|
config CACHE_MANAGEMENT |
|
bool "Cache management features" |
|
depends on DCACHE || ICACHE |
|
help |
|
This option enables the cache management functions backed by arch or |
|
driver code. |
|
|
|
config DCACHE_LINE_SIZE_DETECT |
|
bool "Detect d-cache line size at runtime" |
|
depends on CACHE_MANAGEMENT && DCACHE |
|
help |
|
This option enables querying some architecture-specific hardware for |
|
finding the d-cache line size at the expense of taking more memory and |
|
code and a slightly increased boot time. |
|
|
|
If the CPU's d-cache line size is known in advance, disable this option and |
|
manually enter the value for DCACHE_LINE_SIZE or set it in the DT |
|
using the 'd-cache-line-size' property. |
|
|
|
config DCACHE_LINE_SIZE |
|
int "d-cache line size" |
|
depends on CACHE_MANAGEMENT && DCACHE && !DCACHE_LINE_SIZE_DETECT |
|
default 0 |
|
help |
|
Size in bytes of a CPU d-cache line. If this is set to 0 the value is |
|
obtained from the 'd-cache-line-size' DT property instead if present. |
|
|
|
|
|
Detect automatically at runtime by selecting DCACHE_LINE_SIZE_DETECT. |
|
|
|
config ICACHE_LINE_SIZE_DETECT |
|
bool "Detect i-cache line size at runtime" |
|
depends on CACHE_MANAGEMENT && ICACHE |
|
help |
|
This option enables querying some architecture-specific hardware for |
|
finding the i-cache line size at the expense of taking more memory and |
|
code and a slightly increased boot time. |
|
|
|
If the CPU's i-cache line size is known in advance, disable this option and |
|
manually enter the value for ICACHE_LINE_SIZE or set it in the DT |
|
using the 'i-cache-line-size' property. |
|
|
|
config ICACHE_LINE_SIZE |
|
int "i-cache line size" |
|
depends on CACHE_MANAGEMENT && ICACHE && !ICACHE_LINE_SIZE_DETECT |
|
default 0 |
|
help |
|
Size in bytes of a CPU i-cache line. If this is set to 0 the value is |
|
obtained from the 'i-cache-line-size' DT property instead if present. |
|
|
|
Detect automatically at runtime by selecting ICACHE_LINE_SIZE_DETECT. |
|
|
|
choice CACHE_TYPE |
|
prompt "Cache type" |
|
depends on CACHE_MANAGEMENT |
|
default ARCH_CACHE |
|
|
|
config ARCH_CACHE |
|
bool "Integrated cache controller" |
|
help |
|
Integrated on-core cache controller |
|
|
|
config EXTERNAL_CACHE |
|
bool "External cache controller" |
|
help |
|
External cache controller |
|
|
|
endchoice |
|
|
|
endmenu |
|
|
|
config ARCH |
|
string |
|
help |
|
System architecture string. |
|
|
|
config TOOLCHAIN_HAS_BUILTIN_FFS |
|
bool |
|
default y if !(64BIT && RISCV) |
|
help |
|
Hidden option to signal that toolchain has __builtin_ffs*(). |
|
|
|
config ARCH_HAS_CUSTOM_CPU_IDLE |
|
bool |
|
help |
|
This options allows applications to override the default arch idle implementation with |
|
a custom one. |
|
|
|
config ARCH_HAS_CUSTOM_CPU_ATOMIC_IDLE |
|
bool |
|
help |
|
This options allows applications to override the default arch idle implementation with |
|
a custom one. |
|
|
|
config ARCH_HAS_CUSTOM_SWAP_TO_MAIN |
|
bool |
|
help |
|
It's possible that an architecture port cannot use z_swap_unlocked() |
|
to swap to the main thread (bg_thread_main), but instead must do |
|
something custom. It must enable this option in that case. |
|
|
|
config ARCH_HAS_CUSTOM_BUSY_WAIT |
|
bool |
|
help |
|
It's possible that an architecture port cannot or does not want to use |
|
the provided k_busy_wait(), but instead must do something custom. It must |
|
enable this option in that case. |
|
|
|
config ARCH_HAS_CUSTOM_CURRENT_IMPL |
|
bool |
|
help |
|
Select when architecture implements arch_current_thread() & |
|
arch_current_thread_set().
|
|
|