[PATCH] usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command

jay.chen posted 1 patch 8 months, 4 weeks ago
There is a newer version of this series
drivers/usb/host/xhci-mem.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command
Posted by jay.chen 8 months, 4 weeks ago
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, 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.

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.

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));
+
 	trace_xhci_setup_addressable_virt_device(dev);
 
 	/* Steps 7 and 8 were done in xhci_alloc_virt_device() */
-- 
2.43.5
Re: [PATCH] usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command
Posted by Greg KH 8 months, 4 weeks ago
On Wed, May 14, 2025 at 09:40:08PM +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, 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.
> 
> 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.
> 
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=220033
> Signed-off-by: jay.chen <shawn2000100@gmail.com>

Please use your name, not your email alias.

And as you are now using a gmail account, please set the "From:" line at
the top of the patch properly as is documented.  Please work with others
at your company that know how to do all of this if you have questions.

Also, this is a v2 patch, so always document what changed to warrant a
new version.

thanks,

greg k-h
Re: [PATCH] usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command
Posted by 陳子潔 8 months, 3 weeks ago
Hi Greg,

I got it, thank you so much for the effort!

I already patched a newer version
Link: https://lore.kernel.org/linux-usb/20250516033908.7386-1-shawn2000100@gmail.com/T/#u


On Wed, May 14, 2025 at 10:46 PM Greg KH <gregkh@linuxfoundation.org> wrote:
>
> On Wed, May 14, 2025 at 09:40:08PM +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, 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.
> >
> > 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.
> >
> > Link: https://bugzilla.kernel.org/show_bug.cgi?id=220033
> > Signed-off-by: jay.chen <shawn2000100@gmail.com>
>
> Please use your name, not your email alias.
>
> And as you are now using a gmail account, please set the "From:" line at
> the top of the patch properly as is documented.  Please work with others
> at your company that know how to do all of this if you have questions.
>
> Also, this is a v2 patch, so always document what changed to warrant a
> new version.
>
> thanks,
>
> greg k-h