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

mainmenu "coreboot configuration"

menu "General setup"

config COREBOOT_BUILD
	bool
	default y

config LOCALVERSION
	string "Local version string"
	help
	  Append an extra string to the end of the coreboot version.

	  This can be useful if, for instance, you want to append the
	  respective board's hostname or some other identifying string to
	  the coreboot version number, so that you can easily distinguish
	  boot logs of different boards from each other.

config CONFIGURABLE_CBFS_PREFIX
	bool
	help
	  Select this to prompt to use to configure the prefix for cbfs files.

choice
	prompt "CBFS prefix to use"
	depends on CONFIGURABLE_CBFS_PREFIX
	default CBFS_PREFIX_FALLBACK

config CBFS_PREFIX_FALLBACK
	bool "fallback"

config CBFS_PREFIX_NORMAL
	bool "normal"

config CBFS_PREFIX_DIY
	bool "Define your own cbfs prefix"

endchoice

config CBFS_PREFIX
	string "CBFS prefix to use" if CBFS_PREFIX_DIY
	default "fallback" if !CONFIGURABLE_CBFS_PREFIX || CBFS_PREFIX_FALLBACK
	default "normal" if CBFS_PREFIX_NORMAL
	help
	  Select the prefix to all files put into the image. It's "fallback"
	  by default, "normal" is a common alternative.

choice
	prompt "Compiler to use"
	default COMPILER_GCC
	help
	  This option allows you to select the compiler used for building
	  coreboot.
	  You must build the coreboot crosscompiler for the board that you
	  have selected.

	  To build all the GCC crosscompilers (takes a LONG time), run:
	    make crossgcc

	  For help on individual architectures, run the command:
	    make help_toolchain

config COMPILER_GCC
	bool "GCC"
	help
	  Use the GNU Compiler Collection (GCC) to build coreboot.

	  For details see http://gcc.gnu.org.

config COMPILER_LLVM_CLANG
	bool "LLVM/clang (TESTING ONLY - Not currently working)"
	help
	  Use LLVM/clang to build coreboot.  To use this, you must build the
	  coreboot version of the clang compiler.  Run the command
	    make clang
	  Note that this option is not currently working correctly and should
	  really only be selected if you're trying to work on getting clang
	  operational.

	  For details see http://clang.llvm.org.

endchoice

config ANY_TOOLCHAIN
	bool "Allow building with any toolchain"
	default n
	help
	  Many toolchains break when building coreboot since it uses quite
	  unusual linker features. Unless developers explicitely request it,
	  we'll have to assume that they use their distro compiler by mistake.
	  Make sure that using patched compilers is a conscious decision.

config CCACHE
	bool "Use ccache to speed up (re)compilation"
	default n
	help
	  Enables the use of ccache for faster builds.

	  Requires the ccache utility in your system $PATH.

	  For details see https://ccache.samba.org.

config FMD_GENPARSER
	bool "Generate flashmap descriptor parser using flex and bison"
	default n
	help
	  Enable this option if you are working on the flashmap descriptor
	  parser and made changes to fmd_scanner.l or fmd_parser.y.

	  Otherwise, say N to use the provided pregenerated scanner/parser.

config UTIL_GENPARSER
	bool "Generate SCONFIG & BINCFG parser using flex and bison"
	default n
	help
	  Enable this option if you are working on the sconfig device tree
	  parser or bincfg and made changes to the .l or .y files.

	  Otherwise, say N to use the provided pregenerated scanner/parser.

config USE_OPTION_TABLE
	bool "Use CMOS for configuration values"
	depends on HAVE_OPTION_TABLE
	help
	  Enable this option if coreboot shall read options from the "CMOS"
	  NVRAM instead of using hard-coded values.

config STATIC_OPTION_TABLE
	bool "Load default configuration values into CMOS on each boot"
	depends on USE_OPTION_TABLE
	help
	  Enable this option to reset "CMOS" NVRAM values to default on
	  every boot.  Use this if you want the NVRAM configuration to
	  never be modified from its default values.

config COMPRESS_RAMSTAGE
	bool "Compress ramstage with LZMA"
	depends on HAVE_RAMSTAGE
	# Default value set at the end of the file
	help
	  Compress ramstage to save memory in the flash image.

