menu "Environment"

config ENV_SUPPORT
	def_bool y

config ENV_SOURCE_FILE
	string "Environment file to use"
	default ""
	help
	  This sets the basename to use to generate the default environment.
	  This a text file as described in doc/usage/environment.rst

	  The file must be in the board directory and have a .env extension, so
	  the resulting filename is typically
	  board/<vendor>/<board>/<CONFIG_ENV_SOURCE_FILE>.env

	  If the file is not present, an error is produced.

	  If this CONFIG is empty, U-Boot uses CONFIG SYS_BOARD as a default, if
	  the file board/<vendor>/<board>/<SYS_BOARD>.env exists. Otherwise the
	  environment is assumed to come from the ad-hoc
	  CFG_EXTRA_ENV_SETTINGS #define

config SAVEENV
	def_bool y if CMD_SAVEENV

config ENV_OVERWRITE
	bool "Enable overwriting environment"
	help
	  Use this to permit overriding of certain environmental variables
	  like Ethernet and Serial

config OVERWRITE_ETHADDR_ONCE
	bool "Enable overwriting ethaddr environment variables once"
	depends on !ENV_OVERWRITE
	help
	  Enable this to allow for the ethaddr environment variables to be
	  overwritten one time per boot, only. This allows for a default
	  to be installed in the environment, which can be changed exactly ONCE
	  by the user.

config ENV_MIN_ENTRIES
	int "Minimum number of entries in the environment hashtable"
	default 64
	help
	  Minimum number of entries in the hash table that is used internally
	  to store the environment settings.

config ENV_MAX_ENTRIES
	int "Maximumm number of entries in the environment hashtable"
	default 512
	help
	  Maximum number of entries in the hash table that is used internally
	  to store the environment settings. The default setting is supposed to
	  be generous and should work in most cases. This setting can be used
	  to tune behaviour; see lib/hashtable.c for details.

config ENV_IS_NOWHERE
	bool "Environment is not stored"
	default y if !ENV_IS_IN_EEPROM && !ENV_IS_IN_EXT4 && \
		     !ENV_IS_IN_FAT && !ENV_IS_IN_FLASH && \
		     !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \
		     !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \
		     !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \
		     !ENV_IS_IN_UBI
	help
	  Define this if you don't want to or can't have an environment stored
	  on a storage medium. In this case the environment will still exist
	  while U-Boot is running, but once U-Boot exits it will not be
	  stored. U-Boot will therefore always start up with a default
	  environment.

config ENV_IS_IN_EEPROM
	bool "Environment in EEPROM"
	depends on !CHAIN_OF_TRUST
	help
	  Use this if you have an EEPROM or similar serial access
	  device and a driver for it.

	  - CONFIG_ENV_OFFSET:
	  - CONFIG_ENV_SIZE:

	  These two #defines specify the offset and size of the
	  environment area within the total memory of your EEPROM.

	  Note that we consider the length of the address field to
	  still be one byte because the extra address bits are hidden
	  in the chip address.

	  EEPROM which holds the environment, is reached over
	  a pca9547 i2c mux with address 0x70, channel 3.

config ENV_IS_IN_FAT
	bool "Environment is in a FAT filesystem"
	depends on !CHAIN_OF_TRUST
	default y if ARCH_BCM283X
	default y if ARCH_SUNXI && MMC
	default y if MMC_OMAP_HS && TI_COMMON_CMD_OPTIONS
	select FS_FAT
	select FAT_WRITE
	help
	  Define this if you want to use the FAT file system for the environment.

config ENV_IS_IN_EXT4
	bool "Environment is in a EXT4 filesystem"
	depends on !CHAIN_OF_TRUST
	select FS_EXT4
	select EXT4_WRITE
	help
	  Define this if you want to use the EXT4 file system for the environment.

