From: "Michał Pecio" <michal.pecio@gmail.com>
To: Jay Chen <shawn2000100@gmail.com>
Cc: mathias.nyman@intel.com, gregkh@linuxfoundation.org,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
jay.chen@siemens.com
Subject: Re: [PATCH v3] usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command
Date: Mon, 19 May 2025 00:57:15 +0200 [thread overview]
Message-ID: <20250519005715.532cf34d@foxbook> (raw)
In-Reply-To: <20250516033908.7386-1-shawn2000100@gmail.com>
On Fri, 16 May 2025 11:39:05 +0800, Jay Chen wrote:
> According to the xHCI 1.2 spec (Section 6.2.3, p.454), the Average
> TRB Length (avg_trb_len) for control endpoints should be set to 8.
>
> Currently, during the Address Device Command,
Not only during this command, but forever.
> EP0's avg_trb_len remains 0, which may cause some xHCI hardware to
> reject the Input Context, resulting in device enumeration failures.
> In extreme cases, using a zero avg_trb_len in calculations may lead
> to division-by-zero errors and unexpected system crashes.
Only the xHC internal firmware could crash or misbeahve from that.
> This patch sets avg_trb_len to 8 for EP0 in
> xhci_setup_addressable_virt_dev(), ensuring compliance with the spec
> and improving compatibility across various host controller
> implementations.
Any particular problems which motivated this effort?
I tried an equivalent change (with = instead of |=) on several HCs
and found no difference, including no elimination of known HW bugs.
> v3:
> - Corrected author name in commit metadata and added changelog.
>
> v2:
> - Fixed malformed patch formatting issue pointed out by maintainer.
>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=220033
> Signed-off-by: Jay Chen <shawn2000100@gmail.com>
> ---
> drivers/usb/host/xhci-mem.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
> index d698095fc88d..fed9e9d1990c 100644
> --- a/drivers/usb/host/xhci-mem.c
> +++ b/drivers/usb/host/xhci-mem.c
> @@ -1166,6 +1166,8 @@ int xhci_setup_addressable_virt_dev(struct xhci_hcd *xhci, struct usb_device *ud
> ep0_ctx->deq = cpu_to_le64(dev->eps[0].ring->first_seg->dma |
> dev->eps[0].ring->cycle_state);
>
> + ep0_ctx->tx_info |= cpu_to_le32(EP_AVG_TRB_LENGTH(8));
The rest of ep0 tx_info is zero, so this could be = instead of |=.
> +
> trace_xhci_setup_addressable_virt_device(dev);
>
> /* Steps 7 and 8 were done in xhci_alloc_virt_device() */
> --
> 2.43.5
>
next prev parent reply other threads:[~2025-05-18 22:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-16 3:39 [PATCH v3] usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command Jay Chen
2025-05-18 22:57 ` Michał Pecio [this message]
2025-05-19 13:14 ` Mathias Nyman
2025-05-19 15:47 ` 陳子潔
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=20250519005715.532cf34d@foxbook \
--to=michal.pecio@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=jay.chen@siemens.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=shawn2000100@gmail.com \
/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.