From c1c3fe23070ac924e65208abbf8d2396bcc08008 Mon Sep 17 00:00:00 2001
From: Simon Glass <sjg@chromium.org>
Date: Thu, 3 Aug 2017 12:21:59 -0600
Subject: [PATCH] env: Convert CONFIG_ENV_IS_IN... to a choice

At present we support multiple environment drivers but there is not way to
select between them at run time. Also settings related to the position and
size of the environment area are global (i.e. apply to all locations).

Until these limitations are removed we cannot really support more than one
environment location. Adjust the location to be a choice so that only one
can be selected. By default the environment is 'nowhere', meaning that the
environment exists only in memory and cannot be saved.

Also expand the help for the 'nowhere' option and move it to the top since
it is the default.

Signed-off-by: Simon Glass <sjg@chromium.org>
[trini: Move all of the imply logic to default X if Y so it works again]
Signed-off-by: Tom Rini <trini@konsulko.com>
---
 arch/arm/Kconfig                     |  2 --
 arch/arm/mach-exynos/Kconfig         |  1 -
 arch/arm/mach-imx/mx6/Kconfig        |  1 -
 arch/arm/mach-imx/mx7/Kconfig        |  1 -
 arch/arm/mach-integrator/Kconfig     |  2 --
 arch/arm/mach-mvebu/Kconfig          |  1 -
 arch/arm/mach-sunxi/Kconfig          |  6 ----
 arch/arm/mach-tegra/Kconfig          |  3 --
 arch/m68k/Kconfig                    |  8 -----
 arch/mips/Kconfig                    |  5 ---
 arch/powerpc/Kconfig                 |  1 -
 arch/powerpc/cpu/mpc83xx/Kconfig     |  6 ----
 arch/powerpc/cpu/mpc85xx/Kconfig     |  4 ---
 arch/powerpc/cpu/mpc86xx/Kconfig     |  1 -
 arch/sh/Kconfig                      |  3 --
 arch/x86/cpu/baytrail/Kconfig        |  1 -
 arch/x86/cpu/broadwell/Kconfig       |  1 -
 arch/x86/cpu/coreboot/Kconfig        |  1 -
 arch/x86/cpu/ivybridge/Kconfig       |  1 -
 arch/x86/cpu/qemu/Kconfig            |  1 -
 arch/x86/cpu/quark/Kconfig           |  1 -
 arch/x86/cpu/queensbay/Kconfig       |  1 -
 board/ti/common/Kconfig              |  1 -
 configs/boston32r2_defconfig         |  1 +
 configs/boston32r2el_defconfig       |  1 +
 configs/boston64r2_defconfig         |  1 +
 configs/boston64r2el_defconfig       |  1 +
 configs/edison_defconfig             |  1 +
 configs/malta64_defconfig            |  1 +
 configs/malta64el_defconfig          |  1 +
 configs/malta_defconfig              |  1 +
 configs/maltael_defconfig            |  1 +
 configs/microblaze-generic_defconfig |  1 +
 configs/qemu_mips64_defconfig        |  1 +
 configs/qemu_mips64el_defconfig      |  1 +
 configs/qemu_mips_defconfig          |  1 +
 configs/qemu_mipsel_defconfig        |  1 +
 configs/r8a7795_ulcb_defconfig       |  1 +
 configs/r8a7796_ulcb_defconfig       |  1 +
 env/Kconfig                          | 47 ++++++++++++++++++++++++----
 include/configs/edison.h             |  1 -
 include/configs/ulcb.h               |  1 -
 42 files changed, 57 insertions(+), 61 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 39b001fd53..fe653210ae 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -493,7 +493,6 @@ config ARCH_BCM283X
 	select DM_GPIO
 	select OF_CONTROL
 	imply FAT_WRITE
-	imply ENV_IS_IN_FAT
 
 config TARGET_VEXPRESS_CA15_TC2
 	bool "Support vexpress_ca15_tc2"
@@ -1039,7 +1038,6 @@ config ARCH_UNIPHIER
 	select SPL_PINCTRL if SPL
 	select SUPPORT_SPL
 	imply FAT_WRITE
-	imply ENV_IS_IN_MMC
 	help
 	  Support for UniPhier SoC family developed by Socionext Inc.
 	  (formerly, System LSI Business Division of Panasonic Corporation)
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index 8b1389f30f..2fb84f9453 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -8,7 +8,6 @@ config ARCH_EXYNOS4
 	bool "Exynos4 SoC family"
 	select CPU_V7
 	select BOARD_EARLY_INIT_F
