]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - ti-u-boot/ti-u-boot.git/blobdiff - Kconfig
Prepare v2024.04
[ti-u-boot/ti-u-boot.git] / Kconfig
diff --git a/Kconfig b/Kconfig
index 1b0b6999d8c08dd53029e0e742df660828b375f6..5710934000f636c864f27d0e4bc5427f1cbe086e 100644 (file)
--- a/Kconfig
+++ b/Kconfig
@@ -5,6 +5,10 @@
 #
 mainmenu "U-Boot $(UBOOTVERSION) Configuration"
 
+comment "Compiler: $(CC_VERSION_TEXT)"
+
+source "scripts/Kconfig.include"
+
 # Allow defaults in arch-specific code to override any given here
 source "arch/Kconfig"
 
@@ -53,15 +57,96 @@ config LOCALVERSION_AUTO
 
          which is done within the script "scripts/setlocalversion".)
 
+config CC_IS_GCC
+       def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)
+
+config GCC_VERSION
+       int
+       default $(shell,$(srctree)/scripts/gcc-version.sh -p $(CC) | sed 's/^0*//') if CC_IS_GCC
+       default 0
+
+config CC_IS_CLANG
+       def_bool $(success,$(CC) --version | head -n 1 | grep -q clang)
+
+config CLANG_VERSION
+       int
+       default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
+
+choice
+       prompt "Optimization level"
+       default CC_OPTIMIZE_FOR_SIZE
+
 config CC_OPTIMIZE_FOR_SIZE
        bool "Optimize for size"
-       default y
        help
-         Enabling this option will pass "-Os" instead of "-O2" to gcc
-         resulting in a smaller U-Boot image.
+         Enabling this option will pass "-Os" to gcc, resulting in a smaller
+         U-Boot image.
 
          This option is enabled by default for U-Boot.
 
+config CC_OPTIMIZE_FOR_SPEED
+       bool "Optimize for speed"
+       help
+         Enabling this option will pass "-O2" to gcc, resulting in a faster
+         U-Boot image.
+
+config CC_OPTIMIZE_FOR_DEBUG
+       bool "Optimize for debugging"
+       help
+         Enabling this option will pass "-Og" to gcc, enabling optimizations
+         which don't interfere with debugging.
+
+endchoice
+
+config OPTIMIZE_INLINING
+       bool "Allow compiler to uninline functions marked 'inline' in full U-Boot"
+       help
+         This option determines if U-Boot forces gcc to inline the functions
+         developers have marked 'inline'. Doing so takes away freedom from gcc to
+         do what it thinks is best, which is desirable in some cases for size
+         reasons.
+
+config SPL_OPTIMIZE_INLINING
+       bool "Allow compiler to uninline functions marked 'inline' in SPL"
+       depends on SPL
+       help
+         This option determines if U-Boot forces gcc to inline the functions
+         developers have marked 'inline'. Doing so takes away freedom from gcc to
+         do what it thinks is best, which is desirable in some cases for size
+         reasons.
+
+config ARCH_SUPPORTS_LTO
+       bool
+
+config LTO
+       bool "Enable Link Time Optimizations"
+       depends on ARCH_SUPPORTS_LTO
+       help
+         This option enables Link Time Optimization (LTO), a mechanism which
+         allows the compiler to optimize between different compilation units.
+
+         This can optimize away dead code paths, resulting in smaller binary
+         size (if CC_OPTIMIZE_FOR_SIZE is enabled).
+
+         This option is not available for every architecture and may
+         introduce bugs.
+
+         Currently, when compiling with GCC, due to a weird bug regarding
+         jobserver, the final linking will not respect make's --jobs argument.
+         Instead all available processors will be used (as reported by the
+         nproc command).
+
+         If unsure, say n.
+
+config TPL_OPTIMIZE_INLINING
+       bool "Allow compiler to uninline functions marked 'inline' in TPL"
+       depends on TPL
+       help
+         This option determines if U-Boot forces gcc to inline the functions
+         developers have marked 'inline'. Doing so takes away freedom from gcc to
+         do what it thinks is best, which is desirable in some cases for size
+         reasons.
+
 config CC_COVERAGE
        bool "Enable code coverage analysis"
        depends on SANDBOX
@@ -69,32 +154,44 @@ config CC_COVERAGE
          Enabling this option will pass "--coverage" to gcc to compile
          and link code instrumented for coverage analysis.
 
