]>
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 | ||
2a2ee2ac SG |
25 | static int spl_usb_load_image(struct spl_image_info *spl_image, |
26 | struct spl_boot_device *bootdev) | |
8cffe5bd DM |
27 | { |
28 | int err; | |
4101f687 | 29 | struct blk_desc *stor_dev; |
8cffe5bd DM |
30 | |
31 | usb_stop(); | |
32 | err = usb_init(); | |
33 | if (err) { | |
34 | #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT | |
35 | printf("%s: usb init failed: err - %d\n", __func__, err); | |
36 | #endif | |
36afd451 | 37 | return err; |
8cffe5bd DM |
38 | } |
39 | ||
40 | #ifdef CONFIG_USB_STORAGE | |
41 | /* try to recognize storage devices immediately */ | |
42 | usb_stor_curr_dev = usb_stor_scan(1); | |
57ebf67b | 43 | stor_dev = blk_get_devnum_by_type(IF_TYPE_USB, usb_stor_curr_dev); |
36afd451 NK |
44 | if (!stor_dev) |
45 | return -ENODEV; | |
8cffe5bd DM |
46 | #endif |
47 | ||
48 | debug("boot mode - FAT\n"); | |
49 | ||
50 | #ifdef CONFIG_SPL_OS_BOOT | |
710e9ca5 SG |
51 | if (spl_start_uboot() || |
52 | spl_load_image_fat_os(spl_image, stor_dev, | |
53 | CONFIG_SYS_USB_FAT_BOOT_PARTITION)) | |
8cffe5bd | 54 | #endif |
710e9ca5 SG |
55 | { |
56 | err = spl_load_image_fat(spl_image, stor_dev, | |
57 | CONFIG_SYS_USB_FAT_BOOT_PARTITION, | |
58 | CONFIG_SPL_FS_LOAD_PAYLOAD_NAME); | |
59 | } | |
8cffe5bd | 60 | |
36afd451 NK |
61 | if (err) { |
62 | puts("Error loading from USB device\n"); | |
63 | return err; | |
64 | } | |
65 | ||
66 | return 0; | |
8cffe5bd | 67 | } |
ebc4ef61 | 68 | SPL_LOAD_IMAGE_METHOD("USB", 0, BOOT_DEVICE_USB, spl_usb_load_image); |