cpu/x86/Kconfig: Mark 64bit support as stable

With SMM holding page tables itself, we can consider SMM support stable
and safe enough for general use.

Also update the respective documentation.

Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Change-Id: Ifcf0a1a5097a2d7c064bb709ec0b09ebee13a47d
Reviewed-on: https://review.coreboot.org/c/coreboot/+/80338
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin L Roth <gaumless@gmail.com>
This commit is contained in:
Arthur Heymans 2024-02-02 19:35:13 +01:00 committed by Martin L Roth
parent ee83be4d75
commit d293b20b84
18 changed files with 25 additions and 34 deletions

View File

@ -9,9 +9,7 @@ x86 PAE support <pae.md>
``` ```
## State of x86_64 support ## State of x86_64 support
At the moment there's only experimental x86_64 support. Some SOCs now support 64bit mode. Search for HAVE_X86_64_SUPPORT in Kconfig.
The `emulation/qemu-i440fx` and `emulation/qemu-q35` boards do support
*ARCH_RAMSTAGE_X86_64* , *ARCH_POSTCAR_X86_64* and *ARCH_ROMSTAGE_X86_64*.
In order to add support for x86_64 the following assumptions were made: In order to add support for x86_64 the following assumptions were made:
* The CPU supports long mode * The CPU supports long mode
@ -19,7 +17,6 @@ In order to add support for x86_64 the following assumptions were made:
* All code that is to be run must be below 4GiB in physical memory * All code that is to be run must be below 4GiB in physical memory
* The high dword of pointers is always zero * The high dword of pointers is always zero
* The reference implementation is qemu * The reference implementation is qemu
* The CPU supports 1GiB hugepages
* x86 payloads are loaded below 4GiB in physical memory and are jumped * x86 payloads are loaded below 4GiB in physical memory and are jumped
to in *protected mode* to in *protected mode*
@ -62,7 +59,6 @@ QEMU Q35 <../../mainboard/emulation/qemu-q35.md>
1. Fine grained page tables for SMM: 1. Fine grained page tables for SMM:
* Must not have execute and write permissions for the same page. * Must not have execute and write permissions for the same page.
* Must allow only that TSEG pages can be marked executable * Must allow only that TSEG pages can be marked executable
* Must reside in SMRAM
2. Support 64bit PCI BARs above 4GiB 2. Support 64bit PCI BARs above 4GiB
3. Place and run code above 4GiB 3. Place and run code above 4GiB
@ -70,13 +66,10 @@ QEMU Q35 <../../mainboard/emulation/qemu-q35.md>
* Fix compilation errors * Fix compilation errors
* Test how well CAR works with x86_64 and paging * Test how well CAR works with x86_64 and paging
* Improve mode switches * Improve mode switches
* Test libgfxinit / VGA Option ROMs / FSP
## Known bugs on real hardware ## Known problems on real hardware
According to Intel x86_64 mode hasn't been validated in CAR environments. Running VGA rom directly fails. Yabel works fine though.
Until now it could be verified on various Intel platforms and no issues have
been found.
## Known bugs on KVM enabled qemu ## Known bugs on KVM enabled qemu

View File

@ -1,3 +1,3 @@
CONFIG_VENDOR_EMULATION=y CONFIG_VENDOR_EMULATION=y
CONFIG_BOARD_EMULATION_QEMU_X86_I440FX=y CONFIG_BOARD_EMULATION_QEMU_X86_I440FX=y
CONFIG_USE_EXP_X86_64_SUPPORT=y CONFIG_USE_X86_64_SUPPORT=y

View File

@ -1,3 +1,3 @@
CONFIG_VENDOR_FOXCONN=y CONFIG_VENDOR_FOXCONN=y
CONFIG_BOARD_FOXCONN_G41M=y CONFIG_BOARD_FOXCONN_G41M=y
CONFIG_USE_EXP_X86_64_SUPPORT=y CONFIG_USE_X86_64_SUPPORT=y

View File

@ -1,3 +1,3 @@
CONFIG_VENDOR_GOOGLE=y CONFIG_VENDOR_GOOGLE=y
CONFIG_BOARD_GOOGLE_VILBOZ=y CONFIG_BOARD_GOOGLE_VILBOZ=y
CONFIG_USE_EXP_X86_64_SUPPORT=y CONFIG_USE_X86_64_SUPPORT=y

View File

