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
	  CONFIG_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 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.

	  - CONFIG_I2C_ENV_EEPROM_BUS
	  if you have an Environment on an EEPROM reached over
	  I2C muxes, you can define here, how to reach this
	  EEPROM. For example:

	  #define CONFIG_I2C_ENV_EEPROM_BUS	  1

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