|menu "Firmware loader"
| tristate "Firmware loading facility" if EXPERT
| default y
| 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).
| string "Build named firmware blobs into the kernel binary"
| 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
| 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.
| string "Firmware blobs root directory"
| depends on EXTRA_FIRMWARE != ""
| default "/lib/firmware"
| This option controls the directory in which the kernel build system
| looks for the firmware files listed in the EXTRA_FIRMWARE option.
| bool "Enable the firmware sysfs fallback mechanism"
| 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:
| 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.
| bool "Force the firmware sysfs fallback mechanism when possible"
| depends on FW_LOADER_USER_HELPER
| 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:
| If you are unsure about this, say N here.
|endif # FW_LOADER