config ENV_IS_IN_FLASH
	bool "Environment in flash memory"
	depends on !CHAIN_OF_TRUST
	default y if ARCH_CINTEGRATOR
	default y if ARCH_INTEGRATOR_CP
	default y if M548x || M547x || M5282
	default y if MCF532x || MCF52x2
	default y if MPC86xx || MPC83xx
	default y if ARCH_MPC8548
	default y if SH && !CPU_SH4
	help
	  Define this if you have a flash device which you want to use for the
	  environment.

	  a) The environment occupies one whole flash sector, which is
	   "embedded" in the text segment with the U-Boot code. This
	   happens usually with "bottom boot sector" or "top boot
	   sector" type flash chips, which have several smaller
	   sectors at the start or the end. For instance, such a
	   layout can have sector sizes of 8, 2x4, 16, Nx32 kB. In
	   such a case you would place the environment in one of the
	   4 kB sectors - with U-Boot code before and after it. With
	   "top boot sector" type flash chips, you would put the
	   environment in one of the last sectors, leaving a gap
	   between U-Boot and the environment.

	  CONFIG_ENV_OFFSET:

	   Offset of environment data (variable area) to the
	   beginning of flash memory; for instance, with bottom boot
	   type flash chips the second sector can be used: the offset
	   for this sector is given here.

	   CONFIG_ENV_OFFSET is used relative to CFG_SYS_FLASH_BASE.

	  CONFIG_ENV_ADDR:

	   This is just another way to specify the start address of
	   the flash sector containing the environment (instead of
	   CONFIG_ENV_OFFSET).

	  CONFIG_ENV_SECT_SIZE:

	   Size of the sector containing the environment.


	  b) Sometimes flash chips have few, equal sized, BIG sectors.
	   In such a case you don't want to spend a whole sector for
	   the environment.

	  CONFIG_ENV_SIZE:

	   If you use this in combination with CONFIG_ENV_IS_IN_FLASH
	   and CONFIG_ENV_SECT_SIZE, you can specify to use only a part
	   of this flash sector for the environment. This saves
	   memory for the RAM copy of the environment.

	   It may also save flash memory if you decide to use this
	   when your environment is "embedded" within U-Boot code,
	   since then the remainder of the flash sector could be used
	   for U-Boot code. It should be pointed out that this is
	   STRONGLY DISCOURAGED from a robustness point of view:
	   updating the environment in flash makes it always
	   necessary to erase the WHOLE sector. If something goes
	   wrong before the contents has been restored from a copy in
	   RAM, your target system will be dead.

	  CONFIG_ENV_ADDR_REDUND

	   These settings describe a second storage area used to hold
	   a redundant copy of the environment data, so that there is
	   a valid backup copy in case there is a power failure during
	   a "saveenv" operation.

	  BE CAREFUL! Any changes to the flash layout, and some changes to the
	  source code will make it necessary to adapt <board>/u-boot.lds*
	  accordingly!

config ENV_IS_IN_MMC
	bool "Environment in an MMC device"
	depends on !CHAIN_OF_TRUST
	depends on MMC
	default y if ARCH_EXYNOS4
	default y if MX6SX || MX7D
	default y if TEGRA30 || TEGRA124
	default y if TEGRA_ARMV8_COMMON
	help
	  Define this if you have an MMC device which you want to use for the
	  environment.

	  CONFIG_SYS_MMC_ENV_DEV:

	  Specifies which MMC device the environment is stored in.

	  CONFIG_SYS_MMC_ENV_PART (optional):

	  Specifies which MMC partition the environment is stored in. If not
	  set, defaults to partition 0, the user area. Common values might be
	  1 (first MMC boot partition), 2 (second MMC boot partition).

	  CONFIG_ENV_OFFSET:
	  CONFIG_ENV_SIZE:

	  These two #defines specify the offset and size of the environment
	  area within the specified MMC device.

	  If offset is positive (the usual case), it is treated as relative to
	  the start of the MMC partition. If offset is negative, it is treated
	  as relative to the end of the MMC partition. This can be useful if
	  your board may be fitted with different MMC devices, which have
	  different sizes for the MMC partitions, and you always want the
	  environment placed at the very end of the partition, to leave the
	  maximum possible space before it, to store other data.

	  These two values are in units of bytes, but must be aligned to an
	  MMC sector boundary.

	  CONFIG_ENV_OFFSET_REDUND (optional):

	  Specifies a second storage area, of CONFIG_ENV_SIZE size, used to
	  hold a redundant copy of the environment data. This provides a
	  valid backup copy in case the other copy is corrupted, e.g. due
	  to a power failure during a "saveenv" operation.

	  This value may also be positive or negative; this is handled in the
	  same way as CONFIG_ENV_OFFSET.

	  In case CONFIG_SYS_MMC_ENV_PART is 1 (i.e. environment in eMMC boot
	  partition) then setting CONFIG_ENV_OFFSET_REDUND to the same value
	  as CONFIG_ENV_OFFSET makes use of the second eMMC boot partition for
	  the redundant environment copy.

	  This value is also in units of bytes, but must also be aligned to
	  an MMC sector boundary.

