#
# For a description of the syntax of this configuration file,
# see the file Documentation/kbuild/kconfig-language.txt in the
# Linux kernel source tree.
#
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"

menu "General setup"

config BROKEN
	bool
	help
	  This option cannot be enabled. It is used as dependency
	  for broken and incomplete features.

config DEPRECATED
	bool
	help
	  This option cannot be enabled.  It it used as a dependency for
	  code that relies on deprecated features that will be removed and
	  the conversion deadline has passed.

config LOCALVERSION
	string "Local version - append to U-Boot release"
	help
	  Append an extra string to the end of your U-Boot version.
	  This will show up in your boot log, for example.
	  The string you set here will be appended after the contents of
	  any files with a filename matching localversion* in your
	  object and source tree, in that order.  Your total string can
	  be a maximum of 64 characters.

config LOCALVERSION_AUTO
	bool "Automatically append version information to the version string"
	default y
	help
	  This will try to automatically determine if the current tree is a
	  release tree by looking for Git tags that belong to the current
	  top of tree revision.

	  A string of the format -gxxxxxxxx will be added to the localversion
	  if a Git-based tree is found.  The string generated by this will be
	  appended after any matching localversion* files, and after the value
	  set in CONFIG_LOCALVERSION.

	  (The actual string used here is the first eight characters produced
	  by running the command:

	    $ git rev-parse --verify HEAD

	  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"
	help
	  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
	help
	  Enabling this option will pass "--coverage" to gcc to compile
	  and link code instrumented for coverage analysis.

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"
	help
	  Define this in order to add variables describing the
	  U-Boot build configuration to the default environment.
	  These will be named arch, cpu, board, vendor, and soc.
	  Enabling this option will cause the following to be defined:
	  - CONFIG_SYS_ARCH
	  - CONFIG_SYS_CPU
	  - CONFIG_SYS_BOARD
	  - CONFIG_SYS_VENDOR
	  - CONFIG_SYS_SOC

config NR_DRAM_BANKS
	int "Number of DRAM banks"
	default 1 if ARCH_SC5XX || ARCH_SUNXI || ARCH_OWL
	default 4
	help
	  This defines the number of DRAM banks.

config SYS_BOOT_GET_CMDLINE
	bool "Enable kernel command line setup"
	help
	  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

	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.

config SYS_MALLOC_F_LEN
	hex "Size of malloc() pool before relocation"
	depends on SYS_MALLOC_F
	default 0x400 if M68K || PPC || ROCKCHIP_PX30 || ROCKCHIP_RK3036 || \
			 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"
	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"
	depends on SPL_SYS_MALLOC_F
	default 0x2800 if RCAR_GEN3
	default 0x2000 if IMX8MQ
	default SYS_MALLOC_F_LEN
	help
	  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"
	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
	help
	  This option allows certain base U-Boot options and settings
	  to be disabled or tweaked. This is for specialized
	  environments which can tolerate a "non-standard" U-Boot.
	  Use this only if you really know what you are doing.

if EXPERT
	config SYS_MALLOC_CLEAR_ON_INIT
	bool "Init with zeros the memory reserved for malloc (slow)"
	default y
	help
	  This setting is enabled by default. The reserved malloc
	  memory is initialized with zeros, so first malloc calls
	  will return the pointer to the zeroed memory. But this
	  slows the boot time.

	  It is recommended to disable it, when CONFIG_SYS_MALLOC_LEN
	  value, has more than few MiB, e.g. when uses bzip2 or bmp logo.
	  Then the boot time can be significantly reduced.
	  Warning:
	  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
	  Enable generation of debug information for tools such as mkimage.
	  This can be used for debugging purposes. With debug information
	  it is possible to set breakpoints on particular lines, single-step
	  debug through the source code, etc.

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 FDT_64BIT
	bool "64bit fdt address support"
	help
	  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"
	default "spl/boot.bin" if ARCH_AT91 && SPL_NAND_SUPPORT
	default "spl/u-boot-spl.bin"
	depends on SPL
	help
	  Select the SPL build target that shall be generated by the SPL
	  build process (default spl/u-boot-spl.bin). This image will be
	  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-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
	  CONFIG_BUILD_TARGET in the SoC / board header, this
	  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
	  Normally when linking U-Boot we will look in the board directory,
	  the CPU directory and finally the "cpu" directory of the architecture
	  for the ile "u-boot.lds" and use that as our linker.  However, in
	  some cases we need to provide a different linker script.  To do so,
	  enable this option and then provide the location under
	  CONFIG_SYS_LDSCRIPT.

config SYS_LDSCRIPT
	depends on SYS_CUSTOM_LDSCRIPT
	string "Custom ldscript location"
	help
	  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
	default 0x0 if ARCH_SC5XX
	help
	  Address in memory to use as the default safe load address.

config ERR_PTR_OFFSET
	hex
	default 0x0
	help
	  Some U-Boot pointers have redundant information, so we can use a
	  scheme where we can return either an error code or a pointer with the
	  same return value. The default implementation just casts the pointer
	  to a number, however, this may fail on platforms where the end of the
	  address range is used for valid pointers (e.g. 0xffffff00 is a valid
	  heap pointer in socfpga SPL).
	  For such platforms, this value provides an upper range of those error
	  pointer values - up to 'MAX_ERRNO' bytes below this value must be
	  unused/invalid addresses.

config PLATFORM_ELFENTRY
	string
	default "__start" if MIPS
	default "_start"

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 SYS_MEM_TOP_HIDE
	hex "Exclude some memory from U-Boot / OS information"
	default 0x0
	help
	  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 SYS_HAS_SRAM
	bool
	default y if TARGET_PIC32MZDASK
	default y if TARGET_DEVKIT8000
	default y if TARGET_TRICORDER
	help
	  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.

config SYS_SRAM_BASE
	hex
	default 0x80000000 if TARGET_PIC32MZDASK
	default 0x40200000 if TARGET_DEVKIT8000
	default 0x40200000 if TARGET_TRICORDER
	default 0x0

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
	  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 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 TEXT_BASE
	depends on HAVE_TEXT_BASE
	default 0x0 if POSITION_INDEPENDENT
	default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
	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
	default 0x96000000 if ARCH_SC5XX && SC59X_64
	default 0xB2200000 if ARCH_SC5XX && SC59X
	default 0x89200000 if ARCH_SC5XX && TARGET_SC584_EZKIT
	hex "Text Base"
	help
	  The address in memory that U-Boot will be copied and executed from
	  initially.

config HAVE_SYS_UBOOT_START
	bool "Use custom U-Boot Start"
	depends on HAVE_TEXT_BASE
	help
	  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 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
	  Implement a get_board_sys_clk function that will determine the CPU
	  clock frequency at run time, rather than define it statically.

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.

config HAS_LDR
	bool
	help
	  Enables building .ldr targets for U-Boot and SPL. This does not
	  automatically build any additional targets with make or buildman.

config LDR_CPU
	string "CPU name to be passed to LDR utility."
	depends on HAS_LDR
	help
	  Set the CPU name for the -T parameter in the LDR utility.  This is
	  generally used on processors from Analog Devices, but may be also
	  be useful for other vendors.

source "api/Kconfig"

endmenu		# General setup

source "boot/Kconfig"

source "common/Kconfig"

source "cmd/Kconfig"

source "disk/Kconfig"

source "dts/Kconfig"

source "env/Kconfig"

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "lib/Kconfig"

source "test/Kconfig"

source "tools/Kconfig"
