summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-08-24 12:48:50 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-08-27 07:12:32 +0200
commitbe322768f04603df371c9c1f08b9621690dd74c6 (patch)
tree2b979963307e675747520e14152583993a03cc34 /arch/arm/mach-omap
parentc2ef4788732b680ee370b7197c9982ac0345e782 (diff)
downloadbarebox-be322768f04603df371c9c1f08b9621690dd74c6.tar.gz
barebox-be322768f04603df371c9c1f08b9621690dd74c6.tar.xz
ARM: omap: Allow to set mmc devname used for booting
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@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-omap')
-rw-r--r--arch/arm/mach-omap/include/mach/generic.h8
-rw-r--r--arch/arm/mach-omap/omap_generic.c31
-rw-r--r--arch/arm/mach-omap/xload.c19
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 3314fafcc1..ee711ee619 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 cfd3dec453..e7ca821212 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 76746e27bd..b4d1b55e57 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;
}