config ENV_IS_IN_NAND
	bool "Environment in a NAND device"
	depends on !CHAIN_OF_TRUST
	help
	  Define this if you have a NAND device which you want to use for the
	  environment.

	  - CONFIG_ENV_OFFSET:
	  - CONFIG_ENV_SIZE:

	  These two #defines specify the offset and size of the environment
	  area within the first NAND device.  CONFIG_ENV_OFFSET must be
	  aligned to an erase block boundary.

	  - CONFIG_ENV_OFFSET_REDUND (optional):

	  This setting describes a second storage area of CONFIG_ENV_SIZE
	  size used to hold a redundant copy of the environment data, so
	  that there is a valid backup copy in case there is a power failure
	  during a "saveenv" operation.	 CONFIG_ENV_OFFSET_REDUND must be
	  aligned to an erase block boundary.

	  - CONFIG_ENV_OFFSET_OOB (optional):

	  Enables support for dynamically retrieving the offset of the
	  environment from block zero's out-of-band data.  The
	  "nand env.oob" command can be used to record this offset.
	  Currently, CONFIG_ENV_OFFSET_REDUND is not supported when
	  using CONFIG_ENV_OFFSET_OOB.

config ENV_RANGE
	hex "Length of the region in which the environment can be written"
	depends on ENV_IS_IN_NAND
	range ENV_SIZE 0x7fffffff
	default ENV_SIZE
	help
	  This should be a multiple of the NAND device's block size.
	  Specifying a range with more erase blocks than are needed to hold
	  CONFIG_ENV_SIZE allows bad blocks within the range to be avoided.

config ENV_IS_IN_NVRAM
	bool "Environment in a non-volatile RAM"
	depends on !CHAIN_OF_TRUST
	help
	  Define this if you have some non-volatile memory device
	  (NVRAM, battery buffered SRAM) which you want to use for the
	  environment.

	  - CONFIG_ENV_ADDR:
	  - CONFIG_ENV_SIZE:

	  These two #defines are used to determine the memory area you
	  want to use for environment. It is assumed that this memory
	  can just be read and written to, without any special
	  provision.

config ENV_IS_IN_ONENAND
	bool "Environment is in OneNAND"
	depends on !CHAIN_OF_TRUST
	help
	  Define this if you want to put your local device's environment in
	  OneNAND.

	  - CONFIG_ENV_ADDR:
	  - CONFIG_ENV_SIZE:

	  These two #defines are used to determine the device range you
	  want to use for environment. It is assumed that this memory
	  can just be read and written to, without any special
	  provision.

config ENV_IS_IN_REMOTE
	bool "Environment is in remote memory space"
	depends on !CHAIN_OF_TRUST
	help
	  Define this if you have a remote memory space which you
	  want to use for the local device's environment.

	  - CONFIG_ENV_ADDR:
	  - CONFIG_ENV_SIZE:

	  These two #defines specify the address and size of the
	  environment area within the remote memory space. The
	  local device can get the environment from remote memory
	  space by SRIO or PCIE links.

