| # 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 "$(ARCH_DIR)/Kconfig.$(HWM_SCHEME)" |
| |
| # 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 |
| # 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 IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD |
| select BARRIER_OPERATIONS_ARCH |
| select ARCH_HAS_DIRECTED_IPIS |
| select ARCH_HAS_DEMAND_PAGING |
| select ARCH_HAS_DEMAND_MAPPING |
| 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 IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD |
| 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 NIOS2 |
| bool |
| select ARCH_IS_SET |
| select ATOMIC_OPERATIONS_C |
| imply XIP |
| select ARCH_HAS_TIMING_FUNCTIONS |
| help |
| Nios II Gen 2 architecture |
| |
| config RISCV |
| bool |
| select ARCH_IS_SET |
| 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 IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD |
| 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 IRQ_OFFLOAD_NESTED if IRQ_OFFLOAD |
| 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 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 || NIOS2 || X86 || RISCV |
| |
| # 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 || NIOS2 || X86 || RISCV |
| |
| 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 ARCH_HAS_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 512 if COVERAGE_GCOV |
| default 512 if NO_OPTIMIZATIONS |
| default 512 if STACK_CANARIES && RISCV |
| default 256 |
| depends on ARCH_HAS_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 ARCH_HAS_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 ARCH_HAS_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 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 |
| # List of currently supported toolchains |
| depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "zephyr" || "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "gnuarmemb" |
| |
| config ISR_TABLES_LOCAL_DECLARATION |
| bool "ISR tables created locally and placed by linker [EXPERIMENTAL]" |
| depends on ISR_TABLES_LOCAL_DECLARATION_SUPPORTED |
| select EXPERIMENTAL |
| 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. |
| |
| 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 IRQ_OFFLOAD_NESTED |
| bool "irq_offload() supports nested IRQs" |
| depends on IRQ_OFFLOAD |
| help |
| When set by the arch layer, 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_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_ARCH_HW_INIT |
| bool |
| |
| config ARCH_SUPPORTS_ROM_START |
| bool |
| |
| config ARCH_SUPPORTS_EMPTY_IRQ_SPURIOUS |
| bool |
| |
| 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 _Swap() to swap to |
| the _main() thread, 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. |