Move most CONFIG_HAVE_BLOCK_DEVICE to Kconfig

config_fallbacks.h has some logic that sets HAVE_BLOCK_DEVICE
based on a list of enabled options.  Moving HAVE_BLOCK_DEVICE to
Kconfig allows us to drastically shrink the logic in
config_fallbacks.h

Signed-off-by: Adam Ford <aford173@gmail.com>
[trini: Rename HAVE_BLOCK_DEVICE to CONFIG_BLOCK_DEVICE]
Signed-off-by: Tom Rini <trini@konsulko.com>
diff --git a/arch/Kconfig b/arch/Kconfig
index 5d57d6d..e599e7a 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -74,6 +74,7 @@
 	select DM_SPI
 	select DM_GPIO
 	select DM_MMC
+	select HAVE_BLOCK_DEVICE
 	select LZO
 	imply CMD_GETTIME
 	imply CMD_HASH
diff --git a/cmd/Kconfig b/cmd/Kconfig
index 4d9ef87..7368b6d 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -672,6 +672,7 @@
 	bool "GPT (GUID Partition Table) command"
 	select PARTITION_UUIDS
 	select EFI_PARTITION
+	select HAVE_BLOCK_DEVICE
 	imply RANDOM_UUID
 	help
 	  Enable the 'gpt' command to ready and write GPT style partition
@@ -819,6 +820,7 @@
 config CMD_PART
 	bool "part"
 	select PARTITION_UUIDS
+	select HAVE_BLOCK_DEVICE
 	help
 	  Read and display information about the partition table on
 	  various media.
@@ -911,6 +913,7 @@
 
 config CMD_USB
 	bool "usb"
+	select HAVE_BLOCK_DEVICE
 	help
 	  USB support.
 
diff --git a/cmd/blk_common.c b/cmd/blk_common.c
index bf2f626..643fd0b 100644
--- a/cmd/blk_common.c
+++ b/cmd/blk_common.c
@@ -12,7 +12,7 @@
 #include <common.h>
 #include <blk.h>
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 int blk_common_cmd(int argc, char * const argv[], enum if_type if_type,
 		   int *cur_devnump)
 {
diff --git a/disk/part.c b/disk/part.c
index 66b8101..e9e18a0 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -26,7 +26,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 static struct part_driver *part_driver_lookup_type(int part_type)
 {
 	struct part_driver *drv =
@@ -80,7 +80,7 @@
 }
 #endif
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 
 /* ------------------------------------------------------------------------- */
 /*
@@ -212,7 +212,7 @@
 }
 #endif
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 
 void part_init(struct blk_desc *dev_desc)
 {
@@ -298,12 +298,12 @@
 		drv->print(dev_desc);
 }
 
-#endif /* HAVE_BLOCK_DEVICE */
+#endif /* CONFIG_HAVE_BLOCK_DEVICE */
 
 int part_get_info(struct blk_desc *dev_desc, int part,
 		       disk_partition_t *info)
 {
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 	struct part_driver *drv;
 
 #if CONFIG_IS_ENABLED(PARTITION_UUIDS)
@@ -329,7 +329,7 @@
 		PRINTF("## Valid %s partition found ##\n", drv->name);
 		return 0;
 	}
-#endif /* HAVE_BLOCK_DEVICE */
+#endif /* CONFIG_HAVE_BLOCK_DEVICE */
 
 	return -1;
 }