config ENV_IS_IN_SPI_FLASH
	bool "Environment is in SPI flash"
	depends on !CHAIN_OF_TRUST && SPI
	default y if ARMADA_XP
	default y if INTEL_BAYTRAIL
	default y if INTEL_BRASWELL
	default y if INTEL_BROADWELL
	default y if NORTHBRIDGE_INTEL_IVYBRIDGE
	default y if INTEL_QUARK
	default y if INTEL_QUEENSBAY
	default y if ARCH_SUNXI
	help
	  Define this if you have a SPI Flash memory device which you
	  want to use for the environment.

	  - CONFIG_ENV_OFFSET:
	  - CONFIG_ENV_SIZE:

	  These two #defines specify the offset and size of the
	  environment area within the SPI Flash. CONFIG_ENV_OFFSET must be
	  aligned to an erase sector boundary.

	  - CONFIG_ENV_SECT_SIZE:

	  Define the SPI flash's sector size.

	  - CONFIG_ENV_OFFSET_REDUND (optional):

	  This setting describes a second storage area of CONFIG_ENV_SIZE
	  size used to hold a redundant copy of the environment data, so
	  that there is a valid backup copy in case there is a power failure
	  during a "saveenv" operation. CONFIG_ENV_OFFSET_REDUND must be
	  aligned to an erase sector boundary.

config ENV_SECT_SIZE_AUTO
	bool "Use automatically detected sector size"
	depends on ENV_IS_IN_SPI_FLASH
	help
	  Some boards exist in multiple variants, with different
	  flashes having different sector sizes. In such cases, you
	  can select this option to make U-Boot use the actual sector
	  size when figuring out how much to erase, which can thus be
	  more efficient on the flashes with smaller erase size. Since
	  the environment must always be aligned on a sector boundary,
	  CONFIG_ENV_OFFSET must be aligned to the largest of the
	  different sector sizes, and CONFIG_ENV_SECT_SIZE should be
	  set to that value.

config ENV_SPI_BUS
	int "Value of SPI flash bus for environment"
	depends on ENV_IS_IN_SPI_FLASH
	default SF_DEFAULT_BUS
	help
	  Value the SPI bus and chip select for environment.

config ENV_SPI_CS
	int "Value of SPI flash chip select for environment"
	depends on ENV_IS_IN_SPI_FLASH
	default SF_DEFAULT_CS
	help
	  Value of the SPI chip select for environment.

config ENV_SPI_MAX_HZ
	int "Value of SPI flash max frequency for environment"
	depends on ENV_IS_IN_SPI_FLASH
	default SF_DEFAULT_SPEED
	help
	  Value of the SPI max work clock for environment.

config ENV_SPI_MODE
	hex "Value of SPI flash work mode for environment"
	depends on ENV_IS_IN_SPI_FLASH
	default SF_DEFAULT_MODE
	help
	  Value of the SPI work mode for environment.
	  See include/spi.h for value.

config ENV_SPI_EARLY
	bool "Access Environment in SPI flashes before relocation"
	depends on ENV_IS_IN_SPI_FLASH
	help
	  Enable this if you want to use Environment in SPI flash
	  before relocation. Call env_init() and than you can use
	  env_get_f() for accessing Environment variables.

config ENV_IS_IN_UBI
	bool "Environment in a UBI volume"
	depends on !CHAIN_OF_TRUST
	depends on MTD_UBI
	depends on CMD_UBI
	help
	  Define this if you have an UBI volume that you want to use for the
	  environment.  This has the benefit of wear-leveling the environment
	  accesses, which is important on NAND.

	  - CONFIG_ENV_UBI_PART:

	  Define this to a string that is the mtd partition containing the UBI.

	  - CONFIG_ENV_UBI_VOLUME:

	  Define this to the name of the volume that you want to store the
	  environment in.

	  - CONFIG_ENV_UBI_VOLUME_REDUND:

	  Define this to the name of another volume to store a second copy of
	  the environment in.  This will enable redundant environments in UBI.
	  It is assumed that both volumes are in the same MTD partition.

