xref: /openbmc/u-boot/cmd/usb_gadget_sdp.c (revision d94604d5)
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