1*2f005695SStefan Agner /* 2*2f005695SStefan Agner * cmd_sdp.c -- sdp command 3*2f005695SStefan Agner * 4*2f005695SStefan Agner * Copyright (C) 2016 Toradex 5*2f005695SStefan Agner * Author: Stefan Agner <stefan.agner@toradex.com> 6*2f005695SStefan Agner * 7*2f005695SStefan Agner * SPDX-License-Identifier: GPL-2.0+ 8*2f005695SStefan Agner */ 9*2f005695SStefan Agner 10*2f005695SStefan Agner #include <common.h> 11*2f005695SStefan Agner #include <g_dnl.h> 12*2f005695SStefan Agner #include <sdp.h> 13*2f005695SStefan Agner #include <usb.h> 14*2f005695SStefan Agner 15*2f005695SStefan Agner static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 16*2f005695SStefan Agner { 17*2f005695SStefan Agner int ret = CMD_RET_FAILURE; 18*2f005695SStefan Agner 19*2f005695SStefan Agner if (argc < 2) 20*2f005695SStefan Agner return CMD_RET_USAGE; 21*2f005695SStefan Agner 22*2f005695SStefan Agner char *usb_controller = argv[1]; 23*2f005695SStefan Agner int controller_index = simple_strtoul(usb_controller, NULL, 0); 24*2f005695SStefan Agner board_usb_init(controller_index, USB_INIT_DEVICE); 25*2f005695SStefan Agner 26*2f005695SStefan Agner g_dnl_clear_detach(); 27*2f005695SStefan Agner g_dnl_register("usb_dnl_sdp"); 28*2f005695SStefan Agner 29*2f005695SStefan Agner ret = sdp_init(controller_index); 30*2f005695SStefan Agner if (ret) { 31*2f005695SStefan Agner error("SDP init failed: %d", ret); 32*2f005695SStefan Agner goto exit; 33*2f005695SStefan Agner } 34*2f005695SStefan Agner 35*2f005695SStefan Agner /* This command typically does not return but jumps to an image */ 36*2f005695SStefan Agner sdp_handle(controller_index); 37*2f005695SStefan Agner error("SDP ended"); 38*2f005695SStefan Agner 39*2f005695SStefan Agner exit: 40*2f005695SStefan Agner g_dnl_unregister(); 41*2f005695SStefan Agner board_usb_cleanup(controller_index, USB_INIT_DEVICE); 42*2f005695SStefan Agner 43*2f005695SStefan Agner return ret; 44*2f005695SStefan Agner } 45*2f005695SStefan Agner 46*2f005695SStefan Agner U_BOOT_CMD(sdp, 2, 1, do_sdp, 47*2f005695SStefan Agner "Serial Downloader Protocol", 48*2f005695SStefan Agner "<USB_controller>\n" 49*2f005695SStefan Agner " - serial downloader protocol via <USB_controller>\n" 50*2f005695SStefan Agner ); 51