Avoid evaluating the XHCI control endpoint context.

The XHCI specification says that the XHCI controller should detect
reception of the USB device descriptors, and automatically update
the max packet size in the control endpoint context.

Differential Revision:	https://reviews.freebsd.org/D26104
Reviewed by:	kp@
MFC after:	1 week
Sponsored by:	Mellanox Technologies
This commit is contained in:
Hans Petter Selasky 2020-08-19 11:50:12 +00:00
parent c3b0de2eae
commit 68128138a5
2 changed files with 3 additions and 15 deletions

View File

@ -2398,8 +2398,6 @@ xhci_configure_endpoint(struct usb_device *udev,
/* store endpoint mode */ /* store endpoint mode */
pepext->trb_ep_mode = ep_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); usb_pc_cpu_flush(pepext->page_cache);
if (ep_mode == USB_EP_MODE_STREAMS) { if (ep_mode == USB_EP_MODE_STREAMS) {
@ -2929,17 +2927,6 @@ xhci_transfer_insert(struct usb_xfer *xfer)
return (USB_ERR_NOMEM); 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 */ /* check for stopped condition, after putting transfer on interrupt queue */
if (pepext->trb_running == 0) { if (pepext->trb_running == 0) {
struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus); struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus);
@ -3917,8 +3904,10 @@ xhci_configure_reset_endpoint(struct usb_xfer *xfer)
if (!(sc->sc_hw.devs[index].ep_configured & mask)) { if (!(sc->sc_hw.devs[index].ep_configured & mask)) {
sc->sc_hw.devs[index].ep_configured |= mask; sc->sc_hw.devs[index].ep_configured |= mask;
err = xhci_cmd_configure_ep(sc, buf_inp.physaddr, 0, index); err = xhci_cmd_configure_ep(sc, buf_inp.physaddr, 0, index);
} else { } else if (epno != 1) {
err = xhci_cmd_evaluate_ctx(sc, buf_inp.physaddr, index); err = xhci_cmd_evaluate_ctx(sc, buf_inp.physaddr, index);
} else {
err = 0;
} }
if (err != 0) { if (err != 0) {

View File

@ -393,7 +393,6 @@ struct xhci_endpoint_ext {
uint8_t trb_halted; uint8_t trb_halted;
uint8_t trb_running; uint8_t trb_running;
uint8_t trb_ep_mode; uint8_t trb_ep_mode;
uint8_t trb_ep_maxp;
}; };
enum { enum {