# SPDX-License-Identifier: GPL-2.0
menu "Firmware loader"

config FW_LOADER
	tristate "Firmware loading facility" if EXPERT
	default y
	help
	  This enables the firmware loading facility in the kernel. The kernel
	  will first look for built-in firmware, if it has any. Next, it will
	  look for the requested firmware in a series of filesystem paths:

		o firmware_class path module parameter or kernel boot param
		o /lib/firmware/updates/UTS_RELEASE
		o /lib/firmware/updates
		o /lib/firmware/UTS_RELEASE
		o /lib/firmware

	  Enabling this feature only increases your kernel image by about
	  828 bytes, enable this option unless you are certain you don't
	  need firmware.

	  You typically want this built-in (=y) but you can also enable this
	  as a module, in which case the firmware_class module will be built.
	  You also want to be sure to enable this built-in if you are going to
	  enable built-in firmware (CONFIG_EXTRA_FIRMWARE).

if FW_LOADER

config FW_LOADER_PAGED_BUF
	bool

config FW_LOADER_SYSFS
	bool

config EXTRA_FIRMWARE
	string "Build named firmware blobs into the kernel binary"
	help
	  Device drivers which require firmware can typically deal with
	  having the kernel load firmware from the various supported
	  /lib/firmware/ paths. This option enables you to build into the
	  kernel firmware files. Built-in firmware searches are preceded
	  over firmware lookups using your filesystem over the supported
	  /lib/firmware paths documented on CONFIG_FW_LOADER.

	  This may be useful for testing or if the firmware is required early on
	  in boot and cannot rely on the firmware being placed in an initrd or
	  initramfs.

	  This option is a string and takes the (space-separated) names of the
	  firmware files -- the same names that appear in MODULE_FIRMWARE()
	  and request_firmware() in the source. These files should exist under
	  the directory specified by the EXTRA_FIRMWARE_DIR option, which is
	  /lib/firmware by default.

	  For example, you might set CONFIG_EXTRA_FIRMWARE="usb8388.bin", copy
	  the usb8388.bin file into /lib/firmware, and build the kernel. Then
	  any request_firmware("usb8388.bin") will be satisfied internally
	  inside the kernel without ever looking at your filesystem at runtime.

	  WARNING: If you include additional firmware files into your binary
	  kernel image that are not available under the terms of the GPL,
	  then it may be a violation of the GPL to distribute the resulting
	  image since it combines both GPL and non-GPL work. You should
	  consult a lawyer of your own before distributing such an image.

	  NOTE: Compressed files are not supported in EXTRA_FIRMWARE.

config EXTRA_FIRMWARE_DIR
	string "Firmware blobs root directory"
	depends on EXTRA_FIRMWARE != ""
	default "/lib/firmware"
	help
	  This option controls the directory in which the kernel build system
	  looks for the firmware files listed in the EXTRA_FIRMWARE option.

