menu "Library routines"

config ADDR_MAP
	bool "Enable support for non-identity virtual-physical mappings"
	help
	  Enables helper code for implementing non-identity virtual-physical
	  memory mappings for 32bit CPUs.

	  This library only works in the post-relocation phase.

config SYS_NUM_ADDR_MAP
	int "Size of the address-map table"
	depends on ADDR_MAP
	default 16
	help
	  Sets the number of entries in the virtual-physical mapping table.

config SYS_TIMER_COUNTS_DOWN
	bool "System timer counts down rather than up"

config PHYSMEM
	bool "Access to physical memory region (> 4G)"
	help
	  Some basic support is provided for operations on memory not
	  normally accessible to 32-bit U-Boot - e.g. some architectures
	  support access to more than 4G of memory on 32-bit
	  machines using physical address extension or similar.
	  Enable this to access this basic support, which only supports clearing
	  the memory.

config BCH
	bool "Enable Software based BCH ECC"
	help
	  Enables software based BCH ECC algorithm present in lib/bch.c
	  This is used by SoC platforms which do not have built-in ELM
	  hardware engine required for BCH ECC correction.

config BINMAN_FDT
	bool "Allow access to binman information in the device tree"
	depends on BINMAN && DM && OF_CONTROL
	default y if OF_SEPARATE || OF_EMBED
	help
	  This enables U-Boot to access information about binman entries,
	  stored in the device tree in a binman node. Typical uses are to
	  locate entries in the firmware image. See binman.h for the available
	  functionality.

config BINMAN_DTB
	string "binman DTB description"
	depends on BINMAN
	help
	  This enables option to point to different DTB file with binman node which
	  is outside of DTB used by the firmware. Use this option if information
	  about generated images shouldn't be the part of target binary. Or on system
	  with limited storage.

config CC_OPTIMIZE_LIBS_FOR_SPEED
	bool "Optimize libraries for speed"
	help
	  Enabling this option will pass "-O2" to gcc when compiling
	  under "lib" directory.

	  If unsure, say N.

config CHARSET
	bool

config DYNAMIC_CRC_TABLE
	bool "Enable Dynamic tables for CRC"
	help
	  Enable this option to calculate entries for CRC tables at runtime.
	  This can be helpful when reducing the size of the build image

config FW_LOADER
	bool "Enable firmware loader using environment script"
	depends on CMDLINE
	depends on ENV_SUPPORT
	help
	  Enable this option to make firmware loading using user-provided
	  U-Boot environment script functionality accessible to U-Boot code.

config HAVE_ARCH_IOMAP
	bool
	help
	  Enable this option if architecture provides io{read,write}{8,16,32}
	  I/O accessor functions.

config HAVE_PRIVATE_LIBGCC
	bool

config LIB_UUID
	bool
	select SHA1

config RANDOM_UUID
	bool "GPT Random UUID generation"
	select LIB_UUID
	help
	  Enable the generation of partitions with random UUIDs if none
	  are provided.

config SPL_LIB_UUID
	depends on SPL
	bool

config SEMIHOSTING
	bool "Support semihosting"
	depends on ARM || RISCV
	help
	  Semihosting is a method for a target to communicate with a host
	  debugger. It uses special instructions which the debugger will trap
	  on and interpret. This allows U-Boot to read/write files, print to
	  the console, and execute arbitrary commands on the host system.

	  Enabling this option will add support for reading and writing files
	  on the host system. If you don't have a debugger attached then trying
	  to do this will likely cause U-Boot to hang. Say 'n' if you are unsure.

config SEMIHOSTING_FALLBACK
	bool "Recover gracefully when semihosting fails"
	depends on SEMIHOSTING
	default y
	help
	  Normally, if U-Boot makes a semihosting call and no debugger is
	  attached, then it will panic due to a synchronous abort
	  exception. This config adds an exception handler which will allow
	  U-Boot to recover. Say 'y' if unsure.

config SPL_SEMIHOSTING
	bool "Support semihosting in SPL"
	depends on SPL && (ARM || RISCV)
	help
	  Semihosting is a method for a target to communicate with a host
	  debugger. It uses special instructions which the debugger will trap
	  on and interpret. This allows U-Boot to read/write files, print to
	  the console, and execute arbitrary commands on the host system.

	  Enabling this option will add support for reading and writing files
	  on the host system. If you don't have a debugger attached then trying
	  to do this will likely cause U-Boot to hang. Say 'n' if you are unsure.

config SPL_SEMIHOSTING_FALLBACK
	bool "Recover gracefully when semihosting fails in SPL"
	depends on SPL_SEMIHOSTING
	select ARMV8_SPL_EXCEPTION_VECTORS if ARM64
	default y
	help
	  Normally, if U-Boot makes a semihosting call and no debugger is
	  attached, then it will panic due to a synchronous abort
	  exception. This config adds an exception handler which will allow
	  U-Boot to recover. Say 'y' if unsure.

config PRINTF
	bool
	default y

config SPL_PRINTF
	bool
	select SPL_SPRINTF
	select SPL_STRTO if !SPL_USE_TINY_PRINTF

config TPL_PRINTF
	bool
	select TPL_SPRINTF
	select TPL_STRTO if !TPL_USE_TINY_PRINTF

config VPL_PRINTF
	bool
	select VPL_SPRINTF
	select VPL_STRTO if !VPL_USE_TINY_PRINTF

config SPRINTF
	bool
	default y

config SPL_SPRINTF
	bool