-	imply ENV_IS_IN_MMC
 	help
 	  Samsung Exynos4 SoC family are based on ARM Cortex-A9 CPU. There
 	  are multiple SoCs in this family including Exynos4210, Exynos4412,
diff --git a/arch/arm/mach-imx/mx6/Kconfig b/arch/arm/mach-imx/mx6/Kconfig
index 9bae748c67..6461c88b17 100644
--- a/arch/arm/mach-imx/mx6/Kconfig
+++ b/arch/arm/mach-imx/mx6/Kconfig
@@ -30,7 +30,6 @@ config MX6SL
 config MX6SX
 	select ROM_UNIFIED_SECTIONS
 	bool
-	imply ENV_IS_IN_MMC
 
 config MX6SLL
 	select ROM_UNIFIED_SECTIONS
diff --git a/arch/arm/mach-imx/mx7/Kconfig b/arch/arm/mach-imx/mx7/Kconfig
index 7053697f9b..aea85265ef 100644
--- a/arch/arm/mach-imx/mx7/Kconfig
+++ b/arch/arm/mach-imx/mx7/Kconfig
@@ -13,7 +13,6 @@ config MX7D
 	select ROM_UNIFIED_SECTIONS
 	imply CMD_FUSE
 	bool
-	imply ENV_IS_IN_MMC
 
 choice
 	prompt "MX7 board select"
diff --git a/arch/arm/mach-integrator/Kconfig b/arch/arm/mach-integrator/Kconfig
index 5146e51f9c..d506ee5b39 100644
--- a/arch/arm/mach-integrator/Kconfig
+++ b/arch/arm/mach-integrator/Kconfig
@@ -11,13 +11,11 @@ config ARCH_INTEGRATOR_AP
 config ARCH_INTEGRATOR_CP
 	bool "Support Integrator/CP platform"
 	select ARCH_CINTEGRATOR
-	imply ENV_IS_IN_FLASH
 
 endchoice
 
 config ARCH_CINTEGRATOR
 	bool
-	imply ENV_IS_IN_FLASH
 
 choice
 	prompt "Integrator core module select"
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index 1b12b33060..01d700bf2e 100644
--- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig
@@ -32,7 +32,6 @@ config ARMADA_38X
 config ARMADA_XP
 	bool
 	select ARMADA_32BIT
-	imply ENV_IS_IN_SPI_FLASH
 
 # ARMv8 SoCs...
 config ARMADA_3700
diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
index 386befb4e7..2cd7bae078 100644
--- a/arch/arm/mach-sunxi/Kconfig
+++ b/arch/arm/mach-sunxi/Kconfig
@@ -62,7 +62,6 @@ config MACH_SUNXI_H3_H5
 	select SUNXI_DRAM_DW_32BIT
 	select SUNXI_GEN_SUN6I
 	select SUPPORT_SPL
-	imply ENV_IS_IN_MMC
 
 choice
 	prompt "Sunxi SoC Variant"
@@ -74,7 +73,6 @@ config MACH_SUN4I
 	select ARM_CORTEX_CPU_IS_UP
 	select SUNXI_GEN_SUN4I
 	select SUPPORT_SPL
-	imply ENV_IS_IN_MMC
 
 config MACH_SUN5I
 	bool "sun5i (Allwinner A13)"
@@ -92,7 +90,6 @@ config MACH_SUN6I
 	select SUNXI_GEN_SUN6I
 	select SUPPORT_SPL
 	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
-	imply ENV_IS_IN_MMC
 
 config MACH_SUN7I
 	bool "sun7i (Allwinner A20)"
@@ -103,7 +100,6 @@ config MACH_SUN7I
 	select SUNXI_GEN_SUN4I
 	select SUPPORT_SPL
 	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
-	imply ENV_IS_IN_MMC
 
 config MACH_SUN8I_A23
 	bool "sun8i (Allwinner A23)"
@@ -114,7 +110,6 @@ config MACH_SUN8I_A23
 	select SUNXI_GEN_SUN6I
 	select SUPPORT_SPL
 	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
-	imply ENV_IS_IN_MMC
 
 config MACH_SUN8I_A33
 	bool "sun8i (Allwinner A33)"
@@ -140,7 +135,6 @@ config MACH_SUN8I_H3
 	select ARCH_SUPPORT_PSCI
 	select MACH_SUNXI_H3_H5
 	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
