|
@@ -1796,11 +1796,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
|
|
|
int i;
|
|
|
|
|
|
/* Free the Event Ring Segment Table and the actual Event Ring */
|
|
|
- if (xhci->ir_set) {
|
|
|
- xhci_writel(xhci, 0, &xhci->ir_set->erst_size);
|
|
|
- xhci_write_64(xhci, 0, &xhci->ir_set->erst_base);
|
|
|
- xhci_write_64(xhci, 0, &xhci->ir_set->erst_dequeue);
|
|
|
- }
|
|
|
size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries);
|
|
|
if (xhci->erst.entries)
|
|
|
dma_free_coherent(&pdev->dev, size,
|
|
@@ -1812,7 +1807,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
|
|
|
xhci->event_ring = NULL;
|
|
|
xhci_dbg(xhci, "Freed event ring\n");
|
|
|
|
|
|
- xhci_write_64(xhci, 0, &xhci->op_regs->cmd_ring);
|
|
|
if (xhci->cmd_ring)
|
|
|
xhci_ring_free(xhci, xhci->cmd_ring);
|
|
|
xhci->cmd_ring = NULL;
|
|
@@ -1841,7 +1835,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
|
|
|
xhci->medium_streams_pool = NULL;
|
|
|
xhci_dbg(xhci, "Freed medium stream array pool\n");
|
|
|
|
|
|
- xhci_write_64(xhci, 0, &xhci->op_regs->dcbaa_ptr);
|
|
|
if (xhci->dcbaa)
|
|
|
dma_free_coherent(&pdev->dev, sizeof(*xhci->dcbaa),
|
|
|
xhci->dcbaa, xhci->dcbaa->dma);
|
|
@@ -2459,6 +2452,8 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
|
|
|
|
|
|
fail:
|
|
|
xhci_warn(xhci, "Couldn't initialize memory\n");
|
|
|
+ xhci_halt(xhci);
|
|
|
+ xhci_reset(xhci);
|
|
|
xhci_mem_cleanup(xhci);
|
|
|
return -ENOMEM;
|
|
|
}
|