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_DEFAULT
	def_bool 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
	select ENV_IS_NOWHERE

config ENV_IS_NOWHERE
	bool "Environment is not stored"
	help
	  Define this if you don't care whether or not an environment is stored
	  on a storage medium. In this case the environment will still exist
	  while U-Boot is running, but once U-Boot exits it may not be
	  stored. If no other ENV_IS_IN_ is defined, U-Boot will always start
	  up with the 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_MMC_USE_DT (optional):

	  These define forces the configuration by the config node in device
	  tree with partition name: "u-boot,mmc-env-partition" or with
	  offset: "u-boot,mmc-env-offset", "u-boot,mmc-env-offset-redundant".
	  CONFIG_ENV_OFFSET and CONFIG_ENV_OFFSET_REDUND are not used.

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_ENV_MMC_PARTITION
	bool "use the mmc environment partition name"
	depends on ENV_IS_IN_MMC

config ENV_MMC_PARTITION
	string "mmc environment partition name"
	depends on USE_ENV_MMC_PARTITION
	help
	  MMC partition name used to save environment variables.
	  If this variable is unset, u-boot will try to get the env partition name
	  from the device-tree's /config node.

config ENV_MMC_USE_DT
	bool "Read partition name and offset in DT"
	depends on ENV_IS_IN_MMC && OF_CONTROL
	help
	  Only use the device tree to get the environment location in MMC
	  device, with partition name or with offset.
	  The 2 defines CONFIG_ENV_OFFSET, CONFIG_ENV_OFFSET_REDUND
	  are not used as fallback.

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"
	select ENV_APPEND
	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

if VPL_ENV_SUPPORT

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

endif  # VPL_ENV_SUPPORT

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
