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>
diff --git a/Documentation/arch/x86/index.md b/Documentation/arch/x86/index.md
index 3ddff51..f2597ac 100644
--- a/Documentation/arch/x86/index.md
+++ b/Documentation/arch/x86/index.md
@@ -9,9 +9,7 @@
 ```
 
 ## State of x86_64 support
-At the moment there's only experimental x86_64 support.
-The `emulation/qemu-i440fx` and `emulation/qemu-q35` boards do support
-*ARCH_RAMSTAGE_X86_64* , *ARCH_POSTCAR_X86_64* and *ARCH_ROMSTAGE_X86_64*.
+Some SOCs now support 64bit mode. Search for HAVE_X86_64_SUPPORT in Kconfig.
 
 In order to add support for x86_64 the following assumptions were made:
 * The CPU supports long mode
@@ -19,7 +17,6 @@
 * All code that is to be run must be below 4GiB in physical memory
 * The high dword of pointers is always zero
 * The reference implementation is qemu
-* The CPU supports 1GiB hugepages
 * x86 payloads are loaded below 4GiB in physical memory and are jumped
   to in *protected mode*
 
@@ -62,7 +59,6 @@
 1. Fine grained page tables for SMM:
    * Must not have execute and write permissions for the same page.
    * Must allow only that TSEG pages can be marked executable
-   * Must reside in SMRAM
 2. Support 64bit PCI BARs above 4GiB
 3. Place and run code above 4GiB
 
@@ -70,13 +66,10 @@
 * Fix compilation errors
 * Test how well CAR works with x86_64 and paging
 * 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.
-Until now it could be verified on various Intel platforms and no issues have
-been found.
+Running VGA rom directly fails. Yabel works fine though.
 
 ## Known bugs on KVM enabled qemu
 
diff --git a/configs/config.emulation_qemu_x86_i440fx_x86_64 b/configs/config.emulation_qemu_x86_i440fx_x86_64
index 7123646..2f6bf78 100644
--- a/configs/config.emulation_qemu_x86_i440fx_x86_64
+++ b/configs/config.emulation_qemu_x86_i440fx_x86_64
@@ -1,3 +1,3 @@
 CONFIG_VENDOR_EMULATION=y
 CONFIG_BOARD_EMULATION_QEMU_X86_I440FX=y
-CONFIG_USE_EXP_X86_64_SUPPORT=y
+CONFIG_USE_X86_64_SUPPORT=y
diff --git a/configs/config.foxconn_g41m b/configs/config.foxconn_g41m
index f5deea5..acb0768 100644
--- a/configs/config.foxconn_g41m
+++ b/configs/config.foxconn_g41m
@@ -1,3 +1,3 @@
 CONFIG_VENDOR_FOXCONN=y
 CONFIG_BOARD_FOXCONN_G41M=y
-CONFIG_USE_EXP_X86_64_SUPPORT=y
+CONFIG_USE_X86_64_SUPPORT=y
diff --git a/configs/config.google_vilboz.x86_64 b/configs/config.google_vilboz.x86_64
index 74036ae..ddb2eda 100644
--- a/configs/config.google_vilboz.x86_64
+++ b/configs/config.google_vilboz.x86_64
@@ -1,3 +1,3 @@
 CONFIG_VENDOR_GOOGLE=y
 CONFIG_BOARD_GOOGLE_VILBOZ=y
-CONFIG_USE_EXP_X86_64_SUPPORT=y
+CONFIG_USE_X86_64_SUPPORT=y
diff --git a/configs/config.hp_compaq_8200_elite_sff_pc.x86_64 b/configs/config.hp_compaq_8200_elite_sff_pc.x86_64
index 9bb5e38..d15f162 100644
--- a/configs/config.hp_compaq_8200_elite_sff_pc.x86_64
+++ b/configs/config.hp_compaq_8200_elite_sff_pc.x86_64
@@ -1,3 +1,3 @@
 CONFIG_VENDOR_HP=y
 CONFIG_BOARD_HP_COMPAQ_8200_ELITE_SFF_PC=y
-CONFIG_USE_EXP_X86_64_SUPPORT=y
+CONFIG_USE_X86_64_SUPPORT=y
diff --git a/configs/config.lenovo_t400_vboot_and_debug b/configs/config.lenovo_t400_vboot_and_debug
index f79d773..6738e43 100644
--- a/configs/config.lenovo_t400_vboot_and_debug
+++ b/configs/config.lenovo_t400_vboot_and_debug
@@ -12,5 +12,5 @@
 CONFIG_DEBUG_ADA_CODE=y
 CONFIG_H8_FN_KEY_AS_VBOOT_RECOVERY_SW=y
 CONFIG_VBOOT=y
-CONFIG_USE_EXP_X86_64_SUPPORT=y
+CONFIG_USE_X86_64_SUPPORT=y
 CONFIG_ARCH_X86_64_PGTBL_LOC=0xfffe8000
diff --git a/configs/config.lenovo_x201_all_debug_option_table_bt_on_wifi b/configs/config.lenovo_x201_all_debug_option_table_bt_on_wifi
index 63becd7..148c77d 100644
--- a/configs/config.lenovo_x201_all_debug_option_table_bt_on_wifi
+++ b/configs/config.lenovo_x201_all_debug_option_table_bt_on_wifi
@@ -10,4 +10,4 @@
 CONFIG_DEBUG_SPI_FLASH=y
 CONFIG_DEBUG_BOOT_STATE=y
 CONFIG_DEBUG_ADA_CODE=y
-CONFIG_USE_EXP_X86_64_SUPPORT=y
+CONFIG_USE_X86_64_SUPPORT=y
diff --git a/configs/config.prodrive_hermes.x86_64 b/configs/config.prodrive_hermes.x86_64
index 506f494..6763aa6 100644
--- a/configs/config.prodrive_hermes.x86_64
+++ b/configs/config.prodrive_hermes.x86_64
@@ -14,4 +14,4 @@
 CONFIG_PCIEXP_SUPPORT_RESIZABLE_BARS=y
 CONFIG_PCIEXP_DEFAULT_MAX_RESIZABLE_BAR_BITS=36
 CONFIG_RUN_FSP_GOP=y
-CONFIG_USE_EXP_X86_64_SUPPORT=y
+CONFIG_USE_X86_64_SUPPORT=y
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig
index 3f97644..d2ae320 100644
--- a/src/arch/x86/Kconfig
+++ b/src/arch/x86/Kconfig
@@ -65,23 +65,21 @@
 	select ARCH_ROMSTAGE_X86_64
 	select ARCH_RAMSTAGE_X86_64
 
-config HAVE_EXP_X86_64_SUPPORT
+config HAVE_X86_64_SUPPORT
 	bool
 	help
 	  Enable experimental support to build and run coreboot in 64-bit mode.
 	  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.
 
-config USE_EXP_X86_64_SUPPORT
-	bool "[EXPERIMENTAL] Run coreboot in long (64-bit) mode"
-	depends on HAVE_EXP_X86_64_SUPPORT
+config USE_X86_64_SUPPORT
+	bool "Run coreboot in long (64-bit) mode"
+	depends on HAVE_X86_64_SUPPORT
 	select ARCH_ALL_STAGES_X86_64
 	help
 	  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
-	  irrespective of whether coreboot runs in 32-bit or 64-bit mode. This
-	  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.
+	  irrespective of whether coreboot runs in 32-bit or 64-bit mode.
 
 config PAGE_TABLES_IN_CBFS
 	bool
diff --git a/src/cpu/intel/model_2065x/Kconfig b/src/cpu/intel/model_2065x/Kconfig
index 15a160a..2b9c4b2 100644
--- a/src/cpu/intel/model_2065x/Kconfig
+++ b/src/cpu/intel/model_2065x/Kconfig
@@ -2,7 +2,7 @@
 
 config CPU_INTEL_MODEL_2065X
 	bool
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	select ARCH_X86
 	select SSE2
 	select UDELAY_TSC
diff --git a/src/cpu/intel/model_206ax/Kconfig b/src/cpu/intel/model_206ax/Kconfig
index bdca12c..cf16640 100644
--- a/src/cpu/intel/model_206ax/Kconfig
+++ b/src/cpu/intel/model_206ax/Kconfig
@@ -3,7 +3,7 @@
 config CPU_INTEL_MODEL_206AX
 	bool
 	select ARCH_X86
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	select SSE2
 	select UDELAY_TSC
 	select TSC_MONOTONIC_TIMER
diff --git a/src/cpu/qemu-x86/Kconfig b/src/cpu/qemu-x86/Kconfig
index 0fa999e..b5ff6f0 100644
--- a/src/cpu/qemu-x86/Kconfig
+++ b/src/cpu/qemu-x86/Kconfig
@@ -3,7 +3,7 @@
 config CPU_QEMU_X86
 	bool
 	select ARCH_X86
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	select UDELAY_TSC
 	select TSC_MONOTONIC_TIMER
 	select UNKNOWN_TSC_RATE
diff --git a/src/northbridge/intel/gm45/Kconfig b/src/northbridge/intel/gm45/Kconfig
index 2a266b9..4fe20ee 100644
--- a/src/northbridge/intel/gm45/Kconfig
+++ b/src/northbridge/intel/gm45/Kconfig
@@ -7,7 +7,7 @@
 	select INTEL_EDID
 	select INTEL_GMA_ACPI
 	select INTEL_GMA_SSC_ALTERNATE_REF
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	select USE_DDR3
 	select USE_DDR2
 
diff --git a/src/northbridge/intel/x4x/Kconfig b/src/northbridge/intel/x4x/Kconfig
index 248852e..4bc12af 100644
--- a/src/northbridge/intel/x4x/Kconfig
+++ b/src/northbridge/intel/x4x/Kconfig
@@ -7,7 +7,7 @@
 	select INTEL_GMA_ACPI
 	select CACHE_MRC_SETTINGS
 	select BOOT_DEVICE_SPI_FLASH_NO_EARLY_WRITES
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	select USE_DDR3
 	select USE_DDR2
 
diff --git a/src/soc/amd/genoa_poc/Kconfig b/src/soc/amd/genoa_poc/Kconfig
index 05590f5..f4bd7d6 100644
--- a/src/soc/amd/genoa_poc/Kconfig
+++ b/src/soc/amd/genoa_poc/Kconfig
@@ -11,7 +11,7 @@
 	select ARCH_X86
 	select DEFAULT_X2APIC
 	select HAVE_ACPI_TABLES
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	select HAVE_SMI_HANDLER
 	select RESET_VECTOR_IN_RAM
 	select SOC_AMD_COMMON
@@ -50,7 +50,7 @@
 	select SOC_AMD_OPENSIL_GENOA_POC
 	select X86_CUSTOM_BOOTMEDIA
 
-config USE_EXP_X86_64_SUPPORT
+config USE_X86_64_SUPPORT
 	default y
 
 config CHIPSET_DEVICETREE
diff --git a/src/soc/amd/picasso/Kconfig b/src/soc/amd/picasso/Kconfig
index 864643f..d6c3fbd 100644
--- a/src/soc/amd/picasso/Kconfig
+++ b/src/soc/amd/picasso/Kconfig
@@ -77,7 +77,7 @@
 	select USE_FSP_NOTIFY_PHASE_END_OF_FIRMWARE
 	select X86_AMD_FIXED_MTRRS
 	select X86_INIT_NEED_1_SIPI
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	help
 	  AMD Picasso support
 
diff --git a/src/soc/intel/cannonlake/Kconfig b/src/soc/intel/cannonlake/Kconfig
index ab2efc3..7548e46 100644
--- a/src/soc/intel/cannonlake/Kconfig
+++ b/src/soc/intel/cannonlake/Kconfig
@@ -79,7 +79,7 @@
 config SOC_INTEL_COFFEELAKE
 	bool
 	select SOC_INTEL_CANNONLAKE_BASE
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	select HECI_DISABLE_USING_SMM
 	select INTEL_CAR_NEM
 
diff --git a/src/soc/intel/xeon_sp/spr/Kconfig b/src/soc/intel/xeon_sp/spr/Kconfig
index 23d2f8b6..2e0ad01 100644
--- a/src/soc/intel/xeon_sp/spr/Kconfig
+++ b/src/soc/intel/xeon_sp/spr/Kconfig
@@ -16,7 +16,7 @@
 	select FSP_SPEC_VIOLATION_XEON_SP_HEAP_WORKAROUND
 	select UDK_202005_BINDING
 	select SOC_INTEL_HAS_CXL
-	select HAVE_EXP_X86_64_SUPPORT
+	select HAVE_X86_64_SUPPORT
 	help
 	  Intel Sapphire Rapids-SP support