## SPDX-License-Identifier: GPL-2.0-only

config ARCH_X86
	bool
	select PCI
	select RELOCATABLE_MODULES
	select HAVE_ASAN_IN_RAMSTAGE

if ARCH_X86

# stage selectors for x86

config ARCH_BOOTBLOCK_X86_32
	bool

config ARCH_VERSTAGE_X86_32
	bool

config ARCH_ROMSTAGE_X86_32
	bool

config ARCH_POSTCAR_X86_32
	bool
	default ARCH_ROMSTAGE_X86_32 && POSTCAR_STAGE

config ARCH_RAMSTAGE_X86_32
	bool

config ARCH_ALL_STAGES_X86_32
	bool
	default !ARCH_ALL_STAGES_X86_64
	select ARCH_BOOTBLOCK_X86_32
	select ARCH_VERSTAGE_X86_32 if !VBOOT_STARTS_BEFORE_BOOTBLOCK
	select ARCH_ROMSTAGE_X86_32
	select ARCH_RAMSTAGE_X86_32
	select ARCH_SUPPORTS_CLANG

# stage selectors for x64

config ARCH_BOOTBLOCK_X86_64
	bool
	select SSE2

config ARCH_VERSTAGE_X86_64
	bool
	select SSE2

config ARCH_ROMSTAGE_X86_64
	bool
	select SSE2

config ARCH_POSTCAR_X86_64
	bool
	default ARCH_ROMSTAGE_X86_64 && POSTCAR_STAGE
	select SSE2

config ARCH_RAMSTAGE_X86_64
	bool
	select SSE2

config ARCH_ALL_STAGES_X86_64
	bool
	select ARCH_BOOTBLOCK_X86_64
	select ARCH_VERSTAGE_X86_64 if !VBOOT_STARTS_BEFORE_BOOTBLOCK
	select ARCH_ROMSTAGE_X86_64
	select ARCH_RAMSTAGE_X86_64
	select ARCH_SUPPORTS_CLANG

config HAVE_EXP_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
	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.

config ARCH_X86_64_PGTBL_LOC
	hex "x86_64 page table location in CBFS"
	depends on ARCH_BOOTBLOCK_X86_64
	default 0xfffe9000
	help
	  The position where to place pagetables. Needs to be known at
	  compile time. Must not overlap other files in CBFS.

# This is an SMP option. It relates to starting up APs.
# It is usually set in mainboard/*/Kconfig.
# TODO: Improve description.
config AP_IN_SIPI_WAIT
	bool
	default n
	depends on ARCH_X86 && SMP

config RESET_VECTOR_IN_RAM
	bool
	depends on ARCH_X86
	select NO_XIP_EARLY_STAGES
	help
	  Select this option if the x86 processor's reset vector is in
	  preinitialized DRAM instead of the traditional 0xfffffff0 location.

# Aligns 16bit entry code in bootblock so that hyper-threading CPUs
# can boot AP CPUs to enable their shared caches.
config SIPI_VECTOR_IN_ROM
	bool
	default n
	depends on ARCH_X86

# Traditionally BIOS region on SPI flash boot media was memory mapped right below
# 4G and it was the last region in the IFD. This way translation between CPU
# address space to flash address was trivial. However some IFDs on newer SoCs
# have BIOS region sandwiched between descriptor and other regions. Turning on
# X86_CUSTOM_BOOTMEDIA disables X86_TOP4G_BOOTMEDIA_MAP which allows the
# soc code to provide custom mmap_boot.c.
config X86_CUSTOM_BOOTMEDIA
	bool

config X86_TOP4G_BOOTMEDIA_MAP
	bool
	depends on !X86_CUSTOM_BOOTMEDIA
	default y

config PRERAM_CBMEM_CONSOLE_SIZE
	hex
	default 0xc00
	help
	  Increase this value if preram cbmem console is getting truncated

config CBFS_MCACHE_SIZE
	hex
	depends on !NO_CBFS_MCACHE
	default 0x4000
	help
	  Increase this value if you see CBFS mcache overflow warnings. Do NOT
	  change this value for vboot RW updates!

config PC80_SYSTEM
	bool
	default y if ARCH_X86

config BOOTBLOCK_DEBUG_SPINLOOP
	bool
	default n
	help
	  Add a spin (JMP .) in bootblock_crt0.S during early bootblock to wait
	  for a JTAG debugger to break into the execution sequence.

config HAVE_CMOS_DEFAULT
	def_bool n
	depends on HAVE_OPTION_TABLE

config CMOS_DEFAULT_FILE
	string
	default "src/mainboard/\$(MAINBOARDDIR)/cmos.default"
	depends on HAVE_CMOS_DEFAULT

config HPET_MIN_TICKS
	hex

config C_ENV_BOOTBLOCK_SIZE
	hex
	default 0x40000 if !FIXED_BOOTBLOCK_SIZE
	help
	   This is only the default maximum of bootblock size for linking
	   purposes. Platforms may provide different limit and need to
	   specify this when FIXED_BOOTBLOCK_SIZE is selected.

config FIXED_BOOTBLOCK_SIZE
	bool

# Default address romstage is to be linked at
config ROMSTAGE_ADDR
	hex
	default 0x2000000

# Default address verstage is to be linked at
config VERSTAGE_ADDR
	hex
	default 0x2000000