config SYS_REDUNDAND_ENVIRONMENT
	bool "Enable redundant environment support"
	help
	  Normally, the environemt is stored in a single location.  By
	  selecting this option, you can then define where to hold a redundant
	  copy of the environment data, so that there is a valid backup copy in
	  case there is a power failure during a "saveenv" operation.
	  Also this config changes the binary environment structure handling
	  which is used by env import/export commands which are independent of
	  storing variables to redundant location on a non volatile device.

config ENV_FAT_INTERFACE
	string "Name of the block device for the environment"
	depends on ENV_IS_IN_FAT
	default "mmc"
	help
	  Define this to a string that is the name of the block device.

config ENV_FAT_DEVICE_AND_PART
	string "Device and partition for where to store the environemt in FAT"
	depends on ENV_IS_IN_FAT
	default "0:1" if TI_COMMON_CMD_OPTIONS
	default "0:auto" if ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL
	default ":auto" if ARCH_SUNXI
	default "0" if ARCH_AT91
	help
	  Define this to a string to specify the partition of the device. It can
	  be as following:

	    "D:P", "D:0", "D", "D:" or "D:auto" (D, P are integers. And P >= 1)
	       - "D:P": device D partition P. Error occurs if device D has no
	                partition table.
	       - "D:0": device D.
	       - "D" or "D:": device D partition 1 if device D has partition
	                      table, or the whole device D if has no partition
	                      table.
	       - "D:auto": first partition in device D with bootable flag set.
	                   If none, first valid partition in device D. If no
	                   partition table then means device D.

	  If ENV_FAT_INTERFACE is set to "mmc" then device 'D' can be omitted,
	  leaving the string starting with a colon, and the boot device will
	  be used.

config ENV_FAT_FILE
	string "Name of the FAT file to use for the environment"
	depends on ENV_IS_IN_FAT
	default "uboot.env"
	help
	  It's a string of the FAT file name. This file use to store the
	  environment.

config ENV_FAT_FILE_REDUND
	string "Name of the FAT file to use for the environment"
	depends on ENV_IS_IN_FAT && SYS_REDUNDAND_ENVIRONMENT
	default "uboot-redund.env"
	help
	  It's a string of the FAT file name. This file use to store the
	  redundant environment.

config ENV_EXT4_INTERFACE
	string "Name of the block device for the environment"
	depends on ENV_IS_IN_EXT4
	help
	  Define this to a string that is the name of the block device.

config ENV_EXT4_DEVICE_AND_PART
	string "Device and partition for where to store the environemt in EXT4"
	depends on ENV_IS_IN_EXT4
	help
	  Define this to a string to specify the partition of the device. It can
	  be as following:

	    "D:P", "D:0", "D", "D:" or "D:auto" (D, P are integers. And P >= 1)
	       - "D:P": device D partition P. Error occurs if device D has no
	                partition table.
	       - "D:0": device D.
	       - "D" or "D:": device D partition 1 if device D has partition
	                      table, or the whole device D if has no partition
	                      table.
	       - "D:auto": first partition in device D with bootable flag set.
	                   If none, first valid partition in device D. If no
	                   partition table then means device D.

	  If ENV_EXT4_INTERFACE is set to "mmc" then device 'D' can be omitted,
	  leaving the string starting with a colon, and the boot device will
	  be used.

config ENV_EXT4_FILE
	string "Name of the EXT4 file to use for the environment"
	depends on ENV_IS_IN_EXT4
	default "/uboot.env"
	help
	  It's a string of the EXT4 file name. This file use to store the
	  environment (explicit path to the file)

config ENV_ADDR
	hex "Environment address"
	depends on ENV_IS_IN_FLASH || ENV_IS_IN_NVRAM || ENV_IS_IN_ONENAND || \
		     ENV_IS_IN_REMOTE || ENV_IS_IN_SPI_FLASH
	default 0x0 if ENV_IS_IN_SPI_FLASH
	help
	  Offset from the start of the device (or partition)

