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

menu "Devices"

config HAVE_VGA_TEXT_FRAMEBUFFER
	bool
	depends on !NO_GFX_INIT
	help
	  Selected by graphics drivers that support legacy VGA text mode.

config HAVE_VBE_LINEAR_FRAMEBUFFER
	bool
	depends on !NO_GFX_INIT
	help
	  Selected by graphics drivers that can set up a VBE linear-framebuffer
	  mode.

config HAVE_LINEAR_FRAMEBUFFER
	bool
	depends on !NO_GFX_INIT
	help
	  Selected by graphics drivers that can set up a generic linear
	  framebuffer.

config HAVE_FSP_GOP
	bool
	help
	  Selected by drivers that support to run a blob that implements
	  the Graphics Output Protocol (GOP).

config MAINBOARD_NO_FSP_GOP
	bool
	help
	  Selected by mainboards that do not have any graphics ports connected to the SoC.

config MAINBOARD_HAS_NATIVE_VGA_INIT
	def_bool n
	help
	  Selected by mainboards / drivers that provide native graphics
	  init within coreboot.

config MAINBOARD_FORCE_NATIVE_VGA_INIT
	def_bool n
	depends on MAINBOARD_HAS_NATIVE_VGA_INIT || MAINBOARD_HAS_LIBGFXINIT
	help
	  Selected by mainboards / chipsets whose graphics driver can't or
	  shouldn't be disabled.

config VGA_ROM_RUN_DEFAULT
	def_bool n
	help
	  Selected by mainboards whose graphics initialization depends on VGA OpROM.
	  coreboot needs to load/execute legacy VGA OpROM in order to initialize GFX.

config MAINBOARD_HAS_LIBGFXINIT
	def_bool n
	help
	  Selected by mainboards that implement support for `libgfxinit`.
	  Usually this requires a list of ports to be probed for displays.

choice
	prompt "Graphics initialization"
	default NO_GFX_INIT if VGA_ROM_RUN_DEFAULT && PAYLOAD_SEABIOS
	default VGA_ROM_RUN if VGA_ROM_RUN_DEFAULT
	default MAINBOARD_DO_NATIVE_VGA_INIT
	default MAINBOARD_USE_LIBGFXINIT
	default RUN_FSP_GOP if INTEL_GMA_HAVE_VBT

config MAINBOARD_DO_NATIVE_VGA_INIT
	bool "Use native graphics init"
	depends on MAINBOARD_HAS_NATIVE_VGA_INIT
	help
	  Some mainboards, such as the Google Link, allow initializing the
	  display without the need of a binary only VGA OPROM. Enabling this
	  option may be faster, but also lacks flexibility in setting modes.

config MAINBOARD_USE_LIBGFXINIT
	bool "Use libgfxinit"
	depends on MAINBOARD_HAS_LIBGFXINIT
	select HAVE_VGA_TEXT_FRAMEBUFFER
	select HAVE_LINEAR_FRAMEBUFFER
	select VGA if VGA_TEXT_FRAMEBUFFER
	help
	  Use the SPARK library `libgfxinit` for the native graphics
	  initialization. This requires an Ada toolchain.

# TODO: Explain differences (if any) for onboard cards.
config VGA_ROM_RUN
	bool "Run VGA Option ROMs"
	depends on PCI && (ARCH_X86 || ARCH_PPC64) && !MAINBOARD_FORCE_NATIVE_VGA_INIT
	select HAVE_VGA_TEXT_FRAMEBUFFER
	help
	  Execute VGA Option ROMs in coreboot if found. This can be used
	  to enable PCI/AGP/PCI-E video cards when not using a SeaBIOS
	  payload.

	  When using a SeaBIOS payload it runs all option ROMs with much
	  more complete BIOS interrupt services available than coreboot,
	  which some option ROMs require in order to function correctly.

config RUN_FSP_GOP
	bool "Run a GOP driver"
	depends on HAVE_FSP_GOP && !MAINBOARD_NO_FSP_GOP
	select HAVE_LINEAR_FRAMEBUFFER
	help
	  Some platforms (e.g. Intel Braswell and Skylake/Kaby Lake) support
	  to run a GOP blob. This option enables graphics initialization with
	  such a blob.