@ -1,3 +1,3 @@
CONFIG_VENDOR_HP=y CONFIG_VENDOR_HP=y
CONFIG_BOARD_HP_COMPAQ_8200_ELITE_SFF_PC=y CONFIG_BOARD_HP_COMPAQ_8200_ELITE_SFF_PC=y
CONFIG_USE_EXP_X86_64_SUPPORT=y CONFIG_USE_X86_64_SUPPORT=y

View File

@ -12,5 +12,5 @@ CONFIG_DEBUG_BOOT_STATE=y
CONFIG_DEBUG_ADA_CODE=y CONFIG_DEBUG_ADA_CODE=y
CONFIG_H8_FN_KEY_AS_VBOOT_RECOVERY_SW=y CONFIG_H8_FN_KEY_AS_VBOOT_RECOVERY_SW=y
CONFIG_VBOOT=y CONFIG_VBOOT=y
CONFIG_USE_EXP_X86_64_SUPPORT=y CONFIG_USE_X86_64_SUPPORT=y
CONFIG_ARCH_X86_64_PGTBL_LOC=0xfffe8000 CONFIG_ARCH_X86_64_PGTBL_LOC=0xfffe8000

View File

@ -10,4 +10,4 @@ CONFIG_DEBUG_MALLOC=y
CONFIG_DEBUG_SPI_FLASH=y CONFIG_DEBUG_SPI_FLASH=y
CONFIG_DEBUG_BOOT_STATE=y CONFIG_DEBUG_BOOT_STATE=y
CONFIG_DEBUG_ADA_CODE=y CONFIG_DEBUG_ADA_CODE=y
CONFIG_USE_EXP_X86_64_SUPPORT=y CONFIG_USE_X86_64_SUPPORT=y

View File

@ -14,4 +14,4 @@ CONFIG_MAINBOARD_SERIAL_NUMBER="N/A"
CONFIG_PCIEXP_SUPPORT_RESIZABLE_BARS=y CONFIG_PCIEXP_SUPPORT_RESIZABLE_BARS=y
CONFIG_PCIEXP_DEFAULT_MAX_RESIZABLE_BAR_BITS=36 CONFIG_PCIEXP_DEFAULT_MAX_RESIZABLE_BAR_BITS=36
CONFIG_RUN_FSP_GOP=y CONFIG_RUN_FSP_GOP=y
CONFIG_USE_EXP_X86_64_SUPPORT=y CONFIG_USE_X86_64_SUPPORT=y

View File

@ -65,23 +65,21 @@ config ARCH_ALL_STAGES_X86_64
select ARCH_ROMSTAGE_X86_64 select ARCH_ROMSTAGE_X86_64
select ARCH_RAMSTAGE_X86_64 select ARCH_RAMSTAGE_X86_64
config HAVE_EXP_X86_64_SUPPORT config HAVE_X86_64_SUPPORT
bool bool
help help
Enable experimental support to build and run coreboot in 64-bit mode. Enable experimental support to build and run coreboot in 64-bit mode.
When selecting this option for a new platform, it is highly advisable When selecting this option for a new platform, it is highly advisable
to provide a config file for Jenkins to build-test the 64-bit option. to provide a config file for Jenkins to build-test the 64-bit option.
config USE_EXP_X86_64_SUPPORT config USE_X86_64_SUPPORT
bool "[EXPERIMENTAL] Run coreboot in long (64-bit) mode" bool "Run coreboot in long (64-bit) mode"
depends on HAVE_EXP_X86_64_SUPPORT depends on HAVE_X86_64_SUPPORT
select ARCH_ALL_STAGES_X86_64 select ARCH_ALL_STAGES_X86_64
help help
When set, most of coreboot runs in long (64-bit) mode instead of the When set, most of coreboot runs in long (64-bit) mode instead of the
usual protected flat (32-bit) mode. 64-bit CPUs and OSes can be used usual protected flat (32-bit) mode. 64-bit CPUs and OSes can be used
irrespective of whether coreboot runs in 32-bit or 64-bit mode. This irrespective of whether coreboot runs in 32-bit or 64-bit mode.
is an experimental option: do not enable unless one wants to test it
and has the means to recover a system when coreboot fails to boot.
config PAGE_TABLES_IN_CBFS config PAGE_TABLES_IN_CBFS
bool bool

View File

@ -2,7 +2,7 @@
config CPU_INTEL_MODEL_2065X config CPU_INTEL_MODEL_2065X
bool bool
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
select ARCH_X86 select ARCH_X86
select SSE2 select SSE2
select UDELAY_TSC select UDELAY_TSC

