diff --git a/configs/hikey_defconfig b/configs/hikey_defconfig
index 4a9546a9e99eb37a74fd300ea7888a57517013dc..539c7d31e98f2fef67ea62ea4de5de65d8eaa7a4 100644
--- a/configs/hikey_defconfig
+++ b/configs/hikey_defconfig
@@ -11,5 +11,6 @@ CONFIG_CMD_USB=y
 CONFIG_CMD_GPIO=y
 CONFIG_CMD_CACHE=y
 CONFIG_MMC_DW=y
+CONFIG_MMC_DW_K3=y
 CONFIG_USB=y
 CONFIG_USB_STORAGE=y
diff --git a/doc/README.socfpga b/doc/README.socfpga
index e61bfefa7048d9a91eb76d1d58e89fdc59bfa2e4..e717637ac9369d5e5d7cd20dec3dd3decb50f942 100644
--- a/doc/README.socfpga
+++ b/doc/README.socfpga
@@ -19,6 +19,3 @@ controller support within SOCFPGA
 
 #define CONFIG_SYS_MMC_MAX_BLK_COUNT	256
 -> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM
-
-#define CONFIG_SOCFPGA_DWMMC
--> Enable the SOCFPGA specific driver for DesignWare SDMMC controller
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index 44f58b4202366e09f964e0d2c2261a26369f1518..f99264d5a6df614f1a4cc8582878cf5224c466bf 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -75,6 +75,24 @@ config MMC_DW
 	  block, this provides host support for SD and MMC interfaces, in both
 	  PIO, internal DMA mode and external DMA mode.
 
+config MMC_DW_EXYNOS
+	bool "Exynos specific extensions for Synopsys DW Memory Card Interface"
+	depends on ARCH_EXYNOS
+	depends on MMC_DW
+	default y
+	help
+	  This selects support for Samsung Exynos SoC specific extensions to the
+	  Synopsys DesignWare Memory Card Interface driver. Select this option
+	  for platforms based on Exynos4 and Exynos5 SoC's.
+
+config MMC_DW_K3
+	bool "K3 specific extensions for Synopsys DW Memory Card Interface"
+	depends on MMC_DW
+	help
+	  This selects support for Hisilicon K3 SoC specific extensions to the
+	  Synopsys DesignWare Memory Card Interface driver. Select this option
+	  for platforms based on Hisilicon K3 SoC's.
+
 config MMC_DW_ROCKCHIP
 	bool "Rockchip SD/MMC controller support"
 	depends on DM_MMC && OF_CONTROL
@@ -85,6 +103,16 @@ config MMC_DW_ROCKCHIP
 	  SD 3.0, SDIO 3.0 and MMC 4.5 and supports common eMMC chips as well
 	  as removeable SD and micro-SD cards.
 
+config MMC_DW_SOCFPGA
+	bool "SOCFPGA specific extensions for Synopsys DW Memory Card Interface"
+	depends on ARCH_SOCFPGA
+	depends on MMC_DW
+	default y
+	help
+	  This selects support for Altera SOCFPGA specific extensions to the
+	  Synopsys DesignWare Memory Card Interface driver. Select this option
+	  for platforms based on Altera SOCFPGA.
+
 config SH_SDHI
 	bool "SuperH/Renesas ARM SoCs on-chip SDHI host controller support"
 	depends on RMOBILE
diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index 1c51a7a9987325cd13d44dd68744e9cce2388499..4494bdaeafaf45c8bf2c00802f1acd97d8f4b752 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -17,9 +17,11 @@ obj-$(CONFIG_ARM_PL180_MMCI) += arm_pl180_mmci.o
 obj-$(CONFIG_ATMEL_SDHCI) += atmel_sdhci.o
 obj-$(CONFIG_BFIN_SDH) += bfin_sdh.o
 obj-$(CONFIG_DAVINCI_MMC) += davinci_mmc.o