config TPL_SPRINTF
	bool

config VPL_SPRINTF
	bool

config SSCANF
	bool

config STRTO
	bool
	default y

config SPL_STRTO
	bool

config TPL_STRTO
	bool

config VPL_STRTO
	bool

config IMAGE_SPARSE
	bool

config IMAGE_SPARSE_FILLBUF_SIZE
	hex "Android sparse image CHUNK_TYPE_FILL buffer size"
	default 0x80000
	depends on IMAGE_SPARSE
	help
	  Set the size of the fill buffer used when processing CHUNK_TYPE_FILL
	  chunks.

config USE_PRIVATE_LIBGCC
	bool "Use private libgcc"
	depends on HAVE_PRIVATE_LIBGCC
	default y if HAVE_PRIVATE_LIBGCC && ((ARM && !ARM64) || MIPS || RISCV)
	help
	  This option allows you to use the built-in libgcc implementation
	  of U-Boot instead of the one provided by the compiler.
	  If unsure, say N.

config SYS_HZ
	int
	default 1000
	help
	  The frequency of the timer returned by get_timer().
	  get_timer() must operate in milliseconds and this option must be
	  set to 1000.

config SPL_USE_TINY_PRINTF
	bool "Enable tiny printf() version in SPL"
	depends on SPL
	default y
	help
	  This option enables a tiny, stripped down printf version.
	  This should only be used in space limited environments,
	  like SPL versions with hard memory limits. This version
	  reduces the code size by about 2.5KiB on armv7.

	  The supported format specifiers are %c, %s, %u/%d and %x.

config TPL_USE_TINY_PRINTF
	bool "Enable tiny printf() version in TPL"
	depends on TPL
	default y if SPL_USE_TINY_PRINTF
	help
	  This option enables a tiny, stripped down printf version.
	  This should only be used in space limited environments,
	  like SPL versions with hard memory limits. This version
	  reduces the code size by about 2.5KiB on armv7.

	  The supported format specifiers are %c, %s, %u/%d and %x.

config VPL_USE_TINY_PRINTF
	bool "Enable tiny printf() version for VPL"
	depends on VPL
	help
	  This option enables a tiny, stripped down printf version.
	  This should only be used in space limited environments,
	  like SPL versions with hard memory limits. This version
	  reduces the code size by about 2.5KiB on armv7.

	  The supported format specifiers are %c, %s, %u/%d and %x.

config SPL_USE_TINY_PRINTF_POINTER_SUPPORT
	bool "Extend tiny printf with the pointer formatting %p"
	depends on SPL_USE_TINY_PRINTF
	help
	  This option enables the formatting of pointers %p. It supports
	  %p and %pa / %pap. If this option is selected by SPL_NET
	  it also supports the formatting with %pm, %pM and %pI4.

config PANIC_HANG
	bool "Do not reset the system on fatal error"
	help
	  Define this option to stop the system in case of a fatal error,
	  so that you have to reset it manually. This is probably NOT a good
	  idea for an embedded system where you want the system to reboot
	  automatically as fast as possible, but it may be useful during
	  development since you can try to debug the conditions that lead to
	  the situation.

config REGEX
	bool "Enable regular expression support"
	default y if NET
	help
	  If this variable is defined, U-Boot is linked against the
	  SLRE (Super Light Regular Expression) library, which adds
	  regex support to some commands, for example "env grep" and
	  "setexpr".

choice
	prompt "Pseudo-random library support type"
	depends on NET_RANDOM_ETHADDR || RANDOM_UUID || CMD_UUID || \
		   RNG_SANDBOX || UT_LIB && AES || FAT_WRITE || CMD_BOOTP || \
		   CMD_DHCP || CMD_DHCP6
	default LIB_RAND
	help
	  Select the library to provide pseudo-random number generator
	  functions.  LIB_HW_RAND supports certain hardware engines that
	  provide this functionality.  If in doubt, select LIB_RAND.

config LIB_RAND
	bool "Pseudo-random library support"

config LIB_HW_RAND
	bool "HW Engine for random library support"

endchoice

config SUPPORT_ACPI
	bool
	help
	  Enable this if your arch or board can support generating ACPI
	  (Advanced Configuration and Power Interface) tables. In this case
	  U-Boot can generate these tables and pass them to the Operating
	  System.

config ACPI
	bool "Enable support for ACPI libraries"
	depends on SUPPORT_ACPI
	help
	  Provides library functions for dealing with ACPI tables. This does
	  not necessarily include generation of tables
	  (see GENERATE_ACPI_TABLE), but allows for tables to be located.

config SPL_ACPI
	bool "Enable support for ACPI libraries in SPL"
	depends on SPL && SUPPORT_ACPI
	help
	  Provides library functions for dealing with ACPI tables in SPL. This
	  does not necessarily include generation of tables
	  (see GENERATE_ACPI_TABLE), but allows for tables to be located.

config GENERATE_ACPI_TABLE
	bool "Generate an ACPI (Advanced Configuration and Power Interface) table"
	depends on ACPI
	select BLOBLIST
	select QFW if QEMU
	help
	  The Advanced Configuration and Power Interface (ACPI) specification
	  provides an open standard for device configuration and management
	  by the operating system. It defines platform-independent interfaces
	  for configuration and power management monitoring.