-config DISTRO_DEFAULTS
-       bool "Select defaults suitable for booting general purpose Linux distributions"
-       select AUTO_COMPLETE
-       select CMDLINE_EDITING
-       select CMD_BOOTI if ARM64
-       select CMD_BOOTZ if ARM && !ARM64
-       select CMD_DHCP if CMD_NET
-       select CMD_ENV_EXISTS
-       select CMD_EXT2
-       select CMD_EXT4
-       select CMD_FAT
-       select CMD_FS_GENERIC
-       select CMD_PART if PARTITIONS
-       select CMD_PING if CMD_NET
-       select CMD_PXE if NET
-       select CMD_SYSBOOT
-       select ENV_VARS_UBOOT_CONFIG
-       select HUSH_PARSER
-       select SUPPORT_RAW_INITRD
-       select SYS_LONGHELP
-       imply CMD_MII if NET
-       imply USB_STORAGE
-       imply USE_BOOTCOMMAND
-       help
-         Select this to enable various options and commands which are suitable
-         for building u-boot for booting general purpose Linux distributions.
+config ASAN
+       bool "Enable AddressSanitizer"
+       depends on SANDBOX
+       help
+         Enables AddressSanitizer to discover out-of-bounds accesses,
+         use-after-free, double-free and memory leaks.
+
+config FUZZ
+       bool "Enable fuzzing"
+       depends on CC_IS_CLANG
+       depends on DM_FUZZING_ENGINE
+       select ASAN
+       help
+         Enables the fuzzing infrastructure to generate fuzzing data and run
+          fuzz tests.
+
+config CC_HAS_ASM_INLINE
+       def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null)
+
+config XEN
+       bool "Select U-Boot be run as a bootloader for XEN Virtual Machine"
+       depends on ARM64
+       select SSCANF
+       help
+         Enabling this option will make U-Boot be run as a bootloader
+         for XEN [1] Virtual Machine.
+
+         Xen is a virtual machine monitor (VMM) or a type-1 hypervisor with support
+         for para-virtualization. Xen can organize the safe execution of several
+         virtual machines on the same physical system with performance close to
+         native. It is used as the basis for a number of different commercial and
+         open source applications, such as: server virtualization, Infrastructure
+         as a Service (IaaS), desktop virtualization, security applications,
+         embedded and hardware appliances.
+         Xen has a special VM called Domain-0 that runs the Dom0 kernel and allows
+         Xen to use the device drivers for the Domain-0 kernel by default.
+
+         [1] - https://xenproject.org/
 
 config ENV_VARS_UBOOT_CONFIG
        bool "Add arch, board, vendor and soc variables to default environment"
@@ -111,7 +208,7 @@ config ENV_VARS_UBOOT_CONFIG
 
 config NR_DRAM_BANKS
        int "Number of DRAM banks"
-       default 1 if ARCH_SUNXI
+       default 1 if ARCH_SUNXI || ARCH_OWL
        default 4
        help
          This defines the number of DRAM banks.
@@ -122,12 +219,38 @@ config SYS_BOOT_GET_CMDLINE
          Enables allocating and saving kernel cmdline in space between
          "bootm_low" and "bootm_low" + BOOTMAPSZ.
 
+config SYS_BARGSIZE
+       int "Size of kernel command line buffer in bytes"
+       depends on SYS_BOOT_GET_CMDLINE
+       default 512
+       help
+         Buffer size for Boot Arguments which are passed to the application
+         (usually a Linux kernel) when it is booted
+
 config SYS_BOOT_GET_KBD
        bool "Enable kernel board information setup"
        help
          Enables allocating and saving a kernel copy of the bd_info in
          space between "bootm_low" and "bootm_low" + BOOTMAPSZ.
 
+config HAS_CUSTOM_SYS_INIT_SP_ADDR
+       bool "Use a custom location for the initial stack pointer address"
+       depends on ARC || (ARM && !INIT_SP_RELATIVE) || MIPS || PPC || RISCV
+       default y if TFABOOT
+       help
+         Typically, we use an initial stack pointer address that is calculated
+         by taking the statically defined CFG_SYS_INIT_RAM_ADDR, adding the
+         statically defined CFG_SYS_INIT_RAM_SIZE and then subtracting the
+         build-time constant of GENERATED_GBL_DATA_SIZE.  On MIPS a different
+         but statica calculation is performed.  However, some platforms will
+         take a different approach.  Say Y here to define the address statically
+         instead.
+
+config CUSTOM_SYS_INIT_SP_ADDR
+       hex "Static location for the initial stack pointer"
+       depends on HAS_CUSTOM_SYS_INIT_SP_ADDR
+       default TEXT_BASE if TFABOOT
+
 config SYS_MALLOC_F
        bool "Enable malloc() pool before relocation"
        default y if DM
@@ -141,48 +264,121 @@ config SYS_MALLOC_F
 config SYS_MALLOC_F_LEN
        hex "Size of malloc() pool before relocation"
        depends on SYS_MALLOC_F