config NO_GFX_INIT
	bool "None"
	depends on !MAINBOARD_FORCE_NATIVE_VGA_INIT
	help
	  Select this to not perform any graphics initialization in
	  coreboot. This is useful if the payload (e.g. SeaBIOS) can
	  initialize graphics or if pre-boot graphics are not required.

endchoice

config PRE_GRAPHICS_DELAY_MS
	int "Graphics initialization delay in ms"
	default 0
	depends on VGA_ROM_RUN
	help
	  On some systems, coreboot boots so fast that connected monitors
	  (mostly TVs) won't be able to wake up fast enough to talk to the
	  VBIOS. On those systems we need to wait for a bit before executing
	  the VBIOS.

config ONBOARD_VGA_IS_PRIMARY
	bool "Use onboard VGA as primary video device"
	default n
	depends on PCI
	help
	  This option lets you select which VGA device will be used
	  to decode legacy VGA cycles. Not all chipsets implement this
	  however. If not selected, the last adapter found will be used,
	  else the onboard adapter is used.

config S3_VGA_ROM_RUN
	bool "Re-run VGA Option ROMs on S3 resume"
	default y
	depends on VGA_ROM_RUN && HAVE_ACPI_RESUME
	help
	  Execute VGA Option ROMs in coreboot when resuming from S3 suspend.

	  When using a SeaBIOS payload it runs all option ROMs with much
	  more complete BIOS interrupt services available than coreboot,
	  which some option ROMs require in order to function correctly.

	  If unsure, say N when using SeaBIOS as payload, Y otherwise.

config ALWAYS_LOAD_OPROM
	def_bool n
	depends on VGA_ROM_RUN
	help
	  Always load option ROMs if any are found. The decision to run
	  the ROM is still determined at runtime, but the distinction
	  between loading and not running comes into play for CHROMEOS.

	  An example where this is required is that VBT (Video BIOS Tables)
	  are needed for the kernel's display driver to know how a piece of
	  hardware is configured to be used.

config ALWAYS_RUN_OPROM
	def_bool n
	depends on VGA_ROM_RUN && ALWAYS_LOAD_OPROM
	help
	  Always unconditionally run the option regardless of other
	  policies.

config ON_DEVICE_ROM_LOAD
	bool "Load Option ROMs on PCI devices"
	default n if PAYLOAD_SEABIOS
	default y if !PAYLOAD_SEABIOS
	depends on VGA_ROM_RUN
	help
	  Load Option ROMs stored on PCI/PCIe/AGP VGA devices in coreboot.

	  If disabled, only Option ROMs stored in CBFS will be executed by
	  coreboot. If you are concerned about security, you might want to
	  disable this option, but it might leave your system in a state of
	  degraded functionality.

	  When using a SeaBIOS payload it runs all option ROMs with much
	  more complete BIOS interrupt services available than coreboot,
	  which some option ROMs require in order to function correctly.

	  If unsure, say N when using SeaBIOS as payload, Y otherwise.

choice
	prompt "Option ROM execution type"
	default PCI_OPTION_ROM_RUN_YABEL if !ARCH_X86
	default PCI_OPTION_ROM_RUN_REALMODE if ARCH_X86
	depends on VGA_ROM_RUN

config PCI_OPTION_ROM_RUN_REALMODE
	prompt "Native mode"
	bool
	depends on ARCH_X86
	help
	  If you select this option, PCI Option ROMs will be executed
	  natively on the CPU in real mode. No CPU emulation is involved,
	  so this is the fastest, but also the least secure option.
	  (only works on x86/x64 systems)

config PCI_OPTION_ROM_RUN_YABEL
	prompt "Secure mode"
	bool
	help
	  If you select this option, the x86emu CPU emulator will be used to
	  execute PCI Option ROMs.

	  This option prevents Option ROMs from doing dirty tricks with the
	  system (such as installing SMM modules or hypervisors), but it is
	  also significantly slower than the native Option ROM initialization
	  method.

	  This is the default choice for non-x86 systems.

