|
@@ -1423,15 +1423,17 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
|
|
|
ep_ctx->ep_info2 |= cpu_to_le32(xhci_get_endpoint_type(udev, ep));
|
|
|
|
|
|
/* Set the max packet size and max burst */
|
|
|
+ max_packet = GET_MAX_PACKET(usb_endpoint_maxp(&ep->desc));
|
|
|
+ max_burst = 0;
|
|
|
switch (udev->speed) {
|
|
|
case USB_SPEED_SUPER:
|
|
|
- max_packet = usb_endpoint_maxp(&ep->desc);
|
|
|
- ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet));
|
|
|
/* dig out max burst from ep companion desc */
|
|
|
- max_packet = ep->ss_ep_comp.bMaxBurst;
|
|
|
- ep_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(max_packet));
|
|
|
+ max_burst = ep->ss_ep_comp.bMaxBurst;
|
|
|
break;
|
|
|
case USB_SPEED_HIGH:
|
|
|
+ /* Some devices get this wrong */
|
|
|
+ if (usb_endpoint_xfer_bulk(&ep->desc))
|
|
|
+ max_packet = 512;
|
|
|
/* bits 11:12 specify the number of additional transaction
|
|
|
* opportunities per microframe (USB 2.0, section 9.6.6)
|
|
|
*/
|
|
@@ -1439,17 +1441,16 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
|
|
|
usb_endpoint_xfer_int(&ep->desc)) {
|
|
|
max_burst = (usb_endpoint_maxp(&ep->desc)
|
|
|
& 0x1800) >> 11;
|
|
|
- ep_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(max_burst));
|
|
|
}
|
|
|
- /* Fall through */
|
|
|
+ break;
|
|
|
case USB_SPEED_FULL:
|
|
|
case USB_SPEED_LOW:
|
|
|
- max_packet = GET_MAX_PACKET(usb_endpoint_maxp(&ep->desc));
|
|
|
- ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet));
|
|
|
break;
|
|
|
default:
|
|
|
BUG();
|
|
|
}
|
|
|
+ ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet) |
|
|
|
+ MAX_BURST(max_burst));
|
|
|
max_esit_payload = xhci_get_max_esit_payload(xhci, udev, ep);
|
|
|
ep_ctx->tx_info = cpu_to_le32(MAX_ESIT_PAYLOAD_FOR_EP(max_esit_payload));
|
|
|
|