blob: ae7fdef2f77cdbbb918eaba9b61760e862b53566 [file] [log] [blame]
# 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
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 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
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 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 255
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 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 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!
source "arch/x86/core/Kconfig.ia32"
source "arch/x86/core/Kconfig.intel64"
endmenu