config ENV_ADDR_REDUND
	hex "Redundant environment address"
	depends on ENV_IS_IN_FLASH && SYS_REDUNDAND_ENVIRONMENT
	help
	  Offset from the start of the device (or partition) of the redundant
	  environment location.

config ENV_OFFSET
	hex "Environment offset"
	depends on ENV_IS_IN_EEPROM || ENV_IS_IN_MMC || ENV_IS_IN_NAND || \
		    ENV_IS_IN_SPI_FLASH
	default 0x3f8000 if ARCH_ROCKCHIP && ENV_IS_IN_MMC
	default 0x140000 if ARCH_ROCKCHIP && ENV_IS_IN_SPI_FLASH
	default 0xF0000 if ARCH_SUNXI
	default 0xE0000 if ARCH_ZYNQ
	default 0x1E00000 if ARCH_ZYNQMP
	default 0x7F40000 if ARCH_VERSAL || ARCH_VERSAL_NET
	default 0 if ARC
	default 0x140000 if ARCH_AT91
	default 0x260000 if ARCH_OMAP2PLUS
	default 0x1080000 if MICROBLAZE && ENV_IS_IN_SPI_FLASH
	help
	  Offset from the start of the device (or partition)

config ENV_OFFSET_REDUND
	hex "Redundant environment offset"
	depends on (ENV_IS_IN_EEPROM || ENV_IS_IN_MMC || ENV_IS_IN_NAND || \
		    ENV_IS_IN_SPI_FLASH) && SYS_REDUNDAND_ENVIRONMENT
	default 0x10C0000 if MICROBLAZE
	default 0
	help
	  Offset from the start of the device (or partition) of the redundant
	  environment location.

config ENV_SIZE
	hex "Environment Size"
	default 0x40000 if ENV_IS_IN_SPI_FLASH && ARCH_ZYNQMP
	default 0x20000 if ARCH_ZYNQ || ARCH_OMAP2PLUS || ARCH_AT91
	default 0x10000 if ARCH_SUNXI
	default 0x8000 if ARCH_ROCKCHIP && ENV_IS_IN_MMC
	default 0x2000 if ARCH_ROCKCHIP && ENV_IS_IN_SPI_FLASH
	default 0x8000 if ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET
	default 0x4000 if ARC
	default 0x1f000
	help
	  Size of the environment storage area

config ENV_SECT_SIZE
	hex "Environment Sector-Size"
	depends on ENV_IS_IN_FLASH || ENV_IS_IN_SPI_FLASH
	default 0x2000 if ARCH_ROCKCHIP
	default 0x40000 if ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET
	default 0x20000 if ARCH_ZYNQ || ARCH_OMAP2PLUS || ARCH_AT91
	default 0x20000 if MICROBLAZE && ENV_IS_IN_SPI_FLASH
	default 0x10000 if ARCH_SUNXI && ENV_IS_IN_SPI_FLASH
	help
	  Size of the sector containing the environment.

config ENV_UBI_PART
	string "UBI partition name"
	depends on ENV_IS_IN_UBI
	help
	  MTD partition containing the UBI device

config ENV_UBI_VOLUME
	string "UBI volume name"
	depends on ENV_IS_IN_UBI
	help
	  Name of the volume that you want to store the environment in.

config ENV_UBI_VOLUME_REDUND
	string "UBI redundant volume name"
	depends on ENV_IS_IN_UBI && SYS_REDUNDAND_ENVIRONMENT
	help
	  Name of the redundant volume that you want to store the environment in.

config ENV_UBI_VID_OFFSET
	int "ubi environment VID offset"
	depends on ENV_IS_IN_UBI
	default 0
	help
	  UBI VID offset for environment. If 0, no custom VID offset is used.

config SYS_RELOC_GD_ENV_ADDR
	bool "Relocate gd->env_addr"
	help
	  Relocate the early env_addr pointer so we know it is not inside
	  the binary. Some systems need this and for the rest, it doesn't hurt.