config ACPI_PARKING_PROTOCOL
	bool "Support ACPI parking protocol method"
	depends on GENERATE_ACPI_TABLE
	depends on ARMV8_MULTIENTRY
	depends on BLOBLIST_TABLES
	default y if !SEC_FIRMWARE_ARMV8_PSCI && !ARMV8_PSCI
	help
	  Say Y here to support "ACPI parking protocol" enable method
	  for booting Linux.

	  To use this feature, you must do:
	    - Bring secondary CPUs into U-Boot proper in a board-specific
	      manner.  This must be done *after* relocation.  Otherwise, the
	      secondary CPUs will spin in unprotected memory-area because the
	      master CPU protects the relocated spin code.

config SPL_TINY_MEMSET
	bool "Use a very small memset() in SPL"
	depends on SPL
	help
	  The faster memset() is the arch-specific one (if available) enabled
	  by CONFIG_USE_ARCH_MEMSET. If that is not enabled, we can still get
	  better performance by writing a word at a time. But in very
	  size-constrained environments even this may be too big. Enable this
	  option to reduce code size slightly at the cost of some speed.

config TPL_TINY_MEMSET
	bool "Use a very small memset() in TPL"
	depends on TPL
	help
	  The faster memset() is the arch-specific one (if available) enabled
	  by CONFIG_USE_ARCH_MEMSET. If that is not enabled, we can still get
	  better performance by writing a word at a time. But in very
	  size-constrained environments even this may be too big. Enable this
	  option to reduce code size slightly at the cost of some speed.

config RBTREE
	bool

config BITREVERSE
	bool "Bit reverse library from Linux"

config TRACE
	bool "Support for tracing of function calls and timing"
	imply CMD_TRACE
	imply TIMER_EARLY
	help
	  Enables function tracing within U-Boot. This allows recording of call
	  traces including timing information. The command can write data to
	  memory for exporting for analysis (e.g. using bootchart).
	  See doc/develop/trace.rst for full details.

config TRACE_BUFFER_SIZE
	hex "Size of trace buffer in U-Boot"
	depends on TRACE
	default 0x01000000
	help
	  Sets the size of the trace buffer in U-Boot. This is allocated from
	  memory during relocation. If this buffer is too small, the trace
	  history will be truncated, with later records omitted.

	  If early trace is enabled (i.e. before relocation), this buffer must
	  be large enough to include all the data from the early trace buffer as
	  well, since this is copied over to the main buffer during relocation.

	  A trace record is emitted for each function call and each record is
	  12 bytes (see struct trace_call). A suggested minimum size is 1MB. If
	  the size is too small then 'trace stats' will show a message saying
	  how many records were dropped due to buffer overflow.

config TRACE_CALL_DEPTH_LIMIT
	int "Trace call depth limit"
	depends on TRACE
	default 15
	help
	  Sets the maximum call depth up to which function calls are recorded.

config TRACE_EARLY
	bool "Enable tracing before relocation"
	depends on TRACE
	help
	  Sometimes it is helpful to trace execution of U-Boot before
	  relocation. This is possible by using a arch-specific, fixed buffer
	  position in memory. Enable this option to start tracing as early as
	  possible after U-Boot starts.

config TRACE_EARLY_SIZE
	hex "Size of early trace buffer in U-Boot"
	depends on TRACE_EARLY
	default 0x00100000
	help
	  Sets the size of the early trace buffer in bytes. This is used to hold
	  tracing information before relocation.

config TRACE_EARLY_CALL_DEPTH_LIMIT
	int "Early trace call depth limit"
	depends on TRACE_EARLY
	default 15
	help
	  Sets the maximum call depth up to which function calls are recorded
	  during early tracing.

config TRACE_EARLY_ADDR
	hex "Address of early trace buffer in U-Boot"
	depends on TRACE_EARLY
	default 0x00200000
	help
	  Sets the address of the early trace buffer in U-Boot. This memory
	  must be accessible before relocation.

	  A trace record is emitted for each function call and each record is
	  12 bytes (see struct trace_call). A suggested minimum size is 1MB. If
	  the size is too small then the message which says the amount of early
	  data being coped will the the same as the

config CIRCBUF
	bool "Enable circular buffer support"

source "lib/dhry/Kconfig"

menu "Alternative crypto libraries"

source "lib/mbedtls/Kconfig"

endmenu

menu "Security support"

config AES
	bool "Support the AES algorithm"
	help
	  This provides a means to encrypt and decrypt data using the AES
	  (Advanced Encryption Standard). This algorithm uses a symetric key
	  and is widely used as a streaming cipher. Different key lengths are
	  supported by the algorithm but only a 128-bit key is supported at
	  present.

source "lib/ecdsa/Kconfig"
source "lib/rsa/Kconfig"
source "lib/crypto/Kconfig"
source "lib/crypt/Kconfig"

config TPM
	bool "Trusted Platform Module (TPM) Support"
	depends on DM
	imply DM_RNG
	select SHA1
	help
	  This enables support for TPMs which can be used to provide security
	  features for your board. The TPM can be connected via LPC or I2C
	  and a sandbox TPM is provided for testing purposes. Use the 'tpm'
	  command to interactive the TPM. Driver model support is provided
	  for the low-level TPM interface, but only one TPM is supported at
	  a time by the TPM library.
	  For size reasons only SHA1 is selected which is supported on TPM1.2.
	  If you want a fully functional TPM enable all hashing algorithms.
	  If you enabled measured boot all hashing algorithms are selected.