endchoice

config YABEL_PCI_ACCESS_OTHER_DEVICES
	prompt "Allow Option ROMs to access other devices"
	bool
	depends on PCI_OPTION_ROM_RUN_YABEL
	help
	  Per default, YABEL only allows Option ROMs to access the PCI device
	  that they are associated with. However, this causes trouble for some
	  onboard graphics chips whose Option ROM needs to reconfigure the
	  north bridge.

config YABEL_PCI_FAKE_WRITING_OTHER_DEVICES_CONFIG
	prompt "Fake success on writing other device's config space"
	bool
	depends on YABEL_PCI_ACCESS_OTHER_DEVICES
	help
	  By default, YABEL aborts when the Option ROM tries to write to other
	  devices' config spaces. With this option enabled, the write doesn't
	  follow through, but the Option ROM is allowed to go on.
	  This can create issues such as hanging Option ROMs (if it depends on
	  that other register changing to the written value), so test for
	  impact before using this option.

config YABEL_VIRTMEM_LOCATION
	prompt "Location of YABEL's virtual memory"
	hex
	depends on PCI_OPTION_ROM_RUN_YABEL
	default 0x1000000
	help
	  YABEL requires 1MB memory for its CPU emulation. This memory is
	  normally located at 16MB.

config YABEL_DIRECTHW
	prompt "Direct hardware access"
	bool
	depends on PCI_OPTION_ROM_RUN_YABEL && ARCH_X86
	help
	  YABEL consists of two parts: It uses x86emu for the CPU emulation and
	  additionally provides a PC system emulation that filters bad device
	  and memory access (such as PCI config space access to other devices
	  than the initialized one).

	  When choosing this option, x86emu will pass through all hardware
	  accesses to memory and I/O devices to the underlying memory and I/O
	  addresses. While this option prevents Option ROMs from doing dirty
	  tricks with the CPU (such as installing SMM modules or hypervisors),
	  they can still access all devices in the system.
	  Enable this option for a good compromise between security and speed.

config MULTIPLE_VGA_ADAPTERS
	bool
	default n

menu "Display"
	depends on HAVE_VGA_TEXT_FRAMEBUFFER || HAVE_LINEAR_FRAMEBUFFER

config FRAMEBUFFER_SET_VESA_MODE
	prompt "Set framebuffer graphics resolution"
	bool
	default y if CHROMEOS
	depends on PCI_OPTION_ROM_RUN_YABEL || PCI_OPTION_ROM_RUN_REALMODE
	select HAVE_VBE_LINEAR_FRAMEBUFFER
	help
	  Set VESA/native framebuffer mode (needed for bootsplash and graphical framebuffer console)

if FRAMEBUFFER_SET_VESA_MODE

choice
	prompt "framebuffer graphics resolution"
	default FRAMEBUFFER_VESA_MODE_118
	help
	  This option sets the resolution used for the coreboot framebuffer (and
	  bootsplash screen).

config FRAMEBUFFER_VESA_MODE_100
	bool "640x400 256-color"

config FRAMEBUFFER_VESA_MODE_101
	bool "640x480 256-color"

config FRAMEBUFFER_VESA_MODE_102
	bool "800x600 16-color"

config FRAMEBUFFER_VESA_MODE_103
	bool "800x600 256-color"

config FRAMEBUFFER_VESA_MODE_104
	bool "1024x768 16-color"

config FRAMEBUFFER_VESA_MODE_105
	bool "1024x768 256-color"

config FRAMEBUFFER_VESA_MODE_106
	bool "1280x1024 16-color"

config FRAMEBUFFER_VESA_MODE_107
	bool "1280x1024 256-color"

config FRAMEBUFFER_VESA_MODE_108
	bool "80x60 text"

config FRAMEBUFFER_VESA_MODE_109
	bool "132x25 text"

config FRAMEBUFFER_VESA_MODE_10A
	bool "132x43 text"

