xref: /openbmc/u-boot/common/spl/spl_usb.c (revision 8cffe5bd)
1*8cffe5bdSDan Murphy /*
2*8cffe5bdSDan Murphy  * (C) Copyright 2014
3*8cffe5bdSDan Murphy  * Texas Instruments, <www.ti.com>
4*8cffe5bdSDan Murphy  *
5*8cffe5bdSDan Murphy  * Dan Murphy <dmurphy@ti.com>
6*8cffe5bdSDan Murphy  *
7*8cffe5bdSDan Murphy  * SPDX-License-Identifier:	GPL-2.0+
8*8cffe5bdSDan Murphy  *
9*8cffe5bdSDan Murphy  * Derived work from spl_mmc.c
10*8cffe5bdSDan Murphy  */
11*8cffe5bdSDan Murphy 
12*8cffe5bdSDan Murphy #include <common.h>
13*8cffe5bdSDan Murphy #include <spl.h>
14*8cffe5bdSDan Murphy #include <asm/u-boot.h>
15*8cffe5bdSDan Murphy #include <usb.h>
16*8cffe5bdSDan Murphy #include <fat.h>
17*8cffe5bdSDan Murphy 
18*8cffe5bdSDan Murphy DECLARE_GLOBAL_DATA_PTR;
19*8cffe5bdSDan Murphy 
20*8cffe5bdSDan Murphy #ifdef CONFIG_USB_STORAGE
21*8cffe5bdSDan Murphy static int usb_stor_curr_dev = -1; /* current device */
22*8cffe5bdSDan Murphy #endif
23*8cffe5bdSDan Murphy 
24*8cffe5bdSDan Murphy void spl_usb_load_image(void)
25*8cffe5bdSDan Murphy {
26*8cffe5bdSDan Murphy 	int err;
27*8cffe5bdSDan Murphy 	block_dev_desc_t *stor_dev;
28*8cffe5bdSDan Murphy 
29*8cffe5bdSDan Murphy 	usb_stop();
30*8cffe5bdSDan Murphy 	err = usb_init();
31*8cffe5bdSDan Murphy 	if (err) {
32*8cffe5bdSDan Murphy #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
33*8cffe5bdSDan Murphy 		printf("%s: usb init failed: err - %d\n", __func__, err);
34*8cffe5bdSDan Murphy #endif
35*8cffe5bdSDan Murphy 		hang();
36*8cffe5bdSDan Murphy 	}
37*8cffe5bdSDan Murphy 
38*8cffe5bdSDan Murphy #ifdef CONFIG_USB_STORAGE
39*8cffe5bdSDan Murphy 	/* try to recognize storage devices immediately */
40*8cffe5bdSDan Murphy 	usb_stor_curr_dev = usb_stor_scan(1);
41*8cffe5bdSDan Murphy 	stor_dev = usb_stor_get_dev(usb_stor_curr_dev);
42*8cffe5bdSDan Murphy #endif
43*8cffe5bdSDan Murphy 
44*8cffe5bdSDan Murphy 	debug("boot mode - FAT\n");
45*8cffe5bdSDan Murphy 
46*8cffe5bdSDan Murphy #ifdef CONFIG_SPL_OS_BOOT
47*8cffe5bdSDan Murphy 		if (spl_start_uboot() || spl_load_image_fat_os(stor_dev,
48*8cffe5bdSDan Murphy 								CONFIG_SYS_USB_FAT_BOOT_PARTITION))
49*8cffe5bdSDan Murphy #endif
50*8cffe5bdSDan Murphy 		err = spl_load_image_fat(stor_dev,
51*8cffe5bdSDan Murphy 				CONFIG_SYS_USB_FAT_BOOT_PARTITION,
52*8cffe5bdSDan Murphy 				CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);
53*8cffe5bdSDan Murphy 
54*8cffe5bdSDan Murphy 		if (err) {
55*8cffe5bdSDan Murphy 			puts("Error loading USB device\n");
56*8cffe5bdSDan Murphy 			hang();
57*8cffe5bdSDan Murphy 		}
58*8cffe5bdSDan Murphy }
59