config SPL_TPM
	bool "Trusted Platform Module (TPM) Support in SPL"
	depends on SPL_DM
	imply SPL_CRC8
	help
	  This enables support for TPMs which can be used to provide security
	  features for your board. The TPM can be connected via LPC or I2C
	  and a sandbox TPM is provided for testing purposes. Use the 'tpm'
	  command to interactive the TPM. Driver model support is provided
	  for the low-level TPM interface, but only one TPM is supported at
	  a time by the TPM library.

config TPL_TPM
	bool "Trusted Platform Module (TPM) Support in TPL"
	depends on TPL_DM
	help
	  This enables support for TPMs which can be used to provide security
	  features for your board. The TPM can be connected via LPC or I2C
	  and a sandbox TPM is provided for testing purposes. Use the 'tpm'
	  command to interactive the TPM. Driver model support is provided
	  for the low-level TPM interface, but only one TPM is supported at
	  a time by the TPM library.

config VPL_TPM
	bool "Trusted Platform Module (TPM) Support in VPL"
	depends on VPL_DM
	help
	  This enables support for TPMs which can be used to provide security
	  features for your board. The TPM can be connected via LPC or I2C
	  and a sandbox TPM is provided for testing purposes. Use the 'tpm'
	  command to interactive the TPM. Driver model support is provided
	  for the low-level TPM interface, but only one TPM is supported at
	  a time by the TPM library.

config TPM_PCR_ALLOCATE
	bool "Re-configurate TPM algorithms in run-time (PCR allocate)"
	depends on TPM_V2 && (MEASURED_BOOT || EFI_TCG2_PROTOCOL)
	help
	  This enables a detection for the dismatches of algorithms among TPM
	  device, eventlog from previous boot stage and U-Boot support.
	  A PCR allocate command will be sent to reconfigurate the TPM device
	  in run-time to make sure algorithms in TPM device, eventlog and
	  U-Boot are aligned with each other.
	  A system reboot will be proceeded after then to activate the new
	  algorithms.

endmenu

menu "Android Verified Boot"

config LIBAVB
	bool "Android Verified Boot 2.0 support"
	depends on ANDROID_BOOT_IMAGE
	help
	  This enables support of Android Verified Boot 2.0 which can be used
	  to assure the end user of the integrity of the software running on a
	  device. Introduces such features as boot chain of trust, rollback
	  protection etc.

endmenu

menu "Hashing Support"

config BLAKE2
	bool "Enable BLAKE2 support"
	help
	  This option enables support of hashing using BLAKE2B algorithm.
	  The hash is calculated in software.
	  The BLAKE2 algorithm produces a hash value (digest) between 1 and
	  64 bytes.

config SHA1
	bool "Enable SHA1 support"
	help
	  This option enables support of hashing using SHA1 algorithm.
	  The hash is calculated in software.
	  The SHA1 algorithm produces a 160-bit (20-byte) hash value
	  (digest).

config SHA256
	bool "Enable SHA256 support"
	help
	  This option enables support of hashing using SHA256 algorithm.
	  The hash is calculated in software.
	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
	  (digest).

config SHA512
	bool "Enable SHA512 support"
	default y if TI_SECURE_DEVICE && FIT_SIGNATURE
	help
	  This option enables support of hashing using SHA512 algorithm.
	  The hash is calculated in software.
	  The SHA512 algorithm produces a 512-bit (64-byte) hash value
	  (digest).

config SHA384
	bool "Enable SHA384 support"
	select SHA512
	help
	  This option enables support of hashing using SHA384 algorithm.
	  The hash is calculated in software. This is also selects SHA512,
	  because these implementations share the bulk of the code..
	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
	  (digest).

config SM3
	bool "Enable SM3 support"
	help
	  This option enables support of hashing using
	  SM3 (ShangMi 3) secure hash function (OSCCA GM/T 0004-2012, ISO/IEC 10118-3)
	  The hash is calculated in software.

config SHA_HW_ACCEL
	bool "Enable hardware acceleration for SHA hash functions"
	help
	  This option enables hardware acceleration for the SHA1 and SHA256
	  hashing algorithms. This affects the 'hash' command and also the
	  hash_lookup_algo() function.

if SPL

config SPL_CRC32
	bool "Enable CRC32 support in SPL"
	default y if SPL_LEGACY_IMAGE_SUPPORT || SPL_EFI_PARTITION
	default y if SPL_ENV_SUPPORT || TPL_BLOBLIST
	help
	  This option enables support of hashing using CRC32 algorithm.
	  The CRC32 algorithm produces 32-bit checksum value. For FIT
	  images, this is the least secure type of checksum, suitable for
	  detected accidental image corruption. For secure applications you
	  should consider SHA256 or SHA384.

config SPL_SHA1
	bool "Enable SHA1 support in SPL"
	default y if SHA1
	help
	  This option enables support of hashing using SHA1 algorithm.
	  The hash is calculated in software.
	  The SHA1 algorithm produces a 160-bit (20-byte) hash value
	  (digest).

config SPL_SHA256
	bool "Enable SHA256 support in SPL"
	default y if SHA256
	help
	  This option enables support of hashing using SHA256 algorithm.
	  The hash is calculated in software.
	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
	  (digest).

config SPL_SHA512
	bool "Enable SHA512 support in SPL"
	default y if SHA512
	help
	  This option enables support of hashing using SHA512 algorithm.
	  The hash is calculated in software.
	  The SHA512 algorithm produces a 512-bit (64-byte) hash value
	  (digest).

