2019-04-06 21:08:09 +08:00
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
arch/x86_64: New architecture added
This patch adds a x86_64 architecture and qemu_x86_64 board to Zephyr.
Only the basic architecture support needed to run 64 bit code is
added; no drivers are added, though a low-level console exists and is
wired to printk().
The support is built on top of a "X86 underkernel" layer, which can be
built in isolation as a unit test on a Linux host.
Limitations:
+ Right now the SDK lacks an x86_64 toolchain. The build will fall
back to a host toolchain if it finds no cross compiler defined,
which is tested to work on gcc 8.2.1 right now.
+ No x87/SSE/AVX usage is allowed. This is a stronger limitation than
other architectures where the instructions work from one thread even
if the context switch code doesn't support it. We are passing
-no-sse to prevent gcc from automatically generating SSE
instructions for non-floating-point purposes, which has the side
effect of changing the ABI. Future work to handle the FPU registers
will need to be combined with an "application" ABI distinct from the
kernel one (or just to require USERSPACE).
+ Paging is enabled (it has to be in long mode), but is a 1:1 mapping
of all memory. No MMU/USERSPACE support yet.
+ We are building with -mno-red-zone for stack size reasons, but this
is a valuable optimization. Enabling it requires automatic stack
switching, which requires a TSS, which means it has to happen after
MMU support.
+ The OS runs in 64 bit mode, but for compatibility reasons is
compiled to the 32 bit "X32" ABI. So while the full 64 bit
registers and instruction set are available, C pointers are 32 bits
long and Zephyr is constrained to run in the bottom 4G of memory.
Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2018-08-20 03:24:48 +08:00
|
|
|
config ARCH
|
|
|
|
default "x86_64"
|
|
|
|
|
|
|
|
config XUK_DEBUG
|
|
|
|
bool "Debug logging at lowest level"
|
|
|
|
help
|
|
|
|
When true, enables debug logging from the XUK layer in very
|
|
|
|
early boot situations (including the 16 and 32 bit stub
|
|
|
|
code) on the first serial port (115200 8n1) and VGA text
|
|
|
|
console. Also wires that output stream to the printk()
|
|
|
|
function so it can be used before any console drivers are
|
|
|
|
initialized.
|
|
|
|
|
|
|
|
config XUK_APIC_TSC_SHIFT
|
|
|
|
int "Power-of-two divisor between TSC and APIC timer"
|
|
|
|
default 6
|
|
|
|
help
|
|
|
|
Configures the precision of the APIC timer as a bit shift of
|
|
|
|
the TSC frequency. High values "slow down" the tick rate of
|
|
|
|
the APIC timer and allow for longer timeouts at the expense
|
|
|
|
of precision.
|
|
|
|
|
|
|
|
config IRQ_OFFLOAD_VECTOR
|
|
|
|
int "Interrupt vector for irq_offload"
|
|
|
|
default 255
|
|
|
|
help
|
|
|
|
This is the interrupt vector to use for the self-directed
|
|
|
|
IPIs used to implement irq_offload(). Most apps will never
|
|
|
|
change this. It's configurable in case someone wants to
|
|
|
|
play with its priority.
|