Hi,

Can you try the attached patch.

I need both output from DMESG and Ellisys.

--HPS
diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c
index 0a1e5c95c41..c551cbdc285 100644
--- a/sys/dev/usb/controller/xhci.c
+++ b/sys/dev/usb/controller/xhci.c
@@ -1459,7 +1459,19 @@ xhci_set_address(struct usb_device *udev, struct mtx *mtx, uint16_t address)
 
 		if (err != 0) {
 			temp = le32toh(sc->sc_cmd_result[0]);
-			if (address == 0 && sc->sc_port_route != NULL &&
+			if (address != 0) {
+				printf("TRYING AGAIN SET ADDRESS FOR XHCI\n");
+				err = xhci_cmd_set_address(sc, buf_inp.physaddr,
+					1, index);
+				if (err == 0) {
+					/* wait 20ms */
+					usb_pause_mtx(&sc->sc_bus.bus_mtx, hz / 50);
+					err = xhci_cmd_set_address(sc, buf_inp.physaddr,
+					    0, index);
+					if (err == 0)
+						goto success;
+				}
+			} else if (address == 0 && sc->sc_port_route != NULL &&
 			    XHCI_TRB_2_ERROR_GET(temp) ==
 			    XHCI_TRB_ERROR_PARAMETER) {
 				/* LynxPoint XHCI - ports are not switchable */
@@ -1471,7 +1483,7 @@ xhci_set_address(struct usb_device *udev, struct mtx *mtx, uint16_t address)
 			if (address != 0)
 				break;
 		}
-
+success:
 		/* update device address to new value */
 
 		usbd_get_page(&hdev->device_pc, 0, &buf_dev);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "[email protected]"

Reply via email to