1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2016 Toradex 3*4882a593Smuzhiyun * Author: Stefan Agner <stefan.agner@toradex.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <common.h> 9*4882a593Smuzhiyun #include <spl.h> 10*4882a593Smuzhiyun #include <usb.h> 11*4882a593Smuzhiyun #include <g_dnl.h> 12*4882a593Smuzhiyun #include <sdp.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun DECLARE_GLOBAL_DATA_PTR; 15*4882a593Smuzhiyun spl_sdp_load_image(struct spl_image_info * spl_image,struct spl_boot_device * bootdev)16*4882a593Smuzhiyunstatic int spl_sdp_load_image(struct spl_image_info *spl_image, 17*4882a593Smuzhiyun struct spl_boot_device *bootdev) 18*4882a593Smuzhiyun { 19*4882a593Smuzhiyun int ret; 20*4882a593Smuzhiyun const int controller_index = 0; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun g_dnl_clear_detach(); 23*4882a593Smuzhiyun g_dnl_register("usb_dnl_sdp"); 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun ret = sdp_init(controller_index); 26*4882a593Smuzhiyun if (ret) { 27*4882a593Smuzhiyun pr_err("SDP init failed: %d\n", ret); 28*4882a593Smuzhiyun return -ENODEV; 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* 32*4882a593Smuzhiyun * This command either loads a legacy image, jumps and never returns, 33*4882a593Smuzhiyun * or it loads a FIT image and returns it to be handled by the SPL 34*4882a593Smuzhiyun * code. 35*4882a593Smuzhiyun */ 36*4882a593Smuzhiyun ret = spl_sdp_handle(controller_index, spl_image); 37*4882a593Smuzhiyun debug("SDP ended\n"); 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun return ret; 40*4882a593Smuzhiyun } 41*4882a593Smuzhiyun SPL_LOAD_IMAGE_METHOD("USB SDP", 0, BOOT_DEVICE_BOARD, spl_sdp_load_image); 42