]>
Commit | Line | Data |
---|---|---|
8cffe5bd DM |
1 | /* |
2 | * (C) Copyright 2014 | |
3 | * Texas Instruments, <www.ti.com> | |
4 | * | |
5 | * Dan Murphy <dmurphy@ti.com> | |
6 | * | |
7 | * SPDX-License-Identifier: GPL-2.0+ | |
8 | * | |
9 | * Derived work from spl_mmc.c | |
10 | */ | |
11 | ||
12 | #include <common.h> | |
13 | #include <spl.h> | |
14 | #include <asm/u-boot.h> | |
36afd451 | 15 | #include <errno.h> |
8cffe5bd DM |
16 | #include <usb.h> |
17 | #include <fat.h> | |
18 | ||
19 | DECLARE_GLOBAL_DATA_PTR; | |
20 | ||
21 | #ifdef CONFIG_USB_STORAGE | |
22 | static int usb_stor_curr_dev = -1; /* current device */ | |
23 | #endif | |
24 | ||
56df4635 | 25 | static int spl_usb_load_image(struct spl_boot_device *bootdev) |
8cffe5bd DM |
26 | { |
27 | int err; | |
4101f687 | 28 | struct blk_desc *stor_dev; |
8cffe5bd DM |
29 | |
30 | usb_stop(); | |
31 | err = usb_init(); | |
32 | if (err) { | |
33 | #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT | |
34 | printf("%s: usb init failed: err - %d\n", __func__, err); | |
35 | #endif | |
36afd451 | 36 | return err; |
8cffe5bd DM |
37 | } |
38 | ||
39 | #ifdef CONFIG_USB_STORAGE | |
40 | /* try to recognize storage devices immediately */ | |
41 | usb_stor_curr_dev = usb_stor_scan(1); | |
57ebf67b | 42 | stor_dev = blk_get_devnum_by_type(IF_TYPE_USB, usb_stor_curr_dev); |
36afd451 NK |
43 | if (!stor_dev) |
44 | return -ENODEV; | |
8cffe5bd DM |
45 | #endif |
46 | ||
47 | debug("boot mode - FAT\n"); | |
48 | ||
49 | #ifdef CONFIG_SPL_OS_BOOT | |
50 | if (spl_start_uboot() || spl_load_image_fat_os(stor_dev, | |
51 | CONFIG_SYS_USB_FAT_BOOT_PARTITION)) | |
52 | #endif | |
53 | err = spl_load_image_fat(stor_dev, | |
54 | CONFIG_SYS_USB_FAT_BOOT_PARTITION, | |
205b4f33 | 55 | CONFIG_SPL_FS_LOAD_PAYLOAD_NAME); |
8cffe5bd | 56 | |
36afd451 NK |
57 | if (err) { |
58 | puts("Error loading from USB device\n"); | |
59 | return err; | |
60 | } | |
61 | ||
62 | return 0; | |
8cffe5bd | 63 | } |
56df4635 | 64 | SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_USB, spl_usb_load_image); |