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