RE: xhci data toggle out of sync
Date: Tue, 19 Apr 2022 08:40:37 UTC
Hi Hans Petter Selasky,
After revert also same issue. I do see lot of reset/stop failures on end point before I see the read errors.
Diff.
diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c
index 70a73dcc94c..48c8fef69e7 100644
--- a/sys/dev/usb/controller/xhci.c
+++ b/sys/dev/usb/controller/xhci.c
@@ -3895,6 +3895,7 @@ xhci_configure_reset_endpoint(struct usb_xfer *xfer)
* Get the endpoint into the stopped state according to the
* endpoint context state diagram in the XHCI specification:
*/
+#if 0
switch (xhci_get_endpoint_state(udev, epno)) {
case XHCI_EPCTX_0_EPSTATE_DISABLED:
break;
@@ -3909,8 +3910,24 @@ xhci_configure_reset_endpoint(struct usb_xfer *xfer)
err = xhci_cmd_stop_ep(sc, 0, epno, index);
if (err != 0)
DPRINTF("Could not stop endpoint %u\n", epno);
+ /*
+ * Need to reset the data toggle, because stop
+ * endpoint doesn't do that:
+ */
+ err = xhci_cmd_reset_ep(sc, 0, epno, index);
+ if (err != 0)
+ DPRINTF("Mahesh Could not reset endpoint %u\n", epno);
break;
}
+#endif
+
+ err = xhci_cmd_stop_ep(sc, 0, epno, index);
+ if (err !=0)
+ device_printf(sc->sc_bus.parent, "MMV Could not stop endpoint %u\n", epno);
+
+ err = xhci_cmd_reset_ep(sc, 0, epno, index);
+ if (err !=0)
+ device_printf(sc->sc_bus.parent, "MMV Could not reset endpoint %u\n", epno);
err = xhci_cmd_set_tr_dequeue_ptr(sc,
(pepext->physaddr + (stream_id * sizeof(struct xhci_trb)
Errors:
Tue Apr 19 14:02xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not reset endpoint 3
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not reset endpoint 3
FreeBSD/arm (Amnesiac) (ttyu0)
login: xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not reset endpoint 3
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not reset endpoint 3
xhci0: MMV Could not stop endpoint 3
(da0:umass-sim0:0:0:0): READ(10). CDB: 28 00 00 b1 51 28 00 00 80 00
(da0:umass-sim0:0:0:0): CAM status: CCB request completed with an error
(da0:umass-sim0:0:0:0): Retrying command, 3 more tries remain
xhci0: MMV Could not reset endpoint 2
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not reset endpoint 3
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not stop endpoint 3
xhci0: MMV Could not reset endpoint 3
root@:RE:0% usbconfig dump_all_desc
ugen0.1: <Marvell XHCI root HUB> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=SAVE (0mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0300
bDeviceClass = 0x0009 <HUB>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0003
bMaxPacketSize0 = 0x0009
idVendor = 0x0000
idProduct = 0x0000
bcdDevice = 0x0100
iManufacturer = 0x0001 <Marvell>
iProduct = 0x0002 <XHCI root HUB>
iSerialNumber = 0x0000 <no string>
bNumConfigurations = 0x0001
Configuration index 0
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x001f
bNumInterfaces = 0x0001
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x0040
bMaxPower = 0x0000
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0001
bInterfaceClass = 0x0009 <HUB>
bInterfaceSubClass = 0x0000
bInterfaceProtocol = 0x0000
iInterface = 0x0000 <no string>
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0081 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0002
bInterval = 0x00ff
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x00
RAW dump:
0x00 | 0x06, 0x30, 0x00, 0x00, 0x00, 0x00
ugen0.2: <vendor 0x05e3 USB2.0 Hub> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (100mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0200
bDeviceClass = 0x0009 <HUB>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0001
bMaxPacketSize0 = 0x0040
idVendor = 0x05e3
idProduct = 0x0608
bcdDevice = 0x6070
iManufacturer = 0x0000 <no string>
iProduct = 0x0001 <USB2.0 Hub>
iSerialNumber = 0x0000 <no string>
bNumConfigurations = 0x0001
Configuration index 0
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0019
bNumInterfaces = 0x0001
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x00e0
bMaxPower = 0x0032
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0001
bInterfaceClass = 0x0009 <HUB>
bInterfaceSubClass = 0x0000
bInterfaceProtocol = 0x0000
iInterface = 0x0000 <no string>
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0081 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0001
bInterval = 0x000c
bRefresh = 0x0000
bSynchAddress = 0x0000
ugen0.3: <Virtium VTDU31XC008G-A901> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (100mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0200
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0040
idVendor = 0x2aaa
idProduct = 0x0100
bcdDevice = 0x0100
iManufacturer = 0x0001 <Virtium>
iProduct = 0x0003 <VTDU31XC008G-A901>
iSerialNumber = 0x0002 <P1T66005607903260063>
bNumConfigurations = 0x0001
Configuration index 0
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0020
bNumInterfaces = 0x0001
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x0080
bMaxPower = 0x0032
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0002
bInterfaceClass = 0x0008 <Mass storage>
bInterfaceSubClass = 0x0006
bInterfaceProtocol = 0x0050
iInterface = 0x0000 <no string>
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0081 <IN>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0200
bInterval = 0x0000
bRefresh = 0x0000
bSynchAddress = 0x0000
Endpoint 1
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0001 <OUT>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0200
bInterval = 0x0000
bRefresh = 0x0000
bSynchAddress = 0x0000
==
Thanks,
Mahesh
Juniper Business Use Only
-----Original Message-----
From: Hans Petter Selasky <hps@selasky.org>
Sent: Tuesday, April 19, 2022 12:33 PM
To: Mahesh Vardhamanaiah <maheshmv@juniper.net>; freebsd-usb@freebsd.org
Cc: Steve Kiernan <stevek@juniper.net>; Justin Hibbits <jhibbits@juniper.net>; Kumara N Babu <bkumara@juniper.net>; Kamal Prasad <krprasad@juniper.net>; Kristof Provost <kp@FreeBSD.org>; Bjoern A. Zeeb <bz@FreeBSD.org>
Subject: Re: xhci data toggle out of sync
[External Email. Be cautious of content]
Hi Mahesh,
What happens if you revert SVN r365239?
--HPS