[PATCH 05/22] ARM: omap: Allow to set mmc devname used for booting

Sascha Hauer s.hauer at pengutronix.de
Mon Aug 26 02:55:46 EDT 2013


This adds a omap_set_bootmmc_devname function which can be used
to specify the MMC boot device. In an xload configuration this
is then used to load the next stage. In a regular build this is
used to mount /boot.
Also a device_detect_by_name is added to allow to disable probing
for sd/mmc cards during startup.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 arch/arm/mach-omap/include/mach/generic.h |  8 ++++++++
 arch/arm/mach-omap/omap_generic.c         | 31 ++++++++++++++++++++++++++++---
 arch/arm/mach-omap/xload.c                | 19 ++++++++++++++++---
 3 files changed, 52 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-omap/include/mach/generic.h b/arch/arm/mach-omap/include/mach/generic.h
index 3314faf..ee711ee 100644
--- a/arch/arm/mach-omap/include/mach/generic.h
+++ b/arch/arm/mach-omap/include/mach/generic.h
@@ -42,14 +42,22 @@ struct omap_barebox_part {
 
 #ifdef CONFIG_SHELL_NONE
 int omap_set_barebox_part(struct omap_barebox_part *part);
+int omap_set_mmc_dev(const char *mmcdev);
 #else
 static inline int omap_set_barebox_part(struct omap_barebox_part *part)
 {
 	return 0;
 }
+static inline int omap_set_mmc_dev(const char *mmcdev)
+{
+	return 0;
+}
 #endif
 
 extern uint32_t omap_bootinfo[3];
 void omap_save_bootinfo(void);
 
+void omap_set_bootmmc_devname(const char *devname);
+const char *omap_get_bootmmc_devname(void);
+
 #endif
diff --git a/arch/arm/mach-omap/omap_generic.c b/arch/arm/mach-omap/omap_generic.c
index cfd3dec..e7ca821 100644
--- a/arch/arm/mach-omap/omap_generic.c
+++ b/arch/arm/mach-omap/omap_generic.c
@@ -18,19 +18,44 @@
 #include <init.h>
 #include <io.h>
 #include <fs.h>
+#include <malloc.h>
 #include <linux/stat.h>
 
-#if defined(CONFIG_DEFAULT_ENVIRONMENT) && defined(CONFIG_MCI_STARTUP)
+static char *omap_bootmmc_dev;
+
+void omap_set_bootmmc_devname(char *devname)
+{
+	omap_bootmmc_dev = devname;
+}
+
+const char *omap_get_bootmmc_devname(void)
+{
+	return omap_bootmmc_dev;
+}
+
+#if defined(CONFIG_DEFAULT_ENVIRONMENT)
 static int omap_env_init(void)
 {
 	struct stat s;
-	char *diskdev = "/dev/disk0.0";
+	char *diskdev, *partname;
 	int ret;
 
 	if (bootsource_get() != BOOTSOURCE_MMC)
 		return 0;
 
-	ret = stat(diskdev, &s);
+	if (omap_bootmmc_dev)
+		diskdev = omap_bootmmc_dev;
+	else
+		diskdev = "disk0";
+
+	device_detect_by_name(diskdev);
+
+	partname = asprintf("/dev/%s.0", diskdev);
+
+	ret = stat(partname, &s);
+
+	free(partname);
+
 	if (ret) {
 		printf("no %s. using default env\n", diskdev);
 		return 0;
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 76746e2..b4d1b55 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -8,6 +8,7 @@
 #include <fs.h>
 #include <fcntl.h>
 #include <sizes.h>
+#include <malloc.h>
 #include <filetype.h>
 #include <mach/generic.h>
 
@@ -98,11 +99,23 @@ static void *omap_xload_boot_mmc(void)
 	int ret;
 	void *buf;
 	int len;
-	const char *diskdev = "disk0.0";
+	const char *diskdev;
+	char *partname;
+
+	diskdev = omap_get_bootmmc_devname();
+	if (!diskdev)
+		diskdev = "disk0";
+
+	device_detect_by_name(diskdev);
+
+	partname = asprintf("%s.0", diskdev);
+
+	ret = mount(partname, "fat", "/");
+
+	free(partname);
 
-	ret = mount(diskdev, "fat", "/");
 	if (ret) {
-		printf("Unable to mount %s (%d)\n", diskdev, ret);
+		printf("Unable to mount %s (%d)\n", partname, ret);
 		return NULL;
 	}
 
-- 
1.8.4.rc3




More information about the barebox mailing list