config FRAMEBUFFER_VESA_MODE_10B
	bool "132x50 text"

config FRAMEBUFFER_VESA_MODE_10C
	bool "132x60 text"

config FRAMEBUFFER_VESA_MODE_10D
	bool "320x200 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_10E
	bool "320x200 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_10F
	bool "320x200 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_110
	bool "640x480 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_111
	bool "640x480 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_112
	bool "640x480 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_113
	bool "800x600 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_114
	bool "800x600 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_115
	bool "800x600 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_116
	bool "1024x768 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_117
	bool "1024x768 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_118
	bool "1024x768 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_119
	bool "1280x1024 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_11A
	bool "1280x1024 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_11B
	bool "1280x1024 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_USER
	bool "Manually select VESA mode"

endchoice

# Map the config names to an integer (KB).
config FRAMEBUFFER_VESA_MODE
	prompt "VESA mode" if FRAMEBUFFER_VESA_MODE_USER
	hex
	default 0x100 if FRAMEBUFFER_VESA_MODE_100
	default 0x101 if FRAMEBUFFER_VESA_MODE_101
	default 0x102 if FRAMEBUFFER_VESA_MODE_102
	default 0x103 if FRAMEBUFFER_VESA_MODE_103
	default 0x104 if FRAMEBUFFER_VESA_MODE_104
	default 0x105 if FRAMEBUFFER_VESA_MODE_105
	default 0x106 if FRAMEBUFFER_VESA_MODE_106
	default 0x107 if FRAMEBUFFER_VESA_MODE_107
	default 0x108 if FRAMEBUFFER_VESA_MODE_108
	default 0x109 if FRAMEBUFFER_VESA_MODE_109
	default 0x10A if FRAMEBUFFER_VESA_MODE_10A
	default 0x10B if FRAMEBUFFER_VESA_MODE_10B
	default 0x10C if FRAMEBUFFER_VESA_MODE_10C
	default 0x10D if FRAMEBUFFER_VESA_MODE_10D
	default 0x10E if FRAMEBUFFER_VESA_MODE_10E
	default 0x10F if FRAMEBUFFER_VESA_MODE_10F
	default 0x110 if FRAMEBUFFER_VESA_MODE_110
	default 0x111 if FRAMEBUFFER_VESA_MODE_111
	default 0x112 if FRAMEBUFFER_VESA_MODE_112
	default 0x113 if FRAMEBUFFER_VESA_MODE_113
	default 0x114 if FRAMEBUFFER_VESA_MODE_114
	default 0x115 if FRAMEBUFFER_VESA_MODE_115
	default 0x116 if FRAMEBUFFER_VESA_MODE_116
	default 0x117 if FRAMEBUFFER_VESA_MODE_117
	default 0x118 if FRAMEBUFFER_VESA_MODE_118
	default 0x119 if FRAMEBUFFER_VESA_MODE_119
	default 0x11A if FRAMEBUFFER_VESA_MODE_11A
	default 0x11B if FRAMEBUFFER_VESA_MODE_11B
	default 0x118 if FRAMEBUFFER_VESA_MODE_USER
endif # FRAMEBUFFER_SET_VESA_MODE

config WANT_LINEAR_FRAMEBUFFER
	bool
	default y if CHROMEOS
	default y if PAYLOAD_TIANOCORE

choice
	prompt "Framebuffer mode"
	default VBE_LINEAR_FRAMEBUFFER if HAVE_VBE_LINEAR_FRAMEBUFFER && WANT_LINEAR_FRAMEBUFFER
	default GENERIC_LINEAR_FRAMEBUFFER if HAVE_LINEAR_FRAMEBUFFER && WANT_LINEAR_FRAMEBUFFER
	default VGA_TEXT_FRAMEBUFFER

config VGA_TEXT_FRAMEBUFFER
	bool "Legacy VGA text mode"
	depends on HAVE_VGA_TEXT_FRAMEBUFFER
	help
	  If this option is enabled, coreboot will initialize graphics in
	  legacy VGA text mode or, if a VGA BIOS is used and a VESA mode set,
	  switch to text mode before handing control to a payload.