View File

@ -3,7 +3,7 @@
config CPU_INTEL_MODEL_206AX config CPU_INTEL_MODEL_206AX
bool bool
select ARCH_X86 select ARCH_X86
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
select SSE2 select SSE2
select UDELAY_TSC select UDELAY_TSC
select TSC_MONOTONIC_TIMER select TSC_MONOTONIC_TIMER

View File

@ -3,7 +3,7 @@
config CPU_QEMU_X86 config CPU_QEMU_X86
bool bool
select ARCH_X86 select ARCH_X86
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
select UDELAY_TSC select UDELAY_TSC
select TSC_MONOTONIC_TIMER select TSC_MONOTONIC_TIMER
select UNKNOWN_TSC_RATE select UNKNOWN_TSC_RATE

View File

@ -7,7 +7,7 @@ config NORTHBRIDGE_INTEL_GM45
select INTEL_EDID select INTEL_EDID
select INTEL_GMA_ACPI select INTEL_GMA_ACPI
select INTEL_GMA_SSC_ALTERNATE_REF select INTEL_GMA_SSC_ALTERNATE_REF
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
select USE_DDR3 select USE_DDR3
select USE_DDR2 select USE_DDR2

View File

@ -7,7 +7,7 @@ config NORTHBRIDGE_INTEL_X4X
select INTEL_GMA_ACPI select INTEL_GMA_ACPI
select CACHE_MRC_SETTINGS select CACHE_MRC_SETTINGS
select BOOT_DEVICE_SPI_FLASH_NO_EARLY_WRITES select BOOT_DEVICE_SPI_FLASH_NO_EARLY_WRITES
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
select USE_DDR3 select USE_DDR3
select USE_DDR2 select USE_DDR2

View File

@ -11,7 +11,7 @@ config SOC_SPECIFIC_OPTIONS
select ARCH_X86 select ARCH_X86
select DEFAULT_X2APIC select DEFAULT_X2APIC
select HAVE_ACPI_TABLES select HAVE_ACPI_TABLES
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
select HAVE_SMI_HANDLER select HAVE_SMI_HANDLER
select RESET_VECTOR_IN_RAM select RESET_VECTOR_IN_RAM
select SOC_AMD_COMMON select SOC_AMD_COMMON
@ -50,7 +50,7 @@ config SOC_SPECIFIC_OPTIONS
select SOC_AMD_OPENSIL_GENOA_POC select SOC_AMD_OPENSIL_GENOA_POC
select X86_CUSTOM_BOOTMEDIA select X86_CUSTOM_BOOTMEDIA
config USE_EXP_X86_64_SUPPORT config USE_X86_64_SUPPORT
default y default y
config CHIPSET_DEVICETREE config CHIPSET_DEVICETREE

View File

@ -77,7 +77,7 @@ config SOC_AMD_PICASSO
select USE_FSP_NOTIFY_PHASE_END_OF_FIRMWARE select USE_FSP_NOTIFY_PHASE_END_OF_FIRMWARE
select X86_AMD_FIXED_MTRRS select X86_AMD_FIXED_MTRRS
select X86_INIT_NEED_1_SIPI select X86_INIT_NEED_1_SIPI
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
help help
AMD Picasso support AMD Picasso support

View File

@ -79,7 +79,7 @@ config SOC_INTEL_CANNONLAKE_BASE
config SOC_INTEL_COFFEELAKE config SOC_INTEL_COFFEELAKE
bool bool
select SOC_INTEL_CANNONLAKE_BASE select SOC_INTEL_CANNONLAKE_BASE
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
select HECI_DISABLE_USING_SMM select HECI_DISABLE_USING_SMM
select INTEL_CAR_NEM select INTEL_CAR_NEM

View File

@ -16,7 +16,7 @@ config SOC_INTEL_SAPPHIRERAPIDS_SP
select FSP_SPEC_VIOLATION_XEON_SP_HEAP_WORKAROUND select FSP_SPEC_VIOLATION_XEON_SP_HEAP_WORKAROUND
select UDK_202005_BINDING select UDK_202005_BINDING
select SOC_INTEL_HAS_CXL select SOC_INTEL_HAS_CXL
select HAVE_EXP_X86_64_SUPPORT select HAVE_X86_64_SUPPORT
help help
Intel Sapphire Rapids-SP support Intel Sapphire Rapids-SP support