zephyr/arch/x86/Kconfig

286 lines
7.7 KiB
Plaintext
Raw Normal View History

# Kconfig - x86 general configuration options
#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
menu "x86 architecture"
depends on X86
config ARCH
default "x86"
config ARCH_DEFCONFIG
string
default "arch/x86/defconfig"
menu "X86 Platform Configuration options"
config RAM_SIZE
int "Amount of RAM given to the kernel (in kB)"
help
This option specifies the amount of RAM given to the kernel. It must
not exceed the amount available on the target. When running an XIP
kernel, it must be large enough to contain the data, bss and noinit
sections. When not running an XIP kernel, it must be large enough to
contain the full image.
The default value is specified by the platform.
config ROM_SIZE
int "Amount of ROM given to the kernel (in kB)" if XIP
help
This option specifies the amount of ROM given to the kernel. It must
not exceed the amount available on the target. It must also be large
enough to contain the full image.
The default value is specified by the platform.
choice
prompt "Platform Selection"
default PLATFORM_IA32_PCI
source "arch/x86/platforms/*/Kconfig.platform"
endchoice
choice
prompt "Intel Processor"
default CPU_MINUTEIA
config CPU_ATOM
bool "Atom"
select CMOV
select CPU_MIGHT_SUPPORT_CLFLUSH if CACHE_FLUSHING
help
This option signifies the use of a CPU from the Atom family.
config CPU_MINUTEIA
bool "Minute IA"
select CPU_MIGHT_SUPPORT_CLFLUSH if CACHE_FLUSHING
help
This option signifies the use of a CPU from the Minute IA family.
endchoice
config CACHE_FLUSHING
bool
default n
prompt "Enable cache flushing mechanism"
help
This links in the sys_cache_flush() function. A mechanism for flushing the
cache must be selected as well. By default, that mechanism is discovered at
runtime.
menu "Platform Capabilities"
config ADVANCED_IDLE_SUPPORTED
bool "Advanced Idle Supported"
default n
help
This option signifies that the target supports the ADVANCED_IDLE
configuration option.
config NUM_DYNAMIC_STUBS
int "Number of dynamic int stubs"
default 0
help
This option specifies the number of interrupt handlers that can be
installed dynamically using irq_connect().
x86: remove dynamically generated IRQ and exception code We are interested in supporting some XIP x86 platforms which are unable to fetch CPU instructions from system RAM. This requires refactoring our dynamic IRQ/exc code which currently synthesizes assembly language instructions to create IRQ stubs on-the-fly. Instead, a new approach is taken. Given that the configuration at build time specifies the number of required stubs, use this to generate a build time a set of tiny stub functions which simply push a 'stub id' and then call common dynamic interrupt code. The handler function and handler argument is saved in a table keyed by this stub id. CONFIG_EOI_HANDLER_SUPPORTED removed, the code hasn't been conditionally compiled for some time and in all cases we call _loapic_eoi() when finished with an interrupt. Some other out-of-date verbiage in comments related to supporting non-APIC removed. Previously, when dynamic exceptions were created a pointer would be passed in by the caller reserving ram for the stub code. Since this is no longer feasible, two new Kconfig options have been added. CONFIG_NUM_DYNAMIC_EXC_STUBS and CONFIG_NUM_DYNAMIC_EXC_NO_ERR_STUBS control how many stubs are created for exceptions that push an error code, and no error code, respectively. SW Interrupts are no longer triggered by "int <vector>" hard-coded assembly instructions. Instead this is done by sending a self-directed inter-processor interrupt from the LOAPIC, using a new API loapic_int_vect_trigger(). In this way we get rid of dynamically generated code in irq_test_common.h. All interrupts call _loapic_eoi() when finished, since this is now the right thing to do for all IRQs, including SW interrupts. _irq_handler_set() for x86 no longer requires the old function pointer to be supplied. Change-Id: I78993d3d00dd153c9051c518b417cce8d3acee9e Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2015-10-20 05:10:53 +08:00
config NUM_DYNAMIC_EXC_STUBS
int "Number of dynamic exception stubs"
default 0
help
This option specifies the maximum number of dynamically allocated
exception stubs that are to be used with exceptions that push an
error code onto the stack.
config NUM_DYNAMIC_EXC_NOERR_STUBS
int "Number of dynamic exception stubs"
default 0
help
This option specifies the maximum number of dynamically allocated
exception stubs that are to be used with exceptions that do not push
an error code onto the stack.
config PIC_DISABLE
bool "Disable PIC"
default n
help
This option disables all interrupts on the PIC
config IRQ_OFFLOAD
bool "Enable IRQ offload"
default n
help
Enable irq_offload() API which allows functions to be synchronously
run in interrupt context. Uses one entry in the IDT. Mainly useful
for test cases.
endmenu
menu "Processor Capabilities"
config ISA_IA32
bool
default y
help
This option signifies the use of a CPU based on the Intel IA-32
instruction set architecture.
config IA32_LEGACY_IO_PORTS
bool
prompt "Support IA32 legacy IO ports"
default n
depends on ISA_IA32
help
This option enables IA32 legacy IO ports. Note these are much slower
than memory access, so they should be used in last resort.
config CMOV
def_bool n
help
This option signifies the use of an Intel CPU that supports
the CMOV instruction.
config CACHE_LINE_SIZE_DETECT
bool
prompt "Detect cache line size at runtime"
default y
help
This option enables querying the CPUID register for finding the cache line
size at the expense of taking more memory and code and a slightly increased
boot time.
If the CPU's cache line size is known in advance, disable this option and
manually enter the value for CACHE_LINE_SIZE.
config CACHE_LINE_SIZE
int
prompt "Cache line size" if !CACHE_LINE_SIZE_DETECT
default 0 if CACHE_LINE_SIZE_DETECT
default 64 if CPU_ATOM
default 0
help
Size in bytes of a CPU cache line.
Detect automatically at runtime by selecting CACHE_LINE_SIZE_DETECT.
config CPU_MIGHT_SUPPORT_CLFLUSH
bool
depends on CACHE_FLUSHING
default n
help
If a platform uses a processor that possibly implements CLFLUSH, change
the default in that platform's config file.
config CLFLUSH_INSTRUCTION_SUPPORTED
bool
prompt "CLFLUSH instruction supported" if CPU_MIGHT_SUPPORT_CLFLUSH
depends on CPU_MIGHT_SUPPORT_CLFLUSH && !CLFLUSH_DETECT
default n
help
An implementation of sys_cache_flush() that uses CLFLUSH is made
available, instead of the one using WBINVD.
This option should only be enabled if it is known in advance that the
CPU supports the CLFLUSH instruction. It disables runtime detection of
CLFLUSH support thereby reducing both memory footprint and boot time.
config CLFLUSH_DETECT
bool
prompt "Detect support of CLFLUSH instruction at runtime"
depends on CPU_MIGHT_SUPPORT_CLFLUSH
default y
help
This option should be enabled if it is not known in advance whether the
CPU supports the CLFLUSH instruction or not.
The CPU is queried at boot time to determine which of the multiple
implementations of sys_cache_flush() linked into the image is the
correct one to use.
If the CPU's support (or lack thereof) of CLFLUSH is known in advance, then
disable this option and set CLFLUSH_INSTRUCTION_SUPPORTED as appropriate.
config ARCH_CACHE_FLUSH_DETECT
bool
default y
depends on CLFLUSH_DETECT
endmenu
menu "Floating Point Options"
config FLOAT
bool
prompt "Floating point registers"
default n
help
This option allows tasks and fibers to use the floating point registers.
By default, only a single task or fiber may use the registers, and only
the x87 FPU/MMX registers may be used.
Disabling this option means that any task or fiber that uses a
floating point register will get a fatal exception.
config FP_SHARING
bool
prompt "Floating point register sharing"
depends on FLOAT
default n
help
This option allows multiple tasks and fibers to use the floating point
registers. Any task that uses the floating point registers must provide
stack space where the kernel can save these registers during context
switches; a task that uses only the x87 FPU/MMX registers must provide
108 bytes of added stack space, while a task the uses the SSE registers
must provide 464 bytes of added stack space.
config SSE
bool
prompt "SSE registers"
depends on FLOAT
default n
help
This option enables the use of SSE registers by tasks and fibers.
config SSE_FP_MATH
bool
prompt "Compiler-generated SSEx instructions"
depends on SSE
default n
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 pre-emptive 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.
config XIP
default n
endmenu
source "arch/x86/core/Kconfig"
endmenu
source "arch/x86/platforms/*/Kconfig"
endmenu