config VBE_LINEAR_FRAMEBUFFER
	bool "VESA framebuffer"
	depends on HAVE_VBE_LINEAR_FRAMEBUFFER
	help
	  This option keeps the framebuffer mode set after coreboot finishes
	  execution. If this option is enabled, coreboot will pass a
	  framebuffer entry in its coreboot table and the payload will need a
	  compatible driver.

config GENERIC_LINEAR_FRAMEBUFFER
	bool "Linear \"high-resolution\" framebuffer"
	depends on HAVE_LINEAR_FRAMEBUFFER
	help
	  This option enables a high-resolution, linear framebuffer. If this
	  option is enabled, coreboot will pass a framebuffer entry in its
	  coreboot table and the payload will need a compatible driver.

endchoice

# Workaround to have LINEAR_FRAMEBUFFER set in both cases
# VBE_LINEAR_FRAMEBUFFER and GENERIC_LINEAR_FRAMEBUFFER.
# `kconfig_lint` doesn't let us use the same name with
# different texts in the choice above.
config LINEAR_FRAMEBUFFER
	def_bool y
	depends on VBE_LINEAR_FRAMEBUFFER || GENERIC_LINEAR_FRAMEBUFFER

config BOOTSPLASH
	prompt "Show graphical bootsplash"
	bool
	depends on LINEAR_FRAMEBUFFER
	help
	  This option shows a graphical bootsplash screen. The graphics are
	  loaded from the CBFS file bootsplash.jpg.

	  You can either specify the location and file name of the
	  image in the 'General' section or add it manually to CBFS, using,
	  for example, cbfstool.

config LINEAR_FRAMEBUFFER_MAX_WIDTH
	int "Maximum width in pixels"
	depends on LINEAR_FRAMEBUFFER && MAINBOARD_USE_LIBGFXINIT
	default 2560
	help
	  Set the maximum width of the framebuffer. This may help with
	  default fonts too tiny for high-resolution displays.

config LINEAR_FRAMEBUFFER_MAX_HEIGHT
	int "Maximum height in pixels"
	depends on LINEAR_FRAMEBUFFER && MAINBOARD_USE_LIBGFXINIT
	default 1600
	help
	  Set the maximum height of the framebuffer. This may help with
	  default fonts too tiny for high-resolution displays.

endmenu # "Display"

config PCI
	bool
	default n

if PCI

config NO_MMCONF_SUPPORT
	bool
	default n

config MMCONF_SUPPORT
	bool
	default !NO_MMCONF_SUPPORT

config PCIX_PLUGIN_SUPPORT
	bool
	default y

config CARDBUS_PLUGIN_SUPPORT
	bool
	default y

config AZALIA_PLUGIN_SUPPORT
	bool
	default n

config AZALIA_MAX_CODECS
	int
	depends on AZALIA_PLUGIN_SUPPORT
	default 3
	range 1 15
	help
	  The maximum number of codecs supported on a single HD Audio controller.

config AZALIA_LOCK_DOWN_R_WO_GCAP
	def_bool n
	depends on AZALIA_PLUGIN_SUPPORT
	help
	  The GCAP register is implemented as R/WO (Read / Write Once) on some
	  HD Audio controllers, such as Intel 6-series PCHs. Select this option
	  to lock down the GCAP register after deasserting the controller reset
	  bit. Locking is done by reading GCAP and writing back the read value.

config PCIEXP_PLUGIN_SUPPORT
	bool
	default y

config MMCONF_BASE_ADDRESS
	hex
	depends on MMCONF_SUPPORT

config MMCONF_BUS_NUMBER
	int
	depends on MMCONF_SUPPORT

config MMCONF_LENGTH
	hex
	depends on MMCONF_SUPPORT
	default 0x04000000 if MMCONF_BUS_NUMBER = 64
	default 0x08000000 if MMCONF_BUS_NUMBER = 128
	default 0x10000000 if MMCONF_BUS_NUMBER = 256
	default 0x0