config SPL_SHA384
	bool "Enable SHA384 support in SPL"
	default y if SHA384
	select SPL_SHA512
	help
	  This option enables support of hashing using SHA384 algorithm.
	  The hash is calculated in software. This is also selects SHA512,
	  because these implementations share the bulk of the code..
	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
	  (digest).

config SPL_SHA_HW_ACCEL
	bool "Enable hardware acceleration for SHA hash functions"
	default y if SHA_HW_ACCEL
	help
	  This option enables hardware acceleration for the SHA1 and SHA256
	  hashing algorithms. This affects the 'hash' command and also the
	  hash_lookup_algo() function.

config SPL_SHA_PROG_HW_ACCEL
	bool "Enable Progressive hashing support using hardware in SPL"
	depends on SHA_PROG_HW_ACCEL
	default y
	help
	  This option enables hardware-acceleration for SHA progressive
	  hashing.
	  Data can be streamed in a block at a time and the hashing is
	  performed in hardware.

endif

config VPL_SHA1
	bool "Enable SHA1 support in VPL"
	depends on VPL
	default y if SHA1
	help
	  This option enables support of hashing using SHA1 algorithm.
	  The hash is calculated in software.
	  The SHA1 algorithm produces a 160-bit (20-byte) hash value
	  (digest).

config VPL_SHA256
	bool "Enable SHA256 support in VPL"
	depends on VPL
	default y if SHA256
	help
	  This option enables support of hashing using SHA256 algorithm.
	  The hash is calculated in software.
	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
	  (digest).

if SHA_HW_ACCEL

config SHA512_HW_ACCEL
	bool "Enable hardware acceleration for SHA512"
	depends on SHA512
	help
	  This option enables hardware acceleration for the SHA384 and SHA512
	  hashing algorithms. This affects the 'hash' command and also the
	  hash_lookup_algo() function.

config SHA_PROG_HW_ACCEL
	bool "Enable Progressive hashing support using hardware"
	help
	  This option enables hardware-acceleration for SHA progressive
	  hashing.
	  Data can be streamed in a block at a time and the hashing is
	  performed in hardware.

endif

config MD5
	bool "Support MD5 algorithm"
	help
	  This option enables MD5 support. MD5 is an algorithm designed
	  in 1991 that produces a 16-byte digest (or checksum) from its input
	  data. It has a number of vulnerabilities which preclude its use in
	  security applications, but it can be useful for providing a quick
	  checksum of a block of data.

config SPL_MD5
	bool "Support MD5 algorithm in SPL"
	depends on SPL
	help
	  This option enables MD5 support in SPL. MD5 is an algorithm designed
	  in 1991 that produces a 16-byte digest (or checksum) from its input
	  data. It has a number of vulnerabilities which preclude its use in
	  security applications, but it can be useful for providing a quick
	  checksum of a block of data.

config CRC8
	def_bool y
	help
	  Enables CRC8 support in U-Boot. This is normally required. CRC8 is
	  a simple and fast checksumming algorithm which does a bytewise
	  checksum with feedback to produce an 8-bit result. The code is small
	  and it does not require a lookup table (unlike CRC32).

config SPL_CRC8
	bool "Support CRC8 in SPL"
	depends on SPL
	help
	  Enables CRC8 support in SPL. This is not normally required. CRC8 is
	  a simple and fast checksumming algorithm which does a bytewise
	  checksum with feedback to produce an 8-bit result. The code is small
	  and it does not require a lookup table (unlike CRC32).

config TPL_CRC8
	bool "Support CRC8 in TPL"
	depends on TPL
	help
	  Enables CRC8 support in TPL. This is not normally required. CRC8 is
	  a simple and fast checksumming algorithm which does a bytewise
	  checksum with feedback to produce an 8-bit result. The code is small
	  and it does not require a lookup table (unlike CRC32).

config VPL_CRC8
	bool "Support CRC8 in VPL"
	depends on VPL
	help
	  Enables CRC8 support in VPL. This is not normally required. CRC8 is
	  a simple and fast checksumming algorithm which does a bytewise
	  checksum with feedback to produce an 8-bit result. The code is small
	  and it does not require a lookup table (unlike CRC32).

config CRC16
	bool "Support CRC16"
	default y
	help
	  Enables CRC16 support. This is normally required. Two algorithms are
	  provided:

	    - CCITT, with a polynomical x^16 + x^12 + x^5 + 1
	    - standard, with polynomial x^16 + x^15 + x^2 + 1 (0x8005)

config SPL_CRC16
	bool "Support CRC16 in SPL"
	depends on SPL
	help
	  Enables CRC16 support in SPL. This is not normally required.

config CRC32
	def_bool y
	help
	  Enables CRC32 support in U-Boot. This is normally required.

config CRC32C
	bool

config XXHASH
	bool

endmenu

menu "Compression Support"

config LZ4
	bool "Enable LZ4 decompression support"
	help
	  If this option is set, support for LZ4 compressed images
	  is included. The LZ4 algorithm can run in-place as long as the
	  compressed image is loaded to the end of the output buffer, and
	  trades lower compression ratios for much faster decompression.

	  NOTE: This implements the release version of the LZ4 frame
	  format as generated by default by the 'lz4' command line tool.
	  This is not the same as the outdated, less efficient legacy
	  frame format currently (2015) implemented in the Linux kernel
	  (generated by 'lz4 -l'). The two formats are incompatible.

