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 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
	default y if UT_UNICODE || EFI_LOADER || UFS || EFI_APP
	help
	  Enables support for various conversions between different
	  character sets, such as between unicode representations and
	  different 'code pages'.

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 SPRINTF
	bool
	default y

config SPL_SPRINTF
	bool

config TPL_SPRINTF
	bool

config SSCANF
	bool

config STRTO
	bool
	default y

config SPL_STRTO
	bool

config TPL_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 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"
	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"
	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
	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.

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"
	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"
	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"
	help
	  This enables support for LZMA compression algorithm for SPL boot.

config SPL_LZO
	bool "Enable LZO decompression support in 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"
	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 SPL_OF_LIBFDT
	bool "Enable the FDT library for SPL"
	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
	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"
	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
	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 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 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 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 || NDS32 || \
		     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.

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.

endmenu