-	imply ENV_IS_IN_MMC
 
 config MACH_SUN8I_R40
 	bool "sun8i (Allwinner R40)"
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index 58085dc0a3..51e50907d2 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -60,7 +60,6 @@ config TEGRA_ARMV8_COMMON
 	bool "Tegra 64-bit common options"
 	select ARM64
 	select TEGRA_COMMON
-	imply ENV_IS_IN_MMC
 
 choice
 	prompt "Tegra SoC select"
@@ -78,7 +77,6 @@ config TEGRA30
 	select ARM_ERRATA_743622
 	select ARM_ERRATA_751472
 	select TEGRA_ARMV7_COMMON
-	imply ENV_IS_IN_MMC
 
 config TEGRA114
 	bool "Tegra114 family"
@@ -87,7 +85,6 @@ config TEGRA114
 config TEGRA124
 	bool "Tegra124 family"
 	select TEGRA_ARMV7_COMMON
-	imply ENV_IS_IN_MMC
 	imply REGMAP
 	imply SYSCON
 
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index 88e7d6a7b6..26509b73c6 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -10,7 +10,6 @@ config MCF520x
 
 config MCF52x2
 	bool
-	imply ENV_IS_IN_FLASH
 
 config MCF523x
 	bool
@@ -23,7 +22,6 @@ config MCF5301x
 
 config MCF532x
 	bool
-	imply ENV_IS_IN_FLASH
 
 config MCF537x
 	bool
@@ -39,7 +37,6 @@ config MCF5227x
 
 config MCF547x_8x
 	bool
-	imply ENV_IS_IN_FLASH
 
 # processor type
 config M5208
@@ -73,7 +70,6 @@ config M5275
 config M5282
 	bool
 	select MCF52x2
-	imply ENV_IS_IN_FLASH
 
 config M5307
 	bool
@@ -111,12 +107,10 @@ config M52277
 config M547x
 	bool
 	select MCF547x_8x
-	imply ENV_IS_IN_FLASH
 
 config M548x
 	bool
 	select MCF547x_8x
-	imply ENV_IS_IN_FLASH
 
 choice
 	prompt "Target select"
@@ -197,12 +191,10 @@ config TARGET_M54455EVB
 config TARGET_M5475EVB
 	bool "Support M5475EVB"
 	select M547x
-	imply ENV_IS_IN_FLASH
 
 config TARGET_M5485EVB
 	bool "Support M5485EVB"
 	select M548x
-	imply ENV_IS_IN_FLASH
 
 config TARGET_AMCORE
 	bool "Support AMCORE"
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index b53206bf8e..d07b92d1b4 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -21,7 +21,6 @@ config TARGET_QEMU_MIPS
 	select SUPPORTS_CPU_MIPS64_R1
 	select SUPPORTS_CPU_MIPS64_R2
 	select ROM_EXCEPTION_VECTORS
-	imply ENV_IS_IN_FLASH
 
 config TARGET_MALTA
 	bool "Support malta"
@@ -43,7 +42,6 @@ config TARGET_MALTA
 	select SWAP_IO_SPACE
 	select MIPS_L1_CACHE_SHIFT_6
 	select ROM_EXCEPTION_VECTORS
-	imply ENV_IS_IN_FLASH
 
 config TARGET_VCT
 	bool "Support vct"
@@ -85,7 +83,6 @@ config ARCH_BMIPS
 	select CPU
 	select RAM
 	select SYSRESET
-	imply ENV_IS_NOWHERE
 
 config MACH_PIC32
 	bool "Support Microchip PIC32"
@@ -110,7 +107,6 @@ config TARGET_BOSTON
 	select SUPPORTS_CPU_MIPS64_R2
 	select SUPPORTS_CPU_MIPS64_R6
 	select ROM_EXCEPTION_VECTORS
-	imply ENV_IS_IN_FLASH
 
 config TARGET_XILFPGA
 	bool "Support Imagination Xilfpga"
@@ -200,7 +196,6 @@ config CPU_MIPS64_R2
 	bool "MIPS64 Release 2"
 	depends on SUPPORTS_CPU_MIPS64_R2
 	select 64BIT
-	imply ENV_IS_IN_FLASH
 	help
 	  Choose this option to build a kernel for release 2 through 5 of the
 	  MIPS64 architecture.
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 7ac5cbfca6..e4b3043fa2 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -28,7 +28,6 @@ config MPC86xx
 	bool "MPC86xx"
 	select SYS_FSL_DDR
 	select SYS_FSL_DDR_BE
