18cffe5bdSDan Murphy /* 28cffe5bdSDan Murphy * (C) Copyright 2014 38cffe5bdSDan Murphy * Texas Instruments, <www.ti.com> 48cffe5bdSDan Murphy * 58cffe5bdSDan Murphy * Dan Murphy <dmurphy@ti.com> 68cffe5bdSDan Murphy * 78cffe5bdSDan Murphy * SPDX-License-Identifier: GPL-2.0+ 88cffe5bdSDan Murphy * 98cffe5bdSDan Murphy * Derived work from spl_mmc.c 108cffe5bdSDan Murphy */ 118cffe5bdSDan Murphy 128cffe5bdSDan Murphy #include <common.h> 138cffe5bdSDan Murphy #include <spl.h> 148cffe5bdSDan Murphy #include <asm/u-boot.h> 1536afd451SNikita Kiryanov #include <errno.h> 168cffe5bdSDan Murphy #include <usb.h> 178cffe5bdSDan Murphy #include <fat.h> 188cffe5bdSDan Murphy 198cffe5bdSDan Murphy DECLARE_GLOBAL_DATA_PTR; 208cffe5bdSDan Murphy 218cffe5bdSDan Murphy #ifdef CONFIG_USB_STORAGE 228cffe5bdSDan Murphy static int usb_stor_curr_dev = -1; /* current device */ 238cffe5bdSDan Murphy #endif 248cffe5bdSDan Murphy 2536afd451SNikita Kiryanov int spl_usb_load_image(void) 268cffe5bdSDan Murphy { 278cffe5bdSDan Murphy int err; 28*4101f687SSimon Glass struct blk_desc *stor_dev; 298cffe5bdSDan Murphy 308cffe5bdSDan Murphy usb_stop(); 318cffe5bdSDan Murphy err = usb_init(); 328cffe5bdSDan Murphy if (err) { 338cffe5bdSDan Murphy #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT 348cffe5bdSDan Murphy printf("%s: usb init failed: err - %d\n", __func__, err); 358cffe5bdSDan Murphy #endif 3636afd451SNikita Kiryanov return err; 378cffe5bdSDan Murphy } 388cffe5bdSDan Murphy 398cffe5bdSDan Murphy #ifdef CONFIG_USB_STORAGE 408cffe5bdSDan Murphy /* try to recognize storage devices immediately */ 418cffe5bdSDan Murphy usb_stor_curr_dev = usb_stor_scan(1); 428cffe5bdSDan Murphy stor_dev = usb_stor_get_dev(usb_stor_curr_dev); 4336afd451SNikita Kiryanov if (!stor_dev) 4436afd451SNikita Kiryanov return -ENODEV; 458cffe5bdSDan Murphy #endif 468cffe5bdSDan Murphy 478cffe5bdSDan Murphy debug("boot mode - FAT\n"); 488cffe5bdSDan Murphy 498cffe5bdSDan Murphy #ifdef CONFIG_SPL_OS_BOOT 508cffe5bdSDan Murphy if (spl_start_uboot() || spl_load_image_fat_os(stor_dev, 518cffe5bdSDan Murphy CONFIG_SYS_USB_FAT_BOOT_PARTITION)) 528cffe5bdSDan Murphy #endif 538cffe5bdSDan Murphy err = spl_load_image_fat(stor_dev, 548cffe5bdSDan Murphy CONFIG_SYS_USB_FAT_BOOT_PARTITION, 55205b4f33SGuillaume GARDET CONFIG_SPL_FS_LOAD_PAYLOAD_NAME); 568cffe5bdSDan Murphy 578cffe5bdSDan Murphy if (err) { 5836afd451SNikita Kiryanov puts("Error loading from USB device\n"); 5936afd451SNikita Kiryanov return err; 608cffe5bdSDan Murphy } 6136afd451SNikita Kiryanov 6236afd451SNikita Kiryanov return 0; 638cffe5bdSDan Murphy } 64