-       default 0x1000 if AM33XX
-       default 0x2800 if SANDBOX
-       default 0x2000 if (ARCH_IMX8 || ARCH_IMX8M || ARCH_MX7 || \
-                          ARCH_MX7ULP || ARCH_MX6 || ARCH_MX5 || \
-                          ARCH_LS1012A || ARCH_LS1021A || ARCH_LS1043A || \
-                          ARCH_LS1046A)
-       default 0x400
-       help
-         Before relocation, memory is very limited on many platforms. Still,
-         we can provide a small malloc() pool if needed. Driver model in
-         particular needs this to operate, so that it can allocate the
-         initial serial device and any others that are needed.
+       default 0x400 if M68K || PPC || ROCKCHIP_PX30 || ROCKCHIP_RK3036 || \
+                        ROCKCHIP_RK3308 || ROCKCHIP_RV1108
+       default 0x600 if ARCH_ZYNQMP_R5 || ARCH_ZYNQMP
+       default 0x800 if ARCH_ZYNQ || ROCKCHIP_RK3128 || ROCKCHIP_RK3188 || \
+                        ROCKCHIP_RK322X || X86
+       default 0x1000 if ARCH_MESON || ARCH_BMIPS || ARCH_MTMIPS
+       default 0x1800 if ARCH_TEGRA
+       default 0x4000 if SANDBOX || RISCV || ARCH_APPLE || ROCKCHIP_RK3368 || \
+                         ROCKCHIP_RK3399
+       default 0x8000 if RCAR_GEN3
+       default 0x10000 if ARCH_IMX8 || ARCH_IMX8M
+       default 0x2000
+       help
+               Size of the malloc() pool for use before relocation. If
+               this is defined, then a very simple malloc() implementation
+               will become available before relocation. The address is just
+               below the global data, and the stack is moved down to make
+               space.
+
+               This feature allocates regions with increasing addresses
+               within the region. calloc() is supported, but realloc()
+               is not available. free() is supported but does nothing.
+               The memory will be freed (or in fact just forgotten) when
+               U-Boot relocates itself.
 
 config SYS_MALLOC_LEN
        hex "Define memory for Dynamic allocation"
-       depends on ARCH_ZYNQ || ARCH_VERSAL || ARCH_STM32MP || ARCH_ROCKCHIP
-       default 0x2000000 if ARCH_ROCKCHIP
+       default 0x4000000 if SANDBOX
+       default 0x2000000 if ARCH_ROCKCHIP || ARCH_OMAP2PLUS || ARCH_MESON
+       default 0x200000 if ARCH_BMIPS || X86
+       default 0x4020000 if SUNXI_MINIMUM_DRAM_MB >= 256
+       default 0x220000 if SUNXI_MINIMUM_DRAM_MB >= 64
+       default 0x120000 if SUNXI_MINIMUM_DRAM_MB >= 32
+       default 0x400000
        help
          This defines memory to be allocated for Dynamic allocation
          TODO: Use for other architectures
 
+config SPL_SYS_MALLOC_F
+       bool "Enable malloc() pool in SPL"
+       depends on SPL_FRAMEWORK && SYS_MALLOC_F && SPL
+       default y
+       help
+         In SPL memory is very limited on many platforms. Still,
+         we can provide a small malloc() pool if needed. Driver model in
+         particular needs this to operate, so that it can allocate the
+         initial serial device and any others that are needed.
+
 config SPL_SYS_MALLOC_F_LEN
-       hex "Size of malloc() pool in SPL before relocation"
-       depends on SYS_MALLOC_F && SPL
+       hex "Size of malloc() pool in SPL"
+       depends on SPL_SYS_MALLOC_F
        default 0x2800 if RCAR_GEN3
+       default 0x2000 if IMX8MQ
        default SYS_MALLOC_F_LEN
        help
-         Before relocation, memory is very limited on many platforms. Still,
+         Sets the size of the malloc() pool in SPL. This is used for
+         driver model and other features, which must allocate memory for
+         data structures.
+
+         It is possible to enable CFG_SPL_SYS_MALLOC_START to start a new
+         malloc() region in SDRAM once it is inited.
+
+config TPL_SYS_MALLOC_F
+       bool "Enable malloc() pool in TPL"
+       depends on SYS_MALLOC_F && TPL
+       default y if SPL_SYS_MALLOC_F
+       help
+         In TPL memory is very limited on many platforms. Still,
          we can provide a small malloc() pool if needed. Driver model in
          particular needs this to operate, so that it can allocate the
          initial serial device and any others that are needed.
 
 config TPL_SYS_MALLOC_F_LEN
-       hex "Size of malloc() pool in TPL before relocation"
-       depends on SYS_MALLOC_F && TPL
-       default SYS_MALLOC_F_LEN
-       help
-         Before relocation, memory is very limited on many platforms. Still,
+       hex "Size of malloc() pool in TPL"
+       depends on TPL_SYS_MALLOC_F
+       default SPL_SYS_MALLOC_F_LEN
+       help
+         Sets the size of the malloc() pool in TPL. This is used for
+         driver model and other features, which must allocate memory for
+         data structures.
+
+config VALGRIND
+       bool "Inform valgrind about memory allocations"
+       depends on !RISCV
+       help
+         Valgrind is an instrumentation framework for building dynamic analysis
+         tools. In particular, it may be used to detect memory management bugs
+         in U-Boot. It relies on knowing when heap blocks are allocated in
+         order to give accurate results. This happens automatically for
+         standard allocator functions provided by the host OS. However, this
+         doesn't automatically happen for U-Boot's malloc implementation.
+
+         Enable this option to annotate U-Boot's malloc implementation so that
+         it can be handled accurately by Valgrind. If you aren't planning on
+         using valgrind to debug U-Boot, say 'n'.
+
+config VPL_SYS_MALLOC_F
+       bool "Enable malloc() pool in VPL"
+       depends on SYS_MALLOC_F && VPL
+       default y if SPL_SYS_MALLOC_F
+       help
+         In VPL memory is very limited on many platforms. Still,
          we can provide a small malloc() pool if needed. Driver model in
          particular needs this to operate, so that it can allocate the
          initial serial device and any others that are needed.
 
