| menu "UEFI Support" |
| |
| config EFI_LOADER |
| bool "Support running UEFI applications" |
| depends on OF_LIBFDT && ( \ |
| ARM && (SYS_CPU = arm1136 || \ |
| SYS_CPU = arm1176 || \ |
| SYS_CPU = armv7 || \ |
| SYS_CPU = armv8) || \ |
| X86 || RISCV || SANDBOX) |
| # We need EFI_STUB_64BIT to be set on x86_64 with EFI_STUB |
| depends on !EFI_STUB || !X86_64 || EFI_STUB_64BIT |
| # We need EFI_STUB_32BIT to be set on x86_32 with EFI_STUB |
| depends on !EFI_STUB || !X86 || X86_64 || EFI_STUB_32BIT |
| depends on !EFI_APP |
| default y if !ARM || SYS_CPU = armv7 || SYS_CPU = armv8 |
| select BLK |
| select CHARSET |
| # We need to send DM events, dynamically, in the EFI block driver |
| select DM_EVENT |
| select EVENT_DYNAMIC |
| select LIB_UUID |
| select LMB |
| imply PARTITION_UUIDS |
| select REGEX |
| imply FAT |
| imply FAT_WRITE |
| imply USB_KEYBOARD_FN_KEYS |
| imply VIDEO_ANSI |
| help |
| Select this option if you want to run UEFI applications (like GNU |
| GRUB or iPXE) on top of U-Boot. If this option is enabled, U-Boot |
| will expose the UEFI API to a loaded application, enabling it to |
| reuse U-Boot's device drivers. |
| |
| if EFI_LOADER |
| |
| config EFI_BINARY_EXEC |
| bool "Execute UEFI binary" |
| default y |
| help |
| Select this option if you want to execute the UEFI binary after |
| loading it with U-Boot load commands or other methods. |
| You may enable CMD_BOOTEFI_BINARY so that you can use bootefi |
| command to do that. |
| |
| config EFI_SECURE_BOOT |
| bool "Enable EFI secure boot support" |
| depends on EFI_LOADER && FIT_SIGNATURE |
| select HASH |
| select SHA256 |
| select RSA |
| select RSA_VERIFY_WITH_PKEY |
| select IMAGE_SIGN_INFO |
| select ASYMMETRIC_KEY_TYPE |
| select ASYMMETRIC_PUBLIC_KEY_SUBTYPE |
| select X509_CERTIFICATE_PARSER |
| select PKCS7_MESSAGE_PARSER |
| select PKCS7_VERIFY |
| select MSCODE_PARSER |
| select EFI_SIGNATURE_SUPPORT |
| help |
| Select this option to enable EFI secure boot support. |
| Once SecureBoot mode is enforced, any EFI binary can run only if |
| it is signed with a trusted key. To do that, you need to install, |
| at least, PK, KEK and db. |
| |
| config EFI_SIGNATURE_SUPPORT |
| bool |
| |
| menu "UEFI services" |
| |
| config EFI_GET_TIME |
| bool "GetTime() runtime service" |
| depends on DM_RTC |
| default y |
| help |
| Provide the GetTime() runtime service at boottime. This service |
| can be used by an EFI application to read the real time clock. |
| |
| config EFI_SET_TIME |
| bool "SetTime() runtime service" |
| depends on EFI_GET_TIME |
| default y if ARCH_QEMU || SANDBOX |
| help |
| Provide the SetTime() runtime service at boottime. This service |
| can be used by an EFI application to adjust the real time clock. |
| |
| config EFI_HAVE_RUNTIME_RESET |
| # bool "Reset runtime service is available" |
| bool |
| default y |
| depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \ |
| SANDBOX || SYSRESET_SBI || SYSRESET_X86 |
| |
| endmenu |
| |
| menu "UEFI Variables" |
| |
| choice |
| prompt "Store for non-volatile UEFI variables" |
| default EFI_VARIABLE_FILE_STORE |
| help |
| Select where non-volatile UEFI variables shall be stored. |
| |
| config EFI_VARIABLE_FILE_STORE |
| bool "Store non-volatile UEFI variables as file" |
| depends on FAT_WRITE |
| help |
| Select this option if you want non-volatile UEFI variables to be |
| stored as file /ubootefi.var on the EFI system partition. |
| |
| config EFI_RT_VOLATILE_STORE |
| bool "Allow variable runtime services in volatile storage (e.g RAM)" |
| depends on EFI_VARIABLE_FILE_STORE |
| help |
| When EFI variables are stored on file we don't allow SetVariableRT, |
| since the OS doesn't know how to write that file. At the same time |
| we copy runtime variables in DRAM and support GetVariableRT |
| |
| Enable this option to allow SetVariableRT on the RAM backend of |
| the EFI variable storage. The OS will be responsible for syncing |
| the RAM contents to the file, otherwise any changes made during |
| runtime won't persist reboots. |
| Authenticated variables are not supported. Note that this will |
| violate the EFI spec since writing auth variables will return |
| EFI_INVALID_PARAMETER |
| |
| config EFI_MM_COMM_TEE |
| bool "UEFI variables storage service via the trusted world" |
| depends on OPTEE |
| help |
| Allowing access to the MM SP services (SPs such as StandAlonneMM, smm-gateway). |
| When using the u-boot OP-TEE driver, StandAlonneMM is supported. |
| When using the u-boot FF-A driver any MM SP is supported. |
| |
| If OP-TEE is present and running StandAloneMM, dispatch all UEFI |
| variable related operations to that. The application will verify, |
| authenticate and store the variables on an RPMB. |
| |
| When ARM_FFA_TRANSPORT is used, dispatch all UEFI variable related |
| operations to the MM SP running in the secure world. |
| A door bell mechanism is used to notify the SP when there is data in the shared |
| MM buffer. The data is copied by u-boot to the shared buffer before issuing |
| the door bell event. |
| |
| config FFA_SHARED_MM_BUF_SIZE |
| int "Memory size of the shared MM communication buffer" |
| depends on EFI_MM_COMM_TEE && ARM_FFA_TRANSPORT |
| help |
| This defines the size in bytes of the memory area reserved for the shared |
| buffer used for communication between the MM feature in U-Boot and |
| the MM SP in secure world. |
| The size of the memory region must be a multiple of the size of the maximum |
| translation granule size that is specified in the ID_AA64MMFR0_EL1 System register. |
| It is assumed that the MM SP knows the size of the shared MM communication buffer. |
| |
| config FFA_SHARED_MM_BUF_OFFSET |
| int "Data offset in the shared MM communication buffer" |
| depends on EFI_MM_COMM_TEE && ARM_FFA_TRANSPORT |
| help |
| This defines the offset in bytes of the data read or written to in the shared |
| buffer by the MM SP. |
| |
| config FFA_SHARED_MM_BUF_ADDR |
| hex "Define the address of the shared MM communication buffer" |
| depends on EFI_MM_COMM_TEE && ARM_FFA_TRANSPORT |
| help |
| This defines the address of the shared MM communication buffer |
| used for communication between the MM feature in U-Boot and |
| the MM SP in secure world. |
| It is assumed that the MM SP knows the address of the shared MM communication buffer. |
| |
| config EFI_VARIABLE_NO_STORE |
| bool "Don't persist non-volatile UEFI variables" |
| help |
| If you choose this option, non-volatile variables cannot be persisted. |
| You could still provide non-volatile variables via |
| EFI_VARIABLES_PRESEED. |
| |
| endchoice |
| |
| config EFI_VARIABLES_PRESEED |
| bool "Initial values for UEFI variables" |
| depends on !EFI_MM_COMM_TEE |
| help |
| Include a file with the initial values for non-volatile UEFI variables |
| into the U-Boot binary. If this configuration option is set, changes |
| to authentication related variables (PK, KEK, db, dbx) are not |
| allowed. |
| |
| if EFI_VARIABLES_PRESEED |
| |
| config EFI_VAR_SEED_FILE |
| string "File with initial values of non-volatile UEFI variables" |
| default "ubootefi.var" |
| help |
| File with initial values of non-volatile UEFI variables. The file must |
| be in the same format as the storage in the EFI system partition. The |
| easiest way to create it is by setting the non-volatile variables in |
| U-Boot. If a relative file path is used, it is relative to the source |
| directory. |
| |
| endif |
| |
| config EFI_VAR_BUF_SIZE |
| int "Memory size of the UEFI variable store" |
| default 131072 |
| range 4096 2147483647 |
| help |
| This defines the size in bytes of the memory area reserved for keeping |
| UEFI variables. |
| |
| When using StandAloneMM (CONFIG_EFI_MM_COMM_TEE=y) is used the |
| available size for storing variables is defined in |
| PcdFlashNvStorageVariableSize. |
| That value is probed at runtime from U-Boot. In that case, |
| EFI_VAR_BUF_SIZE represents the memory U-Boot reserves to present |
| runtime variables to the OS. |
| |
| Minimum 4096, default 131072 |
| |
| config EFI_PLATFORM_LANG_CODES |
| string "Language codes supported by firmware" |
| default "en-US" |
| help |
| This value is used to initialize the PlatformLangCodes variable. Its |
| value is a semicolon (;) separated list of language codes in native |
| RFC 4646 format, e.g. "en-US;de-DE". The first language code is used |
| to initialize the PlatformLang variable. |
| |
| endmenu |
| |
| menu "Capsule support" |
| |
| config EFI_HAVE_CAPSULE_SUPPORT |
| bool |
| |
| config EFI_RUNTIME_UPDATE_CAPSULE |
| bool "UpdateCapsule() runtime service" |
| select EFI_HAVE_CAPSULE_SUPPORT |
| help |
| Select this option if you want to use UpdateCapsule and |
| QueryCapsuleCapabilities API's. |
| |
| config EFI_CAPSULE_ON_DISK |
| bool "Enable capsule-on-disk support" |
| depends on SYSRESET |
| select EFI_HAVE_CAPSULE_SUPPORT |
| help |
| Select this option if you want to use capsule-on-disk feature, |
| that is, capsules can be fetched and executed from files |
| under a specific directory on UEFI system partition instead of |
| via UpdateCapsule API. |
| |
| config EFI_IGNORE_OSINDICATIONS |
| bool "Ignore OsIndications for CapsuleUpdate on-disk" |
| depends on EFI_CAPSULE_ON_DISK |
| default y if !EFI_RT_VOLATILE_STORE |
| help |
| There are boards where U-Boot does not support SetVariable at runtime. |
| Select this option if you want to use the capsule-on-disk feature |
| without setting the EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED |
| flag in variable OsIndications. |
| |
| config EFI_CAPSULE_ON_DISK_EARLY |
| bool "Initiate capsule-on-disk at U-Boot boottime" |
| depends on EFI_CAPSULE_ON_DISK |
| help |
| Normally, without this option enabled, capsules will be |
| executed only at the first time of invoking one of efi command. |
| If this option is enabled, capsules will be enforced to be |
| executed as part of U-Boot initialisation so that they will |
| surely take place whatever is set to distro_bootcmd. |
| |
| config EFI_CAPSULE_NAMESPACE_GUID |
| string "Namespace for dynamic capsule GUIDs" |
| # v4 UUID as a default for upstream U-Boot boards |
| default "8c9f137e-91dc-427b-b2d6-b420faebaf2a" |
| depends on EFI_HAVE_CAPSULE_SUPPORT |
| help |
| Define the namespace or "salt" GUID used to generate the per-image |
| GUIDs. This should be a GUID in the standard 8-4-4-4-12 format. |
| |
| Device vendors are expected to generate their own namespace GUID |
| to avoid conflicts with upstream/community images. |
| |
| config EFI_CAPSULE_FIRMWARE |
| bool |
| |
| config EFI_CAPSULE_FIRMWARE_MANAGEMENT |
| bool "Capsule: Firmware Management Protocol" |
| depends on EFI_HAVE_CAPSULE_SUPPORT |
| default y |
| help |
| Select this option if you want to enable capsule-based |
| firmware update using Firmware Management Protocol. |
| |
| config EFI_CAPSULE_FIRMWARE_FIT |
| bool "FMP driver for FIT images" |
| depends on FIT |
| depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT |
| select UPDATE_FIT |
| select DFU |
| select SET_DFU_ALT_INFO |
| select EFI_CAPSULE_FIRMWARE |
| help |
| Select this option if you want to enable firmware management protocol |
| driver for FIT image |
| |
| config EFI_CAPSULE_FIRMWARE_RAW |
| bool "FMP driver for raw images" |
| depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT |
| depends on SANDBOX || (!SANDBOX && !EFI_CAPSULE_FIRMWARE_FIT) |
| select DFU_WRITE_ALT |
| select DFU |
| select SET_DFU_ALT_INFO |
| select EFI_CAPSULE_FIRMWARE |
| help |
| Select this option if you want to enable firmware management protocol |
| driver for raw image |
| |
| config EFI_CAPSULE_AUTHENTICATE |
| bool "Update Capsule authentication" |
| depends on EFI_CAPSULE_FIRMWARE |
| depends on EFI_CAPSULE_ON_DISK |
| depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT |
| select HASH |
| select SHA256 |
| select RSA |
| select RSA_VERIFY |
| select RSA_VERIFY_WITH_PKEY |
| select X509_CERTIFICATE_PARSER |
| select PKCS7_MESSAGE_PARSER |
| select PKCS7_VERIFY |
| select IMAGE_SIGN_INFO |
| select EFI_SIGNATURE_SUPPORT |
| help |
| Select this option if you want to enable capsule |
| authentication |
| |
| config EFI_CAPSULE_MAX |
| int "Max value for capsule index" |
| default 15 |
| range 0 65535 |
| help |
| Select the max capsule index value used for capsule report |
| variables. This value is used to create CapsuleMax variable. |
| |
| config EFI_CAPSULE_CRT_FILE |
| string "Path to the EFI capsule public key certificate" |
| depends on EFI_CAPSULE_AUTHENTICATE |
| help |
| Provides the path to the EFI capsule public key certificate that |
| corresponds to the capsule signing key. This certificate will be used |
| to generate the EFI capsule ESL (signature list file) that gets |
| embedded in the platform's device tree and used for capsule |
| authentication at the time of capsule update. |
| |
| endmenu |
| |
| menu "UEFI protocol support" |
| |
| config EFI_DEVICE_PATH_TO_TEXT |
| bool "Device path to text protocol" |
| default y |
| help |
| The device path to text protocol converts device nodes and paths to |
| human readable strings. |
| |
| config EFI_DEVICE_PATH_UTIL |
| bool "Device path utilities protocol" |
| default y |
| help |
| The device path utilities protocol creates and manipulates device |
| paths and device nodes. It is required to run the EFI Shell. |
| |
| config EFI_DT_FIXUP |
| bool "Device tree fixup protocol" |
| depends on !GENERATE_ACPI_TABLE |
| default y |
| help |
| The EFI device-tree fix-up protocol provides a function to let the |
| firmware apply fix-ups. This may be used by boot loaders. |
| |
| config EFI_LOADER_HII |
| bool "HII protocols" |
| default y |
| help |
| The Human Interface Infrastructure is a complicated framework that |
| allows UEFI applications to draw fancy menus and hook strings using |
| a translation framework. |
| |
| U-Boot implements enough of its features to be able to run the UEFI |
| Shell, but not more than that. |
| |
| config EFI_UNICODE_COLLATION_PROTOCOL2 |
| bool "Unicode collation protocol" |
| default y |
| help |
| The Unicode collation protocol is used for lexical comparisons. It is |
| required to run the UEFI shell. |
| |
| if EFI_UNICODE_COLLATION_PROTOCOL2 |
| |
| config EFI_UNICODE_CAPITALIZATION |
| bool "Support Unicode capitalization" |
| default y |
| help |
| Select this option to enable correct handling of the capitalization of |
| Unicode codepoints in the range 0x0000-0xffff. If this option is not |
| set, only the the correct handling of the letters of the codepage |
| used by the FAT file system is ensured. |
| |
| endif |
| |
| config EFI_RNG_PROTOCOL |
| bool "EFI_RNG_PROTOCOL support" |
| depends on DM_RNG |
| default y |
| help |
| Provide a EFI_RNG_PROTOCOL implementation using the hardware random |
| number generator of the platform. |
| |
| config EFI_TCG2_PROTOCOL |
| bool "EFI_TCG2_PROTOCOL support" |
| default y |
| depends on TPM_V2 |
| select SHA1 |
| select SHA256 |
| select SHA384 |
| select SHA512 |
| select HASH |
| select SMBIOS_PARSER |
| help |
| Provide a EFI_TCG2_PROTOCOL implementation using the TPM hardware |
| of the platform. |
| |
| config EFI_TCG2_PROTOCOL_EVENTLOG_SIZE |
| int "EFI_TCG2_PROTOCOL EventLog size" |
| depends on EFI_TCG2_PROTOCOL |
| default 65536 |
| help |
| Define the size of the EventLog for EFI_TCG2_PROTOCOL. Note that |
| this is going to be allocated twice. One for the eventlog it self |
| and one for the configuration table that is required from the spec |
| |
| config EFI_TCG2_PROTOCOL_MEASURE_DTB |
| bool "Measure DTB with EFI_TCG2_PROTOCOL" |
| depends on EFI_TCG2_PROTOCOL |
| help |
| When enabled, the DTB image passed to the booted EFI image is |
| measured using the EFI TCG2 protocol. Do not enable this feature if |
| the passed DTB contains data that change across platform reboots |
| and cannot be used has a predictable measurement. Otherwise |
| this feature allows better measurement of the system boot |
| sequence. |
| |
| config EFI_LOAD_FILE2_INITRD |
| bool "EFI_FILE_LOAD2_PROTOCOL for Linux initial ramdisk" |
| default y |
| help |
| Linux v5.7 and later can make use of this option. If the boot option |
| selected by the UEFI boot manager specifies an existing file to be used |
| as initial RAM disk, a Linux specific Load File2 protocol will be |
| installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line |
| argument. |
| |
| config EFI_RISCV_BOOT_PROTOCOL |
| bool "RISCV_EFI_BOOT_PROTOCOL support" |
| default y |
| depends on RISCV |
| help |
| The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID |
| to the next boot stage. It should be enabled as it is meant to |
| replace the transfer via the device-tree. The latter is not |
| possible on systems using ACPI. |
| |
| endmenu |
| |
| menu "Misc options" |
| config EFI_LOADER_BOUNCE_BUFFER |
| bool "EFI Applications use bounce buffers for DMA operations" |
| depends on ARM64 |
| help |
| Some hardware does not support DMA to full 64bit addresses. For this |
| hardware we can create a bounce buffer so that payloads don't have to |
| worry about platform details. |
| |
| config EFI_GRUB_ARM32_WORKAROUND |
| bool "Workaround for GRUB on 32bit ARM" |
| default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU |
| default y |
| depends on ARM && !ARM64 |
| help |
| GRUB prior to version 2.04 requires U-Boot to disable caches. This |
| workaround currently is also needed on systems with caches that |
| cannot be managed via CP15. |
| |
| config EFI_ESRT |
| bool "Enable the UEFI ESRT generation" |
| depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT |
| default y |
| help |
| Enabling this option creates the ESRT UEFI system table. |
| |
| config EFI_ECPT |
| bool "Enable the UEFI ECPT generation" |
| default y |
| help |
| Enabling this option created the ECPT UEFI table. |
| |
| config EFI_EBBR_2_1_CONFORMANCE |
| bool "Add the EBBRv2.1 conformance entry to the ECPT table" |
| depends on BOOTMETH_EFI_BOOTMGR |
| depends on EFI_ECPT |
| depends on EFI_LOADER_HII |
| depends on EFI_RISCV_BOOT_PROTOCOL || !RISCV |
| depends on EFI_RNG_PROTOCOL || !DM_RNG |
| depends on EFI_UNICODE_COLLATION_PROTOCOL2 |
| default y |
| help |
| Enabling this option adds the EBBRv2.1 conformance entry to the ECPT UEFI table. |
| |
| config EFI_SCROLL_ON_CLEAR_SCREEN |
| bool "Avoid overwriting previous output on clear screen" |
| help |
| Instead of erasing the screen content when the console screen should |
| be cleared, emit blank new lines so that previous output is scrolled |
| out of sight rather than overwritten. On serial consoles this allows |
| to capture complete boot logs (except for interactive menus etc.) |
| and can ease debugging related issues. |
| |
| endmenu |
| |
| menu "EFI bootmanager" |
| |
| config EFI_BOOTMGR |
| bool "UEFI Boot Manager" |
| default y |
| help |
| Select this option if you want to select the UEFI binary to be booted |
| via UEFI variables Boot####, BootOrder, and BootNext. You should also |
| normally enable CMD_BOOTEFI_BOOTMGR so that the command is available. |
| |
| config EFI_HTTP_BOOT |
| bool "EFI HTTP Boot support" |
| depends on NET || NET_LWIP |
| select CMD_NET |
| select CMD_DNS |
| select CMD_WGET |
| select BLKMAP |
| help |
| Enabling this option adds EFI HTTP Boot support. It allows to |
| directly boot from network. |
| endmenu |
| |
| config BOOTEFI_HELLO_COMPILE |
| bool "Compile a standard EFI hello world binary for testing" |
| default y |
| help |
| This compiles a standard EFI hello world application with U-Boot so |
| that it can be used with the test/py testing framework. This is useful |
| for testing that EFI is working at a basic level, and for bringing |
| up EFI support on a new architecture. |
| |
| No additional space will be required in the resulting U-Boot binary |
| when this option is enabled. |
| |
| config BOOTEFI_TESTAPP_COMPILE |
| bool "Compile an EFI test app for testing" |
| default y |
| help |
| This compiles an app designed for testing. It is packed into an image |
| by the test.py testing frame in the setup_efi_image() function. |
| |
| No additional space will be required in the resulting U-Boot binary |
| when this option is enabled. |
| |
| endif |
| |
| source "lib/efi/Kconfig" |
| |
| endmenu |