config SYS_MMC_ENV_DEV
	int "mmc device number"
	depends on ENV_IS_IN_MMC || ENV_IS_IN_FAT || SYS_LS_PPA_FW_IN_MMC || \
		CMD_MVEBU_BUBT || FMAN_ENET || QE || PHY_CORTINA
	default 0
	help
	  MMC device number on the platform where the environment is stored.

config SYS_MMC_ENV_PART
	int "mmc partition number"
	depends on ENV_IS_IN_MMC || ENV_IS_IN_FAT
	default 0
	help
	  MMC hardware partition device number on the platform where the
	  environment is stored.  Note that this is not related to any software
	  defined partition table but instead if we are in the user area, which is
	  partition 0 or the first boot partition, which is 1 or some other defined
	  partition.

config USE_DEFAULT_ENV_FILE
	bool "Create default environment from file"
	help
	  Normally, the default environment is automatically generated
	  based on the settings of various CONFIG_* options, as well
	  as the CFG_EXTRA_ENV_SETTINGS. By selecting this option,
	  you can instead define the entire default environment in an
	  external file.

config DEFAULT_ENV_FILE
	string "Path to default environment file"
	depends on USE_DEFAULT_ENV_FILE
	help
	  The path containing the default environment. The format is
	  the same as accepted by the mkenvimage tool: lines
	  containing key=value pairs, blank lines and lines beginning
	  with # are ignored.

config ENV_VARS_UBOOT_RUNTIME_CONFIG
	bool "Add run-time information to the environment"
	help
	  Enable this in order to add variables describing certain
	  run-time determined information about the hardware to the
	  environment.  These will be named board_name, board_rev.

config DELAY_ENVIRONMENT
	bool "Delay environment loading"
	depends on !OF_CONTROL
	help
	  Enable this to inhibit loading the environment during board
	  initialization. This can address the security risk of untrusted data
	  being used during boot. Normally the environment is loaded when the
	  board is initialised so that it is available to U-Boot. This inhibits
	  that so that the environment is not available until explicitly loaded
	  later by U-Boot code. With CONFIG_OF_CONTROL this is instead
	  controlled by the value of /config/load-environment.

config ENV_IMPORT_FDT
	bool "Amend environment by FDT properties"
	depends on OF_CONTROL
	help
	  If selected, after the environment has been loaded from its
	  persistent location, the "env_fdt_path" variable is looked
	  up and used as a path to a node in the control DTB. The
	  property/value pairs in that node is then used to update the
	  run-time environment. This can be useful to use the same
	  U-Boot binary with different board variants.

config ENV_FDT_PATH
	string "Default value for env_fdt_path variable"
	depends on ENV_IMPORT_FDT
	default "/config/environment"
	help
	  The initial value of the env_fdt_path variable.

config ENV_APPEND
	bool "Always append the environment with new data"
	help
	  If defined, the environment hash table is only ever appended with new
	  data, but the existing hash table can never be dropped and reloaded
	  with newly imported data. This may be used in combination with static
	  flags to e.g. to protect variables which must not be modified.

config ENV_WRITEABLE_LIST
	bool "Permit write access only to listed variables"
	help
	  If defined, only environment variables which explicitly set the 'w'
	  writeable flag can be written and modified at runtime. No variables
	  can be otherwise created, written or imported into the environment.

config ENV_ACCESS_IGNORE_FORCE
	bool "Block forced environment operations"
	help
	  If defined, don't allow the -f switch to env set override variable
	  access flags.

if SPL_ENV_SUPPORT
config SPL_ENV_IS_NOWHERE
	bool "SPL Environment is not stored"
	default y if ENV_IS_NOWHERE
	help
	  Similar to ENV_IS_NOWHERE, used for SPL environment.

config SPL_ENV_IS_IN_MMC
	bool "SPL Environment in an MMC device"
	depends on !SPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_MMC
	default y
	help
	  Similar to ENV_IS_IN_MMC, used for SPL environment.

config SPL_ENV_IS_IN_FAT
	bool "SPL Environment is in a FAT filesystem"
	depends on !SPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_FAT
	default y
	help
	  Similar to ENV_IS_IN_FAT, used for SPL environment.

