aboutsummaryrefslogtreecommitdiff
path: root/lib/efi_loader/Kconfig
blob: 2fb24d7af9a4f2088460d541f5b5df628db43a5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
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
	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_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.

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 he 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_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_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.

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

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

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

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_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_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

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

config EFI_HTTP_BOOT
	bool "EFI HTTP Boot support"
	select CMD_DNS
	select CMD_WGET
	select BLKMAP
	help
	  Enabling this option adds EFI HTTP Boot support. It allows to
	  directly boot from network.

endif