From: Mattijs Korpershoek via U-Boot <u-boot@lists.u-boot-project.org>
To: "Lothar Waßmann" <LW@KARO-electronics.de>,
"Petr Beneš" <Petr.Benes@ysoft.com>
Cc: "u-boot@lists.denx.de" <u-boot@lists.denx.de>
Subject: Re: Regression in f_fastboot due to commit 6a92e9827650 ("usb: ci_udc: Check ci_ep->desc before use")
Date: Wed, 22 Jul 2026 09:24:40 +0200 [thread overview]
Message-ID: <87ecgvij0n.fsf@kernel.org> (raw)
In-Reply-To: <20260715072313.44c3f2b1.LW@KARO-electronics.de>
Hi Lothar,
On Wed, Jul 15, 2026 at 07:23, Lothar Waßmann <LW@KARO-electronics.de> wrote:
> Hi,
>
> On Fri, 10 Jul 2026 21:27:48 +0000 Petr Beneš wrote:
>> Hello Lothar and Mattijs,
>>
>> I hope web outlook doesn't render my response unreadable.
>> ________________________________________
>> From: Mattijs Korpershoek <mkorpershoek@kernel.org>
>> Sent: Thursday, July 9, 2026 17:15
>> To: Lothar Waßmann; u-boot@lists.denx.de
>> Cc: Petr Beneš
>> Subject: Re: Regression in f_fastboot due to commit 6a92e9827650 ("usb: ci_udc: Check ci_ep->desc before use")
>>
>> Hi Lothar,
>>
>> On Wed, Jul 08, 2026 at 07:12, Lothar Waßmann <LW@KARO-electronics.de> wrote:
>>
>> > Hi,
>> >
>> > commit 6a92e9827650 ("usb: ci_udc: Check ci_ep->desc before use") has
>> > the side effect that an empty buffer is being passed on to
>> > rx_handler_command() in drivers/usb/gadget/f_fastboot.c upon
>> > termination of a fastboot session which leads to a
>> > 'command not recognized' error message being printed on the console.
>>
>> Thank you for reporting this.
>>
>> >
>> > Obviously without the commit the offending USB request had been silently
>> > dropped but is now delivered to the upper levels.
>>
>> Well, it was not silently dropped in case of the ethernet gadget, it was silently corrupting memory.
>>
>> >
>> > I'm not sure what the correct fix would be.
>> > Should the fastboot driver ignore the empty command buffer or should
>> > the "Moreover, the patch gets rid of possible outstanding requests
>> > if the endpoint's state changes to disabled." part of the commit be
>> > reverted?
>>
>> Hmm, maybe I got it wrong. The endpoint got disabled, so what should happen with requests?
>>
>> linux/usb/gadget.h reads:
>>
>> * @complete: Function called when request completes, so this request and
>> * its buffer may be re-used.
>> * Reads terminate with a short packet, or when the buffer fills,
>> * whichever comes first. When writes terminate, some data bytes
>> * will usually still be in flight (often in a hardware fifo).
>> * Errors (for reads or writes) stop the queue from advancing
>> * until the completion function returns, so that any transfers
>> * invalidated by the error may first be dequeued.
>>
>> Petr, did you observe similar behaviour with the ums gadget?
>>
>> I didn't see any wrongdoing of the ethernet gadget.
>> >
>> >
> I found a solution for the problem. The ci_udc driver checks the req
> status for -EINPROGRESS in several places, but does never initialize the
> status to that value.
>
> This patch alleviates the problem:
> Index: a/drivers/usb/gadget/ci_udc.c
> ===================================================================
> --- a/drivers/usb/gadget/ci_udc.c
> +++ b/drivers/usb/gadget/ci_udc.c
> @@ -530,6 +530,9 @@ static void ci_ep_submit_next_request(st
> head = ci_get_qh(num, in);
>
> ci_req = list_first_entry(&ci_ep->queue, struct ci_req, queue);
> +
> + ci_req->req.status = -EINPROGRESS;
> +
> len = ci_req->req.length;
>
> head->next = (unsigned long)item;
> @@ -753,6 +756,9 @@ static void handle_ep_complete(struct ci
> ci_ep_submit_next_request(ci_ep);
>
> ci_req->req.actual = ci_req->req.length - len;
> + if (ci_req->req.status == -EINPROGRESS)
> + ci_req->req.status = 0;
> +
> ci_debounce(ci_req, in);
>
> DBG("ept%d %s req %p, complete %x\n",
>
> This is similar to how the Linux driver behaves.
>
> I tested with fastboot and mass-storage gadget.
Thank you for investigating this further.
Ye Li <ye.li@nxp.com> has send a similar patch which just got applied here:
https://git.u-boot-project.org/u-boot/custodians/u-boot-dfu/-/commit/b79147bbd47cd2d50836dc0a57376f4820663637
Can you please check if that works for you as well?
>
>
> Lothar Waßmann
prev parent reply other threads:[~2026-07-22 7:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-08 5:12 Regression in f_fastboot due to commit 6a92e9827650 ("usb: ci_udc: Check ci_ep->desc before use") Lothar Waßmann
2026-07-09 15:15 ` Mattijs Korpershoek
2026-07-10 21:27 ` Petr Beneš
2026-07-15 5:23 ` Lothar Waßmann
2026-07-22 7:24 ` Mattijs Korpershoek via U-Boot [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ecgvij0n.fsf@kernel.org \
--to=u-boot@lists.u-boot-project.org \
--cc=LW@KARO-electronics.de \
--cc=Petr.Benes@ysoft.com \
--cc=mkorpershoek@kernel.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.