@@ -396,7 +396,7 @@
 		goto cleanup;
 	}
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 	/*
 	 * Updates the partition table for the specified hw partition.
 	 * Does not need to be done for hwpart 0 since it is default and
diff --git a/disk/part_amiga.c b/disk/part_amiga.c
index f8dae00..1b7d915 100644
--- a/disk/part_amiga.c
+++ b/disk/part_amiga.c
@@ -10,7 +10,7 @@
 #include <ide.h>
 #include "part_amiga.h"
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 
 #undef AMIGA_DEBUG
 
diff --git a/disk/part_dos.c b/disk/part_dos.c
index 9dd086d..84e672b 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -20,7 +20,7 @@
 #include <memalign.h>
 #include "part_dos.h"
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 
 #define DOS_PART_DEFAULT_SECTOR 512
 
diff --git a/disk/part_efi.c b/disk/part_efi.c
index bea8b20..fb221ee 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -24,7 +24,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 /**
  * efi_crc32() - EFI version of crc32 function
  * @buf: buffer to calculate crc32 of
diff --git a/disk/part_iso.c b/disk/part_iso.c
index 4036b00..ef582de 100644
--- a/disk/part_iso.c
+++ b/disk/part_iso.c
@@ -10,7 +10,7 @@
 #include <asm/unaligned.h>
 #include "part_iso.h"
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 
 /* #define	ISO_PART_DEBUG */
 
diff --git a/disk/part_mac.c b/disk/part_mac.c
index e31bc90..e65930d 100644
--- a/disk/part_mac.c
+++ b/disk/part_mac.c
@@ -19,7 +19,7 @@
 #include <ide.h>
 #include "part_mac.h"
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 
 /* stdlib.h causes some compatibility problems; should fixe these! -- wd */
 #ifndef __ldiv_t_defined
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 990de72..86ec628 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -9,6 +9,7 @@
 
 config SATA
 	bool "Support SATA controllers"
+	select HAVE_BLOCK_DEVICE
 	help
 	  This enables support for SATA (Serial Advanced Technology
 	  Attachment), a serial bus standard for connecting to hard drives and
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index e2c80f2..73836ad 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -10,6 +10,11 @@
 	  be partitioned into several areas, called 'partitions' in U-Boot.
 	  A filesystem can be placed in each partition.
 
+config HAVE_BLOCK_DEVICE
+	bool "Enable Legacy Block Device"
+	help
+	  Some devices require block support whether or not DM is enabled
+
 config SPL_BLK
 	bool "Support block devices in SPL"
 	depends on SPL_DM && BLK
@@ -33,6 +38,7 @@
 
 config IDE
 	bool "Support IDE controllers"
+	select HAVE_BLOCK_DEVICE
 	help
 	  Enables support for IDE (Integrated Drive Electronics) hard drives.
 	  This allows access to raw blocks and filesystems on an IDE drive
@@ -41,6 +47,7 @@
 
 config SYSTEMACE
 	bool "Xilinx SystemACE support"
+	select HAVE_BLOCK_DEVICE
 	help
 	  Adding this option adds support for Xilinx SystemACE chips attached
 	  via some sort of local bus. The address of the chip must also be
diff --git a/drivers/block/blk_legacy.c b/drivers/block/blk_legacy.c
index 16d3bfe..ab42bf7 100644
--- a/drivers/block/blk_legacy.c
+++ b/drivers/block/blk_legacy.c
@@ -69,7 +69,7 @@
 	return drv->get_dev(devnum, descp);
 }
 
-#ifdef HAVE_BLOCK_DEVICE
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
 int blk_list_part(enum if_type if_type)
 {
 	struct blk_driver *drv;
@@ -173,7 +173,7 @@
 
 	return 0;
 }