-	imply ENV_IS_IN_FLASH
 	imply CMD_REGINFO
 
 config 8xx
diff --git a/arch/powerpc/cpu/mpc83xx/Kconfig b/arch/powerpc/cpu/mpc83xx/Kconfig
index c66d6616a4..a3779734c1 100644
--- a/arch/powerpc/cpu/mpc83xx/Kconfig
+++ b/arch/powerpc/cpu/mpc83xx/Kconfig
@@ -13,7 +13,6 @@ config TARGET_MPC8308_P1M
 
 config TARGET_SBC8349
 	bool "Support sbc8349"
-	imply ENV_IS_IN_FLASH
 
 config TARGET_VE8313
 	bool "Support ve8313"
@@ -40,7 +39,6 @@ config TARGET_MPC8323ERDB
 config TARGET_MPC832XEMDS
 	bool "Support MPC832XEMDS"
 	select BOARD_EARLY_INIT_F
-	imply ENV_IS_IN_FLASH
 
 config TARGET_MPC8349EMDS
 	bool "Support MPC8349EMDS"
@@ -52,7 +50,6 @@ config TARGET_MPC8349EMDS
 config TARGET_MPC8349ITX
 	bool "Support MPC8349ITX"
 	imply CMD_IRQ
-	imply ENV_IS_IN_FLASH
 
 config TARGET_MPC837XEMDS
 	bool "Support MPC837XEMDS"
@@ -77,13 +74,11 @@ config TARGET_SUVD3
 	bool "Support suvd3"
 	imply CMD_CRAMFS
 	imply FS_CRAMFS
-	imply ENV_IS_IN_FLASH
 
 config TARGET_TUXX1
 	bool "Support tuxx1"
 	imply CMD_CRAMFS
 	imply FS_CRAMFS
-	imply ENV_IS_IN_FLASH
 
 config TARGET_TQM834X
 	bool "Support TQM834x"
@@ -95,7 +90,6 @@ config TARGET_HRCON
 config TARGET_STRIDER
 	bool "Support strider"
 	select SYS_FSL_ERRATUM_ESDHC111
-	imply ENV_IS_IN_FLASH
 	imply CMD_PCA953X
 
 endchoice
diff --git a/arch/powerpc/cpu/mpc85xx/Kconfig b/arch/powerpc/cpu/mpc85xx/Kconfig
index ccdf103624..92187d371b 100644
--- a/arch/powerpc/cpu/mpc85xx/Kconfig
+++ b/arch/powerpc/cpu/mpc85xx/Kconfig
@@ -19,7 +19,6 @@ choice
 config TARGET_SBC8548
 	bool "Support sbc8548"
 	select ARCH_MPC8548
-	imply ENV_IS_IN_FLASH
 
 config TARGET_SOCRATES
 	bool "Support socrates"
@@ -105,7 +104,6 @@ config TARGET_MPC8544DS
 config TARGET_MPC8548CDS
 	bool "Support MPC8548CDS"
 	select ARCH_MPC8548
-	imply ENV_IS_IN_FLASH
 
 config TARGET_MPC8555CDS
 	bool "Support MPC8555CDS"
@@ -565,7 +563,6 @@ config ARCH_MPC8548
 	select SYS_FSL_SEC_BE
 	select SYS_FSL_SEC_COMPAT_2
 	select SYS_PPC_E500_USE_DEBUG_TLB
-	imply ENV_IS_IN_FLASH
 	imply CMD_REGINFO
 
 config ARCH_MPC8555
@@ -616,7 +613,6 @@ config ARCH_MPC8572
 	select SYS_PPC_E500_USE_DEBUG_TLB
 	select FSL_ELBC
 	imply CMD_NAND
-	imply ENV_IS_IN_FLASH
 
 config ARCH_P1010
 	bool
diff --git a/arch/powerpc/cpu/mpc86xx/Kconfig b/arch/powerpc/cpu/mpc86xx/Kconfig
index fe56efdf55..2cc180da38 100644
--- a/arch/powerpc/cpu/mpc86xx/Kconfig
+++ b/arch/powerpc/cpu/mpc86xx/Kconfig
@@ -40,7 +40,6 @@ config ARCH_MPC8641
 	select FSL_LAW
 	select SYS_FSL_HAS_DDR1
 	select SYS_FSL_HAS_DDR2
-	imply ENV_IS_IN_FLASH
 
 config FSL_LAW
 	bool
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index fa32df02fc..d20761e66c 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -3,16 +3,13 @@ menu "SuperH architecture"
 
 config CPU_SH2
 	bool
