# SPDX-License-Identifier: GPL-2.0-only
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.rst.
#

menu "Firmware Drivers"

config ARM_SCMI_PROTOCOL
	tristate "ARM System Control and Management Interface (SCMI) Message Protocol"
	depends on ARM || ARM64 || COMPILE_TEST
	depends on MAILBOX || HAVE_ARM_SMCCC_DISCOVERY
	help
	  ARM System Control and Management Interface (SCMI) protocol is a
	  set of operating system-independent software interfaces that are
	  used in system management. SCMI is extensible and currently provides
	  interfaces for: Discovery and self-description of the interfaces
	  it supports, Power domain management which is the ability to place
	  a given device or domain into the various power-saving states that
	  it supports, Performance management which is the ability to control
	  the performance of a domain that is composed of compute engines
	  such as application processors and other accelerators, Clock
	  management which is the ability to set and inquire rates on platform
	  managed clocks and Sensor management which is the ability to read
	  sensor data, and be notified of sensor value.

	  This protocol library provides interface for all the client drivers
	  making use of the features offered by the SCMI.

config ARM_SCMI_POWER_DOMAIN
	tristate "SCMI power domain driver"
	depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
	default y
	select PM_GENERIC_DOMAINS if PM
	help
	  This enables support for the SCMI power domains which can be
	  enabled or disabled via the SCP firmware

	  This driver can also be built as a module.  If so, the module
	  will be called scmi_pm_domain. Note this may needed early in boot
	  before rootfs may be available.

config ARM_SCPI_PROTOCOL
	tristate "ARM System Control and Power Interface (SCPI) Message Protocol"
	depends on ARM || ARM64 || COMPILE_TEST
	depends on MAILBOX
	help
	  System Control and Power Interface (SCPI) Message Protocol is
	  defined for the purpose of communication between the Application
	  Cores(AP) and the System Control Processor(SCP). The MHU peripheral
	  provides a mechanism for inter-processor communication between SCP
	  and AP.

	  SCP controls most of the power management on the Application
	  Processors. It offers control and management of: the core/cluster
	  power states, various power domain DVFS including the core/cluster,
	  certain system clocks configuration, thermal sensors and many
	  others.

	  This protocol library provides interface for all the client drivers
	  making use of the features offered by the SCP.

config ARM_SCPI_POWER_DOMAIN
	tristate "SCPI power domain driver"
	depends on ARM_SCPI_PROTOCOL || (COMPILE_TEST && OF)
	default y
	select PM_GENERIC_DOMAINS if PM
	help
	  This enables support for the SCPI power domains which can be
	  enabled or disabled via the SCP firmware

config ARM_SDE_INTERFACE
	bool "ARM Software Delegated Exception Interface (SDEI)"
	depends on ARM64
	help
	  The Software Delegated Exception Interface (SDEI) is an ARM
	  standard for registering callbacks from the platform firmware
	  into the OS. This is typically used to implement RAS notifications.

config EDD
	tristate "BIOS Enhanced Disk Drive calls determine boot disk"
	depends on X86
	help
	  Say Y or M here if you want to enable BIOS Enhanced Disk Drive
	  Services real mode BIOS calls to determine which disk
	  BIOS tries boot from.  This information is then exported via sysfs.

	  This option is experimental and is known to fail to boot on some
          obscure configurations. Most disk controller BIOS vendors do
          not yet implement this feature.

config EDD_OFF
	bool "Sets default behavior for EDD detection to off"
	depends on EDD
	default n
	help
	  Say Y if you want EDD disabled by default, even though it is compiled into the
	  kernel. Say N if you want EDD enabled by default. EDD can be dynamically set
	  using the kernel parameter 'edd={on|skipmbr|off}'.

config FIRMWARE_MEMMAP
    bool "Add firmware-provided memory map to sysfs" if EXPERT
    default X86
    help
      Add the firmware-provided (unmodified) memory map to /sys/firmware/memmap.
      That memory map is used for example by kexec to set up parameter area
      for the next kernel, but can also be used for debugging purposes.

      See also Documentation/ABI/testing/sysfs-firmware-memmap.

