Hi,
Thank you for the review.
Michał Pecio michal.pecio@gmail.com 於 2024年9月11日 週三 下午3:52寫道:
Hi,
This happens when the xHCI driver enqueue a control TD (which cross over the Link TRB between two ring segments, as shown) in the endpoint zero's transfer ring. Seems the Etron xHCI host can not perform this TD correctly, causing the USB transfer error occurred, maybe the upper driver retry that control-IN request can solve problem, but not all drivers do this.
| |
| TRB | Setup Stage
| TRB | Link
| TRB | Data Stage
| TRB | Status Stage
| |
I wonder about a few things.
- What are the exact symptoms, besides Ethernet driver errors?
Any errors from xhci_hcd? What if dynamic debug is enabled?
The xhci driver receives a transfer event TRB (completion code is "USB Transaction Error") when the issue is triggered.
- How did you determine that this is the exact cause?
The issue is triggered every time when a Link TRB follows a Setup Stage TRB.
- Does it happen every time when a Link follows Setup, or only
randomly and it takes lots of control transfers to trigger it?
Yes, it happens every time.
- How is it even possible? As far as I see, Linux simply queues
three TRBs for a control URB. There are 255 slots in a segemnt, so exactly 85 URBs should fit, and then back to the first slot.
The xhci driver also queues no data control transfers.
Regards, Michal
Thanks, Kuangyi Chiang