-	imply ENV_IS_IN_FLASH
 
 config CPU_SH2A
 	bool
 	select CPU_SH2
-	imply ENV_IS_IN_FLASH
 
 config CPU_SH3
 	bool
-	imply ENV_IS_IN_FLASH
 
 config CPU_SH4
 	bool
diff --git a/arch/x86/cpu/baytrail/Kconfig b/arch/x86/cpu/baytrail/Kconfig
index 9374c121f9..75dbbc27f1 100644
--- a/arch/x86/cpu/baytrail/Kconfig
+++ b/arch/x86/cpu/baytrail/Kconfig
@@ -10,7 +10,6 @@ config INTEL_BAYTRAIL
 	select ARCH_MISC_INIT if !EFI
 	imply HAVE_INTEL_ME if !EFI
 	imply ENABLE_MRC_CACHE
-	imply ENV_IS_IN_SPI_FLASH
 	imply AHCI_PCI
 	imply ICH_SPI
 	imply INTEL_ICH6_GPIO
diff --git a/arch/x86/cpu/broadwell/Kconfig b/arch/x86/cpu/broadwell/Kconfig
index b421f18202..bc2dba2bd7 100644
--- a/arch/x86/cpu/broadwell/Kconfig
+++ b/arch/x86/cpu/broadwell/Kconfig
@@ -9,7 +9,6 @@ config INTEL_BROADWELL
 	select ARCH_EARLY_INIT_R
 	imply HAVE_INTEL_ME
 	imply ENABLE_MRC_CACHE
-	imply ENV_IS_IN_SPI_FLASH
 	imply AHCI_PCI
 	imply ICH_SPI
 	imply INTEL_BROADWELL_GPIO
diff --git a/arch/x86/cpu/coreboot/Kconfig b/arch/x86/cpu/coreboot/Kconfig
index d4e0587fc5..60eb45f9d0 100644
--- a/arch/x86/cpu/coreboot/Kconfig
+++ b/arch/x86/cpu/coreboot/Kconfig
@@ -3,7 +3,6 @@ if TARGET_COREBOOT
 config SYS_COREBOOT
 	bool
 	default y
-	imply ENV_IS_NOWHERE
 	imply AHCI_PCI
 	imply E1000
 	imply ICH_SPI
diff --git a/arch/x86/cpu/ivybridge/Kconfig b/arch/x86/cpu/ivybridge/Kconfig
index 00f99d6b11..c214ea0efe 100644
--- a/arch/x86/cpu/ivybridge/Kconfig
+++ b/arch/x86/cpu/ivybridge/Kconfig
@@ -10,7 +10,6 @@ config NORTHBRIDGE_INTEL_IVYBRIDGE
 	select CACHE_MRC_BIN if HAVE_MRC
 	imply HAVE_INTEL_ME
 	imply ENABLE_MRC_CACHE
-	imply ENV_IS_IN_SPI_FLASH
 	imply AHCI_PCI
 	imply ICH_SPI
 	imply INTEL_ICH6_GPIO
diff --git a/arch/x86/cpu/qemu/Kconfig b/arch/x86/cpu/qemu/Kconfig
index fdf5ae338e..da378128fe 100644
--- a/arch/x86/cpu/qemu/Kconfig
+++ b/arch/x86/cpu/qemu/Kconfig
@@ -7,7 +7,6 @@
 config QEMU
 	bool
 	select ARCH_EARLY_INIT_R
-	imply ENV_IS_NOWHERE
 	imply AHCI_PCI
 	imply E1000
 	imply SYS_NS16550
diff --git a/arch/x86/cpu/quark/Kconfig b/arch/x86/cpu/quark/Kconfig
index 7ec46e95ef..0ed724813d 100644
--- a/arch/x86/cpu/quark/Kconfig
+++ b/arch/x86/cpu/quark/Kconfig
@@ -10,7 +10,6 @@ config INTEL_QUARK
 	select ARCH_EARLY_INIT_R
 	select ARCH_MISC_INIT
 	imply ENABLE_MRC_CACHE
-	imply ENV_IS_IN_SPI_FLASH
 	imply ETH_DESIGNWARE
 	imply ICH_SPI
 	imply INTEL_ICH6_GPIO
