u-boot.lists.denx.de archive mirror
 help / color / mirror / Atom feed
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

      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).