+config VPL_SYS_MALLOC_F_LEN
+       hex "Size of malloc() pool in VPL before relocation"
+       depends on VPL_SYS_MALLOC_F
+       default SPL_SYS_MALLOC_F_LEN
+       help
+         Sets the size of the malloc() pool in VPL. This is used for
+         driver model and other features, which must allocate memory for
+         data structures.
+
 menuconfig EXPERT
        bool "Configure standard U-Boot features (expert users)"
        default y
@@ -209,6 +405,30 @@ if EXPERT
          When disabling this, please check if malloc calls, maybe
          should be replaced by calloc - if one expects zeroed memory.
 
+config SPL_SYS_MALLOC_CLEAR_ON_INIT
+       bool "Init with zeros the memory reserved for malloc (slow) in SPL"
+       depends on SPL
+       default SYS_MALLOC_CLEAR_ON_INIT
+       help
+         Same as SYS_MALLOC_CLEAR_ON_INIT, but for SPL. It's possible to
+         Enable it without SYS_MALLOC_CLEAR_ON_INIT. It's useful for boards
+         that must have particular memory regions zero'ed before first use.
+         If SYS_SPL_MALLOC_START is configured to be in such region, this
+         option should be enabled.
+
+config SYS_MALLOC_DEFAULT_TO_INIT
+       bool "Default malloc to init while reserving the memory for it"
+       help
+         It may happen that one needs to move the dynamic allocation
+         from one to another memory range, eg. when moving the malloc
+         from the limited static to a potentially large dynamic (DDR)
+         memory.
+
+         If so then on top of setting the updated memory aside one
+         needs to bring the malloc init.
+
+         If such a scenario is sought choose yes.
+
 config TOOLS_DEBUG
        bool "Enable debug information for tools"
        help
@@ -221,19 +441,25 @@ endif # EXPERT
 
 config PHYS_64BIT
        bool "64bit physical address support"
+       select FDT_64BIT
        help
          Say Y here to support 64bit physical memory address.
          This can be used not only for 64bit SoCs, but also for
          large physical address extension on 32bit SoCs.
 
-config BUILD_ROM
-       bool "Build U-Boot as BIOS replacement"
-       depends on X86
+config FDT_64BIT
+       bool "64bit fdt address support"
        help
-         This option allows to build a ROM version of U-Boot.
-         The build process generally requires several binary blobs
-         which are not shipped in the U-Boot source tree.
-         Please, see doc/README.x86 for details.
+         Say Y here to support 64bit fdt addresses.
+         This can be used not only for 64bit SoCs, but also
+         for large address extensions on 32bit SoCs.
+
+config HAS_ROM
+       bool
+       select BINMAN
+       help
+         Enables building of a u-boot.rom target. This collects U-Boot and
+         any necessary binary blobs.
 
 config SPL_IMAGE
        string "SPL image used in the combined SPL+U-Boot image"
@@ -246,17 +472,25 @@ config SPL_IMAGE
          used to generate a combined image with SPL and main U-Boot
          proper as one single image.
 
+config REMAKE_ELF
+       bool "Recreate an ELF image from raw U-Boot binary"
+       help
+         Enable this to recreate an ELF image (u-boot.elf) from the raw
+         U-Boot binary (u-boot.bin), which may already have been statically
+         relocated and may already have a device-tree appended to it.
+
 config BUILD_TARGET
        string "Build target special images"
-       default "u-boot-with-spl.sfp" if TARGET_SOCFPGA_ARRIA10
-       default "u-boot-with-spl.sfp" if TARGET_SOCFPGA_GEN5
-       default "u-boot-spl.kwb" if ARCH_MVEBU && SPL
-       default "u-boot-elf.srec" if RCAR_GEN3
-       default "u-boot.itb" if SPL_LOAD_FIT && (ARCH_ROCKCHIP || \
-                               ARCH_SUNXI || RISCV || ARCH_ZYNQMP)
-       default "u-boot.kwb" if KIRKWOOD
+       default "u-boot-elf.srec" if RCAR_64
        default "u-boot-with-spl.bin" if ARCH_AT91 && SPL_NAND_SUPPORT
+       default "u-boot-with-spl.bin" if MPC85xx && !E500MC && !E5500 && !E6500 && SPL
        default "u-boot-with-spl.imx" if ARCH_MX6 && SPL
+       default "u-boot-with-spl.kwb" if ARMADA_32BIT && SPL
+       default "u-boot-with-spl.sfp" if TARGET_SOCFPGA_ARRIA10
+       default "u-boot-with-spl.sfp" if TARGET_SOCFPGA_GEN5
+       default "u-boot.itb" if !BINMAN && SPL_LOAD_FIT && (ARCH_ROCKCHIP || \
+                               RISCV || ARCH_ZYNQMP)
+       default "u-boot.kwb" if (ARCH_KIRKWOOD || ARMADA_32BIT) && !SPL
        help
          Some SoCs need special image types (e.g. U-Boot binary
          with a special header) as build targets. By defining
@@ -264,6 +498,24 @@ config BUILD_TARGET
          special image will be automatically built upon calling
          make / buildman.
 
