aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2016-08-29 08:46:15 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2016-08-29 08:46:15 +0000
commit26b787116ed878335c77ab29bbb67d931111d794 (patch)
tree6ad7b1bc7793a0c8686ac4d740c65f58cf2eb540
parent1f65581b7d43907b1359afa3560eef33e0efd287 (diff)
downloadsrc-26b787116ed878335c77ab29bbb67d931111d794.tar.gz
src-26b787116ed878335c77ab29bbb67d931111d794.zip
MFC r304597:
Fix for invalid use of bits in input context. Basically split configuring of EP0 and non-EP0 into xhci_cmd_evaluate_ctx() and xhci_cmd_configure_ep() respectivly. This resolves some errors when using XHCI under QEMU and gets is more in line with the XHCI specification. PR: 212021
Notes
Notes: svn path=/stable/8/; revision=304995
-rw-r--r--sys/dev/usb/controller/xhci.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c
index 267fdfdf571b..08a38f7b96b8 100644
--- a/sys/dev/usb/controller/xhci.c
+++ b/sys/dev/usb/controller/xhci.c
@@ -3794,12 +3794,10 @@ xhci_configure_reset_endpoint(struct usb_xfer *xfer)
xhci_configure_mask(udev, (1U << epno) | 1U, 0);
- err = xhci_cmd_evaluate_ctx(sc, buf_inp.physaddr, index);
-
- if (err != 0)
- DPRINTF("Could not configure endpoint %u\n", epno);
-
- err = xhci_cmd_configure_ep(sc, buf_inp.physaddr, 0, index);
+ if (epno > 1)
+ err = xhci_cmd_configure_ep(sc, buf_inp.physaddr, 0, index);
+ else
+ err = xhci_cmd_evaluate_ctx(sc, buf_inp.physaddr, index);
if (err != 0)
DPRINTF("Could not configure endpoint %u\n", epno);
@@ -4183,6 +4181,10 @@ xhci_device_state_change(struct usb_device *udev)
sc->sc_hw.devs[index].state = XHCI_ST_ADDRESSED;
+ /* set configure mask to slot only */
+ xhci_configure_mask(udev, 1, 0);
+
+ /* deconfigure all endpoints, except EP0 */
err = xhci_cmd_configure_ep(sc, 0, 1, index);
if (err) {