Fully revert r364379.
The "Intel Sunrise Point-LP USB 3.0 controller" doesn't update the wMaxPacket field in the control endpoint context automatically causing a BABBLE error code on the initial first USB device descriptor read, when the bMaxPacketSize is not 8 bytes. Reported by: wulf@ PR: 248784 MFC after: 1 week Sponsored by: Mellanox Technologies
This commit is contained in:
parent
2721e6f91b
commit
59ca674ef2
@ -2398,6 +2398,8 @@ xhci_configure_endpoint(struct usb_device *udev,
|
||||
|
||||
/* store endpoint mode */
|
||||
pepext->trb_ep_mode = ep_mode;
|
||||
/* store bMaxPacketSize for control endpoints */
|
||||
pepext->trb_ep_maxp = edesc->wMaxPacketSize[0];
|
||||
usb_pc_cpu_flush(pepext->page_cache);
|
||||
|
||||
if (ep_mode == USB_EP_MODE_STREAMS) {
|
||||
@ -2927,6 +2929,17 @@ xhci_transfer_insert(struct usb_xfer *xfer)
|
||||
return (USB_ERR_NOMEM);
|
||||
}
|
||||
|
||||
/* check if bMaxPacketSize changed */
|
||||
if (xfer->flags_int.control_xfr != 0 &&
|
||||
pepext->trb_ep_maxp != xfer->endpoint->edesc->wMaxPacketSize[0]) {
|
||||
|
||||
DPRINTFN(8, "Reconfigure control endpoint\n");
|
||||
|
||||
/* force driver to reconfigure endpoint */
|
||||
pepext->trb_halted = 1;
|
||||
pepext->trb_running = 0;
|
||||
}
|
||||
|
||||
/* check for stopped condition, after putting transfer on interrupt queue */
|
||||
if (pepext->trb_running == 0) {
|
||||
struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus);
|
||||
|
@ -393,6 +393,7 @@ struct xhci_endpoint_ext {
|
||||
uint8_t trb_halted;
|
||||
uint8_t trb_running;
|
||||
uint8_t trb_ep_mode;
|
||||
uint8_t trb_ep_maxp;
|
||||
};
|
||||
|
||||
enum {
|
||||
|
Loading…
Reference in New Issue
Block a user