-obj-$(CONFIG_MMC_DW) += dw_mmc.o
-obj-$(CONFIG_EXYNOS_DWMMC) += exynos_dw_mmc.o
-obj-$(CONFIG_HIKEY_DWMMC) += hi6220_dw_mmc.o
+obj-$(CONFIG_MMC_DW)			+= dw_mmc.o
+obj-$(CONFIG_MMC_DW_EXYNOS)		+= exynos_dw_mmc.o
+obj-$(CONFIG_MMC_DW_K3)			+= hi6220_dw_mmc.o
+obj-$(CONFIG_MMC_DW_ROCKCHIP)		+= rockchip_dw_mmc.o
+obj-$(CONFIG_MMC_DW_SOCFPGA)		+= socfpga_dw_mmc.o
 obj-$(CONFIG_FSL_ESDHC) += fsl_esdhc.o
 obj-$(CONFIG_FTSDC010) += ftsdc010_mci.o
 obj-$(CONFIG_FTSDC021) += ftsdc021_sdhci.o
@@ -36,7 +38,6 @@ obj-$(CONFIG_MXS_MMC) += mxsmmc.o
 obj-$(CONFIG_OMAP_HSMMC) += omap_hsmmc.o
 obj-$(CONFIG_X86) += pci_mmc.o
 obj-$(CONFIG_PXA_MMC_GENERIC) += pxa_mmc_gen.o
-obj-$(CONFIG_MMC_DW_ROCKCHIP) += rockchip_dw_mmc.o
 obj-$(CONFIG_SUPPORT_EMMC_RPMB) += rpmb.o
 obj-$(CONFIG_S3C_SDI) += s3c_sdi.o
 ifdef CONFIG_BLK
@@ -46,7 +47,6 @@ endif
 endif
 obj-$(CONFIG_SH_MMCIF) += sh_mmcif.o
 obj-$(CONFIG_SH_SDHI) += sh_sdhi.o
-obj-$(CONFIG_SOCFPGA_DWMMC) += socfpga_dw_mmc.o
 obj-$(CONFIG_TEGRA_MMC) += tegra_mmc.o
 obj-$(CONFIG_MMC_UNIPHIER) += uniphier-sd.o
 obj-$(CONFIG_ZYNQ_SDHCI) += zynq_sdhci.o
diff --git a/include/configs/exynos-common.h b/include/configs/exynos-common.h
index 0105f4a39c27bc085d87d416c916531dbf811d65..cdbe154839d7820533fb5c9030d785e2a614727d 100644
--- a/include/configs/exynos-common.h
+++ b/include/configs/exynos-common.h
@@ -39,7 +39,6 @@
 
 /* SD/MMC configuration */
 #define CONFIG_GENERIC_MMC
-#define CONFIG_EXYNOS_DWMMC
 #define CONFIG_BOUNCE_BUFFER
 
 /* PWM */
diff --git a/include/configs/hikey.h b/include/configs/hikey.h
index 242ed53548e9c1cb2c92234e31ca1bc1efb0ec3d..4048bce77cce62985786c6b93b5301bdd3ae23f4 100644
--- a/include/configs/hikey.h
+++ b/include/configs/hikey.h
@@ -72,7 +72,6 @@
 
 /* SD/MMC configuration */
 #define CONFIG_GENERIC_MMC
-#define CONFIG_HIKEY_DWMMC
 #define CONFIG_BOUNCE_BUFFER
 
 #define CONFIG_FS_EXT4
diff --git a/include/configs/socfpga_common.h b/include/configs/socfpga_common.h
index 0dde8c90b55cbfec887b16261497e8c9c826befb..7de9d861f03aede42095aaf3f6bbf82da7d582b0 100644
--- a/include/configs/socfpga_common.h
+++ b/include/configs/socfpga_common.h
@@ -144,7 +144,6 @@
 #ifdef CONFIG_CMD_MMC
 #define CONFIG_BOUNCE_BUFFER
 #define CONFIG_GENERIC_MMC
-#define CONFIG_SOCFPGA_DWMMC
 /* FIXME */
 /* using smaller max blk cnt to avoid flooding the limited stack we have */
 #define CONFIG_SYS_MMC_MAX_BLK_COUNT	256	/* FIXME -- SPL only? */