config PCI_ALLOW_BUS_MASTER
	bool "Allow coreboot to set optional PCI bus master bits"
	default y
	help
	  For security reasons, bus mastering should be enabled as late as
	  possible. In coreboot, it's usually not necessary and payloads
	  should only enable it for devices they use. Since not all payloads
	  enable bus mastering properly yet, this option gives some sort of
	  "backwards compatibility" and is enabled by default to keep the
	  traditional behaviour for now. This is currently necessary, for
	  instance, for libpayload based payloads as the drivers don't enable
	  bus mastering for PCI bridges.

if PCI_ALLOW_BUS_MASTER

config PCI_SET_BUS_MASTER_PCI_BRIDGES
	bool "PCI bridges"
	default y
	help
	  Let coreboot configure bus mastering for PCI bridges. Enabling bus
	  mastering for a PCI bridge also allows it to forward requests from
	  downstream devices. Currently, payloads ignore this and only enable
	  bus mastering for the downstream device. Hence, this option is needed
	  for compatibility until payloads are fixed.

config PCI_ALLOW_BUS_MASTER_ANY_DEVICE
	bool "Any devices"
	default y
	select PCI_SET_BUS_MASTER_PCI_BRIDGES
	help
	  Allow coreboot to enable PCI bus mastering for any device. The actual
	  selection of devices depends on the various PCI drivers in coreboot.

endif # PCI_ALLOW_BUS_MASTER

endif # PCI

if PCIEXP_PLUGIN_SUPPORT

config PCIEXP_COMMON_CLOCK
	prompt "Enable PCIe Common Clock"
	bool
	default n
	help
	  Detect and enable Common Clock on PCIe links.

config PCIEXP_ASPM
	prompt "Enable PCIe ASPM"
	bool
	default n
	help
	  Detect and enable ASPM (Active State Power Management) on PCIe links.

config PCIEXP_CLK_PM
	prompt "Enable PCIe Clock Power Management"
	bool
	default n
	help
	  Detect and enable Clock Power Management on PCIe.

config PCIEXP_L1_SUB_STATE
	prompt "Enable PCIe ASPM L1 SubState"
	bool
	depends on (MMCONF_SUPPORT || PCI_IO_CFG_EXT)
	default n
	help
	  Detect and enable ASPM on PCIe links.

config PCIEXP_HOTPLUG
	prompt "Enable PCIe Hotplug Support"
	bool
	default n
	help
	  Allocate resources for PCIe hotplug bridges

if PCIEXP_HOTPLUG

config PCIEXP_HOTPLUG_BUSES
	int "PCI Express Hotplug Buses"
	default  8 if MMCONF_SUPPORT && MMCONF_BUS_NUMBER <=  64
	default 16 if MMCONF_SUPPORT && MMCONF_BUS_NUMBER <= 128
	default 32
	help
	  This is the number of buses allocated for hotplug PCI express
	  bridges, for use by hotplugged child devices. The default is 32
	  buses.

config PCIEXP_HOTPLUG_MEM
	hex "PCI Express Hotplug Memory"
	default 0x800000
	help
	  This is the amount of memory space, in bytes, to allocate to
	  hotplug PCI express bridges, for use by hotplugged child devices.
	  This size should be page-aligned. The default is 8 MiB.

config PCIEXP_HOTPLUG_PREFETCH_MEM
	hex "PCI Express Hotplug Prefetch Memory"
	default 0x10000000
	help
	  This is the amount of pre-fetchable memory space, in bytes, to
	  allocate to hot-plug PCI express bridges, for use by hotplugged
	  child devices. This size should be page-aligned. The default is
	  256 MiB.

config PCIEXP_HOTPLUG_PREFETCH_MEM_ABOVE_4G
	bool
	depends on RESOURCE_ALLOCATOR_V4
	default y if !PCIEXP_HOTPLUG_PREFETCH_MEM_BELOW_4G
	default n
	help
	  This enables prefetch memory allocation above 4G boundary for the
	  hotplug resources.

