summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2016-02-16 17:08:40 +0900
committerMasahiro Yamada <yamada.masahiro@socionext.com>2016-02-29 03:50:16 +0900
commit569e4be172d1bf2041e97c0b65f872a7451b178a (patch)
tree3bca61d2c101a0138819163f8e1ae1c2d4958947
parenta55d9feeec141bc5ec04cf84c86e270cf0ed0d3c (diff)
downloadu-boot-imx-569e4be172d1bf2041e97c0b65f872a7451b178a.zip
u-boot-imx-569e4be172d1bf2041e97c0b65f872a7451b178a.tar.gz
u-boot-imx-569e4be172d1bf2041e97c0b65f872a7451b178a.tar.bz2
ARM: uniphier: add a command to find the first MMC (non-SD) device
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>
-rw-r--r--arch/arm/mach-uniphier/boot-mode/boot-mode.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/arch/arm/mach-uniphier/boot-mode/boot-mode.c b/arch/arm/mach-uniphier/boot-mode/boot-mode.c
index 2f2e45d..0547762 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