# SPDX-License-Identifier: GPL-2.0-only
menu "EFI (Extensible Firmware Interface) Support"
	depends on EFI

config EFI_ESRT
	bool
	depends on EFI
	default y

config EFI_VARS_PSTORE
	tristate "Register efivars backend for pstore"
	depends on PSTORE
	select UCS2_STRING
	default y
	help
	  Say Y here to enable use efivars as a backend to pstore. This
	  will allow writing console messages, crash dumps, or anything
	  else supported by pstore to EFI variables.

config EFI_VARS_PSTORE_DEFAULT_DISABLE
	bool "Disable using efivars as a pstore backend by default"
	depends on EFI_VARS_PSTORE
	default n
	help
	  Saying Y here will disable the use of efivars as a storage
	  backend for pstore by default. This setting can be overridden
	  using the efivars module's pstore_disable parameter.

config EFI_SOFT_RESERVE
	bool "Reserve EFI Specific Purpose Memory"
	depends on EFI && EFI_STUB && ACPI_HMAT
	default ACPI_HMAT
	help
	  On systems that have mixed performance classes of memory EFI
	  may indicate specific purpose memory with an attribute (See
	  EFI_MEMORY_SP in UEFI 2.8). A memory range tagged with this
	  attribute may have unique performance characteristics compared
	  to the system's general purpose "System RAM" pool. On the
	  expectation that such memory has application specific usage,
	  and its base EFI memory type is "conventional" answer Y to
	  arrange for the kernel to reserve it as a "Soft Reserved"
	  resource, and set aside for direct-access (device-dax) by
	  default. The memory range can later be optionally assigned to
	  the page allocator by system administrator policy via the
	  device-dax kmem facility. Say N to have the kernel treat this
	  memory as "System RAM" by default.

	  If unsure, say Y.

config EFI_DXE_MEM_ATTRIBUTES
	bool "Adjust memory attributes in EFISTUB"
	depends on EFI && EFI_STUB && X86
	default y
	help
	  UEFI specification does not guarantee all memory to be
	  accessible for both write and execute as the kernel expects
	  it to be.
	  Use DXE services to check and alter memory protection
	  attributes during boot via EFISTUB to ensure that memory
	  ranges used by the kernel are writable and executable.

config EFI_PARAMS_FROM_FDT
	bool
	help
	  Select this config option from the architecture Kconfig if
	  the EFI runtime support gets system table address, memory
          map address, and other parameters from the device tree.

config EFI_RUNTIME_WRAPPERS
	bool

config EFI_GENERIC_STUB
	bool

config EFI_ZBOOT
	bool "Enable the generic EFI decompressor"
	depends on EFI_GENERIC_STUB && !ARM
	select HAVE_KERNEL_GZIP
	select HAVE_KERNEL_ZSTD
	help
	  Create the bootable image as an EFI application that carries the
	  actual kernel image in compressed form, and decompresses it into
	  memory before executing it. For compatibility with non-EFI loaders,
	  the payload can be decompressed and executed by the loader as well,
	  provided that the loader implements the decompression algorithm.
	  (The compression algorithm used is described in the zboot header)

config EFI_ARMSTUB_DTB_LOADER
	bool "Enable the DTB loader"
	depends on EFI_GENERIC_STUB && !RISCV && !LOONGARCH
	default y
	help
	  Select this config option to add support for the dtb= command
	  line parameter, allowing a device tree blob to be loaded into
	  memory from the EFI System Partition by the stub.

	  If the device tree is provided by the platform or by
	  the bootloader this option may not be needed.
	  But, for various development reasons and to maintain existing
	  functionality for bootloaders that do not have such support
	  this option is necessary.

config EFI_BOOTLOADER_CONTROL
	tristate "EFI Bootloader Control"
	select UCS2_STRING
	default n
	help
	  This module installs a reboot hook, such that if reboot() is
	  invoked with a string argument NNN, "NNN" is copied to the
	  "LoaderEntryOneShot" EFI variable, to be read by the
	  bootloader. If the string matches one of the boot labels
	  defined in its configuration, the bootloader will boot once
	  to that label. The "LoaderEntryRebootReason" EFI variable is
	  set with the reboot reason: "reboot" or "shutdown". The
	  bootloader reads this reboot reason and takes particular
	  action according to its policy.