config LZMA
	bool "Enable LZMA decompression support"
	help
	  This enables support for LZMA (Lempel-Ziv-Markov chain algorithm),
	  a dictionary compression algorithm that provides a high compression
	  ratio and fairly fast decompression speed. Our implementation comes
	  from the LZMA SDK. See also CONFIG_CMD_LZMADEC which provides a
	  decode command.

config LZMA_SIZE_OPTIMIZATION
	bool "Optimize the LZMA algorithm for smaller binary size"
	help
	  This enables building the LZMA library optimized for size, rather
	  than performance. This can be a loss of 15-20% in decompression
	  speed, but a savings of close to two kilobytes in many cases.

config LZO
	bool "Enable LZO decompression support"
	help
	  This enables support for the LZO compression algorithm.

config GZIP
	bool "Enable gzip decompression support"
	select ZLIB
	default y
	help
	  This enables support for GZIP compression algorithm.

config ZLIB_UNCOMPRESS
	bool "Enables zlib's uncompress() functionality"
	help
	  This enables an extra zlib functionality: the uncompress() function,
	  which decompresses data from a buffer into another, knowing their
	  sizes. Unlike gunzip(), there is no header parsing.

config GZIP_COMPRESSED
	bool
	select ZLIB

config BZIP2
	bool "Enable bzip2 decompression support"
	help
	  This enables support for BZIP2 compression algorithm.

config ZLIB
	bool
	default y
	help
	  This enables ZLIB compression lib.

config ZSTD
	bool "Enable Zstandard decompression support"
	select XXHASH
	help
	  This enables Zstandard decompression library.

if ZSTD

config ZSTD_LIB_MINIFY
	bool "Minify Zstandard code"
	default y
	help
	  This disables various optional components and changes the
	  compilation flags to prioritize space-saving.

	  For detailed info, see zstd's lib/README.md

	  https://github.com/facebook/zstd/blob/dev/lib/README.md

endif

config SPL_BZIP2
	bool "Enable bzip2 decompression support for SPL build"
	depends on SPL
	help
	  This enables support for bzip2 compression algorithm for SPL boot.

config SPL_LZ4
	bool "Enable LZ4 decompression support in SPL"
	depends on SPL
	help
	  This enables support for the LZ4 decompression algorithm in SPL. LZ4
	  is a lossless data compression algorithm that is focused on
	  fast compression and decompression speed. It belongs to the LZ77
	  family of byte-oriented compression schemes.

config TPL_LZ4
	bool "Enable LZ4 decompression support in TPL"
	depends on TPL
	help
	  This enables support for the LZ4 decompression algorithm in TPL. LZ4
	  is a lossless data compression algorithm that is focused on
	  fast compression and decompression speed. It belongs to the LZ77
	  family of byte-oriented compression schemes.

config VPL_LZ4
	bool "Enable LZ4 decompression support in VPL"
	depends on VPL
	help
	  This enables support for the LZ4 decompression algorithm in VPL. LZ4
	  is a lossless data compression algorithm that is focused on
	  fast compression and decompression speed. It belongs to the LZ77
	  family of byte-oriented compression schemes.

config SPL_LZMA
	bool "Enable LZMA decompression support for SPL build"
	depends on SPL
	help
	  This enables support for LZMA compression algorithm for SPL boot.

config SPL_LZMA_SIZE_OPTIMIZATION
	bool "Optimize the LZMA algorithm for smaller binary size in SPL"
	help
	  This enables building the LZMA library optimized for size, rather
	  than performance. This can be a loss of 15-20% in decompression
	  speed, but a savings of close to two kilobytes in many cases.

config TPL_LZMA
	bool "Enable LZMA decompression support for TPL build"
	depends on TPL
	help
	  This enables support for LZMA compression algorithm for TPL boot.

config VPL_LZMA
	bool "Enable LZMA decompression support for VPL build"
	default y if LZMA
	help
	  This enables support for LZMA compression algorithm for VPL boot.

config SPL_LZO
	bool "Enable LZO decompression support in SPL"
	depends on SPL
	help
	  This enables support for LZO compression algorithm in the SPL.

config SPL_GZIP
	bool "Enable gzip decompression support for SPL build"
	select SPL_ZLIB
	help
	  This enables support for the GZIP compression algorithm for SPL boot.

config TPL_GZIP
	bool "Enable gzip decompression support for SPL build"
	select TPL_ZLIB
	help
	  This enables support for the GZIP compression algorithm for TPL

config SPL_ZLIB
	bool
	help
	  This enables compression lib for SPL boot.

config TPL_ZLIB
	bool
	help
	  This enables compression lib for TPL

config SPL_ZSTD
	bool "Enable Zstandard decompression support in SPL"
	depends on SPL
	select XXHASH
	help
	  This enables Zstandard decompression library in the SPL.

endmenu

config ERRNO_STR
	bool "Enable function for getting errno-related string message"
	help
	  The function errno_str(int errno), returns a pointer to the errno
	  corresponding text message:
	  - if errno is null or positive number - a pointer to "Success" message
	  - if errno is negative - a pointer to errno related message

config HEXDUMP
	bool "Enable hexdump"
	help
	  This enables functions for printing dumps of binary data.

config SPL_HEXDUMP
	bool "Enable hexdump in SPL"
	depends on SPL && HEXDUMP
	help
	  This enables functions for printing dumps of binary data in
	  SPL.

config GETOPT
	bool "Enable getopt"
	help
	  This enables functions for parsing command-line options.