diff --git a/arch/x86/cpu/queensbay/Kconfig b/arch/x86/cpu/queensbay/Kconfig
index d1b04c952a..835de85268 100644
--- a/arch/x86/cpu/queensbay/Kconfig
+++ b/arch/x86/cpu/queensbay/Kconfig
@@ -9,7 +9,6 @@ config INTEL_QUEENSBAY
 	select HAVE_FSP
 	select HAVE_CMC
 	select ARCH_EARLY_INIT_R
-	imply ENV_IS_IN_SPI_FLASH
 	imply AHCI_PCI
 	imply ICH_SPI
 	imply INTEL_ICH6_GPIO
diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig
index c81baa12be..c21eb8c2d2 100644
--- a/board/ti/common/Kconfig
+++ b/board/ti/common/Kconfig
@@ -42,4 +42,3 @@ config TI_COMMON_CMD_OPTIONS
 	imply CMD_SPI
 	imply CMD_TIME
 	imply CMD_USB if USB
-	imply ENV_IS_IN_FAT if MMC_OMAP_HS
diff --git a/configs/boston32r2_defconfig b/configs/boston32r2_defconfig
index 312924983d..48983f59a1 100644
--- a/configs/boston32r2_defconfig
+++ b/configs/boston32r2_defconfig
@@ -38,3 +38,4 @@ CONFIG_DM_PCI=y
 CONFIG_PCI_XILINX=y
 CONFIG_SYS_NS16550=y
 CONFIG_LZ4=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/boston32r2el_defconfig b/configs/boston32r2el_defconfig
index ee47e2c738..0e1cf29b43 100644
--- a/configs/boston32r2el_defconfig
+++ b/configs/boston32r2el_defconfig
@@ -39,3 +39,4 @@ CONFIG_DM_PCI=y
 CONFIG_PCI_XILINX=y
 CONFIG_SYS_NS16550=y
 CONFIG_LZ4=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/boston64r2_defconfig b/configs/boston64r2_defconfig
index a98fe97fb5..5010a0e104 100644
--- a/configs/boston64r2_defconfig
+++ b/configs/boston64r2_defconfig
@@ -39,3 +39,4 @@ CONFIG_DM_PCI=y
 CONFIG_PCI_XILINX=y
 CONFIG_SYS_NS16550=y
 CONFIG_LZ4=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/boston64r2el_defconfig b/configs/boston64r2el_defconfig
index a361447b9a..ae090bf4aa 100644
--- a/configs/boston64r2el_defconfig
+++ b/configs/boston64r2el_defconfig
@@ -40,3 +40,4 @@ CONFIG_DM_PCI=y
 CONFIG_PCI_XILINX=y
 CONFIG_SYS_NS16550=y
 CONFIG_LZ4=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/edison_defconfig b/configs/edison_defconfig
index b55cc78e04..0aa7a45a91 100644
--- a/configs/edison_defconfig
+++ b/configs/edison_defconfig
@@ -24,6 +24,7 @@ CONFIG_CMD_EXT4_WRITE=y
 CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
 CONFIG_OF_EMBED=y
+CONFIG_ENV_IS_IN_MMC=y
 CONFIG_CPU=y
 CONFIG_DFU_MMC=y
 CONFIG_DFU_RAM=y
diff --git a/configs/malta64_defconfig b/configs/malta64_defconfig
index c70c1cc6c4..9a4ef2746b 100644
--- a/configs/malta64_defconfig
+++ b/configs/malta64_defconfig
@@ -21,3 +21,4 @@ CONFIG_OF_EMBED=y
 CONFIG_MTD_NOR_FLASH=y
 CONFIG_PCI=y
 CONFIG_SYS_NS16550=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/malta64el_defconfig b/configs/malta64el_defconfig
index a05d76d005..1d076d46fa 100644
--- a/configs/malta64el_defconfig
+++ b/configs/malta64el_defconfig
@@ -22,3 +22,4 @@ CONFIG_OF_EMBED=y
 CONFIG_MTD_NOR_FLASH=y
 CONFIG_PCI=y
 CONFIG_SYS_NS16550=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/malta_defconfig b/configs/malta_defconfig
index f0a0f209d7..6c7034e11d 100644
--- a/configs/malta_defconfig
+++ b/configs/malta_defconfig
@@ -20,3 +20,4 @@ CONFIG_OF_EMBED=y
 CONFIG_MTD_NOR_FLASH=y
 CONFIG_PCI=y
 CONFIG_SYS_NS16550=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/maltael_defconfig b/configs/maltael_defconfig