config COMPRESS_PRERAM_STAGES
	bool "Compress romstage and verstage with LZ4"
	depends on !ARCH_X86 && (HAVE_ROMSTAGE || HAVE_VERSTAGE)
	# Default value set at the end of the file
	help
	  Compress romstage and (if it exists) verstage with LZ4 to save flash
	  space and speed up boot, since the time for reading the image from SPI
	  (and in the vboot case verifying it) is usually much greater than the
	  time spent decompressing. Doesn't work for XIP stages (assume all
	  ARCH_X86 for now) for obvious reasons.

config COMPRESS_BOOTBLOCK
	bool
	depends on HAVE_BOOTBLOCK
	help
	  This option can be used to compress the bootblock with LZ4 and attach
	  a small self-decompression stub to its front. This can drastically
	  reduce boot time on platforms where the bootblock is loaded over a
	  very slow connection and bootblock size trumps all other factors for
	  speed. Since using this option usually requires changes to the
	  SoC memlayout and possibly extra support code, it should not be
	  user-selectable. (There's no real point in offering this to the user
	  anyway... if it works and saves boot time, you would always want it.)

config INCLUDE_CONFIG_FILE
	bool "Include the coreboot .config file into the ROM image"
	# Default value set at the end of the file
	help
	  Include the .config file that was used to compile coreboot
	  in the (CBFS) ROM image. This is useful if you want to know which
	  options were used to build a specific coreboot.rom image.

	  Saying Y here will increase the image size by 2-3KB.

	  You can use the following command to easily list the options:

	    grep -a CONFIG_ coreboot.rom

	  Alternatively, you can also use cbfstool to print the image
	  contents (including the raw 'config' item we're looking for).

	  Example:

	    $ cbfstool coreboot.rom print
	    coreboot.rom: 4096 kB, bootblocksize 1008, romsize 4194304,
	                                               offset 0x0
	    Alignment: 64 bytes

	    Name                           Offset     Type         Size
	    cmos_layout.bin                0x0        CMOS layout  1159
	    fallback/romstage              0x4c0      stage        339756
	    fallback/ramstage              0x53440    stage        186664
	    fallback/payload               0x80dc0    payload      51526
	    config                         0x8d740    raw          3324
	    (empty)                        0x8e480    null         3610440

config COLLECT_TIMESTAMPS
	bool "Create a table of timestamps collected during boot"
	default y if ARCH_X86
	help
	  Make coreboot create a table of timer-ID/timer-value pairs to
	  allow measuring time spent at different phases of the boot process.

config TIMESTAMPS_ON_CONSOLE
	bool "Print the timestamp values on the console"
	default n
	depends on COLLECT_TIMESTAMPS
	help
	  Print the timestamps to the debug console if enabled at level info.

config USE_BLOBS
	bool "Allow use of binary-only repository"
	default y
	help
	  This draws in the blobs repository, which contains binary files that
	  might be required for some chipsets or boards.
	  This flag ensures that a "Free" option remains available for users.

config USE_AMD_BLOBS
	bool "Allow AMD blobs repository (with license agreement)"
	depends on USE_BLOBS
	help
	  This draws in the amd_blobs repository, which contains binary files
	  distributed by AMD, including VBIOS, PSP bootloaders, SMU firmwares,
	  etc.  Selecting this item to download or clone the repo implies your
	  agreement to the AMD license agreement.  A copy of the license text
	  may be reviewed by reading Documentation/soc/amd/amdblobs_license.md,
	  and your copy of the license is present in the repo once downloaded.

	  Note that for some products, omitting PSP, SMU images, or other items
	  may result in a nonbooting coreboot.rom.

config COVERAGE
	bool "Code coverage support"
	depends on COMPILER_GCC
	help
	  Add code coverage support for coreboot. This will store code
	  coverage information in CBMEM for extraction from user space.
	  If unsure, say N.

config UBSAN
	bool "Undefined behavior sanitizer support"
	default n
	help
	  Instrument the code with checks for undefined behavior. If unsure,
	  say N because it adds a small performance penalty and may abort
	  on code that happens to work in spite of the UB.

config RELOCATABLE_RAMSTAGE
	bool
	default y if ARCH_X86
	select RELOCATABLE_MODULES
	help
	 The reloctable ramstage support allows for the ramstage to be built
	 as a relocatable module. The stage loader can identify a place
	 out of the OS way so that copying memory is unnecessary during an S3
	 wake. When selecting this option the romstage is responsible for
	 determing a stack location to use for loading the ramstage.

choice
	prompt "Stage Cache for ACPI S3 resume"
	default NO_STAGE_CACHE if !HAVE_ACPI_RESUME || !RELOCATABLE_RAMSTAGE
	default TSEG_STAGE_CACHE if SMM_TSEG

config NO_STAGE_CACHE
	bool "Disabled"
	help
	  Do not save any component in stage cache for resume path. On resume,
	  all components would be read back from CBFS again.

config TSEG_STAGE_CACHE
	bool "TSEG"
	depends on SMM_TSEG
	help
	  The option enables stage cache support for platform. Platform
	  can stash copies of postcar, ramstage and raw runtime data
	  inside SMM TSEG, to be restored on S3 resume path.

config CBMEM_STAGE_CACHE
	bool "CBMEM"
	depends on !SMM_TSEG
	help
	  The option enables stage cache support for platform. Platform
	  can stash copies of postcar, ramstage and raw runtime data
	  inside CBMEM.

	  While the approach is faster than reloading stages from boot media
	  it is also a possible attack scenario via which OS can possibly
	  circumvent SMM locks and SPI write protections.

	  If unsure, select 'N'

endchoice

config UPDATE_IMAGE
	bool "Update existing coreboot.rom image"
	help
	  If this option is enabled, no new coreboot.rom file
	  is created. Instead it is expected that there already
	  is a suitable file for further processing.
	  The bootblock will not be modified.

	  If unsure, select 'N'

config BOOTSPLASH_IMAGE
	bool "Add a bootsplash image"
	help
	  Select this option if you have a bootsplash image that you would
	  like to add to your ROM.

	  This will only add the image to the ROM. To actually run it check
	  options under 'Display' section.

config BOOTSPLASH_FILE
	string "Bootsplash path and filename"
	depends on BOOTSPLASH_IMAGE
	# Default value set at the end of the file
	help
	  The path and filename of the file to use as graphical bootsplash
	  screen. The file format has to be jpg.

config HAVE_RAMPAYLOAD
	bool

config RAMPAYLOAD
	bool "Enable coreboot flow without executing ramstage"
	default y if ARCH_X86
	depends on HAVE_RAMPAYLOAD
	help
	  If this option is enabled, coreboot flow will skip ramstage
	  loading and execution of ramstage to load payload.

	  Instead it is expected to load payload from postcar stage itself.

	  In this flow coreboot will perform basic x86 initialization
	  (DRAM resource allocation), MTRR programming,
	  Skip PCI enumeration logic and only allocate BAR for fixed devices
	  (bootable devices, TPM over GSPI).

config HAVE_CONFIGURABLE_RAMSTAGE
	bool

config CONFIGURABLE_RAMSTAGE
	bool "Enable a configurable ramstage."
	default y if ARCH_X86
	depends on HAVE_CONFIGURABLE_RAMSTAGE
	help
	  A configurable ramstage allows you to select which parts of the ramstage
	  to run. Currently, we can only select a minimal PCI scanning step.
	  The minimal PCI scanning will only check those parts that are enabled
	  in the devicetree.cb. By convention none of those devices should be bridges.

config MINIMAL_PCI_SCANNING
	bool "Enable minimal PCI scanning"
	depends on CONFIGURABLE_RAMSTAGE && PCI
	help
	  If this option is enabled, coreboot will scan only PCI devices
	  marked as mandatory in devicetree.cb
endmenu

menu "Mainboard"

source "src/mainboard/Kconfig"

config DEVICETREE
	string
	default "devicetree.cb"
	help
	  This symbol allows mainboards to select a different file under their
	  mainboard directory for the devicetree.cb file.  This allows the board
	  variants that need different devicetrees to be in the same directory.

	  Examples: "devicetree.variant.cb"
	            "variant/devicetree.cb"

config OVERRIDE_DEVICETREE
	string
	default ""
	help
	  This symbol allows variants to provide an override devicetree file to
	  override the registers and/or add new devices on top of the ones
	  provided by baseboard devicetree using CONFIG_DEVICETREE.

	  Examples: "devicetree.variant-override.cb"
	            "variant/devicetree-override.cb"

config FMDFILE
	string "fmap description file in fmd format"
	default "src/mainboard/$(CONFIG_MAINBOARD_DIR)/chromeos.fmd" if CHROMEOS
	default ""
	help
	  The build system creates a default FMAP from ROM_SIZE and CBFS_SIZE,
	  but in some cases more complex setups are required.
	  When an fmd is specified, it overrides the default format.

config CBFS_SIZE
	hex "Size of CBFS filesystem in ROM"
	depends on FMDFILE = ""
	# Default value set at the end of the file
	help
	  This is the part of the ROM actually managed by CBFS, located at the
	  end of the ROM (passed through cbfstool -o) on x86 and at at the start
	  of the ROM (passed through cbfstool -s) everywhere else. It defaults
	  to span the whole ROM on all but Intel systems that use an Intel Firmware
	  Descriptor.  It can be overridden to make coreboot live alongside other
	  components like ChromeOS's vboot/FMAP or Intel's IFD / ME / TXE
	  binaries. This symbol should only be used to generate a default FMAP and
	  is unused when a non-default fmd file is provided via CONFIG_FMDFILE.

endmenu

# load site-local kconfig to allow user specific defaults and overrides
source "site-local/Kconfig"

config SYSTEM_TYPE_LAPTOP
	default n
	bool

config SYSTEM_TYPE_TABLET
	default n
	bool

config SYSTEM_TYPE_DETACHABLE
	default n
	bool

config SYSTEM_TYPE_CONVERTIBLE
	default n
	bool

config CBFS_AUTOGEN_ATTRIBUTES
	default n
	bool
	help
	  If this option is selected, every file in cbfs which has a constraint
	  regarding position or alignment will get an additional file attribute
	  which describes this constraint.

menu "Chipset"

comment "SoC"
source "src/soc/*/Kconfig"
comment "CPU"
source "src/cpu/Kconfig"
comment "Northbridge"
source "src/northbridge/*/*/Kconfig"
comment "Southbridge"
source "src/southbridge/*/*/Kconfig"
comment "Super I/O"
source "src/superio/*/*/Kconfig"
comment "Embedded Controllers"
source "src/ec/acpi/Kconfig"
source "src/ec/*/*/Kconfig"

source "src/southbridge/intel/common/firmware/Kconfig"
source "src/vendorcode/*/Kconfig"

source "src/arch/*/Kconfig"

endmenu

source "src/device/Kconfig"

menu "Generic Drivers"
source "src/drivers/*/Kconfig"
source "src/drivers/*/*/Kconfig"
source "src/commonlib/storage/Kconfig"
endmenu

menu "Security"

source "src/security/Kconfig"
source "src/vendorcode/eltan/security/Kconfig"

endmenu

source "src/acpi/Kconfig"

# This option is for the current boards/chipsets where SPI flash
# is not the boot device. Currently nearly all boards/chipsets assume
# SPI flash is the boot device.
config BOOT_DEVICE_NOT_SPI_FLASH
	bool
	default n

config BOOT_DEVICE_SPI_FLASH
	bool
	default y if !BOOT_DEVICE_NOT_SPI_FLASH
	default n

config BOOT_DEVICE_MEMORY_MAPPED
	bool
	default y if ARCH_X86 && BOOT_DEVICE_SPI_FLASH
	default n
	help
	  Inform system if SPI is memory-mapped or not.

config BOOT_DEVICE_SUPPORTS_WRITES
	bool
	default n
	help
	  Indicate that the platform has writable boot device
	  support.

config RTC
	bool
	default n

config HEAP_SIZE
	hex
	default 0x100000 if FLATTENED_DEVICE_TREE
	default 0x4000

config STACK_SIZE
	hex
	default 0x1000 if ARCH_X86
	default 0x0

config MAX_CPUS
	int
	default 1

source "src/console/Kconfig"

config HAVE_ACPI_RESUME
	bool
	default n
	depends on RELOCATABLE_RAMSTAGE

config DISABLE_ACPI_HIBERNATE
	bool
	default n
	help
	  Removes S4 from the available sleepstates

config RESUME_PATH_SAME_AS_BOOT
	bool
	default y if ARCH_X86
	depends on HAVE_ACPI_RESUME
	help
	  This option indicates that when a system resumes it takes the
	  same path as a regular boot. e.g. an x86 system runs from the
	  reset vector at 0xfffffff0 on both resume and warm/cold boot.

config NO_MONOTONIC_TIMER
	def_bool n

config HAVE_MONOTONIC_TIMER
	bool
	depends on !NO_MONOTONIC_TIMER
	default y
	help
	 The board/chipset provides a monotonic timer.

config GENERIC_UDELAY
	bool
	depends on HAVE_MONOTONIC_TIMER
	default y if !ARCH_X86
	help
	 The board/chipset uses a generic udelay function utilizing the
	 monotonic timer.

config TIMER_QUEUE
	def_bool n
	depends on HAVE_MONOTONIC_TIMER
	help
	  Provide a timer queue for performing time-based callbacks.

config COOP_MULTITASKING
	def_bool n
	depends on TIMER_QUEUE && ARCH_X86
	help
	  Cooperative multitasking allows callbacks to be multiplexed on the
	  main thread of ramstage. With this enabled it allows for multiple
	  execution paths to take place when they have udelay() calls within
	  their code.

config NUM_THREADS
	int
	default 4
	depends on COOP_MULTITASKING
	help
	  How many execution threads to cooperatively multitask with.

config HAVE_OPTION_TABLE
	bool
	default n
	help
	  This variable specifies whether a given board has a cmos.layout
	  file containing NVRAM/CMOS bit definitions.
	  It defaults to 'n' but can be selected in mainboard/*/Kconfig.

config PCI_IO_CFG_EXT
	bool
	default n

config IOAPIC
	bool
	default n

config USE_WATCHDOG_ON_BOOT
	bool
	default n

config GFXUMA
	bool
	default n
	help
	  Enable Unified Memory Architecture for graphics.

config HAVE_MP_TABLE
	bool
	help
	  This variable specifies whether a given board has MP table support.
	  It is usually set in mainboard/*/Kconfig.
	  Whether or not the MP table is actually generated by coreboot
	  is configurable by the user via GENERATE_MP_TABLE.

config HAVE_PIRQ_TABLE
	bool
	help
	  This variable specifies whether a given board has PIRQ table support.
	  It is usually set in mainboard/*/Kconfig.
	  Whether or not the PIRQ table is actually generated by coreboot
	  is configurable by the user via GENERATE_PIRQ_TABLE.

config COMMON_FADT
	bool
	default n

config ACPI_NHLT
	bool
	default n
	help
	  Build support for NHLT (non HD Audio) ACPI table generation.

#These Options are here to avoid "undefined" warnings.
#The actual selection and help texts are in the following menu.

menu "System tables"

config GENERATE_MP_TABLE
	prompt "Generate an MP table" if HAVE_MP_TABLE || DRIVERS_GENERIC_IOAPIC
	bool
	default HAVE_MP_TABLE || DRIVERS_GENERIC_IOAPIC
	help
	  Generate an MP table (conforming to the Intel MultiProcessor
	  specification 1.4) for this board.

	  If unsure, say Y.

config GENERATE_PIRQ_TABLE
	prompt "Generate a PIRQ table" if HAVE_PIRQ_TABLE
	bool
	default HAVE_PIRQ_TABLE
	help
	  Generate a PIRQ table for this board.

	  If unsure, say Y.

config GENERATE_SMBIOS_TABLES
	depends on ARCH_X86
	bool "Generate SMBIOS tables"
	default y
	help
	  Generate SMBIOS tables for this board.

	  If unsure, say Y.

config SMBIOS_PROVIDED_BY_MOBO
	bool
	default n

config MAINBOARD_SERIAL_NUMBER
	prompt "SMBIOS Serial Number" if !SMBIOS_PROVIDED_BY_MOBO
	string
	depends on GENERATE_SMBIOS_TABLES
	default "123456789"
	help
	  The Serial Number to store in SMBIOS structures.

config MAINBOARD_VERSION
	prompt "SMBIOS Version Number" if !SMBIOS_PROVIDED_BY_MOBO
	string
	depends on GENERATE_SMBIOS_TABLES
	default "1.0"
	help
	  The Version Number to store in SMBIOS structures.

config MAINBOARD_SMBIOS_MANUFACTURER
	prompt "SMBIOS Manufacturer" if !SMBIOS_PROVIDED_BY_MOBO
	string
	depends on GENERATE_SMBIOS_TABLES
	default MAINBOARD_VENDOR
	help
	  Override the default Manufacturer stored in SMBIOS structures.

config MAINBOARD_SMBIOS_PRODUCT_NAME
	prompt "SMBIOS Product name" if !SMBIOS_PROVIDED_BY_MOBO
	string
	depends on GENERATE_SMBIOS_TABLES
	default MAINBOARD_PART_NUMBER
	help
	  Override the default Product name stored in SMBIOS structures.

config SMBIOS_ENCLOSURE_TYPE
	hex
	depends on GENERATE_SMBIOS_TABLES
	default 0x09 if SYSTEM_TYPE_LAPTOP
	default 0x1e if SYSTEM_TYPE_TABLET
	default 0x1f if SYSTEM_TYPE_CONVERTIBLE
	default 0x20 if SYSTEM_TYPE_DETACHABLE
	default 0x03
	help
	  System Enclosure or Chassis Types as defined in SMBIOS specification.
	  The default value is SMBIOS_ENCLOSURE_DESKTOP (0x03) but laptop,
	  convertible, or tablet enclosure will be used if the appropriate
	  system type is selected.

endmenu

source "payloads/Kconfig"

menu "Debugging"

comment "CPU Debug Settings"
source "src/cpu/*/Kconfig.debug_cpu"

comment "BLOB Debug Settings"
source "src/drivers/intel/fsp*/Kconfig.debug_blob"

comment "General Debug Settings"

# TODO: Better help text and detailed instructions.
config GDB_STUB
	bool "GDB debugging support"
	default n
	depends on DRIVERS_UART
	help
	  If enabled, you will be able to set breakpoints for gdb debugging.
	  See src/arch/x86/lib/c_start.S for details.

config GDB_WAIT
	bool "Wait for a GDB connection in the ramstage"
	default n
	depends on GDB_STUB
	help
	  If enabled, coreboot will wait for a GDB connection in the ramstage.


config FATAL_ASSERTS
	bool "Halt when hitting a BUG() or assertion error"
	default n
	help
	  If enabled, coreboot will call hlt() on a BUG() or failed ASSERT().

config HAVE_DEBUG_GPIO
	bool

config DEBUG_GPIO
	bool "Output verbose GPIO debug messages"
	depends on HAVE_DEBUG_GPIO

config DEBUG_CBFS
	bool "Output verbose CBFS debug messages"
	default n
	help
	  This option enables additional CBFS related debug messages.

config HAVE_DEBUG_RAM_SETUP
	def_bool n

config DEBUG_RAM_SETUP
	bool "Output verbose RAM init debug messages"
	default n
	depends on HAVE_DEBUG_RAM_SETUP
	help
	  This option enables additional RAM init related debug messages.
	  It is recommended to enable this when debugging issues on your
	  board which might be RAM init related.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config DEBUG_PIRQ
	bool "Check PIRQ table consistency"
	default n
	depends on GENERATE_PIRQ_TABLE
	help
	  If unsure, say N.

config HAVE_DEBUG_SMBUS
	def_bool n

config DEBUG_SMBUS
	bool "Output verbose SMBus debug messages"
	default n
	depends on HAVE_DEBUG_SMBUS
	help
	  This option enables additional SMBus (and SPD) debug messages.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config DEBUG_SMI
	bool "Output verbose SMI debug messages"
	default n
	depends on HAVE_SMI_HANDLER
	select SPI_FLASH_SMM if SPI_CONSOLE || CONSOLE_SPI_FLASH
	help
	  This option enables additional SMI related debug messages.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

# Only visible if debug level is DEBUG (7) or SPEW (8) as it does additional
# printk(BIOS_DEBUG, ...) calls.
config DEBUG_MALLOC
	prompt "Output verbose malloc debug messages" if DEFAULT_CONSOLE_LOGLEVEL_7 || DEFAULT_CONSOLE_LOGLEVEL_8
	bool
	default n
	help
	  This option enables additional malloc related debug messages.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config DEBUG_CONSOLE_INIT
	bool "Debug console initialisation code"
	default n
	help
	  With this option printk()'s are attempted before console hardware
	  initialisation has been completed. Your mileage may vary.

	  Typically you will need to modify source in console_hw_init() such
	  that a working console appears before the one you want to debug.

	  If unsure, say N.

# Only visible if debug level is DEBUG (7) or SPEW (8) as it does additional
# printk(BIOS_DEBUG, ...) calls.
config REALMODE_DEBUG
	prompt "Enable debug messages for option ROM execution" if DEFAULT_CONSOLE_LOGLEVEL_7 || DEFAULT_CONSOLE_LOGLEVEL_8
	bool
	default n
	depends on PCI_OPTION_ROM_RUN_REALMODE
	help
	  This option enables additional x86emu related debug messages.

	  Note: This option will increase the time to emulate a ROM.

	  If unsure, say N.

config X86EMU_DEBUG
	bool "Output verbose x86emu debug messages"
	default n
	depends on PCI_OPTION_ROM_RUN_YABEL
	help
	  This option enables additional x86emu related debug messages.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_JMP
	bool "Trace JMP/RETF"
	default n
	depends on X86EMU_DEBUG
	help
	  Print information about JMP and RETF opcodes from x86emu.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_TRACE
	bool "Trace all opcodes"
	default n
	depends on X86EMU_DEBUG
	help
	  Print _all_ opcodes that are executed by x86emu.

	  WARNING: This will produce a LOT of output and take a long time.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_PNP
	bool "Log Plug&Play accesses"
	default n
	depends on X86EMU_DEBUG
	help
	  Print Plug And Play accesses made by option ROMs.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_DISK
	bool "Log Disk I/O"
	default n
	depends on X86EMU_DEBUG
	help
	  Print Disk I/O related messages.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_PMM
	bool "Log PMM"
	default n
	depends on X86EMU_DEBUG
	help
	  Print messages related to POST Memory Manager (PMM).

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.


config X86EMU_DEBUG_VBE
	bool "Debug VESA BIOS Extensions"
	default n
	depends on X86EMU_DEBUG
	help
	  Print messages related to VESA BIOS Extension (VBE) functions.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_INT10
	bool "Redirect INT10 output to console"
	default n
	depends on X86EMU_DEBUG
	help
	  Let INT10 (i.e. character output) calls print messages to debug output.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_INTERRUPTS
	bool "Log intXX calls"
	default n
	depends on X86EMU_DEBUG
	help
	  Print messages related to interrupt handling.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_CHECK_VMEM_ACCESS
	bool "Log special memory accesses"
	default n
	depends on X86EMU_DEBUG
	help
	  Print messages related to accesses to certain areas of the virtual
	  memory (e.g. BDA (BIOS Data Area) or interrupt vectors)

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_MEM
	bool "Log all memory accesses"
	default n
	depends on X86EMU_DEBUG
	help
	  Print memory accesses made by option ROM.
	  Note: This also includes accesses to fetch instructions.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_IO
	bool "Log IO accesses"
	default n
	depends on X86EMU_DEBUG
	help
	  Print I/O accesses made by option ROM.

	  Note: This option will increase the size of the coreboot image.

	  If unsure, say N.

config X86EMU_DEBUG_TIMINGS
	bool "Output timing information"
	default n
	depends on X86EMU_DEBUG && HAVE_MONOTONIC_TIMER
	help
	  Print timing information needed by i915tool.

	  If unsure, say N.

config DEBUG_SPI_FLASH
	bool "Output verbose SPI flash debug messages"
	default n
	depends on SPI_FLASH
	help
	  This option enables additional SPI flash related debug messages.

if SOUTHBRIDGE_INTEL_BD82X6X && DEFAULT_CONSOLE_LOGLEVEL_8
# Only visible with the right southbridge and loglevel.
config DEBUG_INTEL_ME
	bool "Verbose logging for Intel Management Engine"
	default n
	help
	  Enable verbose logging for Intel Management Engine driver that
	  is present on Intel 6-series chipsets.
endif

config TRACE
	bool "Trace function calls"
	default n
	help
	  If enabled, every function will print information to console once
	  the function is entered. The syntax is ~0xaaaabbbb(0xccccdddd)
	  the 0xaaaabbbb is the actual function and 0xccccdddd is EIP
	  of calling function. Please note some printk related functions
	  are omitted from trace to have good looking console dumps.

config DEBUG_COVERAGE
	bool "Debug code coverage"
	default n
	depends on COVERAGE
	help
	  If enabled, the code coverage hooks in coreboot will output some
	  information about the coverage data that is dumped.

config DEBUG_BOOT_STATE
	bool "Debug boot state machine"
	default n
	help
	  Control debugging of the boot state machine.  When selected displays
	  the state boundaries in ramstage.

config DEBUG_ADA_CODE
	bool "Compile debug code in Ada sources"
	default n
	help
	  Add the compiler switch `-gnata` to compile code guarded by
	  `pragma Debug`.

config HAVE_EM100_SUPPORT
	bool "Platform can support the Dediprog EM100 SPI emulator"
	help
	  This is enabled by platforms which can support using the EM100.

config EM100
	bool "Configure image for EM100 usage"
	depends on HAVE_EM100_SUPPORT
	help
	  The Dediprog EM100 SPI emulator allows fast loading of new SPI images
	  over USB. However it only supports a maximum SPI clock of 20MHz and
	  single data output. Enable this option to use a 20MHz SPI clock and
	  disable "Dual Output Fast Read" Support.

	  On AMD platforms this changes the SPI speed at run-time if the
	  mainboard code supports this. On supported Intel platforms this works
	  by changing the settings in the descriptor.bin file.

endmenu


###############################################################################
# Set variables with no prompt - these can be set anywhere, and putting at
# the end of this file gives the most flexibility.

source "src/lib/Kconfig"

config WARNINGS_ARE_ERRORS
	bool
	default y

# The four POWER_BUTTON_DEFAULT_ENABLE, POWER_BUTTON_DEFAULT_DISABLE,
# POWER_BUTTON_FORCE_ENABLE and POWER_BUTTON_FORCE_DISABLE options are
# mutually exclusive. One of these options must be selected in the
# mainboard Kconfig if the chipset supports enabling and disabling of
# the power button. Chipset code uses the ENABLE_POWER_BUTTON option set
# in mainboard/Kconfig to know if the button should be enabled or not.

config POWER_BUTTON_DEFAULT_ENABLE
	def_bool n
	help
	  Select when the board has a power button which can optionally be
	  disabled by the user.

config POWER_BUTTON_DEFAULT_DISABLE
	def_bool n
	help
	  Select when the board has a power button which can optionally be
	  enabled by the user, e.g. when the board ships with a jumper over
	  the power switch contacts.

config POWER_BUTTON_FORCE_ENABLE
	def_bool n
	help
	  Select when the board requires that the power button is always
	  enabled.

config POWER_BUTTON_FORCE_DISABLE
	def_bool n
	help
	  Select when the board requires that the power button is always
	  disabled, e.g. when it has been hardwired to ground.

config POWER_BUTTON_IS_OPTIONAL
	bool
	default y if POWER_BUTTON_DEFAULT_ENABLE || POWER_BUTTON_DEFAULT_DISABLE
	default n if !(POWER_BUTTON_DEFAULT_ENABLE || POWER_BUTTON_DEFAULT_DISABLE)
	help
	  Internal option that controls ENABLE_POWER_BUTTON visibility.

config REG_SCRIPT
	bool
	default n
	help
	  Internal option that controls whether we compile in register scripts.

config MAX_REBOOT_CNT
	int
	default 3
	help
	  Internal option that sets the maximum number of bootblock executions allowed
	  with the normal image enabled before assuming the normal image is defective
	  and switching to the fallback image.

config UNCOMPRESSED_RAMSTAGE
	bool

config NO_XIP_EARLY_STAGES
	bool
	default n if ARCH_X86
	default y
	help
	  Identify if early stages are eXecute-In-Place(XIP).

config EARLY_CBMEM_LIST
	bool
	default n
	help
	  Enable display of CBMEM during romstage and postcar.

config RELOCATABLE_MODULES
	bool
	help
	  If RELOCATABLE_MODULES is selected then support is enabled for
	  building relocatable modules in the RAM stage. Those modules can be
	  loaded anywhere and all the relocations are handled automatically.

config GENERIC_GPIO_LIB
	bool
	help
	  If enabled, compile the generic GPIO library. A "generic" GPIO
	  implies configurability usually found on SoCs, particularly the
	  ability to control internal pull resistors.

config BOOTBLOCK_CUSTOM
	# To be selected by arch, SoC or mainboard if it does not want use the normal
	# src/lib/bootblock.c#main() C entry point.
	bool

###############################################################################
# Set default values for symbols created before mainboards.  This allows the
# option to be displayed in the general menu, but the default to be loaded in
# the mainboard if desired.
config COMPRESS_RAMSTAGE
	default y if !UNCOMPRESSED_RAMSTAGE

config COMPRESS_PRERAM_STAGES
	depends on !ARCH_X86
	default y

config INCLUDE_CONFIG_FILE
	default y

config BOOTSPLASH_FILE
	depends on BOOTSPLASH_IMAGE
	default "bootsplash.jpg"

config CBFS_SIZE
	default ROM_SIZE

config HAVE_BOOTBLOCK
	bool
	default y

config HAVE_VERSTAGE
	bool
	depends on VBOOT_SEPARATE_VERSTAGE
	default y

config HAVE_ROMSTAGE
	bool
	default y

config HAVE_RAMSTAGE
	bool
	default n if RAMPAYLOAD
	default y
