
Hi Mattijs,
On Thu, Jan 5, 2023 at 10:06 AM Mattijs Korpershoek mkorpershoek@baylibre.com wrote:
On Wed, Jan 04, 2023 at 17:46, Dario Binacchi dario.binacchi@amarulasolutions.com wrote:
The patch fixes the following error when updating a BSH SMM S2 board: 3:72>Start Cmd:FB[-t 8000]: ucmd nand write ${loadaddr} nanddtb ${filesize} 3:72>Okay (0.023s) 3:72>Start Cmd:FB: reboot 3:72>Fail Bulk(R):LIBUSB_ERROR_IO(0s)
The "fastboot reboot" command detaches the USB when it still needs to be used. So let's detach the USB just before the reset.
CC: Mattijs Korpershoek mkorpershoek@baylibre.com Fixes: 5f7e01e9d5d800 ("usb: gadget: fastboot: detach usb on reboot commands") Suggested-by: Michael Trimarchi michael@amarulasolutions.com Signed-off-by: Dario Binacchi dario.binacchi@amarulasolutions.com
Hi Dario,
Thank you for your patch and for reporting the problem.
Unfortunately, applying it seems to break the problem I tried to solve with 5f7e01e9d5d800 ("usb: gadget: fastboot: detach usb on reboot commands")
Does reverting 5f7e01e9d5d800 also solves your issue?
Yes
I'll spend some time on this.
Ok, thanks. So we can test on our hardware. Regards Dario
Changes in v2:
- Add 'Suggested-by' tag.
drivers/usb/gadget/f_fastboot.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index 07b1681c8a9a..0b3fae564d0a 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -419,11 +419,6 @@ static int fastboot_tx_write_str(const char *buffer) return fastboot_tx_write(buffer, strlen(buffer)); }
-static void compl_do_reset(struct usb_ep *ep, struct usb_request *req) -{
do_reset(NULL, 0, 0, NULL);
-}
static unsigned int rx_bytes_expected(struct usb_ep *ep) { int rx_remain = fastboot_data_remaining(); @@ -495,6 +490,12 @@ static void do_bootm_on_complete(struct usb_ep *ep, struct usb_request *req) do_exit_on_complete(ep, req); }
+static void compl_do_reset(struct usb_ep *ep, struct usb_request *req) +{
do_exit_on_complete(ep, req);
do_reset(NULL, 0, 0, NULL);
+}
#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT) static void do_acmd_complete(struct usb_ep *ep, struct usb_request *req) { @@ -544,7 +545,6 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req) case FASTBOOT_COMMAND_REBOOT_FASTBOOTD: case FASTBOOT_COMMAND_REBOOT_RECOVERY: fastboot_func->in_req->complete = compl_do_reset;
g_dnl_trigger_detach(); break;
#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT) case FASTBOOT_COMMAND_ACMD: -- 2.32.0