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