config SPL_ENV_IS_IN_EXT4
	bool "SPL Environment is in a EXT4 filesystem"
	depends on !SPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_EXT4
	default y
	help
	  Similar to ENV_IS_IN_EXT4, used for SPL environment.

config SPL_ENV_IS_IN_NAND
	bool "SPL Environment in a NAND device"
	depends on !SPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_NAND
	default y
	help
	  Similar to ENV_IS_IN_NAND, used for SPL environment.

config SPL_ENV_IS_IN_SPI_FLASH
	bool "SPL Environment is in SPI flash"
	depends on !SPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_SPI_FLASH
	default y
	help
	  Similar to ENV_IS_IN_SPI_FLASH, used for SPL environment.

config SPL_ENV_IS_IN_FLASH
	bool "SPL Environment in flash memory"
	depends on !SPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_FLASH
	default y
	help
	  Similar to ENV_IS_IN_FLASH, used for SPL environment.

endif

if TPL_ENV_SUPPORT

config TPL_ENV_IS_NOWHERE
	bool "TPL Environment is not stored"
	default y if ENV_IS_NOWHERE
	help
	  Similar to ENV_IS_NOWHERE, used for TPL environment.

config TPL_ENV_IS_IN_MMC
	bool "TPL Environment in an MMC device"
	depends on !TPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_MMC
	default y
	help
	  Similar to ENV_IS_IN_MMC, used for TPL environment.

config TPL_ENV_IS_IN_FAT
	bool "TPL Environment is in a FAT filesystem"
	depends on !TPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_FAT
	default y
	help
	  Similar to ENV_IS_IN_FAT, used for TPL environment.

config TPL_ENV_IS_IN_EXT4
	bool "TPL Environment is in a EXT4 filesystem"
	depends on !TPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_EXT4
	default y
	help
	  Similar to ENV_IS_IN_EXT4, used for TPL environment.

config TPL_ENV_IS_IN_NAND
	bool "TPL Environment in a NAND device"
	depends on !TPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_NAND
	default y
	help
	  Similar to ENV_IS_IN_NAND, used for TPL environment.

config TPL_ENV_IS_IN_SPI_FLASH
	bool "TPL Environment is in SPI flash"
	depends on !TPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_SPI_FLASH
	default y
	help
	  Similar to ENV_IS_IN_SPI_FLASH, used for TPL environment.

config TPL_ENV_IS_IN_FLASH
	bool "TPL Environment in flash memory"
	depends on !TPL_ENV_IS_NOWHERE
	depends on ENV_IS_IN_FLASH
	default y
	help
	  Similar to ENV_IS_IN_FLASH, used for TPL environment.

endif

config USE_BOOTFILE
	bool "Add a 'bootfile' environment variable"
	help
	  The "bootfile" variable is used in some cases to allow for
	  controlling what file U-Boot will attempt to load and boot.  To set
	  this, enable this option and set the value in the next question.

config BOOTFILE
	string "'bootfile' environment variable value"
	depends on USE_BOOTFILE
	help
	  The value to set the "bootfile" variable to.

config USE_ETHPRIME
	bool "Add an 'ethprime' environment variable"
	help
	  The "ethprime" variable is used in some cases to control which
	  network interface is used first.

config ETHPRIME
	string "'ethprime' environment variable value"
	depends on USE_ETHPRIME
	help
	  The value to set the "ethprime" variable to.

config USE_HOSTNAME
	bool "Set a default 'hostname' value in the environment"
	default y if X86

config HOSTNAME
	string "Value of the default 'hostname' value in the environment"
	depends on USE_HOSTNAME
	default "x86" if X86
	default "unknown"

config VERSION_VARIABLE
	bool "Add a 'ver' environment variable with the U-Boot version"
	help
	  If this variable is defined, an environment variable
	  named "ver" is created by U-Boot showing the U-Boot
	  version as printed by the "version" command.
	  Any change to this variable will be reverted at the
	  next reset.

endmenu
