Prepare v2023.10
[platform/kernel/u-boot.git] / lib / efi_loader / Kconfig
1 config EFI_LOADER
2         bool "Support running UEFI applications"
3         depends on OF_LIBFDT && ( \
4                 ARM && (SYS_CPU = arm1136 || \
5                         SYS_CPU = arm1176 || \
6                         SYS_CPU = armv7   || \
7                         SYS_CPU = armv8)  || \
8                 X86 || RISCV || SANDBOX)
9         # We need EFI_STUB_64BIT to be set on x86_64 with EFI_STUB
10         depends on !EFI_STUB || !X86_64 || EFI_STUB_64BIT
11         # We need EFI_STUB_32BIT to be set on x86_32 with EFI_STUB
12         depends on !EFI_STUB || !X86 || X86_64 || EFI_STUB_32BIT
13         depends on BLK
14         depends on !EFI_APP
15         default y if !ARM || SYS_CPU = armv7 || SYS_CPU = armv8
16         select CHARSET
17         # We need to send DM events, dynamically, in the EFI block driver
18         select DM_EVENT
19         select EVENT_DYNAMIC
20         select LIB_UUID
21         imply PARTITION_UUIDS
22         select REGEX
23         imply FAT
24         imply FAT_WRITE
25         imply USB_KEYBOARD_FN_KEYS
26         imply VIDEO_ANSI
27         help
28           Select this option if you want to run UEFI applications (like GNU
29           GRUB or iPXE) on top of U-Boot. If this option is enabled, U-Boot
30           will expose the UEFI API to a loaded application, enabling it to
31           reuse U-Boot's device drivers.
32
33 if EFI_LOADER
34
35 config CMD_BOOTEFI_BOOTMGR
36         bool "UEFI Boot Manager"
37         default y
38         select BOOTMETH_GLOBAL if BOOTSTD
39         help
40           Select this option if you want to select the UEFI binary to be booted
41           via UEFI variables Boot####, BootOrder, and BootNext. This enables the
42           'bootefi bootmgr' command.
43
44 choice
45         prompt "Store for non-volatile UEFI variables"
46         default EFI_VARIABLE_FILE_STORE
47         help
48           Select where non-volatile UEFI variables shall be stored.
49
50 config EFI_VARIABLE_FILE_STORE
51         bool "Store non-volatile UEFI variables as file"
52         depends on FAT_WRITE
53         help
54           Select this option if you want non-volatile UEFI variables to be
55           stored as file /ubootefi.var on the EFI system partition.
56
57 config EFI_MM_COMM_TEE
58         bool "UEFI variables storage service via the trusted world"
59         depends on OPTEE
60         help
61           Allowing access to the MM SP services (SPs such as  StandAlonneMM, smm-gateway).
62           When using the u-boot OP-TEE driver, StandAlonneMM is supported.
63           When using the u-boot FF-A  driver any MM SP is supported.
64
65           If OP-TEE is present and running StandAloneMM, dispatch all UEFI
66           variable related operations to that. The application will verify,
67           authenticate and store the variables on an RPMB.
68
69           When ARM_FFA_TRANSPORT is used, dispatch all UEFI variable related
70           operations to the MM SP running in the secure world.
71           A door bell mechanism is used to notify the SP when there is data in the shared
72           MM buffer. The data is copied by u-boot to the shared buffer before issuing
73           the door bell event.
74
75 config FFA_SHARED_MM_BUF_SIZE
76         int "Memory size of the shared MM communication buffer"
77         depends on EFI_MM_COMM_TEE && ARM_FFA_TRANSPORT
78         help
79           This defines the size in bytes of the memory area reserved for the shared
80           buffer used for communication between the MM feature in U-Boot and
81           the MM SP in secure world.
82           The size of the memory region must be a multiple of the size of the maximum
83           translation granule size that is specified in the ID_AA64MMFR0_EL1 System register.
84           It is assumed that the MM SP knows the size of the shared MM communication buffer.
85
86 config FFA_SHARED_MM_BUF_OFFSET
87         int "Data offset in the shared MM communication buffer"
88         depends on EFI_MM_COMM_TEE && ARM_FFA_TRANSPORT
89         help
90           This defines the offset in bytes of the data read or written to in the shared
91           buffer by the MM SP.
92
93 config FFA_SHARED_MM_BUF_ADDR
94         hex "Define the address of the shared MM communication buffer"
95         depends on EFI_MM_COMM_TEE && ARM_FFA_TRANSPORT
96         help
97           This defines the address of the shared MM communication buffer
98           used for communication between the MM feature in U-Boot and
99           the MM SP in secure world.
100           It is assumed that the MM SP knows the address of the shared MM communication buffer.
101
102 config EFI_VARIABLE_NO_STORE
103         bool "Don't persist non-volatile UEFI variables"
104         help
105           If you choose this option, non-volatile variables cannot be persisted.
106           You could still provide non-volatile variables via
107           EFI_VARIABLES_PRESEED.
108
109 endchoice
110
111 config EFI_VARIABLES_PRESEED
112         bool "Initial values for UEFI variables"
113         depends on !EFI_MM_COMM_TEE
114         help
115           Include a file with the initial values for non-volatile UEFI variables
116           into the U-Boot binary. If this configuration option is set, changes
117           to authentication related variables (PK, KEK, db, dbx) are not
118           allowed.
119
120 if EFI_VARIABLES_PRESEED
121
122 config EFI_VAR_SEED_FILE
123         string "File with initial values of non-volatile UEFI variables"
124         default ubootefi.var
125         help
126           File with initial values of non-volatile UEFI variables. The file must
127           be in the same format as the storage in the EFI system partition. The
128           easiest way to create it is by setting the non-volatile variables in
129           U-Boot. If a relative file path is used, it is relative to the source
130           directory.
131
132 endif
133
134 config EFI_VAR_BUF_SIZE
135         int "Memory size of the UEFI variable store"
136         default 16384 if EFI_MM_COMM_TEE
137         default 65536
138         range 4096 2147483647
139         help
140           This defines the size in bytes of the memory area reserved for keeping
141           UEFI variables.
142
143           When using StandAloneMM (CONFIG_EFI_MM_COMM_TEE=y) this value should
144           match the value of PcdFlashNvStorageVariableSize used to compile the
145           StandAloneMM module.
146
147           Minimum 4096, default 65536, or 16384 when using StandAloneMM.
148
149 config EFI_GET_TIME
150         bool "GetTime() runtime service"
151         depends on DM_RTC
152         default y
153         help
154           Provide the GetTime() runtime service at boottime. This service
155           can be used by an EFI application to read the real time clock.
156
157 config EFI_SET_TIME
158         bool "SetTime() runtime service"
159         depends on EFI_GET_TIME
160         default y if ARCH_QEMU || SANDBOX
161         help
162           Provide the SetTime() runtime service at boottime. This service
163           can be used by an EFI application to adjust the real time clock.
164
165 config EFI_SCROLL_ON_CLEAR_SCREEN
166         bool "Avoid overwriting previous output on clear screen"
167         help
168           Instead of erasing the screen content when the console screen should
169           be cleared, emit blank new lines so that previous output is scrolled
170           out of sight rather than overwritten. On serial consoles this allows
171           to capture complete boot logs (except for interactive menus etc.)
172           and can ease debugging related issues.
173
174 config EFI_HAVE_CAPSULE_SUPPORT
175         bool
176
177 config EFI_RUNTIME_UPDATE_CAPSULE
178         bool "UpdateCapsule() runtime service"
179         select EFI_HAVE_CAPSULE_SUPPORT
180         help
181           Select this option if you want to use UpdateCapsule and
182           QueryCapsuleCapabilities API's.
183
184 config EFI_CAPSULE_ON_DISK
185         bool "Enable capsule-on-disk support"
186         depends on SYSRESET
187         select EFI_HAVE_CAPSULE_SUPPORT
188         help
189           Select this option if you want to use capsule-on-disk feature,
190           that is, capsules can be fetched and executed from files
191           under a specific directory on UEFI system partition instead of
192           via UpdateCapsule API.
193
194 config EFI_IGNORE_OSINDICATIONS
195         bool "Ignore OsIndications for CapsuleUpdate on-disk"
196         depends on EFI_CAPSULE_ON_DISK
197         help
198           There are boards where U-Boot does not support SetVariable at runtime.
199           Select this option if you want to use the capsule-on-disk feature
200           without setting the EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED
201           flag in variable OsIndications.
202
203 config EFI_CAPSULE_ON_DISK_EARLY
204         bool "Initiate capsule-on-disk at U-Boot boottime"
205         depends on EFI_CAPSULE_ON_DISK
206         help
207           Normally, without this option enabled, capsules will be
208           executed only at the first time of invoking one of efi command.
209           If this option is enabled, capsules will be enforced to be
210           executed as part of U-Boot initialisation so that they will
211           surely take place whatever is set to distro_bootcmd.
212
213 config EFI_CAPSULE_FIRMWARE
214         bool
215
216 config EFI_CAPSULE_FIRMWARE_MANAGEMENT
217         bool "Capsule: Firmware Management Protocol"
218         depends on EFI_HAVE_CAPSULE_SUPPORT
219         default y
220         help
221           Select this option if you want to enable capsule-based
222           firmware update using Firmware Management Protocol.
223
224 config EFI_CAPSULE_FIRMWARE_FIT
225         bool "FMP driver for FIT images"
226         depends on FIT
227         depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT
228         select UPDATE_FIT
229         select DFU
230         select SET_DFU_ALT_INFO
231         select EFI_CAPSULE_FIRMWARE
232         help
233           Select this option if you want to enable firmware management protocol
234           driver for FIT image
235
236 config EFI_CAPSULE_FIRMWARE_RAW
237         bool "FMP driver for raw images"
238         depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT
239         depends on SANDBOX || (!SANDBOX && !EFI_CAPSULE_FIRMWARE_FIT)
240         select DFU_WRITE_ALT
241         select DFU
242         select SET_DFU_ALT_INFO
243         select EFI_CAPSULE_FIRMWARE
244         help
245           Select this option if you want to enable firmware management protocol
246           driver for raw image
247
248 config EFI_CAPSULE_AUTHENTICATE
249         bool "Update Capsule authentication"
250         depends on EFI_CAPSULE_FIRMWARE
251         depends on EFI_CAPSULE_ON_DISK
252         depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT
253         select HASH
254         select SHA256
255         select RSA
256         select RSA_VERIFY
257         select RSA_VERIFY_WITH_PKEY
258         select X509_CERTIFICATE_PARSER
259         select PKCS7_MESSAGE_PARSER
260         select PKCS7_VERIFY
261         select IMAGE_SIGN_INFO
262         select EFI_SIGNATURE_SUPPORT
263         help
264           Select this option if you want to enable capsule
265           authentication
266
267 config EFI_CAPSULE_MAX
268         int "Max value for capsule index"
269         default 15
270         range 0 65535
271         help
272           Select the max capsule index value used for capsule report
273           variables. This value is used to create CapsuleMax variable.
274
275 config EFI_DEVICE_PATH_TO_TEXT
276         bool "Device path to text protocol"
277         default y
278         help
279           The device path to text protocol converts device nodes and paths to
280           human readable strings.
281
282 config EFI_DEVICE_PATH_UTIL
283         bool "Device path utilities protocol"
284         default y
285         help
286           The device path utilities protocol creates and manipulates device
287           paths and device nodes. It is required to run the EFI Shell.
288
289 config EFI_DT_FIXUP
290         bool "Device tree fixup protocol"
291         depends on !GENERATE_ACPI_TABLE
292         default y
293         help
294           The EFI device-tree fix-up protocol provides a function to let the
295           firmware apply fix-ups. This may be used by boot loaders.
296
297 config EFI_LOADER_HII
298         bool "HII protocols"
299         default y
300         help
301           The Human Interface Infrastructure is a complicated framework that
302           allows UEFI applications to draw fancy menus and hook strings using
303           a translation framework.
304
305           U-Boot implements enough of its features to be able to run the UEFI
306           Shell, but not more than that.
307
308 config EFI_UNICODE_COLLATION_PROTOCOL2
309         bool "Unicode collation protocol"
310         default y
311         help
312           The Unicode collation protocol is used for lexical comparisons. It is
313           required to run the UEFI shell.
314
315 if EFI_UNICODE_COLLATION_PROTOCOL2
316
317 config EFI_UNICODE_CAPITALIZATION
318         bool "Support Unicode capitalization"
319         default y
320         help
321           Select this option to enable correct handling of the capitalization of
322           Unicode codepoints in the range 0x0000-0xffff. If this option is not
323           set, only the the correct handling of the letters of the codepage
324           used by the FAT file system is ensured.
325
326 endif
327
328 config EFI_LOADER_BOUNCE_BUFFER
329         bool "EFI Applications use bounce buffers for DMA operations"
330         depends on ARM64
331         help
332           Some hardware does not support DMA to full 64bit addresses. For this
333           hardware we can create a bounce buffer so that payloads don't have to
334           worry about platform details.
335
336 config EFI_PLATFORM_LANG_CODES
337         string "Language codes supported by firmware"
338         default "en-US"
339         help
340           This value is used to initialize the PlatformLangCodes variable. Its
341           value is a semicolon (;) separated list of language codes in native
342           RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
343           to initialize the PlatformLang variable.
344
345 config EFI_HAVE_RUNTIME_RESET
346         # bool "Reset runtime service is available"
347         bool
348         default y
349         depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
350                    SANDBOX || SYSRESET_X86
351
352 config EFI_GRUB_ARM32_WORKAROUND
353         bool "Workaround for GRUB on 32bit ARM"
354         default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
355         default y
356         depends on ARM && !ARM64
357         help
358           GRUB prior to version 2.04 requires U-Boot to disable caches. This
359           workaround currently is also needed on systems with caches that
360           cannot be managed via CP15.
361
362 config EFI_RNG_PROTOCOL
363         bool "EFI_RNG_PROTOCOL support"
364         depends on DM_RNG
365         default y
366         help
367           Provide a EFI_RNG_PROTOCOL implementation using the hardware random
368           number generator of the platform.
369
370 config EFI_TCG2_PROTOCOL
371         bool "EFI_TCG2_PROTOCOL support"
372         default y
373         depends on TPM_V2
374         # Sandbox TPM currently fails on GetCapabilities needed for TCG2
375         depends on !SANDBOX
376         select SHA1
377         select SHA256
378         select SHA384
379         select SHA512
380         select HASH
381         select SMBIOS_PARSER
382         help
383           Provide a EFI_TCG2_PROTOCOL implementation using the TPM hardware
384           of the platform.
385
386 config EFI_TCG2_PROTOCOL_EVENTLOG_SIZE
387         int "EFI_TCG2_PROTOCOL EventLog size"
388         depends on EFI_TCG2_PROTOCOL
389         default 65536
390         help
391                 Define the size of the EventLog for EFI_TCG2_PROTOCOL. Note that
392                 this is going to be allocated twice. One for the eventlog it self
393                 and one for the configuration table that is required from the spec
394
395 config EFI_TCG2_PROTOCOL_MEASURE_DTB
396         bool "Measure DTB with EFI_TCG2_PROTOCOL"
397         depends on EFI_TCG2_PROTOCOL
398         help
399           When enabled, the DTB image passed to the booted EFI image is
400           measured using the EFI TCG2 protocol. Do not enable this feature if
401           the passed DTB contains data that change across platform reboots
402           and cannot be used has a predictable measurement. Otherwise
403           this feature allows better measurement of the system boot
404           sequence.
405
406 config EFI_LOAD_FILE2_INITRD
407         bool "EFI_FILE_LOAD2_PROTOCOL for Linux initial ramdisk"
408         default y
409         help
410           Linux v5.7 and later can make use of this option. If the boot option
411           selected by the UEFI boot manager specifies an existing file to be used
412           as initial RAM disk, a Linux specific Load File2 protocol will be
413           installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line
414           argument.
415
416 config EFI_SECURE_BOOT
417         bool "Enable EFI secure boot support"
418         depends on EFI_LOADER && FIT_SIGNATURE
419         select HASH
420         select SHA256
421         select RSA
422         select RSA_VERIFY_WITH_PKEY
423         select IMAGE_SIGN_INFO
424         select ASYMMETRIC_KEY_TYPE
425         select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
426         select X509_CERTIFICATE_PARSER
427         select PKCS7_MESSAGE_PARSER
428         select PKCS7_VERIFY
429         select MSCODE_PARSER
430         select EFI_SIGNATURE_SUPPORT
431         help
432           Select this option to enable EFI secure boot support.
433           Once SecureBoot mode is enforced, any EFI binary can run only if
434           it is signed with a trusted key. To do that, you need to install,
435           at least, PK, KEK and db.
436
437 config EFI_SIGNATURE_SUPPORT
438         bool
439
440 config EFI_ESRT
441         bool "Enable the UEFI ESRT generation"
442         depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT
443         default y
444         help
445           Enabling this option creates the ESRT UEFI system table.
446
447 config EFI_ECPT
448         bool "Enable the UEFI ECPT generation"
449         default y
450         help
451           Enabling this option created the ECPT UEFI table.
452
453 config EFI_EBBR_2_1_CONFORMANCE
454         bool "Add the EBBRv2.1 conformance entry to the ECPT table"
455         depends on EFI_ECPT
456         depends on EFI_LOADER_HII
457         depends on EFI_RISCV_BOOT_PROTOCOL || !RISCV
458         depends on EFI_RNG_PROTOCOL || !DM_RNG
459         depends on EFI_UNICODE_COLLATION_PROTOCOL2
460         default y
461         help
462           Enabling this option adds the EBBRv2.1 conformance entry to the ECPT UEFI table.
463
464 config EFI_RISCV_BOOT_PROTOCOL
465         bool "RISCV_EFI_BOOT_PROTOCOL support"
466         default y
467         depends on RISCV
468         help
469           The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
470           to the next boot stage. It should be enabled as it is meant to
471           replace the transfer via the device-tree. The latter is not
472           possible on systems using ACPI.
473
474 endif