| 1 | --- a/drivers/usb/host/ehci-q.c |
| 2 | +++ b/drivers/usb/host/ehci-q.c |
| 3 | @@ -1172,6 +1172,9 @@ static void end_unlink_async (struct ehc |
| 4 | ehci->reclaim = NULL; |
| 5 | start_unlink_async (ehci, next); |
| 6 | } |
| 7 | + |
| 8 | + if (ehci->has_synopsys_hc_bug) |
| 9 | + writel((u32)ehci->async->qh_dma, &ehci->regs->async_next); |
| 10 | } |
| 11 | |
| 12 | /* makes sure the async qh will become idle */ |
| 13 | --- a/drivers/usb/host/ehci.h |
| 14 | +++ b/drivers/usb/host/ehci.h |
| 15 | @@ -129,6 +129,7 @@ struct ehci_hcd { /* one per controlle |
| 16 | unsigned has_amcc_usb23:1; |
| 17 | unsigned need_io_watchdog:1; |
| 18 | unsigned broken_periodic:1; |
| 19 | + unsigned has_synopsys_hc_bug:1; /* Synopsys HC */ |
| 20 | |
| 21 | /* required for usb32 quirk */ |
| 22 | #define OHCI_CTRL_HCFS (3 << 6) |
| 23 | |