+config HAS_BOARD_SIZE_LIMIT
+       bool "Define a maximum size for the U-Boot image"
+       default y if RCAR_32 || RCAR_64
+       help
+         In some cases, we need to enforce a hard limit on how big the U-Boot
+         image itself can be.
+
+config BOARD_SIZE_LIMIT
+       int "Maximum size of the U-Boot image in bytes"
+       default 524288 if RCAR_32
+       default 1048576 if RCAR_64
+       depends on HAS_BOARD_SIZE_LIMIT
+       help
+         Maximum size of the U-Boot image. When defined, the build system
+         checks that the actual size does not exceed it.  This does not
+         include SPL nor TPL, on platforms that use that functionality, they
+         have a separate option to restict size.
+
 config SYS_CUSTOM_LDSCRIPT
        bool "Use a custom location for the U-Boot linker script"
        help
@@ -281,6 +533,21 @@ config SYS_LDSCRIPT
          Path within the source tree to the linker script to use for the
          main U-Boot binary.
 
+config SYS_LOAD_ADDR
+       hex "Address in memory to use by default"
+       default 0x01000000 if ARCH_SOCFPGA
+       default 0x02000000 if PPC || X86
+       default 0x81000000 if MACH_SUNIV
+       default 0x22000000 if MACH_SUN9I
+       default 0x42000000 if ARCH_SUNXI
+       default 0x82000000 if ARCH_KEYSTONE || ARCH_OMAP2PLUS || ARCH_K3
+       default 0x82000000 if ARCH_MX6 && (MX6SL || MX6SLL  || MX6SX || MX6UL || MX6ULL)
+       default 0x12000000 if ARCH_MX6 && !(MX6SL || MX6SLL  || MX6SX || MX6UL || MX6ULL)
+       default 0x80800000 if ARCH_MX7
+       default 0x90000000 if FSL_LSCH2 || FSL_LSCH3
+       help
+         Address in memory to use as the default safe load address.
+
 config ERR_PTR_OFFSET
        hex
        default 0x0
@@ -300,320 +567,160 @@ config PLATFORM_ELFENTRY
        default "__start" if MIPS
        default "_start"
 
-endmenu                # General setup
-
-menu "Boot images"
+config STACK_SIZE
+       hex "Define max stack size that can be used by U-Boot"
+       default 0x4000000 if ARCH_VERSAL_NET || ARCH_VERSAL || ARCH_ZYNQMP
+       default 0x200000 if MICROBLAZE
+       default 0x1000000
+       help
+         Define Max stack size that can be used by U-Boot. This value is used
+         by the UEFI sub-system. On some boards initrd_high is calculated as
+         base stack pointer minus this stack size.
 
-config ANDROID_BOOT_IMAGE
-       bool "Enable support for Android Boot Images"
-       default y if FASTBOOT
+config SYS_MEM_TOP_HIDE
+       hex "Exclude some memory from U-Boot / OS information"
+       default 0x0
        help
-         This enables support for booting images which use the Android
-         image format header.
+         If set, this specified memory area will get subtracted from the top
+         (end) of RAM and won't get "touched" at all by U-Boot. By fixing up
+         gd->ram_size the OS / next stage should gets passed the now
+         "corrected" memory size and won't touch it either.
+         WARNING: Please make sure that this value is a multiple of the OS
+         page size.
 
-config FIT
-       bool "Support Flattened Image Tree"
-       select MD5
-       select SHA1
+config SYS_HAS_SRAM
+       bool
+       default y if TARGET_PIC32MZDASK
+       default y if TARGET_DEVKIT8000
+       default y if TARGET_TRICORDER
        help
-         This option allows you to boot the new uImage structure,
-         Flattened Image Tree.  FIT is formally a FDT, which can include
-         images of various types (kernel, FDT blob, ramdisk, etc.)
-         in a single blob.  To boot this new uImage structure,
-         pass the address of the blob to the "bootm" command.
-         FIT is very flexible, supporting compression, multiple images,
-         multiple configurations, verification through hashing and also
-         verified boot (secure boot using RSA).
+         Enable this to allow support for the on board SRAM.
+         SRAM base address is controlled by CONFIG_SYS_SRAM_BASE.
+         SRAM size is controlled by CONFIG_SYS_SRAM_SIZE.
 
-if FIT
+config SYS_SRAM_BASE
+       hex
+       default 0x80000000 if TARGET_PIC32MZDASK
+       default 0x40200000 if TARGET_DEVKIT8000
+       default 0x40200000 if TARGET_TRICORDER
+       default 0x0
 
-config FIT_EXTERNAL_OFFSET
-       hex "FIT external data offset"
+config SYS_SRAM_SIZE
+       hex
+       default 0x00080000 if TARGET_PIC32MZDASK
+       default 0x10000 if TARGET_DEVKIT8000
+       default 0x10000 if TARGET_TRICORDER
        default 0x0
+
+config SYS_MONITOR_LEN
+       int "Maximum size in bytes reserved for U-Boot in memory"
+       default 1048576 if X86
+       default 786432 if ARCH_SUNXI
+       default 0
        help
