|
@@ -2386,10 +2386,18 @@ int xhci_discover_or_reset_device(struct usb_hcd *hcd, struct usb_device *udev)
|
|
|
/* Everything but endpoint 0 is disabled, so free or cache the rings. */
|
|
|
last_freed_endpoint = 1;
|
|
|
for (i = 1; i < 31; ++i) {
|
|
|
- if (!virt_dev->eps[i].ring)
|
|
|
- continue;
|
|
|
- xhci_free_or_cache_endpoint_ring(xhci, virt_dev, i);
|
|
|
- last_freed_endpoint = i;
|
|
|
+ struct xhci_virt_ep *ep = &virt_dev->eps[i];
|
|
|
+
|
|
|
+ if (ep->ep_state & EP_HAS_STREAMS) {
|
|
|
+ xhci_free_stream_info(xhci, ep->stream_info);
|
|
|
+ ep->stream_info = NULL;
|
|
|
+ ep->ep_state &= ~EP_HAS_STREAMS;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ep->ring) {
|
|
|
+ xhci_free_or_cache_endpoint_ring(xhci, virt_dev, i);
|
|
|
+ last_freed_endpoint = i;
|
|
|
+ }
|
|
|
}
|
|
|
xhci_dbg(xhci, "Output context after successful reset device cmd:\n");
|
|
|
xhci_dbg_ctx(xhci, virt_dev->out_ctx, last_freed_endpoint);
|