# Use the post CAR infrastructure for tearing down cache-as-ram
# from a program loaded in RAM and subsequently loading ramstage.
config POSTCAR_STAGE
	def_bool y
	depends on ARCH_X86
	depends on !RESET_VECTOR_IN_RAM

config VERSTAGE_DEBUG_SPINLOOP
	bool
	default n
	help
	  Add a spin (JMP .) in assembly_entry.S during early verstage to wait
	  for a JTAG debugger to break into the execution sequence.

config ROMSTAGE_DEBUG_SPINLOOP
	bool
	default n
	help
	  Add a spin (JMP .) in assembly_entry.S during early romstage to wait
	  for a JTAG debugger to break into the execution sequence.

choice
	prompt "Bootblock behaviour"
	default BOOTBLOCK_SIMPLE
	depends on !VBOOT

config BOOTBLOCK_SIMPLE
	bool "Always load fallback"

config BOOTBLOCK_NORMAL
	select CONFIGURABLE_CBFS_PREFIX
	bool "Switch to normal if CMOS says so"

endchoice

config SKIP_MAX_REBOOT_CNT_CLEAR
	bool "Do not clear reboot count after successful boot"
	depends on BOOTBLOCK_NORMAL
	help
	  Do not clear the reboot count immediately after successful boot.
	  Set to allow the payload to control normal/fallback image recovery.
	  Note that it is the responsibility of the payload to reset the
	  normal boot bit to 1 after each successful boot.

config ACPI_BERT
	bool
	depends on HAVE_ACPI_TABLES
	help
	  Build an ACPI Boot Error Record Table.

config COLLECT_TIMESTAMPS_NO_TSC
	bool
	default n
	depends on COLLECT_TIMESTAMPS
	help
	  Use a non-TSC platform-dependent source for timestamps.

config COLLECT_TIMESTAMPS_TSC
	bool
	default y if !COLLECT_TIMESTAMPS_NO_TSC
	default n
	depends on COLLECT_TIMESTAMPS
	help
	  Use the TSC as the timestamp source.

config PAGING_IN_CACHE_AS_RAM
	bool
	default n
	depends on ARCH_X86
	help
	  Chipsets scan select this option to preallocate area in cache-as-ram
	  for storing paging data structures. PAE paging is currently the
	  only thing being supported.

config NUM_CAR_PAGE_TABLE_PAGES
	int
	default 5
	depends on PAGING_IN_CACHE_AS_RAM
	help
	  The number of 4KiB pages that should be pre-allocated for page tables.

# Provide the interrupt handlers to every stage. Not all
# stages may take advantage.
config IDT_IN_EVERY_STAGE
	bool
	default n
	depends on ARCH_X86

config HAVE_CF9_RESET
	bool

config HAVE_CF9_RESET_PREPARE
	bool
	depends on HAVE_CF9_RESET

config PIRQ_ROUTE
	bool
	default n

config MAX_PIRQ_LINKS
	int
	default 4
	depends on PIRQ_ROUTE
	help
	  This variable specifies the number of PIRQ interrupt links which are
	  routable. On most chipsets, this is 4, INTA through INTD. Some
	  chipsets offer more than four links, commonly up to INTH. They may
	  also have a separate link for ATA or IOAPIC interrupts. When the PIRQ
	  table specifies links greater than 4, pirq_route_irqs will not
	  function properly, unless this variable is correctly set.

config MAX_ACPI_TABLE_SIZE_KB
	int
	default 144
	help
	  Set the maximum size of all ACPI tables in KiB.

config MEMLAYOUT_LD_FILE
	string
	default "src/arch/x86/memlayout.ld"

config DEBUG_HW_BREAKPOINTS
	bool
	default y
	help
	  Enable support for hardware data and instruction breakpoints through
	  the x86 debug registers

config DEBUG_HW_BREAKPOINTS_IN_ALL_STAGES
	bool
	default y
	depends on DEBUG_HW_BREAKPOINTS && IDT_IN_EVERY_STAGE

config DEBUG_NULL_DEREF_BREAKPOINTS
	bool
	default y
	depends on DEBUG_HW_BREAKPOINTS
	help
	  Enable support for catching null dereferences and instruction execution

config DEBUG_NULL_DEREF_BREAKPOINTS_IN_ALL_STAGES
	bool
	default y
	depends on DEBUG_NULL_DEREF_BREAKPOINTS && DEBUG_HW_BREAKPOINTS_IN_ALL_STAGES

config DEBUG_NULL_DEREF_HALT
	bool
	default n
	depends on DEBUG_NULL_DEREF_BREAKPOINTS
	help
	  When enabled null dereferences and instruction fetches will halt execution.
	  Otherwise an error will be printed.

# Some EC need an "EC firmware pointer" (a data structure hinting the address
# of its firmware blobs) being put at a fixed position. Its space
# (__section__(".ecfw_ptr")) should be reserved if it lies in the range of a
# stage. Different EC may have different format and/or value for it. The actual
# address of EC firmware pointer should be provided in the Kconfig of the EC
# requiring it, and its value could be filled by linking a read-only global
# data object to the section above.

config ECFW_PTR_ADDR
	hex
	help
	   Address of reserved space for EC firmware pointer, which should not
	   overlap other data such as reset vector or FIT pointer if present.

config ECFW_PTR_SIZE
	int
	help
	   Size of reserved space for EC firmware pointer

config DUMP_SMBIOS_TYPE17
	bool "Dump part of SMBIOS type17 dimm information."
	depends on GENERATE_SMBIOS_TABLES

endif
