barebox/arch/arm/mach-omap/xload.c
Sanjeev Premi b2e9356130 omap: Unify run_shell() in xload configuration
Currently, there are multiple definitions of run_shell()
for each board that can be build in "xload" configuration.
Now there is only one function used by all boards.

The functions defined in xload.c are used only when "xload"
configuration used; but it gets compiled unconditionally.
This has been fixed as well.

Signed-off-by: Sanjeev Premi <premi@ti.com>
Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
2011-11-11 12:07:14 +01:00

96 lines
1.6 KiB
C

#include <common.h>
#include <partition.h>
#include <nand.h>
#include <driver.h>
#include <linux/mtd/mtd.h>
#include <fs.h>
#include <fcntl.h>
#include <mach/xload.h>
#include <sizes.h>
void *omap_xload_boot_nand(int offset, int size)
{
int ret;
void *to = xmalloc(size);
struct cdev *cdev;
devfs_add_partition("nand0", offset, size, PARTITION_FIXED, "x");
dev_add_bb_dev("x", "bbx");
cdev = cdev_open("bbx", O_RDONLY);
if (!cdev) {
printf("failed to open nand\n");
return NULL;
}
ret = cdev_read(cdev, to, size, 0, 0);
if (ret != size) {
printf("failed to read from nand\n");
return NULL;
}
return to;
}
void *omap_xload_boot_mmc(void)
{
int ret;
void *buf;
int len;
ret = mount("disk0.0", "fat", "/");
if (ret) {
printf("mounting sd card failed with %d\n", ret);
return NULL;
}
buf = read_file("/barebox.bin", &len);
if (!buf) {
printf("could not read barebox.bin from sd card\n");
return NULL;
}
return buf;
}
enum omap_boot_src omap_bootsrc(void)
{
#if defined(CONFIG_ARCH_OMAP3)
return omap3_bootsrc();
#elif defined(CONFIG_ARCH_OMAP4)
return omap4_bootsrc();
#endif
}
/*
* Replaces the default shell in xload configuration
*/
int run_shell(void)
{
int (*func)(void) = NULL;
switch (omap_bootsrc())
{
case OMAP_BOOTSRC_MMC1:
printf("booting from MMC1\n");
func = omap_xload_boot_mmc();
break;
case OMAP_BOOTSRC_UNKNOWN:
printf("unknown boot source. Fall back to nand\n");
case OMAP_BOOTSRC_NAND:
printf("booting from NAND\n");
func = omap_xload_boot_nand(SZ_128K, SZ_256K);
break;
}
if (!func) {
printf("booting failed\n");
while (1);
}
shutdown_barebox();
func();
while (1);
}