config PCIEXP_HOTPLUG_PREFETCH_MEM_BELOW_4G
	bool "PCI Express Hotplug Prefetch Memory Allocation below 4G boundary"
	default n
	help
	  This enables prefetch memory allocation below 4G boundary for the
	  hotplug resources.

config PCIEXP_HOTPLUG_IO
	hex "PCI Express Hotplug I/O Space"
	default 0x2000
	help
	  This is the amount of I/O space to allocate to hot-plug PCI
	  express bridges, for use by hotplugged child devices. The default
	  is 8 KiB.

endif # PCIEXP_HOTPLUG

endif # PCIEXP_PLUGIN_SUPPORT

config EARLY_PCI_BRIDGE
	bool "Early PCI bridge"
	depends on PCI
	default n
	help
	  While coreboot is executing code from ROM, the coreboot resource
	  allocator has not been running yet. Hence PCI devices living behind
	  a bridge are not yet visible to the system.

	  This option enables static configuration for a single pre-defined
	  PCI bridge function on bus 0.

if EARLY_PCI_BRIDGE

config EARLY_PCI_BRIDGE_DEVICE
	hex "bridge device"
	default 0x0

config EARLY_PCI_BRIDGE_FUNCTION
	hex "bridge function"
	default 0x0

config EARLY_PCI_MMIO_BASE
	hex "MMIO window base"
	default 0x0

endif # EARLY_PCI_BRIDGE

config SUBSYSTEM_VENDOR_ID
	hex "Override PCI Subsystem Vendor ID"
	depends on PCI
	default 0x0000
	help
	  This config option will override the devicetree settings for
	  PCI Subsystem Vendor ID.

	  Note: This option is not meant for a board's Kconfig; use the
	  devicetree setting `subsystemid` instead.

config SUBSYSTEM_DEVICE_ID
	hex "Override PCI Subsystem Device ID"
	depends on PCI
	default 0x0000
	help
	  This config option will override the devicetree settings for
	  PCI Subsystem Device ID.

	  Note: This option is not meant for a board's Kconfig; use the
	  devicetree setting `subsystemid` instead.

config VGA_BIOS
	bool "Add a VGA BIOS image"
	depends on ARCH_X86
	select VGA_ROM_RUN_DEFAULT
	help
	  Select this option if you have a VGA BIOS image that you would
	  like to add to your ROM.

	  You will be able to specify the location and file name of the
	  image later.

config VGA_BIOS_FILE
	string "VGA BIOS path and filename"
	depends on VGA_BIOS
	default "vgabios.bin"
	help
	  The path and filename of the file to use as VGA BIOS.

config VGA_BIOS_ID
	string "VGA device PCI IDs"
	depends on VGA_BIOS
	default "1106,3230"
	help
	  The comma-separated PCI vendor and device ID with optional revision if that
	  feature is enabled that would associate your vBIOS to your video card.

	  Example: 1106,3230 or 1106,3230,a3

	  In the above example 1106 is the PCI vendor ID (in hex, but without
	  the "0x" prefix) and 3230 specifies the PCI device ID of the
	  video card (also in hex, without "0x" prefix). a3 specifies the revision.

	  Under GNU/Linux you can run `lspci -nn` to list the IDs of your PCI devices.

config VGA_BIOS_SECOND
	bool "Add a 2nd video BIOS image"
	depends on ARCH_X86 && VGA_BIOS
	help
	  Select this option if you have a 2nd video BIOS image that you would
	  like to add to your ROM.

config VGA_BIOS_SECOND_FILE
	string "2nd video BIOS path and filename"
	depends on VGA_BIOS_SECOND
	default "vbios2.bin"
	help
	  The path and filename of the file to use as video BIOS.

config VGA_BIOS_SECOND_ID
	string "Graphics device PCI IDs"
	depends on VGA_BIOS_SECOND
	help
	  The comma-separated PCI vendor and device ID with optional revision if that
	  feature is enabled that would associate your vBIOS to your video card.

	  Example: 1106,3230 or 1106,3230,a3

	  In the above example 1106 is the PCI vendor ID (in hex, but without
	  the "0x" prefix) and 3230 specifies the PCI device ID of the
	  video card (also in hex, without "0x" prefix). a3 specifies the revision.

	  Under GNU/Linux you can run `lspci -nn` to list the IDs of your PCI devices.