config OF_LIBFDT
	bool "Enable the FDT library"
	default y if OF_CONTROL
	help
	  This enables the FDT library (libfdt). It provides functions for
	  accessing binary device tree images in memory, such as adding and
	  removing nodes and properties, scanning through the tree and finding
	  particular compatible nodes. The library operates on a flattened
	  version of the device tree.

config OF_LIBFDT_ASSUME_MASK
	hex "Mask of conditions to assume for libfdt"
	depends on OF_LIBFDT || FIT
	default 0x0
	help
	  Use this to change the assumptions made by libfdt about the
	  device tree it is working with. A value of 0 means that no assumptions
	  are made, and libfdt is able to deal with malicious data. A value of
	  0xff means all assumptions are made and any invalid data may cause
	  unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h

config OF_LIBFDT_OVERLAY
	bool "Enable the FDT library overlay support"
	depends on OF_LIBFDT
	default y if ARCH_OMAP2PLUS || ARCH_KEYSTONE
	help
	  This enables the FDT library (libfdt) overlay support.

config SYS_FDT_PAD
	hex "Free space added to device-tree before booting"
	depends on OF_LIBFDT
	default 0x13000 if FMAN_ENET || QE || U_QE
	default 0x3000
	help
	  The operating system may need a free area at the end of the device-
	  tree for fix-ups. This setting defines by how many bytes U-Boot
	  extends the device-tree before booting.

config SPL_OF_LIBFDT
	bool "Enable the FDT library for SPL"
	depends on SPL_LIBGENERIC_SUPPORT
	default y if SPL_OF_CONTROL
	help
	  This enables the FDT library (libfdt). It provides functions for
	  accessing binary device tree images in memory, such as adding and
	  removing nodes and properties, scanning through the tree and finding
	  particular compatible nodes. The library operates on a flattened
	  version of the device tree.

config SPL_OF_LIBFDT_ASSUME_MASK
	hex "Mask of conditions to assume for libfdt"
	depends on SPL_OF_LIBFDT || (FIT && SPL)
	default 0xff
	help
	  Use this to change the assumptions made by libfdt in SPL about the
	  device tree it is working with. A value of 0 means that no assumptions
	  are made, and libfdt is able to deal with malicious data. A value of
	  0xff means all assumptions are made and any invalid data may cause
	  unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h

config TPL_OF_LIBFDT
	bool "Enable the FDT library for TPL"
	depends on TPL_LIBGENERIC_SUPPORT
	default y if TPL_OF_CONTROL
	help
	  This enables the FDT library (libfdt). It provides functions for
	  accessing binary device tree images in memory, such as adding and
	  removing nodes and properties, scanning through the tree and finding
	  particular compatible nodes. The library operates on a flattened
	  version of the device tree.

config TPL_OF_LIBFDT_ASSUME_MASK
	hex "Mask of conditions to assume for libfdt"
	depends on TPL_OF_LIBFDT || (FIT && TPL)
	default 0xff
	help
	  Use this to change the assumptions made by libfdt in TPL about the
	  device tree it is working with. A value of 0 means that no assumptions
	  are made, and libfdt is able to deal with malicious data. A value of
	  0xff means all assumptions are made and any invalid data may cause
	  unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h

config VPL_OF_LIBFDT
	bool "Enable the FDT library for VPL"
	depends on VPL
	default y if VPL_OF_CONTROL && !VPL_OF_PLATDATA
	help
	  This enables the FDT library (libfdt). It provides functions for
	  accessing binary device tree images in memory, such as adding and
	  removing nodes and properties, scanning through the tree and finding
	  particular compatible nodes. The library operates on a flattened
	  version of the device tree.

config VPL_OF_LIBFDT_ASSUME_MASK
	hex "Mask of conditions to assume for libfdt"
	depends on VPL_OF_LIBFDT || (FIT && VPL)
	default 0xff
	help
	  Use this to change the assumptions made by libfdt in SPL about the
	  device tree it is working with. A value of 0 means that no assumptions
	  are made, and libfdt is able to deal with malicious data. A value of
	  0xff means all assumptions are made and any invalid data may cause
	  unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h

menu "System tables"
	depends on (!EFI_CLIENT && !SYS_COREBOOT) || (ARM && EFI_LOADER)

config BLOBLIST_TABLES
	bool "Put tables in a bloblist"
	depends on BLOBLIST
	default y if X86
	default y if (ARM && EFI_LOADER && GENERATE_ACPI_TABLE)
	default n
	help
	  On x86 normally tables are placed at address 0xf0000 and can be up
	  to 64KB long. With this option, tables are instead placed in the
	  bloblist with a pointer from 0xf0000. The size can then be larger
	  and the tables can be placed high in memory.
	  On other architectures the tables are always placed in high memory.

config GENERATE_SMBIOS_TABLE
	bool "Generate an SMBIOS (System Management BIOS) table"
	depends on SMBIOS
	default y
	help
	  The System Management BIOS (SMBIOS) specification addresses how
	  motherboard and system vendors present management information about
	  their products in a standard format by extending the BIOS interface
	  on Intel architecture systems.

	  Check http://www.dmtf.org/standards/smbios for details.

	  See also SYSINFO_SMBIOS which allows SMBIOS values to be provided in
	  the devicetree.

config GENERATE_SMBIOS_TABLE_VERBOSE
	bool "Generate a verbose SMBIOS (System Management BIOS) table"
	depends on GENERATE_SMBIOS_TABLE
	help
	  Provide verbose SMBIOS information.

endmenu

config LIB_RATIONAL
	bool "enable continued fraction calculation routines"

