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