config EFI_PCDP
	bool "Console device selection via EFI PCDP or HCDP table"
	depends on ACPI && EFI && IA64
	default y if IA64
	help
	  If your firmware supplies the PCDP table, and you want to
	  automatically use the primary console device it describes
	  as the Linux console, say Y here.

	  If your firmware supplies the HCDP table, and you want to
	  use the first serial port it describes as the Linux console,
	  say Y here.  If your EFI ConOut path contains only a UART
	  device, it will become the console automatically.  Otherwise,
	  you must specify the "console=hcdp" kernel boot argument.

	  Neither the PCDP nor the HCDP affects naming of serial devices,
	  so a serial console may be /dev/ttyS0, /dev/ttyS1, etc, depending
	  on how the driver discovers devices.

	  You must also enable the appropriate drivers (serial, VGA, etc.)

	  See DIG64_HCDPv20_042804.pdf available from
	  <http://www.dig64.org/specifications/> 

config DMIID
    bool "Export DMI identification via sysfs to userspace"
    depends on DMI
    default y
	help
	  Say Y here if you want to query SMBIOS/DMI system identification
	  information from userspace through /sys/class/dmi/id/ or if you want
	  DMI-based module auto-loading.

config DMI_SYSFS
	tristate "DMI table support in sysfs"
	depends on SYSFS && DMI
	default n
	help
	  Say Y or M here to enable the exporting of the raw DMI table
	  data via sysfs.  This is useful for consuming the data without
	  requiring any access to /dev/mem at all.  Tables are found
	  under /sys/firmware/dmi when this option is enabled and
	  loaded.

config DMI_SCAN_MACHINE_NON_EFI_FALLBACK
	bool

config ISCSI_IBFT_FIND
	bool "iSCSI Boot Firmware Table Attributes"
	depends on X86 && ISCSI_IBFT
	default n
	help
	  This option enables the kernel to find the region of memory
	  in which the ISCSI Boot Firmware Table (iBFT) resides. This
	  is necessary for iSCSI Boot Firmware Table Attributes module to work
	  properly.

config ISCSI_IBFT
	tristate "iSCSI Boot Firmware Table Attributes module"
	select ISCSI_BOOT_SYSFS
	select ISCSI_IBFT_FIND if X86
	depends on ACPI && SCSI && SCSI_LOWLEVEL
	default	n
	help
	  This option enables support for detection and exposing of iSCSI
	  Boot Firmware Table (iBFT) via sysfs to userspace. If you wish to
	  detect iSCSI boot parameters dynamically during system boot, say Y.
	  Otherwise, say N.

config RASPBERRYPI_FIRMWARE
	tristate "Raspberry Pi Firmware Driver"
	depends on BCM2835_MBOX
	help
	  This option enables support for communicating with the firmware on the
	  Raspberry Pi.

config FW_CFG_SYSFS
	tristate "QEMU fw_cfg device support in sysfs"
	depends on SYSFS && (ARM || ARM64 || PARISC || PPC_PMAC || SPARC || X86)
	depends on HAS_IOPORT_MAP
	default n
	help
	  Say Y or M here to enable the exporting of the QEMU firmware
	  configuration (fw_cfg) file entries via sysfs. Entries are
	  found under /sys/firmware/fw_cfg when this option is enabled
	  and loaded.

config FW_CFG_SYSFS_CMDLINE
	bool "QEMU fw_cfg device parameter parsing"
	depends on FW_CFG_SYSFS
	help
	  Allow the qemu_fw_cfg device to be initialized via the kernel
	  command line or using a module parameter.
	  WARNING: Using incorrect parameters (base address in particular)
	  may crash your system.