config SPL_LIB_RATIONAL
	bool "enable continued fraction calculation routines for SPL"
	depends on SPL

config ASN1_COMPILER
	bool
	help
	  ASN.1 (Abstract Syntax Notation One) is a standard interface
	  description language for defining data structures that can be
	  serialized and deserialized in a cross-platform way. It is
	  broadly used in telecommunications and computer networking,
	  and especially in cryptography (https://en.wikipedia.org/wiki/ASN.1).
	  This option enables the support of the asn1 compiler.

config ASN1_DECODER
	bool
	help
	  ASN.1 (Abstract Syntax Notation One) is a standard interface
	  description language for defining data structures that can be
	  serialized and deserialized in a cross-platform way. It is
	  broadly used in telecommunications and computer networking,
	  and especially in cryptography (https://en.wikipedia.org/wiki/ASN.1).
	  This option enables the support of the asn1 decoder.

config SPL_ASN1_DECODER
	bool
	help
	  ASN.1 (Abstract Syntax Notation One) is a standard interface
	  description language for defining data structures that can be
	  serialized and deserialized in a cross-platform way. It is
	  broadly used in telecommunications and computer networking,
	  and especially in cryptography (https://en.wikipedia.org/wiki/ASN.1).
	  This option enables the support of the asn1 decoder in the SPL.

config OID_REGISTRY
	bool
	help
	  In computing, object identifiers or OIDs are an identifier mechanism
	  standardized by the International Telecommunication Union (ITU) and
	  ISO/IEC for naming any object, concept, or "thing" with a globally
	  unambiguous persistent name (https://en.wikipedia.org/wiki/Object_identifier).
	  Enable fast lookup object identifier registry.

config SPL_OID_REGISTRY
	bool
	help
	  In computing, object identifiers or OIDs are an identifier mechanism
	  standardized by the International Telecommunication Union (ITU) and
	  ISO/IEC for naming any object, concept, or "thing" with a globally
	  unambiguous persistent name (https://en.wikipedia.org/wiki/Object_identifier).
	  Enable fast lookup object identifier registry in the SPL.

config SMBIOS
	bool "SMBIOS support"
	depends on X86 || EFI_LOADER
	default y
	select LAST_STAGE_INIT
	help
	  Indicates that this platform can support System Management BIOS
	  (SMBIOS) tables. These provide various pieces of information about
	  the board, such as the manufacturer and the model name.

	  See GENERATE_SMBIOS_TABLE which controls whether U-Boot actually
	  creates these tables, rather than them coming from a previous firmware
	  stage.

config SMBIOS_PARSER
	bool "SMBIOS parser"
	help
	  A simple parser for SMBIOS data.

source "lib/optee/Kconfig"

config TEST_FDTDEC
	bool "enable fdtdec test"
	depends on OF_LIBFDT

config LIB_DATE
	bool

config LIB_ELF
	bool
	help
	  Support basic elf loading/validating functions.
	  This supports for 32 bit and 64 bit versions.

config LMB
	bool "Enable the logical memory blocks library (lmb)"
	default y if ARC || ARM || M68K || MICROBLAZE || MIPS || \
		     NIOS2 || PPC || RISCV || SANDBOX || SH || X86 || XTENSA
	select ARCH_MISC_INIT if PPC
	help
	  Support the library logical memory blocks. This will require
	  a malloc() implementation for defining the data structures
	  needed for maintaining the LMB memory map.

config SPL_LMB
	bool "Enable LMB module for SPL"
	depends on SPL && SPL_FRAMEWORK && SPL_SYS_MALLOC
	help
	  Enable support for Logical Memory Block library routines in
	  SPL. This will require a malloc() implementation for defining
	  the data structures needed for maintaining the LMB memory map.

config LMB_ARCH_MEM_MAP
	bool "Add an architecture specific memory map"
	depends on LMB
	depends on !COMPILE_TEST
	default y if FSL_LAYERSCAPE || X86
	help
	  Some architectures have special or unique aspects which need
	  consideration when adding memory ranges to the list of available
	  memory map. Enable this config in such scenarios which allow
	  architectures and boards to define their own memory map.

config SPL_LMB_ARCH_MEM_MAP
	bool "Add an architecture specific memory map"
	depends on SPL_LMB
	help
	  Some architectures have special or unique scenarios which need
	  consideration when adding memory ranges to the list of available
	  memory map. Enable this config in such scenarios which allow
	  architectures and boards to define their own memory map.

config PHANDLE_CHECK_SEQ
	bool "Enable phandle check while getting sequence number"
	help
	  When there are multiple device tree nodes with same name,
	  enable this config option to distinguish them using
	  phandles in fdtdec_get_alias_seq() function.

config UTHREAD
	bool "Enable thread support"
	depends on HAVE_INITJMP
	help
	  Implement a simple form of cooperative multi-tasking based on
	  context-switching via initjmp(), setjmp() and longjmp(). The
	  uthread_ interface enables the main thread of execution to create
	  one or more secondary threads and schedule them until they all have
	  returned. At any point a thread may suspend its execution and
	  schedule another thread, which allows for the efficient multiplexing
	  of leghthy operations.

config UTHREAD_STACK_SIZE
	int "Default uthread stack size"
	depends on UTHREAD
	default 32768
	help
	  The default stack size for uthreads. Each uthread has its own stack.
	  When the stack_sz argument to uthread_create() is zero then this
	  value is used.

endmenu

source "lib/fwu_updates/Kconfig"