config EFI_CAPSULE_LOADER
	tristate "EFI capsule loader"
	depends on EFI
	help
	  This option exposes a loader interface "/dev/efi_capsule_loader" for
	  users to load EFI capsules. This driver requires working runtime
	  capsule support in the firmware, which many OEMs do not provide.

	  Most users should say N.

config EFI_CAPSULE_QUIRK_QUARK_CSH
	bool "Add support for Quark capsules with non-standard headers"
	depends on X86 && !64BIT
	select EFI_CAPSULE_LOADER
	default y
	help
	  Add support for processing Quark X1000 EFI capsules, whose header
	  layout deviates from the layout mandated by the UEFI specification.

config EFI_TEST
	tristate "EFI Runtime Service Tests Support"
	depends on EFI
	default n
	help
	  This driver uses the efi.<service> function pointers directly instead
	  of going through the efivar API, because it is not trying to test the
	  kernel subsystem, just for testing the UEFI runtime service
	  interfaces which are provided by the firmware. This driver is used
	  by the Firmware Test Suite (FWTS) for testing the UEFI runtime
	  interfaces readiness of the firmware.
	  Details for FWTS are available from:
	  <https://wiki.ubuntu.com/FirmwareTestSuite>

	  Say Y here to enable the runtime services support via /dev/efi_test.
	  If unsure, say N.

config EFI_DEV_PATH_PARSER
	bool

config APPLE_PROPERTIES
	bool "Apple Device Properties"
	depends on EFI_STUB && X86
	select EFI_DEV_PATH_PARSER
	select UCS2_STRING
	help
	  Retrieve properties from EFI on Apple Macs and assign them to
	  devices, allowing for improved support of Apple hardware.
	  Properties that would otherwise be missing include the
	  Thunderbolt Device ROM and GPU configuration data.

	  If unsure, say Y if you have a Mac.  Otherwise N.

config RESET_ATTACK_MITIGATION
	bool "Reset memory attack mitigation"
	depends on EFI_STUB
	help
	  Request that the firmware clear the contents of RAM after a reboot
	  using the TCG Platform Reset Attack Mitigation specification. This
	  protects against an attacker forcibly rebooting the system while it
	  still contains secrets in RAM, booting another OS and extracting the
	  secrets. This should only be enabled when userland is configured to
	  clear the MemoryOverwriteRequest flag on clean shutdown after secrets
	  have been evicted, since otherwise it will trigger even on clean
	  reboots.

config EFI_RCI2_TABLE
	bool "EFI Runtime Configuration Interface Table Version 2 Support"
	depends on X86 || COMPILE_TEST
	help
	  Displays the content of the Runtime Configuration Interface
	  Table version 2 on Dell EMC PowerEdge systems as a binary
	  attribute 'rci2' under /sys/firmware/efi/tables directory.

	  RCI2 table contains BIOS HII in XML format and is used to populate
	  BIOS setup page in Dell EMC OpenManage Server Administrator tool.
	  The BIOS setup page contains BIOS tokens which can be configured.

	  Say Y here for Dell EMC PowerEdge systems.

config EFI_DISABLE_PCI_DMA
       bool "Clear Busmaster bit on PCI bridges during ExitBootServices()"
       help
	  Disable the busmaster bit in the control register on all PCI bridges
	  while calling ExitBootServices() and passing control to the runtime
	  kernel. System firmware may configure the IOMMU to prevent malicious
	  PCI devices from being able to attack the OS via DMA. However, since
	  firmware can't guarantee that the OS is IOMMU-aware, it will tear
	  down IOMMU configuration when ExitBootServices() is called. This
	  leaves a window between where a hostile device could still cause
	  damage before Linux configures the IOMMU again.

	  If you say Y here, the EFI stub will clear the busmaster bit on all
	  PCI bridges before ExitBootServices() is called. This will prevent
	  any malicious PCI devices from being able to perform DMA until the
	  kernel reenables busmastering after configuring the IOMMU.

	  This option will cause failures with some poorly behaved hardware
	  and should not be enabled without testing. The kernel commandline
	  options "efi=disable_early_pci_dma" or "efi=no_disable_early_pci_dma"
	  may be used to override this option.

config EFI_EARLYCON
	def_bool y
	depends on SERIAL_EARLYCON && !ARM
	select FONT_SUPPORT
	select ARCH_USE_MEMREMAP_PROT

