mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-21 17:38:51 +09:00
![Nikita Kiryanov](/assets/img/avatar_default.png)
Make spl_*_load_image() functions return a value instead of hanging if a problem is encountered. This enables main spl code to make the decision whether to hang or not, thus preparing it to support alternative boot devices. Some boot devices (namely nand and spi) do not hang on error. Instead, they return normally and SPL proceeds to boot the contents of the load address. This is considered a bug and is rectified by hanging on error for these devices as well. Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> Cc: Igor Grinberg <grinberg@compulab.co.il> Cc: Tom Rini <trini@konsulko.com> Cc: Simon Glass <sjg@chromium.org> Cc: Ian Campbell <ijc@hellion.org.uk> Cc: Hans De Goede <hdegoede@redhat.com> Cc: Albert Aribaud <albert.u.boot@aribaud.net> Cc: Jagan Teki <jteki@openedev.com> Reviewed-by: Tom Rini <trini@konsulko.com> Reviewed-by: Simon Glass <sjg@chromium.org>
64 lines
1.2 KiB
C
64 lines
1.2 KiB
C
/*
|
|
* (C) Copyright 2014
|
|
* Texas Instruments, <www.ti.com>
|
|
*
|
|
* Dan Murphy <dmurphy@ti.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*
|
|
* Derived work from spl_mmc.c
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <spl.h>
|
|
#include <asm/u-boot.h>
|
|
#include <errno.h>
|
|
#include <usb.h>
|
|
#include <fat.h>
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
#ifdef CONFIG_USB_STORAGE
|
|
static int usb_stor_curr_dev = -1; /* current device */
|
|
#endif
|
|
|
|
int spl_usb_load_image(void)
|
|
{
|
|
int err;
|
|
block_dev_desc_t *stor_dev;
|
|
|
|
usb_stop();
|
|
err = usb_init();
|
|
if (err) {
|
|
#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
|
|
printf("%s: usb init failed: err - %d\n", __func__, err);
|
|
#endif
|
|
return err;
|
|
}
|
|
|
|
#ifdef CONFIG_USB_STORAGE
|
|
/* try to recognize storage devices immediately */
|
|
usb_stor_curr_dev = usb_stor_scan(1);
|
|
stor_dev = usb_stor_get_dev(usb_stor_curr_dev);
|
|
if (!stor_dev)
|
|
return -ENODEV;
|
|
#endif
|
|
|
|
debug("boot mode - FAT\n");
|
|
|
|
#ifdef CONFIG_SPL_OS_BOOT
|
|
if (spl_start_uboot() || spl_load_image_fat_os(stor_dev,
|
|
CONFIG_SYS_USB_FAT_BOOT_PARTITION))
|
|
#endif
|
|
err = spl_load_image_fat(stor_dev,
|
|
CONFIG_SYS_USB_FAT_BOOT_PARTITION,
|
|
CONFIG_SPL_FS_LOAD_PAYLOAD_NAME);
|
|
|
|
if (err) {
|
|
puts("Error loading from USB device\n");
|
|
return err;
|
|
}
|
|
|
|
return 0;
|
|
}
|