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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).