Merge branch 'imx/devel' into next/devel
This commit is contained in:
@@ -761,7 +761,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
|
||||
memset(buf, 0, retval);
|
||||
status = 0;
|
||||
|
||||
mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC;
|
||||
mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC;
|
||||
|
||||
spin_lock_irqsave(&xhci->lock, flags);
|
||||
/* For each port, did anything change? If so, set that bit in buf. */
|
||||
|
@@ -1934,8 +1934,10 @@ static int handle_tx_event(struct xhci_hcd *xhci,
|
||||
int status = -EINPROGRESS;
|
||||
struct urb_priv *urb_priv;
|
||||
struct xhci_ep_ctx *ep_ctx;
|
||||
struct list_head *tmp;
|
||||
u32 trb_comp_code;
|
||||
int ret = 0;
|
||||
int td_num = 0;
|
||||
|
||||
slot_id = TRB_TO_SLOT_ID(le32_to_cpu(event->flags));
|
||||
xdev = xhci->devs[slot_id];
|
||||
@@ -1957,6 +1959,12 @@ static int handle_tx_event(struct xhci_hcd *xhci,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Count current td numbers if ep->skip is set */
|
||||
if (ep->skip) {
|
||||
list_for_each(tmp, &ep_ring->td_list)
|
||||
td_num++;
|
||||
}
|
||||
|
||||
event_dma = le64_to_cpu(event->buffer);
|
||||
trb_comp_code = GET_COMP_CODE(le32_to_cpu(event->transfer_len));
|
||||
/* Look for common error cases */
|
||||
@@ -2068,7 +2076,18 @@ static int handle_tx_event(struct xhci_hcd *xhci,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* We've skipped all the TDs on the ep ring when ep->skip set */
|
||||
if (ep->skip && td_num == 0) {
|
||||
ep->skip = false;
|
||||
xhci_dbg(xhci, "All tds on the ep_ring skipped. "
|
||||
"Clear skip flag.\n");
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
td = list_entry(ep_ring->td_list.next, struct xhci_td, td_list);
|
||||
if (ep->skip)
|
||||
td_num--;
|
||||
|
||||
/* Is this a TRB in the currently executing TD? */
|
||||
event_seg = trb_in_td(ep_ring->deq_seg, ep_ring->dequeue,
|
||||
|
Reference in New Issue
Block a user