config CHECK_REV_IN_OPROM_NAME
	def_bool n
	help
	  Select this in the platform BIOS or chipset if the option rom has a revision
	  that needs to be checked when searching CBFS.

config VGA_BIOS_DGPU
	bool "Add a discrete VGA BIOS image"
	depends on VGA_BIOS
	help
	  Select this option if you have a VGA BIOS image for discrete GPU
	  that you would like to add to your ROM.

	  You will be able to specify the location and file name of the
	  image later.

config VGA_BIOS_DGPU_FILE
	string "Discrete VGA BIOS path and filename"
	depends on VGA_BIOS_DGPU
	default "vgabios_dgpu.bin"
	help
	  The path and filename of the file to use as VGA BIOS for discrete GPU.

config VGA_BIOS_DGPU_ID
	string "Discrete VGA device PCI IDs"
	depends on VGA_BIOS_DGPU
	default "1002,6663"
	help
	  The comma-separated PCI vendor and device ID that would associate
	  your VGA BIOS to your discrete video card.

	  Examples:
	      1002,6663 for HD 8570M
	      1002,6665 for R5 M230

	  In the above examples 1002 is the PCI vendor ID (in hex, but without
	  the "0x" prefix) and 6663 / 6665 specifies the PCI device ID of the
	  discrete video card (also in hex, without "0x" prefix).

	  Under GNU/Linux you can run `lspci -nn` to list the IDs of your PCI devices.

config INTEL_GMA_HAVE_VBT
	bool
	help
	  Select this in the mainboard Kconfig to indicate the board has
	  a data.vbt file.

config INTEL_GMA_ADD_VBT
	depends on SOC_INTEL_COMMON || CPU_INTEL_COMMON
	bool "Add a Video BIOS Table (VBT) binary to CBFS"
	default y if INTEL_GMA_HAVE_VBT
	help
	  Add a VBT data file to CBFS. The VBT describes the integrated
	  GPU and connections, and is needed by the GOP driver integrated into
	  FSP and the OS driver in order to initialize the display.

config INTEL_GMA_VBT_FILE
	string "VBT binary path and filename"
	depends on INTEL_GMA_ADD_VBT
	default "src/mainboard/\$(MAINBOARDDIR)/variants/\$(VARIANT_DIR)/data.vbt" \
		if INTEL_GMA_HAVE_VBT && VARIANT_DIR != ""
	default "src/mainboard/\$(MAINBOARDDIR)/data.vbt" if INTEL_GMA_HAVE_VBT
	default "3rdparty/blobs/mainboard/\$(MAINBOARDDIR)/vbt.bin"
	help
	  The path and filename of the VBT binary.

config SOFTWARE_I2C
	bool "Enable I2C controller emulation in software"
	default n
	help
	  This config option will enable code to override the i2c_transfer
	  routine with a (simple) software emulation of the protocol. This may
	  be useful for debugging or on platforms where a driver for the real
	  I2C controller is not (yet) available. The platform code needs to
	  provide bindings to manually toggle I2C lines.

config RESOURCE_ALLOCATOR_V3
	bool
	default n
	help
	  This config option enables resource allocator v3 which performs
	  top down allocation of resources in a single MMIO window. This is the
	  old resource allocator meant to be used only until the broken AMD
	  chipsets are fixed. DO NOT USE THIS FOR ANY NEW CHIPSETS!

config RESOURCE_ALLOCATOR_V4
	bool
	default n if RESOURCE_ALLOCATOR_V3
	default y if !RESOURCE_ALLOCATOR_V3
	help
	  This config option enables resource allocator v4 which uses multiple
	  ranges for allocating resources. This allows allocation of resources
	  above 4G boundary as well.

config XHCI_UTILS
	def_bool n
	help
	  Provides xHCI utility functions.

endmenu