index dcbd5d0cd7..c19f9256aa 100644
--- a/configs/maltael_defconfig
+++ b/configs/maltael_defconfig
@@ -21,3 +21,4 @@ CONFIG_OF_EMBED=y
 CONFIG_MTD_NOR_FLASH=y
 CONFIG_PCI=y
 CONFIG_SYS_NS16550=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/microblaze-generic_defconfig b/configs/microblaze-generic_defconfig
index 1036abec57..953801e6d0 100644
--- a/configs/microblaze-generic_defconfig
+++ b/configs/microblaze-generic_defconfig
@@ -37,6 +37,7 @@ CONFIG_CMD_UBI=y
 # CONFIG_CMD_UBIFS is not set
 CONFIG_SPL_OF_CONTROL=y
 CONFIG_OF_EMBED=y
+CONFIG_ENV_IS_IN_FLASH=y
 CONFIG_NETCONSOLE=y
 CONFIG_SPL_DM=y
 CONFIG_MTD_NOR_FLASH=y
diff --git a/configs/qemu_mips64_defconfig b/configs/qemu_mips64_defconfig
index 6835cf1c5c..4262934939 100644
--- a/configs/qemu_mips64_defconfig
+++ b/configs/qemu_mips64_defconfig
@@ -16,3 +16,4 @@ CONFIG_CMD_FAT=y
 CONFIG_MTD_NOR_FLASH=y
 CONFIG_SYS_NS16550=y
 CONFIG_LZMA=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/qemu_mips64el_defconfig b/configs/qemu_mips64el_defconfig
index 60bd6164fc..60278358a9 100644
--- a/configs/qemu_mips64el_defconfig
+++ b/configs/qemu_mips64el_defconfig
@@ -17,3 +17,4 @@ CONFIG_CMD_FAT=y
 CONFIG_MTD_NOR_FLASH=y
 CONFIG_SYS_NS16550=y
 CONFIG_LZMA=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/qemu_mips_defconfig b/configs/qemu_mips_defconfig
index c6f08b4efb..cedb9060c5 100644
--- a/configs/qemu_mips_defconfig
+++ b/configs/qemu_mips_defconfig
@@ -14,3 +14,4 @@ CONFIG_CMD_FAT=y
 CONFIG_MTD_NOR_FLASH=y
 CONFIG_SYS_NS16550=y
 CONFIG_LZMA=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/qemu_mipsel_defconfig b/configs/qemu_mipsel_defconfig
index b8c206971d..5bb84da5ae 100644
--- a/configs/qemu_mipsel_defconfig
+++ b/configs/qemu_mipsel_defconfig
@@ -15,3 +15,4 @@ CONFIG_CMD_FAT=y
 CONFIG_MTD_NOR_FLASH=y
 CONFIG_SYS_NS16550=y
 CONFIG_LZMA=y
+CONFIG_ENV_IS_IN_FLASH=y
diff --git a/configs/r8a7795_ulcb_defconfig b/configs/r8a7795_ulcb_defconfig
index 6e967f5dd8..8b6b03ba32 100644
--- a/configs/r8a7795_ulcb_defconfig
+++ b/configs/r8a7795_ulcb_defconfig
@@ -17,6 +17,7 @@ CONFIG_CMD_DHCP=y
 CONFIG_CMD_MII=y
 CONFIG_CMD_PING=y
 CONFIG_OF_CONTROL=y
+CONFIG_ENV_IS_IN_MMC=y
 CONFIG_CLK=y
 CONFIG_CLK_RENESAS=y
 CONFIG_SH_SDHI=y
diff --git a/configs/r8a7796_ulcb_defconfig b/configs/r8a7796_ulcb_defconfig
index 62ec2a5d94..bc995deea0 100644
--- a/configs/r8a7796_ulcb_defconfig
+++ b/configs/r8a7796_ulcb_defconfig
@@ -18,6 +18,7 @@ CONFIG_CMD_DHCP=y
 CONFIG_CMD_MII=y
 CONFIG_CMD_PING=y
 CONFIG_OF_CONTROL=y
+CONFIG_ENV_IS_IN_MMC=y
 CONFIG_CLK=y
 CONFIG_CLK_RENESAS=y
 CONFIG_SH_SDHI=y
diff --git a/env/Kconfig b/env/Kconfig
index c8dd65f3a5..748f534d11 100644
--- a/env/Kconfig
+++ b/env/Kconfig
@@ -1,5 +1,45 @@
 menu "Environment"
 
