183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
22f005695SStefan Agner /*
32f005695SStefan Agner * cmd_sdp.c -- sdp command
42f005695SStefan Agner *
52f005695SStefan Agner * Copyright (C) 2016 Toradex
62f005695SStefan Agner * Author: Stefan Agner <stefan.agner@toradex.com>
72f005695SStefan Agner */
82f005695SStefan Agner
92f005695SStefan Agner #include <common.h>
102f005695SStefan Agner #include <g_dnl.h>
112f005695SStefan Agner #include <sdp.h>
122f005695SStefan Agner #include <usb.h>
132f005695SStefan Agner
do_sdp(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])142f005695SStefan Agner static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
152f005695SStefan Agner {
162f005695SStefan Agner int ret = CMD_RET_FAILURE;
172f005695SStefan Agner
182f005695SStefan Agner if (argc < 2)
192f005695SStefan Agner return CMD_RET_USAGE;
202f005695SStefan Agner
212f005695SStefan Agner char *usb_controller = argv[1];
222f005695SStefan Agner int controller_index = simple_strtoul(usb_controller, NULL, 0);
23*a06955aeSJean-Jacques Hiblot usb_gadget_initialize(controller_index);
242f005695SStefan Agner
252f005695SStefan Agner g_dnl_clear_detach();
262f005695SStefan Agner g_dnl_register("usb_dnl_sdp");
272f005695SStefan Agner
282f005695SStefan Agner ret = sdp_init(controller_index);
292f005695SStefan Agner if (ret) {
3024ccd0c8SAndre Heider pr_err("SDP init failed: %d\n", ret);
312f005695SStefan Agner goto exit;
322f005695SStefan Agner }
332f005695SStefan Agner
342f005695SStefan Agner /* This command typically does not return but jumps to an image */
352f005695SStefan Agner sdp_handle(controller_index);
3624ccd0c8SAndre Heider pr_err("SDP ended\n");
372f005695SStefan Agner
382f005695SStefan Agner exit:
392f005695SStefan Agner g_dnl_unregister();
40*a06955aeSJean-Jacques Hiblot usb_gadget_release(controller_index);
412f005695SStefan Agner
422f005695SStefan Agner return ret;
432f005695SStefan Agner }
442f005695SStefan Agner
452f005695SStefan Agner U_BOOT_CMD(sdp, 2, 1, do_sdp,
462f005695SStefan Agner "Serial Downloader Protocol",
472f005695SStefan Agner "<USB_controller>\n"
482f005695SStefan Agner " - serial downloader protocol via <USB_controller>\n"
492f005695SStefan Agner );
50