# 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 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.

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"
	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.

endif # FW_LOADER
endmenu
