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

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)
	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 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
	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 GENERATE_ACPI_TABLE
	bool "Generate an ACPI (Advanced Configuration and Power Interface) table"
	depends on SUPPORT_ACPI
	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 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
	select 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/README.trace 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 200
	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 0x00100000
	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 "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
	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 SPL_TPM
	bool "Trusted Platform Module (TPM) Support in SPL"
	depends on SPL_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 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.

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

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 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. See also
	  CONFIG_CMD_LZMADEC which provides a decode command.

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.

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 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 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 SPL_ZLIB
	bool
	help
	  This enables compression lib for SPL boot.

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 0
	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 "Maximum size of the FDT memory area passeed to the OS"
	depends on OF_LIBFDT
	default 0x13000 if FMAN_ENET || QE || U_QE
	default 0x3000
	help
	  During OS boot, we allocate a region of memory within the bootmap
	  for the FDT. This is the size that we will expand the FDT that we
	  are using will be extended to be, in bytes.

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

config FDT_FIXUP_PARTITIONS
	bool "overwrite MTD partitions in DTS through defined in 'mtdparts'"
	depends on OF_LIBFDT
	depends on CMD_MTDPARTS
	help
	  Allow overwriting defined partitions in the device tree blob
	  using partition info defined in the 'mtdparts' environment
	  variable.

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

config BLOBLIST_TABLES
	bool "Put tables in a bloblist"
	depends on X86 && BLOBLIST
	help
	  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.

config GENERATE_SMBIOS_TABLE
	bool "Generate an SMBIOS (System Management BIOS) table"
	default y
	depends on X86 || EFI_LOADER
	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 SMBIOS_SYSINFO which allows SMBIOS values to be provided in
	  the devicetree.

config LIB_RATIONAL
	bool "enable continued fraction calculation routines"

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

endmenu

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_PARSER
	bool "SMBIOS parser"
	help
	  A simple parser for SMBIOS data.

source lib/efi/Kconfig
source lib/efi_loader/Kconfig
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
	help
	  Support the library logical memory blocks.

config LMB_USE_MAX_REGIONS
	bool "Use a common number of memory and reserved regions in lmb lib"
	depends on LMB
	default y
	help
	  Define the number of supported memory regions in the library logical
	  memory blocks.
	  This feature allow to reduce the lmb library size by using compiler
	  optimization when LMB_MEMORY_REGIONS == LMB_RESERVED_REGIONS.

config LMB_MAX_REGIONS
	int "Number of memory and reserved regions in lmb lib"
	depends on LMB && LMB_USE_MAX_REGIONS
	default 8
	help
	  Define the number of supported regions, memory and reserved, in the
	  library logical memory blocks.

config LMB_MEMORY_REGIONS
	int "Number of memory regions in lmb lib"
	depends on LMB && !LMB_USE_MAX_REGIONS
	default 8
	help
	  Define the number of supported memory regions in the library logical
	  memory blocks.
	  The minimal value is CONFIG_NR_DRAM_BANKS.

config LMB_RESERVED_REGIONS
	int "Number of reserved regions in lmb lib"
	depends on LMB && !LMB_USE_MAX_REGIONS
	default 8
	help
	  Define the number of supported reserved regions in the library logical
	  memory blocks.

endmenu

menu "FWU Multi Bank Updates"

source lib/fwu_updates/Kconfig

endmenu
