123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995 |
- # 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)
- # Note: $ARCH might be a glob pattern
- source "$(ARCH_DIR)/$(ARCH)/Kconfig"
- # 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
- select HAS_DTS
- imply XIP
- select ARCH_HAS_THREAD_LOCAL_STORAGE
- help
- ARC architecture
- config ARM
- bool
- select ARCH_IS_SET
- select ARCH_SUPPORTS_COREDUMP if CPU_CORTEX_M
- select HAS_DTS
- # 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_CORTEX_R || CPU_CORTEX_M
- help
- ARM architecture
- config ARM64
- bool
- select ARCH_IS_SET
- select 64BIT
- select HAS_DTS
- select HAS_ARM_SMCCC
- select ARCH_HAS_THREAD_LOCAL_STORAGE
- select USE_SWITCH
- select USE_SWITCH_SUPPORTED
- help
- ARM64 (AArch64) architecture
- config SPARC
- bool
- select ARCH_IS_SET
- select HAS_DTS
- 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 HAS_DTS
- select ARCH_SUPPORTS_COREDUMP
- 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
- select NEED_LIBC_MEM_PARTITION if USERSPACE && TIMING_FUNCTIONS \
- && !BOARD_HAS_TIMING_FUNCTIONS \
- && !SOC_HAS_TIMING_FUNCTIONS
- help
- x86 architecture
- config NIOS2
- bool
- select ARCH_IS_SET
- select ATOMIC_OPERATIONS_C
- select HAS_DTS
- imply XIP
- select ARCH_HAS_TIMING_FUNCTIONS
- help
- Nios II Gen 2 architecture
- config RISCV
- bool
- select ARCH_IS_SET
- select HAS_DTS
- select ARCH_HAS_THREAD_LOCAL_STORAGE
- imply XIP
- help
- RISCV architecture
- config XTENSA
- bool
- select ARCH_IS_SET
- select HAS_DTS
- select USE_SWITCH
- select USE_SWITCH_SUPPORTED
- imply ATOMIC_OPERATIONS_ARCH
- help
- Xtensa architecture
- config ARCH_POSIX
- bool
- select ARCH_IS_SET
- select HAS_DTS
- select ATOMIC_OPERATIONS_BUILTIN
- select ARCH_HAS_CUSTOM_SWAP_TO_MAIN
- select ARCH_HAS_CUSTOM_BUSY_WAIT
- select ARCH_HAS_THREAD_ABORT
- select NATIVE_APPLICATION
- select HAS_COVERAGE_SUPPORT
- 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"
- module = ARCH
- module-str = arch
- source "subsys/logging/Kconfig.template.log_config"
- module = MPU
- module-str = mpu
- 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
- and command line option for gen_isr_tables.py.
- 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 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
- # 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
- 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
- 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
- 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
- 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 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.
- menu "Interrupt Configuration"
- config DYNAMIC_INTERRUPTS
- bool "Enable 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 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 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 0
- 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 0 for no alignment.
- 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 "Enable 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 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.
- 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_ARCH_HW_INIT
- 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
- #
- # Other architecture related options
- #
- config ARCH_HAS_THREAD_ABORT
- bool
- #
- # 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 is configured in
- 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_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_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_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 Z_PAGE_FRAME_MAPPED will not be set.
- menuconfig MMU
- bool "Enable MMU features"
- depends on CPU_HAS_MMU
- help
- This option is enabled when the CPU's memory management unit is active
- and the arch_mem_map() API is available.
- if MMU
- config MMU_PAGE_SIZE
- hex "Size of smallest granularity MMU page"
- default 0x1000
- help
- Size of memory pages. Varies per MMU but 4K is common. For MMUs that
- support multiple page sizes, put the smallest one here.
- config KERNEL_VM_BASE
- hex "Virtual address space base address"
- default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_SRAM))
- help
- Define the base of the kernel's address space.
- By default, this is the same as the DT_CHOSEN_Z_SRAM physical base SRAM
- address from DTS, in which case RAM will be identity-mapped. Some
- architectures may require RAM to be mapped in this way; they may have
- just one RAM region and doing this makes linking much simpler, as
- at least when the kernel boots all virtual RAM addresses are the same
- as their physical address (demand paging at runtime may later modify
- this for non-pinned page frames).
- Otherwise, if RAM isn't identity-mapped:
- 1. It is the architecture's responsibility to transition the
- instruction pointer to virtual addresses at early boot before
- entering the kernel at z_cstart().
- 2. The underlying architecture may impose constraints on the bounds of
- the kernel's address space, such as not overlapping physical RAM
- regions if RAM is not identity-mapped, or the virtual and physical
- base addresses being aligned to some common value (which allows
- double-linking of paging structures to make the instruction pointer
- transition simpler).
- Zephyr does not implement a split address space and if multiple
- page tables are in use, they all have the same virtual-to-physical
- mappings (with potentially different permissions).
- config KERNEL_VM_OFFSET
- hex "Kernel offset within address space"
- default 0
- help
- Offset that the kernel image begins within its address space,
- if this is not the same offset from the beginning of RAM.
- Some care may need to be taken in selecting this value. In certain
- build-time cases, or when a physical address cannot be looked up
- in page tables, the equation:
- virt = phys + ((KERNEL_VM_BASE + KERNEL_VM_OFFSET) -
- (SRAM_BASE_ADDRESS + SRAM_OFFSET))
- Will be used to convert between physical and virtual addresses for
- memory that is mapped at boot.
- This uncommon and is only necessary if the beginning of VM and
- physical memory have dissimilar alignment.
- config KERNEL_VM_SIZE
- hex "Size of kernel address space in bytes"
- default 0x800000
- help
- Size of the kernel's address space. Constraining this helps control
- how much total memory can be used for page tables.
- The difference between KERNEL_VM_BASE and KERNEL_VM_SIZE indicates the
- size of the virtual region for runtime memory mappings. This is needed
- for mapping driver MMIO regions, as well as special RAM mapping use-cases
- such as VSDO pages, memory mapped thread stacks, and anonymous memory
- mappings. The kernel itself will be mapped in here as well at boot.
- Systems with very large amounts of memory (such as 512M or more)
- will want to use a 64-bit build of Zephyr, there are no plans to
- implement a notion of "high" memory in Zephyr to work around physical
- RAM size larger than the defined bounds of the virtual address space.
- menuconfig DEMAND_PAGING
- bool "Enable demand paging [EXPERIMENTAL]"
- depends on ARCH_HAS_DEMAND_PAGING
- help
- Enable demand paging. Requires architecture support in how the kernel
- is linked and the implementation of an eviction algorithm and a
- backing store for evicted pages.
- if DEMAND_PAGING
- config DEMAND_PAGING_ALLOW_IRQ
- bool "Allow interrupts during page-ins/outs"
- help
- Allow interrupts to be serviced while pages are being evicted or
- retrieved from the backing store. This is much better for system
- latency, but any code running in interrupt context that page faults
- will cause a kernel panic. Such code must work with exclusively pinned
- code and data pages.
- The scheduler is still disabled during this operation.
- If this option is disabled, the page fault servicing logic
- runs with interrupts disabled for the entire operation. However,
- ISRs may also page fault.
- config DEMAND_PAGING_PAGE_FRAMES_RESERVE
- int "Number of page frames reserved for paging"
- default 32 if !LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT
- default 0
- help
- This sets the number of page frames that will be reserved for
- paging that do not count towards free memory. This is to
- ensure that there are some page frames available for paging
- code and data. Otherwise, it would be possible to exhaust
- all page frames via anonymous memory mappings.
- config DEMAND_PAGING_STATS
- bool "Gather Demand Paging Statistics"
- help
- This enables gathering various statistics related to demand paging,
- e.g. number of pagefaults. This is useful for tuning eviction
- algorithms and optimizing backing store.
- Should say N in production system as this is not without cost.
- config DEMAND_PAGING_STATS_USING_TIMING_FUNCTIONS
- bool "Use Timing Functions to Gather Demand Paging Statistics"
- select TIMING_FUNCTIONS_NEED_AT_BOOT
- help
- Use timing functions to gather various demand paging statistics.
- config DEMAND_PAGING_THREAD_STATS
- bool "Gather per Thread Demand Paging Statistics"
- depends on DEMAND_PAGING_STATS
- help
- This enables gathering per thread statistics related to demand
- paging.
- Should say N in production system as this is not without cost.
- config DEMAND_PAGING_TIMING_HISTOGRAM
- bool "Gather Demand Paging Execution Timing Histogram"
- depends on DEMAND_PAGING_STATS
- help
- This gathers the histogram of execution time on page eviction
- selection, and backing store page in and page out.
- Should say N in production system as this is not without cost.
- config DEMAND_PAGING_TIMING_HISTOGRAM_NUM_BINS
- int "Number of bins (buckets) in Demand Paging Timing Histogrm"
- depends on DEMAND_PAGING_TIMING_HISTOGRAM
- default 10
- help
- Defines the number of bins (buckets) in the histogram used for
- gathering execution timing information for demand paging.
- This requires k_mem_paging_eviction_histogram_bounds[] and
- k_mem_paging_backing_store_histogram_bounds[] to define
- the upper bounds for each bin. See kernel/statistics.c for
- information.
- endif # DEMAND_PAGING
- endif # MMU
- menuconfig MPU
- bool "Enable MPU features"
- depends on CPU_HAS_MPU
- help
- This option, when enabled, indicates to the core kernel that an MPU
- is enabled.
- if MPU
- 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.
- menu "Floating Point Options"
- config FPU
- bool "Enable 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 CACHE_MANAGEMENT
- bool "Enable cache management features"
- help
- This links in the cache management functions (for d-cache and i-cache
- where possible).
- config DCACHE_LINE_SIZE_DETECT
- bool "Detect d-cache line size at runtime"
- depends on CACHE_MANAGEMENT
- 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" if !DCACHE_LINE_SIZE_DETECT
- depends on CACHE_MANAGEMENT
- 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
- 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" if !ICACHE_LINE_SIZE_DETECT
- depends on CACHE_MANAGEMENT
- 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 HAS_ARCH_CACHE
- config HAS_ARCH_CACHE
- bool "Integrated cache controller"
- help
- "Integrade on-core cache controller"
- config HAS_EXTERNAL_CACHE
- bool "External cache controller"
- help
- "External cache controller or cache management system"
- endchoice
- endmenu
- config ARCH
- string
- help
- System architecture string.
- config SOC
- string
- help
- SoC name which can be found under soc/<arch>/<soc name>.
- This option holds the directory name used by the build system to locate
- the correct linker and header files for the SoC.
- config SOC_SERIES
- string
- help
- SoC series name which can be found under soc/<arch>/<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 soc/<arch>/<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
- soc/<arch>/<family>/<series>
- config TOOLCHAIN_HAS_BUILTIN_FFS
- bool
- default y if !(64BIT && RISCV)
- help
- Hidden option to signal that toolchain has __builtin_ffs*().
|