diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-08-24 12:48:50 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-08-27 07:12:32 +0200 |
commit | be322768f04603df371c9c1f08b9621690dd74c6 (patch) | |
tree | 2b979963307e675747520e14152583993a03cc34 /arch/arm/mach-omap | |
parent | c2ef4788732b680ee370b7197c9982ac0345e782 (diff) | |
download | barebox-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.h | 8 | ||||
-rw-r--r-- | arch/arm/mach-omap/omap_generic.c | 31 | ||||
-rw-r--r-- | 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 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; } |