-#endif /* HAVE_BLOCK_DEVICE */
+#endif /* CONFIG_HAVE_BLOCK_DEVICE */
 
 struct blk_desc *blk_get_devnum_by_type(enum if_type if_type, int devnum)
 {
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index d5e2816..f2d8256 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -3,6 +3,7 @@
 config MMC
 	bool "MMC/SD/SDIO card support"
 	default ARM || PPC || SANDBOX
+	select HAVE_BLOCK_DEVICE
 	help
 	  This selects MultiMediaCard, Secure Digital and Secure
 	  Digital I/O support.
diff --git a/drivers/nvme/Kconfig b/drivers/nvme/Kconfig
index cad8dbc..30974fd 100644
--- a/drivers/nvme/Kconfig
+++ b/drivers/nvme/Kconfig
@@ -7,6 +7,7 @@
 config NVME
 	bool "NVM Express device support"
 	depends on BLK && PCI
+	select HAVE_BLOCK_DEVICE
 	help
 	  This option enables support for NVM Express devices.
 	  It supports basic functions of NVMe (read/write).
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index db1606e..3c826c9 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -1,5 +1,6 @@
 config SCSI
 	bool "Support SCSI controllers"
+	select HAVE_BLOCK_DEVICE
 	help
 	  This enables support for SCSI (Small Computer System Interface),
 	  a parallel interface widely used with storage peripherals such as
diff --git a/include/config_fallbacks.h b/include/config_fallbacks.h
index 70013fe..3d68d9f 100644
--- a/include/config_fallbacks.h
+++ b/include/config_fallbacks.h
@@ -29,21 +29,6 @@
 #define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 }
 #endif
 
-/* Rather than repeat this expression each time, add a define for it */
-#if defined(CONFIG_IDE) || \
-	defined(CONFIG_SATA) || \
-	defined(CONFIG_SCSI) || \
-	defined(CONFIG_CMD_USB) || \
-	defined(CONFIG_CMD_PART) || \
-	defined(CONFIG_CMD_GPT) || \
-	defined(CONFIG_MMC) || \
-	defined(CONFIG_NVME) || \
-	defined(CONFIG_SYSTEMACE) || \
-	(defined(CONFIG_EFI_LOADER) && !defined(CONFIG_SPL_BUILD)) || \
-	defined(CONFIG_SANDBOX)
-#define HAVE_BLOCK_DEVICE
-#endif
-
 /* Console I/O Buffer Size */
 #ifndef CONFIG_SYS_CBSIZE
 #if defined(CONFIG_CMD_KGDB)
diff --git a/include/configs/blanche.h b/include/configs/blanche.h
index 4948bbb..74f6695 100755
--- a/include/configs/blanche.h
+++ b/include/configs/blanche.h
@@ -98,6 +98,5 @@
 
 /* SDHI */
 #define CONFIG_SH_SDHI_FREQ	97500000
-#define HAVE_BLOCK_DEVICE
 
 #endif	/* __BLANCHE_H */
diff --git a/include/configs/dragonboard410c.h b/include/configs/dragonboard410c.h
index 530d667..d19e60a 100644
--- a/include/configs/dragonboard410c.h
+++ b/include/configs/dragonboard410c.h
@@ -43,9 +43,6 @@
 /* Disabled by default as some sub-commands can brick eMMC */
 /*#define CONFIG_SUPPORT_EMMC_BOOT */
 
-/* Partition table support */
-#define HAVE_BLOCK_DEVICE /* Needed for partition commands */
-
 #include <config_distro_defaults.h>
 
 /* BOOTP options */
diff --git a/include/configs/dragonboard820c.h b/include/configs/dragonboard820c.h
index e28a956..c07be34 100644
--- a/include/configs/dragonboard820c.h
+++ b/include/configs/dragonboard820c.h
@@ -33,9 +33,6 @@
 /* Generic Timer Definitions */
 #define COUNTER_FREQUENCY		19000000
 
-/* Partition table support */
-#define HAVE_BLOCK_DEVICE
-
 /* BOOTP options */
 #define CONFIG_BOOTP_BOOTFILESIZE
 
diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index 5461833..83d75c4 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -7,6 +7,7 @@
 	depends on !EFI_STUB || !X86 || X86_64 || EFI_STUB_32BIT
 	default y
 	select LIB_UUID
+	select HAVE_BLOCK_DEVICE
 	help
 	  Select this option if you want to run EFI applications (like grub2)
 	  on top of U-Boot. If this option is enabled, U-Boot will expose EFI