-         This specifies a data offset in fit image.
-         The offset is from data payload offset to the beginning of
-         fit image header. When specifies a offset, specific data
-         could be put in the hole between data payload and fit image
-         header, such as CSF data on i.MX platform.
+         Size of memory reserved for monitor code, used to determine
+         _at_compile_time_ (!) if the environment is embedded within the
+         U-Boot image, or in a separate flash sector, among other uses where
+         we need to set a maximum size of the U-Boot binary itself that will
+         be loaded.
 
-config FIT_ENABLE_SHA256_SUPPORT
-       bool "Support SHA256 checksum of FIT image contents"
-       default y
-       select SHA256
-       help
-         Enable this to support SHA256 checksum of FIT image contents. A
-         SHA256 checksum is a 256-bit (32-byte) hash value used to check that
-         the image contents have not been corrupted. SHA256 is recommended
-         for use in secure applications since (as at 2016) there is no known
-         feasible attack that could produce a 'collision' with differing
-         input data. Use this for the highest security. Note that only the
-         SHA256 variant is supported: SHA512 and others are not currently
-         supported in U-Boot.
-
-config FIT_SIGNATURE
-       bool "Enable signature verification of FIT uImages"
-       depends on DM
-       select HASH
-       select RSA
-       select RSA_VERIFY
-       select IMAGE_SIGN_INFO
-       help
-         This option enables signature verification of FIT uImages,
-         using a hash signed and verified using RSA. If
-         CONFIG_SHA_PROG_HW_ACCEL is defined, i.e support for progressive
-         hashing is available using hardware, then the RSA library will use
-         it. See doc/uImage.FIT/signature.txt for more details.
-
-         WARNING: When relying on signed FIT images with a required signature
-         check the legacy image format is disabled by default, so that
-         unsigned images cannot be loaded. If a board needs the legacy image
-         format support in this case, enable it using
-         CONFIG_LEGACY_IMAGE_FORMAT.
-
-config FIT_SIGNATURE_MAX_SIZE
-       hex "Max size of signed FIT structures"
-       depends on FIT_SIGNATURE
-       default 0x10000000
-       help
-         This option sets a max size in bytes for verified FIT uImages.
-         A sane value of 256MB protects corrupted DTB structures from overlapping
-         device memory. Assure this size does not extend past expected storage
-         space.
-
-config FIT_ENABLE_RSASSA_PSS_SUPPORT
-       bool "Support rsassa-pss signature scheme of FIT image contents"
-       depends on FIT_SIGNATURE
-       default n
-       help
-         Enable this to support the pss padding algorithm as described
-         in the rfc8017 (https://tools.ietf.org/html/rfc8017).
-
-config FIT_CIPHER
-       bool "Enable ciphering data in a FIT uImages"
-       depends on DM
-       select AES
-       help
-         Enable the feature of data ciphering/unciphering in the tool mkimage
-         and in the u-boot support of the FIT image.
-
-config FIT_VERBOSE
-       bool "Show verbose messages when FIT images fail"
-       help
-         Generally a system will have valid FIT images so debug messages
-         are a waste of code space. If you are debugging your images then
-         you can enable this option to get more verbose information about
-         failures.
-
-config FIT_BEST_MATCH
-       bool "Select the best match for the kernel device tree"
-       help
-         When no configuration is explicitly selected, default to the
-         one whose fdt's compatibility field best matches that of
-         U-Boot itself. A match is considered "best" if it matches the
-         most specific compatibility entry of U-Boot's fdt's root node.
-         The order of entries in the configuration's fdt is ignored.
-
-config FIT_IMAGE_POST_PROCESS
-       bool "Enable post-processing of FIT artifacts after loading by U-Boot"
-       depends on TI_SECURE_DEVICE
-       help
-         Allows doing any sort of manipulation to blobs after they got extracted
-         from FIT images like stripping off headers or modifying the size of the
-         blob, verification, authentication, decryption etc. in a platform or
-         board specific way. In order to use this feature a platform or board-
-         specific implementation of board_fit_image_post_process() must be
-         provided. Also, anything done during this post-processing step would
-         need to be comprehended in how the images were prepared before being
-         injected into the FIT creation (i.e. the blobs would have been pre-
-         processed before being added to the FIT image).
-
-if SPL
-
-config SPL_FIT
-       bool "Support Flattened Image Tree within SPL"
-       depends on SPL
-       select SPL_OF_LIBFDT
-
-config SPL_FIT_PRINT
-       bool "Support FIT printing within SPL"
-       depends on SPL_FIT
-       help
-         Support printing the content of the fitImage in a verbose manner in SPL.
-
-config SPL_FIT_SIGNATURE
-       bool "Enable signature verification of FIT firmware within SPL"
-       depends on SPL_DM
-       select SPL_FIT
-       select SPL_RSA
-       select SPL_RSA_VERIFY
-       select IMAGE_SIGN_INFO
-
-config SPL_LOAD_FIT
-       bool "Enable SPL loading U-Boot as a FIT (basic fitImage features)"
-       select SPL_FIT
-       help
-         Normally with the SPL framework a legacy image is generated as part
-         of the build. This contains U-Boot along with information as to
-         where it should be loaded. This option instead enables generation
-         of a FIT (Flat Image Tree) which provides more flexibility. In
-         particular it can handle selecting from multiple device tree
-         and passing the correct one to U-Boot.
-
-config SPL_LOAD_FIT_APPLY_OVERLAY
-       bool "Enable SPL applying DT overlays from FIT"
-       depends on SPL_LOAD_FIT
-       select OF_LIBFDT_OVERLAY
-       help
-         The device tree is loaded from the FIT image. Allow the SPL is to
-         also load device-tree overlays from the FIT image an apply them
-         over the device tree.
-
-config SPL_LOAD_FIT_APPLY_OVERLAY_BUF_SZ
-       depends on SPL_LOAD_FIT_APPLY_OVERLAY
-       default 0x10000
-       hex "size of temporary buffer used to load the overlays"
-       help
-         The size of the area where the overlays will be loaded and
-         uncompress. Must be at least as large as biggest overlay
-         (uncompressed)
-
-config SPL_LOAD_FIT_FULL
-       bool "Enable SPL loading U-Boot as a FIT (full fitImage features)"
-       select SPL_FIT
-       help
-         Normally with the SPL framework a legacy image is generated as part
-         of the build. This contains U-Boot along with information as to
-         where it should be loaded. This option instead enables generation
-         of a FIT (Flat Image Tree) which provides more flexibility. In
-         particular it can handle selecting from multiple device tree
-         and passing the correct one to U-Boot.
-
-config SPL_FIT_IMAGE_POST_PROCESS
-       bool "Enable post-processing of FIT artifacts after loading by the SPL"
-       depends on SPL_LOAD_FIT
-       help
-         Allows doing any sort of manipulation to blobs after they got extracted
-         from the U-Boot FIT image like stripping off headers or modifying the
-         size of the blob, verification, authentication, decryption etc. in a
-         platform or board specific way. In order to use this feature a platform
-         or board-specific implementation of board_fit_image_post_process() must
-         be provided. Also, anything done during this post-processing step would
-         need to be comprehended in how the images were prepared before being
-         injected into the FIT creation (i.e. the blobs would have been pre-
-         processed before being added to the FIT image).
-
-config SPL_FIT_SOURCE
-       string ".its source file for U-Boot FIT image"
-       depends on SPL_FIT
-       help
-         Specifies a (platform specific) FIT source file to generate the
-         U-Boot FIT image. This could specify further image to load and/or
-         execute.
-
-config SPL_FIT_GENERATOR
-       string ".its file generator script for U-Boot FIT image"
-       depends on SPL_FIT
-       default "board/sunxi/mksunxi_fit_atf.sh" if SPL_LOAD_FIT && ARCH_SUNXI
-       default "arch/arm/mach-rockchip/make_fit_atf.py" if SPL_LOAD_FIT && ARCH_ROCKCHIP
-       default "arch/arm/mach-zynqmp/mkimage_fit_atf.sh" if SPL_LOAD_FIT && ARCH_ZYNQMP
-       default "arch/riscv/lib/mkimage_fit_opensbi.sh" if SPL_LOAD_FIT && RISCV
-       help
-         Specifies a (platform specific) script file to generate the FIT
-         source file used to build the U-Boot FIT image file. This gets
-         passed a list of supported device tree file stub names to
-         include in the generated image.
-
-endif # SPL
-
-endif # FIT
-
-config LEGACY_IMAGE_FORMAT
-       bool "Enable support for the legacy image format"
-       default y if !FIT_SIGNATURE
-       help
-         This option enables the legacy image format. It is enabled by
-         default for backward compatibility, unless FIT_SIGNATURE is
-         set where it is disabled so that unsigned images cannot be
-         loaded. If a board needs the legacy image format support in this
-         case, enable it here.
-
-config OF_BOARD_SETUP
-       bool "Set up board-specific details in device tree before boot"
-       depends on OF_LIBFDT
-       help
-         This causes U-Boot to call ft_board_setup() before booting into
-         the Operating System. This function can set up various
-         board-specific information in the device tree for use by the OS.
-         The device tree is then passed to the OS.
-
-config OF_SYSTEM_SETUP
-       bool "Set up system-specific details in device tree before boot"
-       depends on OF_LIBFDT
-       help
-         This causes U-Boot to call ft_system_setup() before booting into
-         the Operating System. This function can set up various
-         system-specific information in the device tree for use by the OS.
-         The device tree is then passed to the OS.
-
-config OF_STDOUT_VIA_ALIAS
-       bool "Update the device-tree stdout alias from U-Boot"
-       depends on OF_LIBFDT
-       help
-         This uses U-Boot's serial alias from the aliases node to update
-         the device tree passed to the OS. The "linux,stdout-path" property
-         in the chosen node is set to point to the correct serial node.
-         This option currently references CONFIG_CONS_INDEX, which is
-         incorrect when used with device tree as this option does not
-         exist / should not be used.
-
-config SYS_EXTRA_OPTIONS
-       string "Extra Options (DEPRECATED)"
-       help
-         The old configuration infrastructure (= mkconfig + boards.cfg)
-         provided the extra options field. If you have something like
-         "HAS_BAR,BAZ=64", the optional options
-           #define CONFIG_HAS
-           #define CONFIG_BAZ  64
-         will be defined in include/config.h.
-         This option was prepared for the smooth migration from the old
-         configuration to Kconfig. Since this option will be removed sometime,
-         new boards should not use this option.
-
-config HAVE_SYS_TEXT_BASE
+config MP
+       bool "Support for multiprocessor"
+       help
+         This provides an option to bringup different processors
+         in multiprocessor cases.
+
+config HAVE_TEXT_BASE
        bool
        depends on !NIOS2 && !XTENSA
        depends on !EFI_APP
        default y
 
-config SYS_TEXT_BASE
-       depends on HAVE_SYS_TEXT_BASE
+config TEXT_BASE
+       depends on HAVE_TEXT_BASE
+       default 0x0 if POSITION_INDEPENDENT
        default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
-       default 0x4a000000 if ARCH_SUNXI && !MACH_SUN9I && !MACH_SUN8I_V3S
-       default 0x2a000000 if ARCH_SUNXI && MACH_SUN9I
-       default 0x42e00000 if ARCH_SUNXI && MACH_SUN8I_V3S
+       default 0x81700000 if MACH_SUNIV
+       default 0x2a000000 if MACH_SUN9I
+       default 0x4a000000 if SUNXI_MINIMUM_DRAM_MB >= 256
+       default 0x42e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
        hex "Text Base"
        help
-         The address in memory that U-Boot will be running from, initially.
+         The address in memory that U-Boot will be copied and executed from
+         initially.
 
-config SYS_CLK_FREQ
-       depends on ARC || ARCH_SUNXI || MPC83xx
-       int "CPU clock frequency"
+config HAVE_SYS_UBOOT_START
+       bool "Use custom U-Boot Start"
+       depends on HAVE_TEXT_BASE
        help
-         TODO: Move CONFIG_SYS_CLK_FREQ for all the architecture
+         By default, the address in memory that U-Boot will be copied from
+         (TEXT_BASE) and the entry point are the same. Select this to start the
+         execution of U-Boot from a different address.
+         This may be required if a header or vector table needs to be copied
+         but not executed.
 
-config ARCH_FIXUP_FDT_MEMORY
-       bool "Enable arch_fixup_memory_banks() call"
+config SYS_UBOOT_START
+       hex
+       depends on HAVE_TEXT_BASE
+       default TEXT_BASE
+       prompt "U-Boot entry" if HAVE_SYS_UBOOT_START
+       help
+         If TEXT_BASE differs from the start of execution, this sets the
+         address in memory that U-Boot will start execution from initially.
+
+config HAVE_SYS_MONITOR_BASE
+       bool
+       depends on ARC || MIPS || M68K || NIOS2 || PPC || XTENSA || X86 \
+               || ENV_IS_IN_FLASH || MTD_NOR_FLASH
+       depends on !EFI_APP
        default y
+
+config SYS_MONITOR_BASE
+       depends on HAVE_SYS_MONITOR_BASE
+       hex "Physical start address of boot monitor code"
+       default TEXT_BASE
+       help
+         The physical start address of boot monitor code (which is the same as
+         CONFIG_TEXT_BASE when linking) and the same as CFG_SYS_FLASH_BASE
+         when booting from flash.
+
+config SPL_SYS_MONITOR_BASE
+       depends on MPC85xx && SPL && HAVE_SYS_MONITOR_BASE
+       hex "Physical start address of SPL monitor code"
+       default SPL_TEXT_BASE
+
+config TPL_SYS_MONITOR_BASE
+       depends on MPC85xx && TPL && HAVE_SYS_MONITOR_BASE
+       hex "Physical start address of TPL monitor code"
+
+config DYNAMIC_SYS_CLK_FREQ
+       bool "Determine CPU clock frequency at run-time"
        help
-         Enable FDT memory map syncup before OS boot. This feature can be
-         used for booting OS with different memory setup where the part of
-         the memory location should be used for different purpose.
+         Implement a get_board_sys_clk function that will determine the CPU
+         clock frequency at run time, rather than define it statically.
 
-endmenu                # Boot images
+config SYS_CLK_FREQ
+       depends on !DYNAMIC_SYS_CLK_FREQ
+       int "CPU clock frequency"
+       default 125000000 if ARCH_LS1012A
+       default 100000000 if ARCH_P2020 || ARCH_T1024 || ARCH_T1042 || \
+                            ARCH_LS1021A || FSL_LSCH2 || FSL_LSCH3
+       default 66666666 if ARCH_P1010 || ARCH_P1020 || ARCH_T4240
+       default 66660000 if ARCH_T2080
+       default 33333333 if RCAR_GEN3
+       default 24000000 if ARCH_EXYNOS
+       default 20000000 if RCAR_GEN2
+       default 0
+       help
+         A static value for the CPU frequency.  Note that if not required
+         for a given SoC, this can be left at 0.
 
 source "api/Kconfig"
 
+endmenu                # General setup
+
+source "boot/Kconfig"
+
 source "common/Kconfig"
 
 source "cmd/Kconfig"
@@ -633,3 +740,5 @@ source "fs/Kconfig"
 source "lib/Kconfig"
 
 source "test/Kconfig"
+
+source "tools/Kconfig"