ARM: uniphier: add a command to find the first MMC (non-SD) device
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 16 Feb 2016 08:08:40 +0000 (17:08 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Sun, 28 Feb 2016 18:50:16 +0000 (03:50 +0900)
UniPhier SoC family supports both (e)MMC boot and SD card boot;
however, both of them are handled in the same uclass.

When booting from the eMMC, we want to know the device number
of the (e)MMC, not SD.  This command is useful to find the first
MMC (non-SD) device.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
arch/arm/mach-uniphier/boot-mode/boot-mode.c

index 2f2e45d2c161628e192bb4b3accbdbf2fafe6afb..05477620a3decefac02d300496f293e783e06775 100644 (file)
@@ -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