1menu "Library routines"
2
3config ADDR_MAP
4	bool "Enable support for non-identity virtual-physical mappings"
5	help
6	  Enables helper code for implementing non-identity virtual-physical
7	  memory mappings for 32bit CPUs.
8
9	  This library only works in the post-relocation phase.
10
11config SYS_NUM_ADDR_MAP
12	int "Size of the address-map table"
13	depends on ADDR_MAP
14	default 16
15	help
16	  Sets the number of entries in the virtual-physical mapping table.
17
18config SYS_TIMER_COUNTS_DOWN
19	bool "System timer counts down rather than up"
20
21config PHYSMEM
22	bool "Access to physical memory region (> 4G)"
23	help
24	  Some basic support is provided for operations on memory not
25	  normally accessible to 32-bit U-Boot - e.g. some architectures
26	  support access to more than 4G of memory on 32-bit
27	  machines using physical address extension or similar.
28	  Enable this to access this basic support, which only supports clearing
29	  the memory.
30
31config BCH
32	bool "Enable Software based BCH ECC"
33	help
34	  Enables software based BCH ECC algorithm present in lib/bch.c
35	  This is used by SoC platforms which do not have built-in ELM
36	  hardware engine required for BCH ECC correction.
37
38config BINMAN_FDT
39	bool "Allow access to binman information in the device tree"
40	depends on BINMAN && DM && OF_CONTROL
41	default y if OF_SEPARATE || OF_EMBED
42	help
43	  This enables U-Boot to access information about binman entries,
44	  stored in the device tree in a binman node. Typical uses are to
45	  locate entries in the firmware image. See binman.h for the available
46	  functionality.
47
48config BINMAN_DTB
49	string "binman DTB description"
50	depends on BINMAN
51	help
52	  This enables option to point to different DTB file with binman node which
53	  is outside of DTB used by the firmware. Use this option if information
54	  about generated images shouldn't be the part of target binary. Or on system
55	  with limited storage.
56
57config CC_OPTIMIZE_LIBS_FOR_SPEED
58	bool "Optimize libraries for speed"
59	help
60	  Enabling this option will pass "-O2" to gcc when compiling
61	  under "lib" directory.
62
63	  If unsure, say N.
64
65config CHARSET
66	bool
67
68config DYNAMIC_CRC_TABLE
69	bool "Enable Dynamic tables for CRC"
70	help
71	  Enable this option to calculate entries for CRC tables at runtime.
72	  This can be helpful when reducing the size of the build image
73
74config HAVE_ARCH_IOMAP
75	bool
76	help
77	  Enable this option if architecture provides io{read,write}{8,16,32}
78	  I/O accessor functions.
79
80config HAVE_PRIVATE_LIBGCC
81	bool
82
83config LIB_UUID
84	bool
85	select SHA1
86
87config RANDOM_UUID
88	bool "GPT Random UUID generation"
89	select LIB_UUID
90	help
91	  Enable the generation of partitions with random UUIDs if none
92	  are provided.
93
94config SPL_LIB_UUID
95	depends on SPL
96	bool
97
98config SEMIHOSTING
99	bool "Support semihosting"
100	depends on ARM || RISCV
101	help
102	  Semihosting is a method for a target to communicate with a host
103	  debugger. It uses special instructions which the debugger will trap
104	  on and interpret. This allows U-Boot to read/write files, print to
105	  the console, and execute arbitrary commands on the host system.
106
107	  Enabling this option will add support for reading and writing files
108	  on the host system. If you don't have a debugger attached then trying
109	  to do this will likely cause U-Boot to hang. Say 'n' if you are unsure.
110
111config SEMIHOSTING_FALLBACK
112	bool "Recover gracefully when semihosting fails"
113	depends on SEMIHOSTING
114	default y
115	help
116	  Normally, if U-Boot makes a semihosting call and no debugger is
117	  attached, then it will panic due to a synchronous abort
118	  exception. This config adds an exception handler which will allow
119	  U-Boot to recover. Say 'y' if unsure.
120
121config SPL_SEMIHOSTING
122	bool "Support semihosting in SPL"
123	depends on SPL && (ARM || RISCV)
124	help
125	  Semihosting is a method for a target to communicate with a host
126	  debugger. It uses special instructions which the debugger will trap
127	  on and interpret. This allows U-Boot to read/write files, print to
128	  the console, and execute arbitrary commands on the host system.
129
130	  Enabling this option will add support for reading and writing files
131	  on the host system. If you don't have a debugger attached then trying
132	  to do this will likely cause U-Boot to hang. Say 'n' if you are unsure.
133
134config SPL_SEMIHOSTING_FALLBACK
135	bool "Recover gracefully when semihosting fails in SPL"
136	depends on SPL_SEMIHOSTING
137	select ARMV8_SPL_EXCEPTION_VECTORS if ARM64
138	default y
139	help
140	  Normally, if U-Boot makes a semihosting call and no debugger is
141	  attached, then it will panic due to a synchronous abort
142	  exception. This config adds an exception handler which will allow
143	  U-Boot to recover. Say 'y' if unsure.
144
145config PRINTF
146	bool
147	default y
148
149config SPL_PRINTF
150	bool
151	select SPL_SPRINTF
152	select SPL_STRTO if !SPL_USE_TINY_PRINTF
153
154config TPL_PRINTF
155	bool
156	select TPL_SPRINTF
157	select TPL_STRTO if !TPL_USE_TINY_PRINTF
158
159config VPL_PRINTF
160	bool
161	select VPL_SPRINTF
162	select VPL_STRTO if !VPL_USE_TINY_PRINTF
163
164config SPRINTF
165	bool
166	default y
167
168config SPL_SPRINTF
169	bool
170
171config TPL_SPRINTF
172	bool
173
174config VPL_SPRINTF
175	bool
176
177config SSCANF
178	bool
179
180config STRTO
181	bool
182	default y
183
184config SPL_STRTO
185	bool
186
187config TPL_STRTO
188	bool
189
190config VPL_STRTO
191	bool
192
193config IMAGE_SPARSE
194	bool
195
196config IMAGE_SPARSE_FILLBUF_SIZE
197	hex "Android sparse image CHUNK_TYPE_FILL buffer size"
198	default 0x80000
199	depends on IMAGE_SPARSE
200	help
201	  Set the size of the fill buffer used when processing CHUNK_TYPE_FILL
202	  chunks.
203
204config USE_PRIVATE_LIBGCC
205	bool "Use private libgcc"
206	depends on HAVE_PRIVATE_LIBGCC
207	default y if HAVE_PRIVATE_LIBGCC && ((ARM && !ARM64) || MIPS)
208	help
209	  This option allows you to use the built-in libgcc implementation
210	  of U-Boot instead of the one provided by the compiler.
211	  If unsure, say N.
212
213config SYS_HZ
214	int
215	default 1000
216	help
217	  The frequency of the timer returned by get_timer().
218	  get_timer() must operate in milliseconds and this option must be
219	  set to 1000.
220
221config SPL_USE_TINY_PRINTF
222	bool "Enable tiny printf() version in SPL"
223	depends on SPL
224	default y
225	help
226	  This option enables a tiny, stripped down printf version.
227	  This should only be used in space limited environments,
228	  like SPL versions with hard memory limits. This version
229	  reduces the code size by about 2.5KiB on armv7.
230
231	  The supported format specifiers are %c, %s, %u/%d and %x.
232
233config TPL_USE_TINY_PRINTF
234	bool "Enable tiny printf() version in TPL"
235	depends on TPL
236	default y if SPL_USE_TINY_PRINTF
237	help
238	  This option enables a tiny, stripped down printf version.
239	  This should only be used in space limited environments,
240	  like SPL versions with hard memory limits. This version
241	  reduces the code size by about 2.5KiB on armv7.
242
243	  The supported format specifiers are %c, %s, %u/%d and %x.
244
245config VPL_USE_TINY_PRINTF
246	bool "Enable tiny printf() version for VPL"
247	depends on VPL
248	help
249	  This option enables a tiny, stripped down printf version.
250	  This should only be used in space limited environments,
251	  like SPL versions with hard memory limits. This version
252	  reduces the code size by about 2.5KiB on armv7.
253
254	  The supported format specifiers are %c, %s, %u/%d and %x.
255
256config SPL_USE_TINY_PRINTF_POINTER_SUPPORT
257	bool "Extend tiny printf with the pointer formatting %p"
258	depends on SPL_USE_TINY_PRINTF
259	help
260	  This option enables the formatting of pointers %p. It supports
261	  %p and %pa / %pap. If this option is selected by SPL_NET
262	  it also supports the formatting with %pm, %pM and %pI4.
263
264config PANIC_HANG
265	bool "Do not reset the system on fatal error"
266	help
267	  Define this option to stop the system in case of a fatal error,
268	  so that you have to reset it manually. This is probably NOT a good
269	  idea for an embedded system where you want the system to reboot
270	  automatically as fast as possible, but it may be useful during
271	  development since you can try to debug the conditions that lead to
272	  the situation.
273
274config REGEX
275	bool "Enable regular expression support"
276	default y if NET
277	help
278	  If this variable is defined, U-Boot is linked against the
279	  SLRE (Super Light Regular Expression) library, which adds
280	  regex support to some commands, for example "env grep" and
281	  "setexpr".
282
283choice
284	prompt "Pseudo-random library support type"
285	depends on NET_RANDOM_ETHADDR || RANDOM_UUID || CMD_UUID || \
286		   RNG_SANDBOX || UT_LIB && AES || FAT_WRITE || CMD_BOOTP || \
287		   CMD_DHCP || CMD_DHCP6
288	default LIB_RAND
289	help
290	  Select the library to provide pseudo-random number generator
291	  functions.  LIB_HW_RAND supports certain hardware engines that
292	  provide this functionality.  If in doubt, select LIB_RAND.
293
294config LIB_RAND
295	bool "Pseudo-random library support"
296
297config LIB_HW_RAND
298	bool "HW Engine for random library support"
299
300endchoice
301
302config SUPPORT_ACPI
303	bool
304	help
305	  Enable this if your arch or board can support generating ACPI
306	  (Advanced Configuration and Power Interface) tables. In this case
307	  U-Boot can generate these tables and pass them to the Operating
308	  System.
309
310config ACPI
311	bool "Enable support for ACPI libraries"
312	depends on SUPPORT_ACPI
313	help
314	  Provides library functions for dealing with ACPI tables. This does
315	  not necessarily include generation of tables
316	  (see GENERATE_ACPI_TABLE), but allows for tables to be located.
317
318config SPL_ACPI
319	bool "Enable support for ACPI libraries in SPL"
320	depends on SPL && SUPPORT_ACPI
321	help
322	  Provides library functions for dealing with ACPI tables in SPL. This
323	  does not necessarily include generation of tables
324	  (see GENERATE_ACPI_TABLE), but allows for tables to be located.
325
326config GENERATE_ACPI_TABLE
327	bool "Generate an ACPI (Advanced Configuration and Power Interface) table"
328	depends on ACPI
329	select BLOBLIST
330	select QFW if QEMU
331	help
332	  The Advanced Configuration and Power Interface (ACPI) specification
333	  provides an open standard for device configuration and management
334	  by the operating system. It defines platform-independent interfaces
335	  for configuration and power management monitoring.
336
337config ACPI_PARKING_PROTOCOL
338	bool "Support ACPI parking protocol method"
339	depends on GENERATE_ACPI_TABLE
340	depends on ARMV8_MULTIENTRY
341	depends on BLOBLIST_TABLES
342	default y if !SEC_FIRMWARE_ARMV8_PSCI && !ARMV8_PSCI
343	help
344	  Say Y here to support "ACPI parking protocol" enable method
345	  for booting Linux.
346
347	  To use this feature, you must do:
348	    - Bring secondary CPUs into U-Boot proper in a board-specific
349	      manner.  This must be done *after* relocation.  Otherwise, the
350	      secondary CPUs will spin in unprotected memory-area because the
351	      master CPU protects the relocated spin code.
352
353config SPL_TINY_MEMSET
354	bool "Use a very small memset() in SPL"
355	depends on SPL
356	help
357	  The faster memset() is the arch-specific one (if available) enabled
358	  by CONFIG_USE_ARCH_MEMSET. If that is not enabled, we can still get
359	  better performance by writing a word at a time. But in very
360	  size-constrained environments even this may be too big. Enable this
361	  option to reduce code size slightly at the cost of some speed.
362
363config TPL_TINY_MEMSET
364	bool "Use a very small memset() in TPL"
365	depends on TPL
366	help
367	  The faster memset() is the arch-specific one (if available) enabled
368	  by CONFIG_USE_ARCH_MEMSET. If that is not enabled, we can still get
369	  better performance by writing a word at a time. But in very
370	  size-constrained environments even this may be too big. Enable this
371	  option to reduce code size slightly at the cost of some speed.
372
373config RBTREE
374	bool
375
376config BITREVERSE
377	bool "Bit reverse library from Linux"
378
379config TRACE
380	bool "Support for tracing of function calls and timing"
381	imply CMD_TRACE
382	imply TIMER_EARLY
383	help
384	  Enables function tracing within U-Boot. This allows recording of call
385	  traces including timing information. The command can write data to
386	  memory for exporting for analysis (e.g. using bootchart).
387	  See doc/develop/trace.rst for full details.
388
389config TRACE_BUFFER_SIZE
390	hex "Size of trace buffer in U-Boot"
391	depends on TRACE
392	default 0x01000000
393	help
394	  Sets the size of the trace buffer in U-Boot. This is allocated from
395	  memory during relocation. If this buffer is too small, the trace
396	  history will be truncated, with later records omitted.
397
398	  If early trace is enabled (i.e. before relocation), this buffer must
399	  be large enough to include all the data from the early trace buffer as
400	  well, since this is copied over to the main buffer during relocation.
401
402	  A trace record is emitted for each function call and each record is
403	  12 bytes (see struct trace_call). A suggested minimum size is 1MB. If
404	  the size is too small then 'trace stats' will show a message saying
405	  how many records were dropped due to buffer overflow.
406
407config TRACE_CALL_DEPTH_LIMIT
408	int "Trace call depth limit"
409	depends on TRACE
410	default 15
411	help
412	  Sets the maximum call depth up to which function calls are recorded.
413
414config TRACE_EARLY
415	bool "Enable tracing before relocation"
416	depends on TRACE
417	help
418	  Sometimes it is helpful to trace execution of U-Boot before
419	  relocation. This is possible by using a arch-specific, fixed buffer
420	  position in memory. Enable this option to start tracing as early as
421	  possible after U-Boot starts.
422
423config TRACE_EARLY_SIZE
424	hex "Size of early trace buffer in U-Boot"
425	depends on TRACE_EARLY
426	default 0x00100000
427	help
428	  Sets the size of the early trace buffer in bytes. This is used to hold
429	  tracing information before relocation.
430
431config TRACE_EARLY_CALL_DEPTH_LIMIT
432	int "Early trace call depth limit"
433	depends on TRACE_EARLY
434	default 15
435	help
436	  Sets the maximum call depth up to which function calls are recorded
437	  during early tracing.
438
439config TRACE_EARLY_ADDR
440	hex "Address of early trace buffer in U-Boot"
441	depends on TRACE_EARLY
442	default 0x00200000
443	help
444	  Sets the address of the early trace buffer in U-Boot. This memory
445	  must be accessible before relocation.
446
447	  A trace record is emitted for each function call and each record is
448	  12 bytes (see struct trace_call). A suggested minimum size is 1MB. If
449	  the size is too small then the message which says the amount of early
450	  data being coped will the the same as the
451
452config CIRCBUF
453	bool "Enable circular buffer support"
454
455source "lib/dhry/Kconfig"
456
457menu "Alternative crypto libraries"
458
459source "lib/mbedtls/Kconfig"
460
461endmenu
462
463menu "Security support"
464
465config AES
466	bool "Support the AES algorithm"
467	help
468	  This provides a means to encrypt and decrypt data using the AES
469	  (Advanced Encryption Standard). This algorithm uses a symetric key
470	  and is widely used as a streaming cipher. Different key lengths are
471	  supported by the algorithm but only a 128-bit key is supported at
472	  present.
473
474source "lib/ecdsa/Kconfig"
475source "lib/rsa/Kconfig"
476source "lib/crypto/Kconfig"
477source "lib/crypt/Kconfig"
478
479config TPM
480	bool "Trusted Platform Module (TPM) Support"
481	depends on DM
482	imply DM_RNG
483	select SHA1
484	help
485	  This enables support for TPMs which can be used to provide security
486	  features for your board. The TPM can be connected via LPC or I2C
487	  and a sandbox TPM is provided for testing purposes. Use the 'tpm'
488	  command to interactive the TPM. Driver model support is provided
489	  for the low-level TPM interface, but only one TPM is supported at
490	  a time by the TPM library.
491	  For size reasons only SHA1 is selected which is supported on TPM1.2.
492	  If you want a fully functional TPM enable all hashing algorithms.
493	  If you enabled measured boot all hashing algorithms are selected.
494
495config SPL_TPM
496	bool "Trusted Platform Module (TPM) Support in SPL"
497	depends on SPL_DM
498	imply SPL_CRC8
499	help
500	  This enables support for TPMs which can be used to provide security
501	  features for your board. The TPM can be connected via LPC or I2C
502	  and a sandbox TPM is provided for testing purposes. Use the 'tpm'
503	  command to interactive the TPM. Driver model support is provided
504	  for the low-level TPM interface, but only one TPM is supported at
505	  a time by the TPM library.
506
507config TPL_TPM
508	bool "Trusted Platform Module (TPM) Support in TPL"
509	depends on TPL_DM
510	help
511	  This enables support for TPMs which can be used to provide security
512	  features for your board. The TPM can be connected via LPC or I2C
513	  and a sandbox TPM is provided for testing purposes. Use the 'tpm'
514	  command to interactive the TPM. Driver model support is provided
515	  for the low-level TPM interface, but only one TPM is supported at
516	  a time by the TPM library.
517
518config VPL_TPM
519	bool "Trusted Platform Module (TPM) Support in VPL"
520	depends on VPL_DM
521	help
522	  This enables support for TPMs which can be used to provide security
523	  features for your board. The TPM can be connected via LPC or I2C
524	  and a sandbox TPM is provided for testing purposes. Use the 'tpm'
525	  command to interactive the TPM. Driver model support is provided
526	  for the low-level TPM interface, but only one TPM is supported at
527	  a time by the TPM library.
528
529config TPM_PCR_ALLOCATE
530	bool "Re-configurate TPM algorithms in run-time (PCR allocate)"
531	depends on TPM_V2 && (MEASURED_BOOT || EFI_TCG2_PROTOCOL)
532	help
533	  This enables a detection for the dismatches of algorithms among TPM
534	  device, eventlog from previous boot stage and U-Boot support.
535	  A PCR allocate command will be sent to reconfigurate the TPM device
536	  in run-time to make sure algorithms in TPM device, eventlog and
537	  U-Boot are aligned with each other.
538	  A system reboot will be proceeded after then to activate the new
539	  algorithms.
540
541endmenu
542
543menu "Android Verified Boot"
544
545config LIBAVB
546	bool "Android Verified Boot 2.0 support"
547	depends on ANDROID_BOOT_IMAGE
548	help
549	  This enables support of Android Verified Boot 2.0 which can be used
550	  to assure the end user of the integrity of the software running on a
551	  device. Introduces such features as boot chain of trust, rollback
552	  protection etc.
553
554endmenu
555
556menu "Hashing Support"
557
558config BLAKE2
559	bool "Enable BLAKE2 support"
560	help
561	  This option enables support of hashing using BLAKE2B algorithm.
562	  The hash is calculated in software.
563	  The BLAKE2 algorithm produces a hash value (digest) between 1 and
564	  64 bytes.
565
566config SHA1
567	bool "Enable SHA1 support"
568	help
569	  This option enables support of hashing using SHA1 algorithm.
570	  The hash is calculated in software.
571	  The SHA1 algorithm produces a 160-bit (20-byte) hash value
572	  (digest).
573
574config SHA256
575	bool "Enable SHA256 support"
576	help
577	  This option enables support of hashing using SHA256 algorithm.
578	  The hash is calculated in software.
579	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
580	  (digest).
581
582config SHA512
583	bool "Enable SHA512 support"
584	default y if TI_SECURE_DEVICE && FIT_SIGNATURE
585	help
586	  This option enables support of hashing using SHA512 algorithm.
587	  The hash is calculated in software.
588	  The SHA512 algorithm produces a 512-bit (64-byte) hash value
589	  (digest).
590
591config SHA384
592	bool "Enable SHA384 support"
593	select SHA512
594	help
595	  This option enables support of hashing using SHA384 algorithm.
596	  The hash is calculated in software. This is also selects SHA512,
597	  because these implementations share the bulk of the code..
598	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
599	  (digest).
600
601config SHA_HW_ACCEL
602	bool "Enable hardware acceleration for SHA hash functions"
603	help
604	  This option enables hardware acceleration for the SHA1 and SHA256
605	  hashing algorithms. This affects the 'hash' command and also the
606	  hash_lookup_algo() function.
607
608if SPL
609
610config SPL_CRC32
611	bool "Enable CRC32 support in SPL"
612	default y if SPL_LEGACY_IMAGE_SUPPORT || SPL_EFI_PARTITION
613	default y if SPL_ENV_SUPPORT || TPL_BLOBLIST
614	help
615	  This option enables support of hashing using CRC32 algorithm.
616	  The CRC32 algorithm produces 32-bit checksum value. For FIT
617	  images, this is the least secure type of checksum, suitable for
618	  detected accidental image corruption. For secure applications you
619	  should consider SHA256 or SHA384.
620
621config SPL_SHA1
622	bool "Enable SHA1 support in SPL"
623	default y if SHA1
624	help
625	  This option enables support of hashing using SHA1 algorithm.
626	  The hash is calculated in software.
627	  The SHA1 algorithm produces a 160-bit (20-byte) hash value
628	  (digest).
629
630config SPL_SHA256
631	bool "Enable SHA256 support in SPL"
632	default y if SHA256
633	help
634	  This option enables support of hashing using SHA256 algorithm.
635	  The hash is calculated in software.
636	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
637	  (digest).
638
639config SPL_SHA512
640	bool "Enable SHA512 support in SPL"
641	default y if SHA512
642	help
643	  This option enables support of hashing using SHA512 algorithm.
644	  The hash is calculated in software.
645	  The SHA512 algorithm produces a 512-bit (64-byte) hash value
646	  (digest).
647
648config SPL_SHA384
649	bool "Enable SHA384 support in SPL"
650	default y if SHA384
651	select SPL_SHA512
652	help
653	  This option enables support of hashing using SHA384 algorithm.
654	  The hash is calculated in software. This is also selects SHA512,
655	  because these implementations share the bulk of the code..
656	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
657	  (digest).
658
659config SPL_SHA_HW_ACCEL
660	bool "Enable hardware acceleration for SHA hash functions"
661	default y if SHA_HW_ACCEL
662	help
663	  This option enables hardware acceleration for the SHA1 and SHA256
664	  hashing algorithms. This affects the 'hash' command and also the
665	  hash_lookup_algo() function.
666
667config SPL_SHA_PROG_HW_ACCEL
668	bool "Enable Progressive hashing support using hardware in SPL"
669	depends on SHA_PROG_HW_ACCEL
670	default y
671	help
672	  This option enables hardware-acceleration for SHA progressive
673	  hashing.
674	  Data can be streamed in a block at a time and the hashing is
675	  performed in hardware.
676
677endif
678
679config VPL_SHA1
680	bool "Enable SHA1 support in VPL"
681	depends on VPL
682	default y if SHA1
683	help
684	  This option enables support of hashing using SHA1 algorithm.
685	  The hash is calculated in software.
686	  The SHA1 algorithm produces a 160-bit (20-byte) hash value
687	  (digest).
688
689config VPL_SHA256
690	bool "Enable SHA256 support in VPL"
691	depends on VPL
692	default y if SHA256
693	help
694	  This option enables support of hashing using SHA256 algorithm.
695	  The hash is calculated in software.
696	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
697	  (digest).
698
699if SHA_HW_ACCEL
700
701config SHA512_HW_ACCEL
702	bool "Enable hardware acceleration for SHA512"
703	depends on SHA512
704	help
705	  This option enables hardware acceleration for the SHA384 and SHA512
706	  hashing algorithms. This affects the 'hash' command and also the
707	  hash_lookup_algo() function.
708
709config SHA_PROG_HW_ACCEL
710	bool "Enable Progressive hashing support using hardware"
711	help
712	  This option enables hardware-acceleration for SHA progressive
713	  hashing.
714	  Data can be streamed in a block at a time and the hashing is
715	  performed in hardware.
716
717endif
718
719config MD5
720	bool "Support MD5 algorithm"
721	help
722	  This option enables MD5 support. MD5 is an algorithm designed
723	  in 1991 that produces a 16-byte digest (or checksum) from its input
724	  data. It has a number of vulnerabilities which preclude its use in
725	  security applications, but it can be useful for providing a quick
726	  checksum of a block of data.
727
728config SPL_MD5
729	bool "Support MD5 algorithm in SPL"
730	depends on SPL
731	help
732	  This option enables MD5 support in SPL. MD5 is an algorithm designed
733	  in 1991 that produces a 16-byte digest (or checksum) from its input
734	  data. It has a number of vulnerabilities which preclude its use in
735	  security applications, but it can be useful for providing a quick
736	  checksum of a block of data.
737
738config CRC8
739	def_bool y
740	help
741	  Enables CRC8 support in U-Boot. This is normally required. CRC8 is
742	  a simple and fast checksumming algorithm which does a bytewise
743	  checksum with feedback to produce an 8-bit result. The code is small
744	  and it does not require a lookup table (unlike CRC32).
745
746config SPL_CRC8
747	bool "Support CRC8 in SPL"
748	depends on SPL
749	help
750	  Enables CRC8 support in SPL. This is not normally required. CRC8 is
751	  a simple and fast checksumming algorithm which does a bytewise
752	  checksum with feedback to produce an 8-bit result. The code is small
753	  and it does not require a lookup table (unlike CRC32).
754
755config TPL_CRC8
756	bool "Support CRC8 in TPL"
757	depends on TPL
758	help
759	  Enables CRC8 support in TPL. This is not normally required. CRC8 is
760	  a simple and fast checksumming algorithm which does a bytewise
761	  checksum with feedback to produce an 8-bit result. The code is small
762	  and it does not require a lookup table (unlike CRC32).
763
764config VPL_CRC8
765	bool "Support CRC8 in VPL"
766	depends on VPL
767	help
768	  Enables CRC8 support in VPL. This is not normally required. CRC8 is
769	  a simple and fast checksumming algorithm which does a bytewise
770	  checksum with feedback to produce an 8-bit result. The code is small
771	  and it does not require a lookup table (unlike CRC32).
772
773config CRC16
774	bool "Support CRC16"
775	default y
776	help
777	  Enables CRC16 support. This is normally required. Two algorithms are
778	  provided:
779
780	    - CCITT, with a polynomical x^16 + x^12 + x^5 + 1
781	    - standard, with polynomial x^16 + x^15 + x^2 + 1 (0x8005)
782
783config SPL_CRC16
784	bool "Support CRC16 in SPL"
785	depends on SPL
786	help
787	  Enables CRC16 support in SPL. This is not normally required.
788
789config CRC32
790	def_bool y
791	help
792	  Enables CRC32 support in U-Boot. This is normally required.
793
794config CRC32C
795	bool
796
797config XXHASH
798	bool
799
800endmenu
801
802menu "Compression Support"
803
804config LZ4
805	bool "Enable LZ4 decompression support"
806	help
807	  If this option is set, support for LZ4 compressed images
808	  is included. The LZ4 algorithm can run in-place as long as the
809	  compressed image is loaded to the end of the output buffer, and
810	  trades lower compression ratios for much faster decompression.
811
812	  NOTE: This implements the release version of the LZ4 frame
813	  format as generated by default by the 'lz4' command line tool.
814	  This is not the same as the outdated, less efficient legacy
815	  frame format currently (2015) implemented in the Linux kernel
816	  (generated by 'lz4 -l'). The two formats are incompatible.
817
818config LZMA
819	bool "Enable LZMA decompression support"
820	help
821	  This enables support for LZMA (Lempel-Ziv-Markov chain algorithm),
822	  a dictionary compression algorithm that provides a high compression
823	  ratio and fairly fast decompression speed. See also
824	  CONFIG_CMD_LZMADEC which provides a decode command.
825
826config LZO
827	bool "Enable LZO decompression support"
828	help
829	  This enables support for the LZO compression algorithm.
830
831config GZIP
832	bool "Enable gzip decompression support"
833	select ZLIB
834	default y
835	help
836	  This enables support for GZIP compression algorithm.
837
838config ZLIB_UNCOMPRESS
839	bool "Enables zlib's uncompress() functionality"
840	help
841	  This enables an extra zlib functionality: the uncompress() function,
842	  which decompresses data from a buffer into another, knowing their
843	  sizes. Unlike gunzip(), there is no header parsing.
844
845config GZIP_COMPRESSED
846	bool
847	select ZLIB
848
849config BZIP2
850	bool "Enable bzip2 decompression support"
851	help
852	  This enables support for BZIP2 compression algorithm.
853
854config ZLIB
855	bool
856	default y
857	help
858	  This enables ZLIB compression lib.
859
860config ZSTD
861	bool "Enable Zstandard decompression support"
862	select XXHASH
863	help
864	  This enables Zstandard decompression library.
865
866if ZSTD
867
868config ZSTD_LIB_MINIFY
869	bool "Minify Zstandard code"
870	default y
871	help
872	  This disables various optional components and changes the
873	  compilation flags to prioritize space-saving.
874
875	  For detailed info, see zstd's lib/README.md
876
877	  https://github.com/facebook/zstd/blob/dev/lib/README.md
878
879endif
880
881config SPL_BZIP2
882	bool "Enable bzip2 decompression support for SPL build"
883	depends on SPL
884	help
885	  This enables support for bzip2 compression algorithm for SPL boot.
886
887config SPL_LZ4
888	bool "Enable LZ4 decompression support in SPL"
889	depends on SPL
890	help
891	  This enables support for the LZ4 decompression algorithm in SPL. LZ4
892	  is a lossless data compression algorithm that is focused on
893	  fast compression and decompression speed. It belongs to the LZ77
894	  family of byte-oriented compression schemes.
895
896config TPL_LZ4
897	bool "Enable LZ4 decompression support in TPL"
898	depends on TPL
899	help
900	  This enables support for the LZ4 decompression algorithm in TPL. LZ4
901	  is a lossless data compression algorithm that is focused on
902	  fast compression and decompression speed. It belongs to the LZ77
903	  family of byte-oriented compression schemes.
904
905config VPL_LZ4
906	bool "Enable LZ4 decompression support in VPL"
907	depends on VPL
908	help
909	  This enables support for the LZ4 decompression algorithm in VPL. LZ4
910	  is a lossless data compression algorithm that is focused on
911	  fast compression and decompression speed. It belongs to the LZ77
912	  family of byte-oriented compression schemes.
913
914config SPL_LZMA
915	bool "Enable LZMA decompression support for SPL build"
916	depends on SPL
917	help
918	  This enables support for LZMA compression algorithm for SPL boot.
919
920config TPL_LZMA
921	bool "Enable LZMA decompression support for TPL build"
922	depends on TPL
923	help
924	  This enables support for LZMA compression algorithm for TPL boot.
925
926config VPL_LZMA
927	bool "Enable LZMA decompression support for VPL build"
928	default y if LZMA
929	help
930	  This enables support for LZMA compression algorithm for VPL boot.
931
932config SPL_LZO
933	bool "Enable LZO decompression support in SPL"
934	depends on SPL
935	help
936	  This enables support for LZO compression algorithm in the SPL.
937
938config SPL_GZIP
939	bool "Enable gzip decompression support for SPL build"
940	select SPL_ZLIB
941	help
942	  This enables support for the GZIP compression algorithm for SPL boot.
943
944config TPL_GZIP
945	bool "Enable gzip decompression support for SPL build"
946	select TPL_ZLIB
947	help
948	  This enables support for the GZIP compression algorithm for TPL
949
950config SPL_ZLIB
951	bool
952	help
953	  This enables compression lib for SPL boot.
954
955config TPL_ZLIB
956	bool
957	help
958	  This enables compression lib for TPL
959
960config SPL_ZSTD
961	bool "Enable Zstandard decompression support in SPL"
962	depends on SPL
963	select XXHASH
964	help
965	  This enables Zstandard decompression library in the SPL.
966
967endmenu
968
969config ERRNO_STR
970	bool "Enable function for getting errno-related string message"
971	help
972	  The function errno_str(int errno), returns a pointer to the errno
973	  corresponding text message:
974	  - if errno is null or positive number - a pointer to "Success" message
975	  - if errno is negative - a pointer to errno related message
976
977config HEXDUMP
978	bool "Enable hexdump"
979	help
980	  This enables functions for printing dumps of binary data.
981
982config SPL_HEXDUMP
983	bool "Enable hexdump in SPL"
984	depends on SPL && HEXDUMP
985	help
986	  This enables functions for printing dumps of binary data in
987	  SPL.
988
989config GETOPT
990	bool "Enable getopt"
991	help
992	  This enables functions for parsing command-line options.
993
994config OF_LIBFDT
995	bool "Enable the FDT library"
996	default y if OF_CONTROL
997	help
998	  This enables the FDT library (libfdt). It provides functions for
999	  accessing binary device tree images in memory, such as adding and
1000	  removing nodes and properties, scanning through the tree and finding
1001	  particular compatible nodes. The library operates on a flattened
1002	  version of the device tree.
1003
1004config OF_LIBFDT_ASSUME_MASK
1005	hex "Mask of conditions to assume for libfdt"
1006	depends on OF_LIBFDT || FIT
1007	default 0x0
1008	help
1009	  Use this to change the assumptions made by libfdt about the
1010	  device tree it is working with. A value of 0 means that no assumptions
1011	  are made, and libfdt is able to deal with malicious data. A value of
1012	  0xff means all assumptions are made and any invalid data may cause
1013	  unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
1014
1015config OF_LIBFDT_OVERLAY
1016	bool "Enable the FDT library overlay support"
1017	depends on OF_LIBFDT
1018	default y if ARCH_OMAP2PLUS || ARCH_KEYSTONE
1019	help
1020	  This enables the FDT library (libfdt) overlay support.
1021
1022config SYS_FDT_PAD
1023	hex "Free space added to device-tree before booting"
1024	depends on OF_LIBFDT
1025	default 0x13000 if FMAN_ENET || QE || U_QE
1026	default 0x3000
1027	help
1028	  The operating system may need a free area at the end of the device-
1029	  tree for fix-ups. This setting defines by how many bytes U-Boot
1030	  extends the device-tree before booting.
1031
1032config SPL_OF_LIBFDT
1033	bool "Enable the FDT library for SPL"
1034	depends on SPL_LIBGENERIC_SUPPORT
1035	default y if SPL_OF_CONTROL
1036	help
1037	  This enables the FDT library (libfdt). It provides functions for
1038	  accessing binary device tree images in memory, such as adding and
1039	  removing nodes and properties, scanning through the tree and finding
1040	  particular compatible nodes. The library operates on a flattened
1041	  version of the device tree.
1042
1043config SPL_OF_LIBFDT_ASSUME_MASK
1044	hex "Mask of conditions to assume for libfdt"
1045	depends on SPL_OF_LIBFDT || (FIT && SPL)
1046	default 0xff
1047	help
1048	  Use this to change the assumptions made by libfdt in SPL about the
1049	  device tree it is working with. A value of 0 means that no assumptions
1050	  are made, and libfdt is able to deal with malicious data. A value of
1051	  0xff means all assumptions are made and any invalid data may cause
1052	  unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
1053
1054config TPL_OF_LIBFDT
1055	bool "Enable the FDT library for TPL"
1056	depends on TPL_LIBGENERIC_SUPPORT
1057	default y if TPL_OF_CONTROL
1058	help
1059	  This enables the FDT library (libfdt). It provides functions for
1060	  accessing binary device tree images in memory, such as adding and
1061	  removing nodes and properties, scanning through the tree and finding
1062	  particular compatible nodes. The library operates on a flattened
1063	  version of the device tree.
1064
1065config TPL_OF_LIBFDT_ASSUME_MASK
1066	hex "Mask of conditions to assume for libfdt"
1067	depends on TPL_OF_LIBFDT || (FIT && TPL)
1068	default 0xff
1069	help
1070	  Use this to change the assumptions made by libfdt in TPL about the
1071	  device tree it is working with. A value of 0 means that no assumptions
1072	  are made, and libfdt is able to deal with malicious data. A value of
1073	  0xff means all assumptions are made and any invalid data may cause
1074	  unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
1075
1076config VPL_OF_LIBFDT
1077	bool "Enable the FDT library for VPL"
1078	depends on VPL
1079	default y if VPL_OF_CONTROL && !VPL_OF_PLATDATA
1080	help
1081	  This enables the FDT library (libfdt). It provides functions for
1082	  accessing binary device tree images in memory, such as adding and
1083	  removing nodes and properties, scanning through the tree and finding
1084	  particular compatible nodes. The library operates on a flattened
1085	  version of the device tree.
1086
1087config VPL_OF_LIBFDT_ASSUME_MASK
1088	hex "Mask of conditions to assume for libfdt"
1089	depends on VPL_OF_LIBFDT || (FIT && VPL)
1090	default 0xff
1091	help
1092	  Use this to change the assumptions made by libfdt in SPL about the
1093	  device tree it is working with. A value of 0 means that no assumptions
1094	  are made, and libfdt is able to deal with malicious data. A value of
1095	  0xff means all assumptions are made and any invalid data may cause
1096	  unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
1097
1098menu "System tables"
1099	depends on (!EFI_CLIENT && !SYS_COREBOOT) || (ARM && EFI_LOADER)
1100
1101config BLOBLIST_TABLES
1102	bool "Put tables in a bloblist"
1103	depends on BLOBLIST
1104	default y if X86
1105	default y if (ARM && EFI_LOADER && GENERATE_ACPI_TABLE)
1106	default n
1107	help
1108	  On x86 normally tables are placed at address 0xf0000 and can be up
1109	  to 64KB long. With this option, tables are instead placed in the
1110	  bloblist with a pointer from 0xf0000. The size can then be larger
1111	  and the tables can be placed high in memory.
1112	  On other architectures the tables are always placed in high memory.
1113
1114config GENERATE_SMBIOS_TABLE
1115	bool "Generate an SMBIOS (System Management BIOS) table"
1116	depends on SMBIOS
1117	default y
1118	help
1119	  The System Management BIOS (SMBIOS) specification addresses how
1120	  motherboard and system vendors present management information about
1121	  their products in a standard format by extending the BIOS interface
1122	  on Intel architecture systems.
1123
1124	  Check http://www.dmtf.org/standards/smbios for details.
1125
1126	  See also SYSINFO_SMBIOS which allows SMBIOS values to be provided in
1127	  the devicetree.
1128
1129config GENERATE_SMBIOS_TABLE_VERBOSE
1130	bool "Generate a verbose SMBIOS (System Management BIOS) table"
1131	depends on GENERATE_SMBIOS_TABLE
1132	help
1133	  Provide verbose SMBIOS information.
1134
1135endmenu
1136
1137config LIB_RATIONAL
1138	bool "enable continued fraction calculation routines"
1139
1140config SPL_LIB_RATIONAL
1141	bool "enable continued fraction calculation routines for SPL"
1142	depends on SPL
1143
1144config ASN1_COMPILER
1145	bool
1146	help
1147	  ASN.1 (Abstract Syntax Notation One) is a standard interface
1148	  description language for defining data structures that can be
1149	  serialized and deserialized in a cross-platform way. It is
1150	  broadly used in telecommunications and computer networking,
1151	  and especially in cryptography (https://en.wikipedia.org/wiki/ASN.1).
1152	  This option enables the support of the asn1 compiler.
1153
1154config ASN1_DECODER
1155	bool
1156	help
1157	  ASN.1 (Abstract Syntax Notation One) is a standard interface
1158	  description language for defining data structures that can be
1159	  serialized and deserialized in a cross-platform way. It is
1160	  broadly used in telecommunications and computer networking,
1161	  and especially in cryptography (https://en.wikipedia.org/wiki/ASN.1).
1162	  This option enables the support of the asn1 decoder.
1163
1164config SPL_ASN1_DECODER
1165	bool
1166	help
1167	  ASN.1 (Abstract Syntax Notation One) is a standard interface
1168	  description language for defining data structures that can be
1169	  serialized and deserialized in a cross-platform way. It is
1170	  broadly used in telecommunications and computer networking,
1171	  and especially in cryptography (https://en.wikipedia.org/wiki/ASN.1).
1172	  This option enables the support of the asn1 decoder in the SPL.
1173
1174config OID_REGISTRY
1175	bool
1176	help
1177	  In computing, object identifiers or OIDs are an identifier mechanism
1178	  standardized by the International Telecommunication Union (ITU) and
1179	  ISO/IEC for naming any object, concept, or "thing" with a globally
1180	  unambiguous persistent name (https://en.wikipedia.org/wiki/Object_identifier).
1181	  Enable fast lookup object identifier registry.
1182
1183config SPL_OID_REGISTRY
1184	bool
1185	help
1186	  In computing, object identifiers or OIDs are an identifier mechanism
1187	  standardized by the International Telecommunication Union (ITU) and
1188	  ISO/IEC for naming any object, concept, or "thing" with a globally
1189	  unambiguous persistent name (https://en.wikipedia.org/wiki/Object_identifier).
1190	  Enable fast lookup object identifier registry in the SPL.
1191
1192config SMBIOS
1193	bool "SMBIOS support"
1194	depends on X86 || EFI_LOADER
1195	default y
1196	select LAST_STAGE_INIT
1197	help
1198	  Indicates that this platform can support System Management BIOS
1199	  (SMBIOS) tables. These provide various pieces of information about
1200	  the board, such as the manufacturer and the model name.
1201
1202	  See GENERATE_SMBIOS_TABLE which controls whether U-Boot actually
1203	  creates these tables, rather than them coming from a previous firmware
1204	  stage.
1205
1206config SMBIOS_PARSER
1207	bool "SMBIOS parser"
1208	help
1209	  A simple parser for SMBIOS data.
1210
1211source "lib/optee/Kconfig"
1212
1213config TEST_FDTDEC
1214	bool "enable fdtdec test"
1215	depends on OF_LIBFDT
1216
1217config LIB_DATE
1218	bool
1219
1220config LIB_ELF
1221	bool
1222	help
1223	  Support basic elf loading/validating functions.
1224	  This supports for 32 bit and 64 bit versions.
1225
1226config LMB
1227	bool "Enable the logical memory blocks library (lmb)"
1228	default y if ARC || ARM || M68K || MICROBLAZE || MIPS || \
1229		     NIOS2 || PPC || RISCV || SANDBOX || SH || X86 || XTENSA
1230	select ARCH_MISC_INIT if PPC
1231	help
1232	  Support the library logical memory blocks. This will require
1233	  a malloc() implementation for defining the data structures
1234	  needed for maintaining the LMB memory map.
1235
1236config SPL_LMB
1237	bool "Enable LMB module for SPL"
1238	depends on SPL && SPL_FRAMEWORK && SPL_SYS_MALLOC
1239	help
1240	  Enable support for Logical Memory Block library routines in
1241	  SPL. This will require a malloc() implementation for defining
1242	  the data structures needed for maintaining the LMB memory map.
1243
1244config LMB_ARCH_MEM_MAP
1245	bool "Add an architecture specific memory map"
1246	depends on LMB
1247	default y if FSL_LAYERSCAPE || X86
1248	help
1249	  Some architectures have special or unique aspects which need
1250	  consideration when adding memory ranges to the list of available
1251	  memory map. Enable this config in such scenarios which allow
1252	  architectures and boards to define their own memory map.
1253
1254config SPL_LMB_ARCH_MEM_MAP
1255	bool "Add an architecture specific memory map"
1256	depends on SPL_LMB
1257	help
1258	  Some architectures have special or unique scenarios which need
1259	  consideration when adding memory ranges to the list of available
1260	  memory map. Enable this config in such scenarios which allow
1261	  architectures and boards to define their own memory map.
1262
1263config PHANDLE_CHECK_SEQ
1264	bool "Enable phandle check while getting sequence number"
1265	help
1266	  When there are multiple device tree nodes with same name,
1267	  enable this config option to distinguish them using
1268	  phandles in fdtdec_get_alias_seq() function.
1269
1270config UTHREAD
1271	bool "Enable thread support"
1272	depends on HAVE_INITJMP
1273	help
1274	  Implement a simple form of cooperative multi-tasking based on
1275	  context-switching via initjmp(), setjmp() and longjmp(). The
1276	  uthread_ interface enables the main thread of execution to create
1277	  one or more secondary threads and schedule them until they all have
1278	  returned. At any point a thread may suspend its execution and
1279	  schedule another thread, which allows for the efficient multiplexing
1280	  of leghthy operations.
1281
1282config UTHREAD_STACK_SIZE
1283	int "Default uthread stack size"
1284	depends on UTHREAD
1285	default 32768
1286	help
1287	  The default stack size for uthreads. Each uthread has its own stack.
1288	  When the stack_sz argument to uthread_create() is zero then this
1289	  value is used.
1290
1291endmenu
1292
1293source "lib/fwu_updates/Kconfig"
1294