config EFI_CUSTOM_SSDT_OVERLAYS
	bool "Load custom ACPI SSDT overlay from an EFI variable"
	depends on ACPI
	default ACPI_TABLE_UPGRADE
	help
	  Allow loading of an ACPI SSDT overlay from an EFI variable specified
	  by a kernel command line option.

	  See Documentation/admin-guide/acpi/ssdt-overlays.rst for more
	  information.

config EFI_DISABLE_RUNTIME
	bool "Disable EFI runtime services support by default"
	default y if PREEMPT_RT
	help
	  Allow to disable the EFI runtime services support by default. This can
	  already be achieved by using the efi=noruntime option, but it could be
	  useful to have this default without any kernel command line parameter.

	  The EFI runtime services are disabled by default when PREEMPT_RT is
	  enabled, because measurements have shown that some EFI functions calls
	  might take too much time to complete, causing large latencies which is
	  an issue for Real-Time kernels.

	  This default can be overridden by using the efi=runtime option.

config EFI_COCO_SECRET
	bool "EFI Confidential Computing Secret Area Support"
	help
	  Confidential Computing platforms (such as AMD SEV) allow the
	  Guest Owner to securely inject secrets during guest VM launch.
	  The secrets are placed in a designated EFI reserved memory area.

	  In order to use the secrets in the kernel, the location of the secret
	  area (as published in the EFI config table) must be kept.

	  If you say Y here, the address of the EFI secret area will be kept
	  for usage inside the kernel.  This will allow the
	  virt/coco/efi_secret module to access the secrets, which in turn
	  allows userspace programs to access the injected secrets.

config OVMF_DEBUG_LOG
	bool "Expose OVMF firmware debug log via sysfs"
	depends on EFI
	help
	  Recent versions of the Open Virtual Machine Firmware
	  (edk2-stable202508 + newer) can write their debug log to a memory
	  buffer.  This driver exposes the log content via sysfs
	  (/sys/firmware/efi/ovmf_debug_log).

config UNACCEPTED_MEMORY
	bool
	depends on EFI_STUB
	help
	   Some Virtual Machine platforms, such as Intel TDX, require
	   some memory to be "accepted" by the guest before it can be used.
	   This mechanism helps prevent malicious hosts from making changes
	   to guest memory.

	   UEFI specification v2.9 introduced EFI_UNACCEPTED_MEMORY memory type.

	   This option adds support for unaccepted memory and makes such memory
	   usable by the kernel.

config EFI_EMBEDDED_FIRMWARE
	bool
	select CRYPTO_LIB_SHA256

config EFI_SBAT
       def_bool y if EFI_SBAT_FILE!=""

config EFI_SBAT_FILE
	string "Embedded SBAT section file path"
	depends on EFI_ZBOOT || (EFI_STUB && X86)
	help
	  SBAT section provides a way to improve SecureBoot revocations of UEFI
	  binaries by introducing a generation-based mechanism. With SBAT, older
	  UEFI binaries can be prevented from booting by bumping the minimal
	  required generation for the specific component in the bootloader.

	  Note: SBAT information is distribution specific, i.e. the owner of the
	  signing SecureBoot certificate must define the SBAT policy. Linux
	  kernel upstream does not define SBAT components and their generations.

	  See https://github.com/rhboot/shim/blob/main/SBAT.md for the additional
	  details.

	  Specify a file with SBAT data which is going to be embedded as '.sbat'
	  section into the kernel.

	  If unsure, leave blank.

endmenu

config UEFI_CPER
	bool

config UEFI_CPER_ARM
	bool
	depends on UEFI_CPER && ( ARM || ARM64 )
	default y

config UEFI_CPER_X86
	bool
	depends on UEFI_CPER && X86
	default y

config TEE_STMM_EFI
	tristate "TEE-based EFI runtime variable service driver"
	depends on EFI && OPTEE
	help
	  Select this config option if TEE is compiled to include StandAloneMM
	  as a separate secure partition. It has the ability to check and store
	  EFI variables on an RPMB or any other non-volatile medium used by
	  StandAloneMM.

	  Enabling this will change the EFI runtime services from the firmware
	  provided functions to TEE calls.

	  To compile this driver as a module, choose M here: the module
	  will be called tee_stmm_efi.
