X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=common%2Fdfu.c;h=da6289b218dd2aa66e1c6d91ee4b5bf25eedc637;hb=94c03c7c772bf7818ea84a092a90beaba1782046;hp=07dff317a6c2708bb7f0deff133bae7f3bd8e11c;hpb=4f42a0d7210bd8d4d1f5e2fb73456679d74c44cd;p=oweals%2Fu-boot.git diff --git a/common/dfu.c b/common/dfu.c index 07dff317a6..da6289b218 100644 --- a/common/dfu.c +++ b/common/dfu.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * dfu.c -- dfu command * @@ -7,8 +8,6 @@ * Copyright (C) 2012 Samsung Electronics * authors: Andrzej Pietrasiewicz * Lukasz Majewski - * - * SPDX-License-Identifier: GPL-2.0+ */ #include @@ -24,9 +23,9 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget) bool dfu_reset = false; int ret, i = 0; - ret = board_usb_init(usbctrl_index, USB_INIT_DEVICE); + ret = usb_gadget_initialize(usbctrl_index); if (ret) { - pr_err("board usb init failed\n"); + pr_err("usb_gadget_initialize failed\n"); return CMD_RET_FAILURE; } g_dnl_clear_detach(); @@ -36,6 +35,10 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget) return CMD_RET_FAILURE; } +#ifdef CONFIG_DFU_TIMEOUT + unsigned long start_time = get_timer(0); +#endif + while (1) { if (g_dnl_detach()) { /* @@ -80,12 +83,25 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget) } } +#ifdef CONFIG_DFU_TIMEOUT + unsigned long wait_time = dfu_get_timeout(); + + if (wait_time) { + unsigned long current_time = get_timer(start_time); + + if (current_time > wait_time) { + debug("Inactivity timeout, abort DFU\n"); + goto exit; + } + } +#endif + WATCHDOG_RESET(); usb_gadget_handle_interrupts(usbctrl_index); } exit: g_dnl_unregister(); - board_usb_cleanup(usbctrl_index, USB_INIT_DEVICE); + usb_gadget_release(usbctrl_index); if (dfu_reset) do_reset(NULL, 0, 0, NULL);