diff --git a/arch/arm/mach-uniphier/boot-mode/boot-mode.c b/arch/arm/mach-uniphier/boot-mode/boot-mode.c
index 2f2e45d2c161628e192bb4b3accbdbf2fafe6afb..05477620a3decefac02d300496f293e783e06775 100644
--- a/arch/arm/mach-uniphier/boot-mode/boot-mode.c
+++ b/arch/arm/mach-uniphier/boot-mode/boot-mode.c
@@ -7,6 +7,7 @@
 #include <common.h>
 #include <mmc.h>
 #include <spl.h>
+#include <linux/err.h>
 
 #include "../sbc/sbc-regs.h"
 #include "../soc-info.h"
@@ -77,3 +78,36 @@ u32 spl_boot_mode(void)
 
 	return MMCSD_MODE_EMMCBOOT;
 }
+
+#if defined(CONFIG_DM_MMC) && !defined(CONFIG_SPL_BUILD)
+static int find_first_mmc_device(void)
+{
+	struct mmc *mmc;
+	int i;
+
+	for (i = 0; (mmc = find_mmc_device(i)); i++) {
+		if (!mmc_init(mmc) && IS_MMC(mmc))
+			return i;
+	}
+
+	return -ENODEV;
+}
+
+static int do_mmcsetn(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	int dev;
+
+	dev = find_first_mmc_device();
+	if (dev < 0)
+		return CMD_RET_FAILURE;
+
+	setenv_ulong("mmc_first_dev", dev);
+	return CMD_RET_SUCCESS;
+}
+
+U_BOOT_CMD(
+	   mmcsetn,	1,	1,	do_mmcsetn,
+	"Set the first MMC (not SD) dev number to \"mmc_first_dev\" enviroment",
+	""
+);
+#endif