diff options
-rw-r--r-- | drivers/usb/host/xhci-ring.c | 79 |
1 files changed, 60 insertions, 19 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 1549b9ceb91a..2e346334a363 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c | |||
@@ -1037,6 +1037,45 @@ struct xhci_segment *trb_in_td(struct xhci_segment *start_seg, | |||
1037 | return 0; | 1037 | return 0; |
1038 | } | 1038 | } |
1039 | 1039 | ||
1040 | static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci, | ||
1041 | unsigned int slot_id, unsigned int ep_index, | ||
1042 | struct xhci_td *td, union xhci_trb *event_trb) | ||
1043 | { | ||
1044 | struct xhci_virt_ep *ep = &xhci->devs[slot_id]->eps[ep_index]; | ||
1045 | ep->ep_state |= EP_HALTED; | ||
1046 | ep->stopped_td = td; | ||
1047 | ep->stopped_trb = event_trb; | ||
1048 | xhci_queue_reset_ep(xhci, slot_id, ep_index); | ||
1049 | xhci_cleanup_stalled_ring(xhci, td->urb->dev, ep_index); | ||
1050 | xhci_ring_cmd_db(xhci); | ||
1051 | } | ||
1052 | |||
1053 | /* Check if an error has halted the endpoint ring. The class driver will | ||
1054 | * cleanup the halt for a non-default control endpoint if we indicate a stall. | ||
1055 | * However, a babble and other errors also halt the endpoint ring, and the class | ||
1056 | * driver won't clear the halt in that case, so we need to issue a Set Transfer | ||
1057 | * Ring Dequeue Pointer command manually. | ||
1058 | */ | ||
1059 | static int xhci_requires_manual_halt_cleanup(struct xhci_hcd *xhci, | ||
1060 | struct xhci_ep_ctx *ep_ctx, | ||
1061 | unsigned int trb_comp_code) | ||
1062 | { | ||
1063 | /* TRB completion codes that may require a manual halt cleanup */ | ||
1064 | if (trb_comp_code == COMP_TX_ERR || | ||
1065 | trb_comp_code == COMP_BABBLE || | ||
1066 | trb_comp_code == COMP_SPLIT_ERR) | ||
1067 | /* The 0.96 spec says a babbling control endpoint | ||
1068 | * is not halted. The 0.96 spec says it is. Some HW | ||
1069 | * claims to be 0.95 compliant, but it halts the control | ||
1070 | * endpoint anyway. Check if a babble halted the | ||
1071 | * endpoint. | ||
1072 | */ | ||
1073 | if ((ep_ctx->ep_info & EP_STATE_MASK) == EP_STATE_HALTED) | ||
1074 | return 1; | ||
1075 | |||
1076 | return 0; | ||
1077 | } | ||
1078 | |||
1040 | /* | 1079 | /* |
1041 | * If this function returns an error condition, it means it got a Transfer | 1080 | * If this function returns an error condition, it means it got a Transfer |
1042 | * event with a corrupted Slot ID, Endpoint ID, or TRB DMA address. | 1081 | * event with a corrupted Slot ID, Endpoint ID, or TRB DMA address. |
@@ -1191,15 +1230,14 @@ static int handle_tx_event(struct xhci_hcd *xhci, | |||
1191 | else | 1230 | else |
1192 | status = 0; | 1231 | status = 0; |
1193 | break; | 1232 | break; |
1194 | case COMP_BABBLE: | 1233 | |
1195 | /* The 0.96 spec says a babbling control endpoint | 1234 | default: |
1196 | * is not halted. The 0.96 spec says it is. Some HW | 1235 | if (!xhci_requires_manual_halt_cleanup(xhci, |
1197 | * claims to be 0.95 compliant, but it halts the control | 1236 | ep_ctx, trb_comp_code)) |
1198 | * endpoint anyway. Check if a babble halted the | ||
1199 | * endpoint. | ||
1200 | */ | ||
1201 | if (ep_ctx->ep_info != EP_STATE_HALTED) | ||
1202 | break; | 1237 | break; |
1238 | xhci_dbg(xhci, "TRB error code %u, " | ||
1239 | "halted endpoint index = %u\n", | ||
1240 | trb_comp_code, ep_index); | ||
1203 | /* else fall through */ | 1241 | /* else fall through */ |
1204 | case COMP_STALL: | 1242 | case COMP_STALL: |
1205 | /* Did we transfer part of the data (middle) phase? */ | 1243 | /* Did we transfer part of the data (middle) phase? */ |
@@ -1211,15 +1249,9 @@ static int handle_tx_event(struct xhci_hcd *xhci, | |||
1211 | else | 1249 | else |
1212 | td->urb->actual_length = 0; | 1250 | td->urb->actual_length = 0; |
1213 | 1251 | ||
1214 | ep->stopped_td = td; | 1252 | xhci_cleanup_halted_endpoint(xhci, |
1215 | ep->stopped_trb = event_trb; | 1253 | slot_id, ep_index, td, event_trb); |
1216 | xhci_queue_reset_ep(xhci, slot_id, ep_index); | ||
1217 | xhci_cleanup_stalled_ring(xhci, td->urb->dev, ep_index); | ||
1218 | xhci_ring_cmd_db(xhci); | ||
1219 | goto td_cleanup; | 1254 | goto td_cleanup; |
1220 | default: | ||
1221 | /* Others already handled above */ | ||
1222 | break; | ||
1223 | } | 1255 | } |
1224 | /* | 1256 | /* |
1225 | * Did we transfer any data, despite the errors that might have | 1257 | * Did we transfer any data, despite the errors that might have |
@@ -1357,16 +1389,25 @@ static int handle_tx_event(struct xhci_hcd *xhci, | |||
1357 | ep->stopped_td = td; | 1389 | ep->stopped_td = td; |
1358 | ep->stopped_trb = event_trb; | 1390 | ep->stopped_trb = event_trb; |
1359 | } else { | 1391 | } else { |
1360 | if (trb_comp_code == COMP_STALL || | 1392 | if (trb_comp_code == COMP_STALL) { |
1361 | trb_comp_code == COMP_BABBLE) { | ||
1362 | /* The transfer is completed from the driver's | 1393 | /* The transfer is completed from the driver's |
1363 | * perspective, but we need to issue a set dequeue | 1394 | * perspective, but we need to issue a set dequeue |
1364 | * command for this stalled endpoint to move the dequeue | 1395 | * command for this stalled endpoint to move the dequeue |
1365 | * pointer past the TD. We can't do that here because | 1396 | * pointer past the TD. We can't do that here because |
1366 | * the halt condition must be cleared first. | 1397 | * the halt condition must be cleared first. Let the |
1398 | * USB class driver clear the stall later. | ||
1367 | */ | 1399 | */ |
1368 | ep->stopped_td = td; | 1400 | ep->stopped_td = td; |
1369 | ep->stopped_trb = event_trb; | 1401 | ep->stopped_trb = event_trb; |
1402 | } else if (xhci_requires_manual_halt_cleanup(xhci, | ||
1403 | ep_ctx, trb_comp_code)) { | ||
1404 | /* Other types of errors halt the endpoint, but the | ||
1405 | * class driver doesn't call usb_reset_endpoint() unless | ||
1406 | * the error is -EPIPE. Clear the halted status in the | ||
1407 | * xHCI hardware manually. | ||
1408 | */ | ||
1409 | xhci_cleanup_halted_endpoint(xhci, | ||
1410 | slot_id, ep_index, td, event_trb); | ||
1370 | } else { | 1411 | } else { |
1371 | /* Update ring dequeue pointer */ | 1412 | /* Update ring dequeue pointer */ |
1372 | while (ep_ring->dequeue != td->last_trb) | 1413 | while (ep_ring->dequeue != td->last_trb) |