config FW_LOADER_USER_HELPER
	bool "Enable the firmware sysfs fallback mechanism"
	select FW_LOADER_SYSFS
	select FW_LOADER_PAGED_BUF
	help
	  This option enables a sysfs loading facility to enable firmware
	  loading to the kernel through userspace as a fallback mechanism
	  if and only if the kernel's direct filesystem lookup for the
	  firmware failed using the different /lib/firmware/ paths, or the
	  path specified in the firmware_class path module parameter, or the
	  firmware_class path kernel boot parameter if the firmware_class is
	  built-in. For details on how to work with the sysfs fallback mechanism
	  refer to Documentation/driver-api/firmware/fallback-mechanisms.rst.

	  The direct filesystem lookup for firmware is always used first now.

	  If the kernel's direct filesystem lookup for firmware fails to find
	  the requested firmware a sysfs fallback loading facility is made
	  available and userspace is informed about this through uevents.
	  The uevent can be suppressed if the driver explicitly requested it,
	  this is known as the driver using the custom fallback mechanism.
	  If the custom fallback mechanism is used userspace must always
	  acknowledge failure to find firmware as the timeout for the fallback
	  mechanism is disabled, and failed requests will linger forever.

	  This used to be the default firmware loading facility, and udev used
	  to listen for uvents to load firmware for the kernel. The firmware
	  loading facility functionality in udev has been removed, as such it
	  can no longer be relied upon as a fallback mechanism. Linux no longer
	  relies on or uses a fallback mechanism in userspace. If you need to
	  rely on one refer to the permissively licensed firmwared:

	  https://github.com/teg/firmwared

	  Since this was the default firmware loading facility at one point,
	  old userspace may exist which relies upon it, and as such this
	  mechanism can never be removed from the kernel.

	  You should only enable this functionality if you are certain you
	  require a fallback mechanism and have a userspace mechanism ready to
	  load firmware in case it is not found. One main reason for this may
	  be if you have drivers which require firmware built-in and for
	  whatever reason cannot place the required firmware in initramfs.
	  Another reason kernels may have this feature enabled is to support a
	  driver which explicitly relies on this fallback mechanism. Only two
	  drivers need this today:

	    o CONFIG_LEDS_LP55XX_COMMON
	    o CONFIG_DELL_RBU

	  Outside of supporting the above drivers, another reason for needing
	  this may be that your firmware resides outside of the paths the kernel
	  looks for and cannot possibly be specified using the firmware_class
	  path module parameter or kernel firmware_class path boot parameter
	  if firmware_class is built-in.

	  A modern use case may be to temporarily mount a custom partition
	  during provisioning which is only accessible to userspace, and then
	  to use it to look for and fetch the required firmware. Such type of
	  driver functionality may not even ever be desirable upstream by
	  vendors, and as such is only required to be supported as an interface
	  for provisioning. Since udev's firmware loading facility has been
	  removed you can use firmwared or a fork of it to customize how you
	  want to load firmware based on uevents issued.

	  Enabling this option will increase your kernel image size by about
	  13436 bytes.

	  If you are unsure about this, say N here, unless you are Linux
	  distribution and need to support the above two drivers, or you are
	  certain you need to support some really custom firmware loading
	  facility in userspace.

config FW_LOADER_USER_HELPER_FALLBACK
	bool "Force the firmware sysfs fallback mechanism when possible"
	depends on FW_LOADER_USER_HELPER
	help
	  Enabling this option forces a sysfs userspace fallback mechanism
	  to be used for all firmware requests which explicitly do not disable a
	  a fallback mechanism. Firmware calls which do prohibit a fallback
	  mechanism is request_firmware_direct(). This option is kept for
	  backward compatibility purposes given this precise mechanism can also
	  be enabled by setting the proc sysctl value to true:

	       /proc/sys/kernel/firmware_config/force_sysfs_fallback

	  If you are unsure about this, say N here.

config FW_LOADER_COMPRESS
	bool "Enable compressed firmware support"
	help
	  This option enables the support for loading compressed firmware
	  files. The caller of firmware API receives the decompressed file
	  content. The compressed file is loaded as a fallback, only after
	  loading the raw file failed at first.

	  Compressed firmware support does not apply to firmware images
	  that are built into the kernel image (CONFIG_EXTRA_FIRMWARE).

if FW_LOADER_COMPRESS
config FW_LOADER_COMPRESS_XZ
	bool "Enable XZ-compressed firmware support"
	select FW_LOADER_PAGED_BUF
	select XZ_DEC
	default y
	help
	  This option adds the support for XZ-compressed files.
	  The files have to be compressed with either none or crc32
	  integrity check type (pass "-C crc32" option to xz command).

config FW_LOADER_COMPRESS_ZSTD
	bool "Enable ZSTD-compressed firmware support"
	select ZSTD_DECOMPRESS
	help
	  This option adds the support for ZSTD-compressed files.

endif # FW_LOADER_COMPRESS

config FW_CACHE
	bool "Enable firmware caching during suspend"
	depends on PM_SLEEP
	default y if PM_SLEEP
	help
	  Because firmware caching generates uevent messages that are sent
	  over a netlink socket, it can prevent suspend on many platforms.
	  It is also not always useful, so on such platforms we have the
	  option.

	  If unsure, say Y.

config FW_UPLOAD
	bool "Enable users to initiate firmware updates using sysfs"
	select FW_LOADER_SYSFS
	select FW_LOADER_PAGED_BUF
	help
	  Enabling this option will allow device drivers to expose a persistent
	  sysfs interface that allows firmware updates to be initiated from
	  userspace. For example, FPGA based PCIe cards load firmware and FPGA
	  images from local FLASH when the card boots. The images in FLASH may
	  be updated with new images provided by the user. Enable this device
	  to support cards that rely on user-initiated updates for firmware files.

	  If unsure, say N.

endif # FW_LOADER
endmenu
