RE: xhci data toggle out of sync
- Reply: Hans Petter Selasky : "Re: xhci data toggle out of sync"
- In reply to: Hans Petter Selasky : "Re: xhci data toggle out of sync"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 19 Apr 2022 11:36:07 UTC
Hi HPS,
Please find the diff below for the error prints.
[maheshmv@svl-bsdx-02 /b/maheshmv/usb_issue/src]$ git diff sys/dev/usb/controller/xhci.c
diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c
index 70a73dcc94c..fa7c1062ada 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,25 @@ 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
+
+ device_printf(sc->sc_bus.parent, "MMV endpoint %u state %x\n", epno, xhci_get_endpoint_state(udev, epno));
+ err = xhci_cmd_stop_ep(sc, 0, epno, index);
+ if (err !=0)
+ device_printf(sc->sc_bus.parent, "MMV Could not stop endpoint %u err %x\n", epno, err);
+
+ err = xhci_cmd_reset_ep(sc, 0, epno, index);
+ if (err !=0)
+ device_printf(sc->sc_bus.parent, "MMV Could not reset endpoint %u err %x\n", epno, err);
err = xhci_cmd_set_tr_dequeue_ptr(sc,
(pepext->physaddr + (stream_id * sizeof(struct xhci_trb) *
Thanks,
Mahesh
Juniper Business Use Only
-----Original Message-----
From: Hans Petter Selasky <hps@selasky.org>
Sent: Tuesday, April 19, 2022 5:03 PM
To: Kamal Prasad <krprasad@juniper.net>; 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>; 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]
On 4/19/22 12:59, Kamal Prasad wrote:
> Hi Peter,
>
>>> Which is not a valid return code from xhci_do_command(). Can you check
> where this value comes from?
>
> This is coming from this location in xhci_configure_endpoint() which in turn is called by xhci_configure_endpoint_by_xfer():-
> ---
> epno = XHCI_EPNO2EPID(epno);
>
> if (epno == 0)
> return (USB_ERR_NO_PIPE); /* invalid */
> ---
Hi Kamal,
I'm asking about the value after "err" in these prints:
> > xhci0: MMV Could not stop endpoint 3 err 12
> > xhci0: MMV Could not reset endpoint 3 err 12
3875
3876 err = xhci_cmd_stop_ep(sc, 0, epno, index);
3877
3878 if (err != 0)
3879 DPRINTF("Could not stop endpoint %u\n", epno);
3880
3881 err = xhci_cmd_reset_ep(sc, 0, epno, index);
3882
3883 if (err != 0)
3884 DPRINTF("Could not reset endpoint %u\n", epno);
3885
--HPS