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.
498 lines
14 KiB
498 lines
14 KiB
# x86 general configuration options |
|
|
|
# Copyright (c) 2014-2015 Wind River Systems, Inc. |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
menu "X86 Architecture Options" |
|
depends on X86 |
|
|
|
config ARCH |
|
default "x86" |
|
|
|
# |
|
# CPU Families - the SoC configuration should select the right one. |
|
# |
|
|
|
config CPU_ATOM |
|
bool |
|
select CPU_HAS_FPU |
|
select ARCH_HAS_STACK_PROTECTION if X86_MMU |
|
select ARCH_HAS_USERSPACE if X86_MMU |
|
select X86_CPU_HAS_MMX |
|
select X86_CPU_HAS_SSE |
|
select X86_CPU_HAS_SSE2 |
|
select X86_CPU_HAS_SSE3 |
|
select CPU_HAS_DCACHE |
|
help |
|
This option signifies the use of a CPU from the Atom family. |
|
|
|
config CPU_APOLLO_LAKE |
|
bool |
|
select CPU_HAS_FPU |
|
select ARCH_HAS_STACK_PROTECTION if X86_MMU |
|
select ARCH_HAS_USERSPACE if X86_MMU |
|
select X86_MMU |
|
select X86_CPU_HAS_MMX |
|
select X86_CPU_HAS_SSE |
|
select X86_CPU_HAS_SSE2 |
|
select X86_CPU_HAS_SSE3 |
|
select X86_CPU_HAS_SSSE3 |
|
select X86_CPU_HAS_SSE41 |
|
select X86_CPU_HAS_SSE42 |
|
select CPU_HAS_DCACHE |
|
help |
|
This option signifies the use of a CPU from the Apollo Lake family. |
|
|
|
config CPU_LAKEMONT_VALUE |
|
bool |
|
select CPU_HAS_FPU |
|
select ARCH_HAS_STACK_PROTECTION if X86_MMU |
|
select ARCH_HAS_USERSPACE if X86_MMU |
|
select CPU_HAS_DCACHE |
|
help |
|
This option signifies the use of a CPU from the Lakemont Value family. |
|
|
|
config CPU_LAKEMONT_PERF |
|
bool |
|
select CPU_HAS_FPU |
|
select ARCH_HAS_STACK_PROTECTION if X86_MMU |
|
select ARCH_HAS_USERSPACE if X86_MMU |
|
select X86_CPU_HAS_MMX |
|
select X86_CPU_HAS_SSE |
|
select X86_CPU_HAS_SSE2 |
|
select X86_CPU_HAS_SSE3 |
|
select X86_CPU_HAS_SSSE3 |
|
select CPU_HAS_DCACHE |
|
help |
|
This option signifies the use of a CPU from the Lakemont Performance family. |
|
|
|
# |
|
# Configuration common to both IA32 and Intel64 sub-architectures. |
|
# |
|
|
|
config X86_64 |
|
bool "Run in 64-bit mode" |
|
select 64BIT |
|
select USE_SWITCH |
|
select USE_SWITCH_SUPPORTED |
|
select SCHED_IPI_SUPPORTED |
|
select X86_MMU |
|
select X86_CPU_HAS_MMX |
|
select X86_CPU_HAS_SSE |
|
select X86_CPU_HAS_SSE2 |
|
select X86_MMX |
|
select X86_SSE |
|
select X86_SSE2 |
|
select ARCH_HAS_DIRECTED_IPIS if !X2APIC |
|
|
|
menu "x86 Features" |
|
|
|
config X86_CPU_HAS_MMX |
|
bool |
|
|
|
config X86_CPU_HAS_SSE |
|
bool |
|
|
|
config X86_CPU_HAS_SSE2 |
|
bool |
|
|
|
config X86_CPU_HAS_SSE3 |
|
bool |
|
|
|
config X86_CPU_HAS_SSSE3 |
|
bool |
|
|
|
config X86_CPU_HAS_SSE41 |
|
bool |
|
|
|
config X86_CPU_HAS_SSE42 |
|
bool |
|
|
|
config X86_CPU_HAS_SSE4A |
|
bool |
|
|
|
if FPU || X86_64 |
|
|
|
config X86_MMX |
|
bool "MMX Support" |
|
depends on X86_CPU_HAS_MMX |
|
help |
|
This option enables MMX support, and the use of MMX registers |
|
by threads. |
|
|
|
config X86_SSE |
|
bool "SSE Support" |
|
depends on X86_CPU_HAS_SSE |
|
help |
|
This option enables SSE support, and the use of SSE registers |
|
by threads. |
|
|
|
config X86_SSE2 |
|
bool "SSE2 Support" |
|
depends on X86_CPU_HAS_SSE2 |
|
select X86_SSE |
|
help |
|
This option enables SSE2 support. |
|
|
|
config X86_SSE3 |
|
bool "SSE3 Support" |
|
depends on X86_CPU_HAS_SSE3 |
|
select X86_SSE |
|
help |
|
This option enables SSE3 support. |
|
|
|
config X86_SSSE3 |
|
bool "SSSE3 (Supplemental SSE3) Support" |
|
depends on X86_CPU_HAS_SSSE3 |
|
select X86_SSE |
|
help |
|
This option enables Supplemental SSE3 support. |
|
|
|
config X86_SSE41 |
|
bool "SSE4.1 Support" |
|
depends on X86_CPU_HAS_SSE41 |
|
select X86_SSE |
|
help |
|
This option enables SSE4.1 support. |
|
|
|
config X86_SSE42 |
|
bool "SSE4.2 Support" |
|
depends on X86_CPU_HAS_SSE42 |
|
select X86_SSE |
|
help |
|
This option enables SSE4.2 support. |
|
|
|
config X86_SSE4A |
|
bool "SSE4A Support" |
|
depends on X86_CPU_HAS_SSE4A |
|
select X86_SSE |
|
help |
|
This option enables SSE4A support. |
|
|
|
config X86_SSE_FP_MATH |
|
bool "Compiler-generated SSEx instructions for floating point math" |
|
depends on X86_SSE |
|
help |
|
This option allows the compiler to generate SSEx instructions for |
|
performing floating point math. This can greatly improve performance |
|
when exactly the same operations are to be performed on multiple |
|
data objects; however, it can also significantly reduce performance |
|
when preemptive task switches occur because of the larger register |
|
set that must be saved and restored. |
|
|
|
Disabling this option means that the compiler utilizes only the |
|
x87 instruction set for floating point operations. |
|
|
|
endif # FPU || X86_64 |
|
|
|
endmenu |
|
|
|
config X86_DEBUG_INFO |
|
bool "System debugging information" |
|
help |
|
This option enables the addition of various information that can be |
|
used by debuggers in debugging the system, or enable additional |
|
debugging information to be reported at runtime. |
|
|
|
config SRAM_OFFSET |
|
default 0x100000 if X86_PC_COMPATIBLE |
|
help |
|
A lot of x86 that resemble PCs have many reserved physical memory |
|
regions within the first megabyte. Specify an offset from the |
|
beginning of RAM to load the kernel in physical memory, avoiding these |
|
regions. |
|
|
|
Note that this does not include the "locore" which contains real mode |
|
bootstrap code within the first 64K of physical memory. |
|
|
|
This value normally need to be page-aligned. |
|
|
|
config KERNEL_VM_OFFSET |
|
default 0x100000 if MMU |
|
|
|
config MAX_IRQ_LINES |
|
int "Number of IRQ lines" |
|
default 128 |
|
range 0 224 |
|
help |
|
This option specifies the number of IRQ lines in the system. It |
|
determines the size of the _irq_to_interrupt_vector_table, which |
|
is used to track the association between vectors and IRQ numbers. |
|
|
|
config IRQ_OFFLOAD_VECTOR |
|
int "IDT vector to use for IRQ offload" |
|
default 33 |
|
range 32 $(UINT8_MAX) |
|
depends on IRQ_OFFLOAD |
|
|
|
config PIC_DISABLE |
|
bool "Disable PIC" |
|
help |
|
This option disables all interrupts on the legacy i8259 PICs at boot. |
|
|
|
choice |
|
prompt "Reboot implementation" |
|
depends on REBOOT |
|
default REBOOT_RST_CNT |
|
|
|
config REBOOT_RST_CNT |
|
bool "Reboot via RST_CNT register" |
|
help |
|
Reboot via the RST_CNT register, going back to BIOS. |
|
endchoice |
|
|
|
config PCIE_MMIO_CFG |
|
bool "Use MMIO PCI configuration space access" |
|
select ACPI |
|
help |
|
Selects the use of the memory-mapped PCI Express Extended |
|
Configuration Space instead of the traditional 0xCF8/0xCFC |
|
IO Port registers. |
|
|
|
config KERNEL_VM_SIZE |
|
default 0x40000000 if ACPI |
|
|
|
config X86_PC_COMPATIBLE |
|
bool |
|
default y |
|
select ARCH_HAS_RESERVED_PAGE_FRAMES |
|
select HAS_SRAM_OFFSET |
|
help |
|
Hidden option to signal building for PC-compatible platforms |
|
with BIOS, ACPI, etc. |
|
|
|
config X86_MEMMAP |
|
bool "Use memory map" |
|
select ARCH_HAS_RESERVED_PAGE_FRAMES |
|
help |
|
Enable the use of memory map to identify regions of memory. |
|
|
|
The memory map can be populated via Multiboot |
|
(CONFIG_MULTIBOOT=y and CONFIG_MULTIBOOT_MEMMAP=y) or |
|
can be manually defined via x86_memmap[]. |
|
|
|
config X86_MEMMAP_ENTRIES |
|
int "Number of memory map entries" |
|
depends on X86_MEMMAP |
|
range 1 256 |
|
default 1 if !MULTIBOOT_MEMMAP |
|
default 64 if MULTIBOOT_MEMMAP |
|
help |
|
Maximum number of memory regions to hold in the memory map. |
|
|
|
config MULTIBOOT |
|
bool "Generate multiboot header" |
|
depends on X86_PC_COMPATIBLE |
|
default y |
|
help |
|
Embed a multiboot header in the output executable. This is used |
|
by some boot loaders (e.g., GRUB) when loading Zephyr. It is safe |
|
to leave this option on if you're not sure. It only expands the |
|
text segment by 12-16 bytes and is typically ignored if not needed. |
|
|
|
if MULTIBOOT |
|
|
|
config MULTIBOOT_INFO |
|
bool "Preserve multiboot information structure" |
|
help |
|
Multiboot passes a pointer to an information structure to the |
|
kernel entry point. Some drivers (e.g., the multiboot framebuffer |
|
display driver) need to refer to information in this structure, |
|
and so set this option to preserve the data in a permanent location. |
|
|
|
config MULTIBOOT_MEMMAP |
|
bool "Use multiboot memory map if provided" |
|
select MULTIBOOT_INFO |
|
select X86_MEMMAP |
|
help |
|
Use the multiboot memory map if the loader provides one. |
|
|
|
endif # MULTIBOOT |
|
|
|
config X86_VERY_EARLY_CONSOLE |
|
bool "Support very early boot printk" |
|
depends on PRINTK |
|
help |
|
Non-emulated X86 devices often require special hardware to attach |
|
a debugger, which may not be easily available. This option adds a |
|
very minimal serial driver which gets initialized at the very |
|
beginning of z_cstart(), via arch_kernel_init(). This driver enables |
|
printk to emit messages to the 16550 UART port 0 instance in device |
|
tree. This mini-driver assumes I/O to the UART is done via ports. |
|
|
|
config X86_MMU |
|
bool "Memory Management Unit" |
|
select MMU |
|
help |
|
This options enables the memory management unit present in x86 |
|
and creates a set of page tables at boot time that is runtime- |
|
mutable. |
|
|
|
config X86_COMMON_PAGE_TABLE |
|
bool "Use a single page table for all threads" |
|
default n |
|
depends on USERSPACE |
|
depends on !SMP |
|
depends on !X86_KPTI |
|
help |
|
If this option is enabled, userspace memory domains will not have their |
|
own page tables. Instead, context switching operations will modify |
|
page tables in place. This is much slower, but uses much less RAM |
|
for page tables. |
|
|
|
config X86_MAX_ADDITIONAL_MEM_DOMAINS |
|
int "Maximum number of memory domains" |
|
default 3 |
|
depends on X86_MMU && USERSPACE && !X86_COMMON_PAGE_TABLE |
|
help |
|
The initial page tables at boot are pre-allocated, and used for the |
|
default memory domain. Instantiation of additional memory domains |
|
if common page tables are in use requires a pool of free pinned |
|
memory pages for constructing page tables. |
|
|
|
Zephyr test cases assume 3 additional domains can be instantiated. |
|
|
|
config X86_EXTRA_PAGE_TABLE_PAGES |
|
int "Reserve extra pages in page table" |
|
default 1 if X86_PAE && (KERNEL_VM_BASE != SRAM_BASE_ADDRESS) |
|
default 0 |
|
depends on X86_MMU |
|
help |
|
The whole page table is pre-allocated at build time and is |
|
dependent on the range of address space. This allows reserving |
|
extra pages (of size CONFIG_MMU_PAGE_SIZE) to the page table |
|
so that gen_mmu.py can make use of these extra pages. |
|
|
|
Says 0 unless absolutely sure that this is necessary. |
|
|
|
config X86_NO_MELTDOWN |
|
bool |
|
help |
|
This hidden option should be set on a per-SOC basis to indicate that |
|
a particular SOC is not vulnerable to the Meltdown CPU vulnerability, |
|
as described in CVE-2017-5754. |
|
|
|
config X86_NO_SPECTRE_V1 |
|
bool |
|
help |
|
This hidden option should be set on a per-SOC basis to indicate that |
|
a particular SOC is not vulnerable to the Spectre V1, V1.1, V1.2, and |
|
swapgs CPU vulnerabilities as described in CVE-2017-5753, |
|
CVE-2018-3693, and CVE-2019-1125. |
|
|
|
config X86_NO_SPECTRE_V2 |
|
bool |
|
help |
|
This hidden option should be set on a per-SOC basis to indicate that |
|
a particular SOC is not vulnerable to the Spectre V2 CPU |
|
vulnerability, as described in CVE-2017-5715. |
|
|
|
config X86_NO_SPECTRE_V4 |
|
bool |
|
help |
|
This hidden option should be set on a per-SOC basis to indicate that |
|
a particular SOC is not vulnerable to the Spectre V4 CPU |
|
vulnerability, as described in CVE-2018-3639. |
|
|
|
config X86_NO_LAZY_FP |
|
bool |
|
help |
|
This hidden option should be set on a per-SOC basis to indicate |
|
that a particular SOC is not vulnerable to the Lazy FP CPU |
|
vulnerability, as described in CVE-2018-3665. |
|
|
|
config X86_NO_SPECULATIVE_VULNERABILITIES |
|
bool |
|
select X86_NO_MELTDOWN |
|
select X86_NO_SPECTRE_V1 |
|
select X86_NO_SPECTRE_V2 |
|
select X86_NO_SPECTRE_V4 |
|
select X86_NO_LAZY_FP |
|
help |
|
This hidden option should be set on a per-SOC basis to indicate that |
|
a particular SOC does not perform any kind of speculative execution, |
|
or is a newer chip which is immune to the class of vulnerabilities |
|
which exploit speculative execution side channel attacks. |
|
|
|
config X86_DISABLE_SSBD |
|
bool "Disable Speculative Store Bypass" |
|
depends on USERSPACE |
|
default y if !X86_NO_SPECTRE_V4 |
|
help |
|
This option will disable Speculative Store Bypass in order to |
|
mitigate against certain kinds of side channel attacks. Quoting |
|
the "Speculative Execution Side Channels" document, version 2.0: |
|
|
|
When SSBD is set, loads will not execute speculatively |
|
until the addresses of all older stores are known. This |
|
ensure s that a load does not speculatively consume stale |
|
data values due to bypassing an older store on the same |
|
logical processor. |
|
|
|
If enabled, this applies to all threads in the system. |
|
|
|
Even if enabled, will have no effect on CPUs that do not |
|
require this feature. |
|
|
|
config X86_ENABLE_EXTENDED_IBRS |
|
bool "Extended IBRS" |
|
depends on USERSPACE |
|
default y if !X86_NO_SPECTRE_V2 |
|
help |
|
This option will enable the Extended Indirect Branch Restricted |
|
Speculation 'always on' feature. This mitigates Indirect Branch |
|
Control vulnerabilities (aka Spectre V2). |
|
|
|
config X86_BOUNDS_CHECK_BYPASS_MITIGATION |
|
bool |
|
depends on USERSPACE |
|
default y if !X86_NO_SPECTRE_V1 |
|
select BOUNDS_CHECK_BYPASS_MITIGATION |
|
help |
|
Hidden config to select arch-independent option to enable |
|
Spectre V1 mitigations by default if the CPU is not known |
|
to be immune to it. |
|
|
|
config X86_KPTI |
|
bool "Kernel page table isolation" |
|
default y |
|
depends on USERSPACE |
|
depends on !X86_NO_MELTDOWN |
|
help |
|
Implements kernel page table isolation to mitigate Meltdown exploits |
|
to read Kernel RAM. Incurs a significant performance cost for |
|
user thread interrupts and system calls, and significant footprint |
|
increase for additional page tables and trampoline stacks. |
|
|
|
config X86_EFI |
|
bool "EFI" |
|
default y |
|
depends on BUILD_OUTPUT_EFI |
|
help |
|
Enable EFI support. This means you build your image with zefi |
|
support. See arch/x86/zefi/README.txt for more information. |
|
|
|
config X86_EFI_CONSOLE |
|
bool |
|
depends on X86_EFI && X86_64 && !X86_VERY_EARLY_CONSOLE |
|
select EFI_CONSOLE |
|
default y if !UART_CONSOLE |
|
help |
|
This enables the use of the UEFI console device as the |
|
Zephyr printk handler. It requires that no interferences |
|
with hardware used by the firmware console (e.g. a UART or |
|
framebuffer) happens from Zephyr code, and that all memory |
|
used by the firmware environment and its page tables be |
|
separate and preserved. In general this is safe to assume, |
|
but no automatic checking exists at runtime to verify. |
|
Likewise be sure to disable any other console/printk |
|
drivers! |
|
|
|
config PRIVILEGED_STACK_SIZE |
|
# Must be multiple of CONFIG_MMU_PAGE_SIZE |
|
default 4096 if X86_MMU |
|
|
|
source "arch/x86/core/Kconfig.ia32" |
|
source "arch/x86/core/Kconfig.intel64" |
|
|
|
endmenu
|
|
|