+choice
+	prompt "Select the location of the environment"
+	default ENV_IS_IN_MMC if ARCH_SUNXI
+	default ENV_IS_IN_FAT if ARCH_BCM283X
+	default ENV_IS_IN_MMC if ARCH_UNIPHIER
+	default ENV_IS_IN_MMC if ARCH_EXYNOS4
+	default ENV_IS_IN_MMC if MX6SX || MX7D
+	default ENV_IS_IN_FLASH if ARCH_CINTEGRATOR
+	default ENV_IS_IN_SPI_FLASH if ARMADA_XP
+	default ENV_IS_IN_MMC if TEGRA30 || TEGRA124
+	default ENV_IS_IN_MMC if TEGRA_ARMV8_COMMON
+	default ENV_IS_IN_FLASH if ARCH_INTEGRATOR_CP
+	default ENV_IS_IN_FLASH if M548x || M547x || M5282 || MCF547x_8x
+	default ENV_IS_IN_FLASH if MCF532x || MCF52x2
+	default ENV_IS_IN_FLASH if MPC86xx || MPC83xx
+	default ENV_IS_IN_FLASH if ARCH_MPC8572 || ARCH_MPC8548 || ARCH_MPC8641
+	default ENV_IS_IN_FLASH if SH && !CPU_SH4
+	default ENV_IS_IN_SPI_FLASH if INTEL_BAYTRAIL
+	default ENV_IS_IN_SPI_FLASH if INTEL_BROADWELL
+	default ENV_IS_IN_SPI_FLASH if NORTHBRIDGE_INTEL_IVYBRIDGE
+	default ENV_IS_IN_SPI_FLASH if INTEL_QUARK
+	default ENV_IS_IN_SPI_FLASH if INTEL_QUEENSBAY
+	default ENV_IS_IN_FAT if MMC_OMAP_HS && TI_COMMON_CMD_OPTIONS
+	default ENV_IS_NOWHERE
+	help
+	  At present the environment can be stored in only one place. Use this
+	  option to select the location. This is either a device (where the
+	  environemnt information is simply written to a fixed location or
+	  partition on the device) or a filesystem (where the environment
+	  information is written to a file).
+
+config ENV_IS_NOWHERE
+	bool "Environment is not stored"
+	help
+	  Define this if you don't want to or can't have an environment stored
+	  on a storage medium. In this case the environemnt 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_DATAFLASH
 	bool "Environment in dataflash"
 	depends on !CHAIN_OF_TRUST
@@ -161,7 +201,6 @@ config ENV_IS_IN_FLASH
 config ENV_IS_IN_MMC
 	bool "Environment in an MMC device"
 	depends on !CHAIN_OF_TRUST
-	default y if ARCH_SUNXI
 	help
 	  Define this if you have an MMC device which you want to use for the
 	  environment.
@@ -364,11 +403,7 @@ config ENV_IS_IN_UBI
 	  You will probably want to define these to avoid a really noisy system
 	  when storing the env in UBI.
 
-config ENV_IS_NOWHERE
-	bool "Environment is not stored"
-	help
-	  Define this if you don't want to or can't have an environment stored
-	  on a storage medium
+endchoice
 
 config ENV_FAT_INTERFACE
 	string "Name of the block device for the environment"
diff --git a/include/configs/edison.h b/include/configs/edison.h
index dfac340c2f..399fbc7d9c 100644
--- a/include/configs/edison.h
+++ b/include/configs/edison.h
@@ -42,7 +42,6 @@
 #define CONFIG_SYS_MEMTEST_END			0x01000000
 
 /* Environment */
-#define CONFIG_ENV_IS_IN_MMC
 #define CONFIG_SYS_MMC_ENV_DEV			0
 #define CONFIG_SYS_MMC_ENV_PART			0
 #define CONFIG_ENV_SIZE				(64 * 1024)
diff --git a/include/configs/ulcb.h b/include/configs/ulcb.h
index 921b9e5ec6..cce245613d 100644
--- a/include/configs/ulcb.h
+++ b/include/configs/ulcb.h
@@ -93,7 +93,6 @@ unsigned char ulcb_softspi_read(void);
 #define CONFIG_SH_SDHI_FREQ		200000000
 
 /* Environment in eMMC, at the end of 2nd "boot sector" */
-#define CONFIG_ENV_IS_IN_MMC
 #define CONFIG_ENV_OFFSET		(-CONFIG_ENV_SIZE)
 #define CONFIG_SYS_MMC_ENV_DEV		1
 #define CONFIG_SYS_MMC_ENV_PART		2
-- 
2.39.5