config INTEL_STRATIX10_SERVICE
	tristate "Intel Stratix10 Service Layer"
	depends on ARCH_INTEL_SOCFPGA && ARM64 && HAVE_ARM_SMCCC
	default n
	help
	  Intel Stratix10 service layer runs at privileged exception level,
	  interfaces with the service providers (FPGA manager is one of them)
	  and manages secure monitor call to communicate with secure monitor
	  software at secure monitor exception level.

	  Say Y here if you want Stratix10 service layer support.

config INTEL_STRATIX10_RSU
	tristate "Intel Stratix10 Remote System Update"
	depends on INTEL_STRATIX10_SERVICE
	help
	  The Intel Remote System Update (RSU) driver exposes interfaces
	  access through the Intel Service Layer to user space via sysfs
	  device attribute nodes. The RSU interfaces report/control some of
	  the optional RSU features of the Stratix 10 SoC FPGA.

	  The RSU provides a way for customers to update the boot
	  configuration of a Stratix 10 SoC device with significantly reduced
	  risk of corrupting the bitstream storage and bricking the system.

	  Enable RSU support if you are using an Intel SoC FPGA with the RSU
	  feature enabled and you want Linux user space control.

	  Say Y here if you want Intel RSU support.

config QCOM_SCM
	bool
	depends on ARM || ARM64
	depends on HAVE_ARM_SMCCC
	select RESET_CONTROLLER

config QCOM_SCM_DOWNLOAD_MODE_DEFAULT
	bool "Qualcomm download mode enabled by default"
	depends on QCOM_SCM
	help
	  A device with "download mode" enabled will upon an unexpected
	  warm-restart enter a special debug mode that allows the user to
	  "download" memory content over USB for offline postmortem analysis.
	  The feature can be enabled/disabled on the kernel command line.

	  Say Y here to enable "download mode" by default.

config TI_SCI_PROTOCOL
	tristate "TI System Control Interface (TISCI) Message Protocol"
	depends on TI_MESSAGE_MANAGER
	help
	  TI System Control Interface (TISCI) Message Protocol is used to manage
	  compute systems such as ARM, DSP etc with the system controller in
	  complex System on Chip(SoC) such as those found on certain keystone
	  generation SoC from TI.

	  System controller provides various facilities including power
	  management function support.

	  This protocol library is used by client drivers to use the features
	  provided by the system controller.

config TRUSTED_FOUNDATIONS
	bool "Trusted Foundations secure monitor support"
	depends on ARM && CPU_V7
	help
	  Some devices (including most early Tegra-based consumer devices on
	  the market) are booted with the Trusted Foundations secure monitor
	  active, requiring some core operations to be performed by the secure
	  monitor instead of the kernel.

	  This option allows the kernel to invoke the secure monitor whenever
	  required on devices using Trusted Foundations. See the functions and
	  comments in linux/firmware/trusted_foundations.h or the device tree
	  bindings for "tlm,trusted-foundations" for details on how to use it.

	  Choose N if you don't know what this is about.

config TURRIS_MOX_RWTM
	tristate "Turris Mox rWTM secure firmware driver"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on HAS_DMA && OF
	depends on MAILBOX
	select HW_RANDOM
	select ARMADA_37XX_RWTM_MBOX
	help
	  This driver communicates with the firmware on the Cortex-M3 secure
	  processor of the Turris Mox router. Enable if you are building for
	  Turris Mox, and you will be able to read the device serial number and
	  other manufacturing data and also utilize the Entropy Bit Generator
	  for hardware random number generation.

source "drivers/firmware/arm_ffa/Kconfig"
source "drivers/firmware/broadcom/Kconfig"
source "drivers/firmware/google/Kconfig"
source "drivers/firmware/efi/Kconfig"
source "drivers/firmware/imx/Kconfig"
source "drivers/firmware/meson/Kconfig"
source "drivers/firmware/psci/Kconfig"
source "drivers/firmware/smccc/Kconfig"
source "drivers/firmware/tegra/Kconfig"
source "drivers/firmware/xilinx/Kconfig"

endmenu
