aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/host/xhci-hcd.c24
-rw-r--r--drivers/usb/host/xhci-ring.c133
-rw-r--r--drivers/usb/host/xhci.h12
3 files changed, 120 insertions, 49 deletions
diff --git a/drivers/usb/host/xhci-hcd.c b/drivers/usb/host/xhci-hcd.c
index 057a07e876be..816c39caca1c 100644
--- a/drivers/usb/host/xhci-hcd.c
+++ b/drivers/usb/host/xhci-hcd.c
@@ -1089,6 +1089,8 @@ void xhci_endpoint_reset(struct usb_hcd *hcd,
1089 unsigned int ep_index; 1089 unsigned int ep_index;
1090 unsigned long flags; 1090 unsigned long flags;
1091 int ret; 1091 int ret;
1092 struct xhci_dequeue_state deq_state;
1093 struct xhci_ring *ep_ring;
1092 1094
1093 xhci = hcd_to_xhci(hcd); 1095 xhci = hcd_to_xhci(hcd);
1094 udev = (struct usb_device *) ep->hcpriv; 1096 udev = (struct usb_device *) ep->hcpriv;
@@ -1098,11 +1100,33 @@ void xhci_endpoint_reset(struct usb_hcd *hcd,
1098 if (!ep->hcpriv) 1100 if (!ep->hcpriv)
1099 return; 1101 return;
1100 ep_index = xhci_get_endpoint_index(&ep->desc); 1102 ep_index = xhci_get_endpoint_index(&ep->desc);
1103 ep_ring = xhci->devs[udev->slot_id]->ep_rings[ep_index];
1104 if (!ep_ring->stopped_td) {
1105 xhci_dbg(xhci, "Endpoint 0x%x not halted, refusing to reset.\n",
1106 ep->desc.bEndpointAddress);
1107 return;
1108 }
1101 1109
1102 xhci_dbg(xhci, "Queueing reset endpoint command\n"); 1110 xhci_dbg(xhci, "Queueing reset endpoint command\n");
1103 spin_lock_irqsave(&xhci->lock, flags); 1111 spin_lock_irqsave(&xhci->lock, flags);
1104 ret = xhci_queue_reset_ep(xhci, udev->slot_id, ep_index); 1112 ret = xhci_queue_reset_ep(xhci, udev->slot_id, ep_index);
1113 /*
1114 * Can't change the ring dequeue pointer until it's transitioned to the
1115 * stopped state, which is only upon a successful reset endpoint
1116 * command. Better hope that last command worked!
1117 */
1105 if (!ret) { 1118 if (!ret) {
1119 xhci_dbg(xhci, "Cleaning up stalled endpoint ring\n");
1120 /* We need to move the HW's dequeue pointer past this TD,
1121 * or it will attempt to resend it on the next doorbell ring.
1122 */
1123 xhci_find_new_dequeue_state(xhci, udev->slot_id,
1124 ep_index, ep_ring->stopped_td, &deq_state);
1125 xhci_dbg(xhci, "Queueing new dequeue state\n");
1126 xhci_queue_new_dequeue_state(xhci, ep_ring,
1127 udev->slot_id,
1128 ep_index, &deq_state);
1129 kfree(ep_ring->stopped_td);
1106 xhci_ring_cmd_db(xhci); 1130 xhci_ring_cmd_db(xhci);
1107 } 1131 }
1108 spin_unlock_irqrestore(&xhci->lock, flags); 1132 spin_unlock_irqrestore(&xhci->lock, flags);
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index ea31753c3137..aa88a067148b 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -335,12 +335,6 @@ static struct xhci_segment *find_trb_seg(
335 return cur_seg; 335 return cur_seg;
336} 336}
337 337
338struct dequeue_state {
339 struct xhci_segment *new_deq_seg;
340 union xhci_trb *new_deq_ptr;
341 int new_cycle_state;
342};
343
344/* 338/*
345 * Move the xHC's endpoint ring dequeue pointer past cur_td. 339 * Move the xHC's endpoint ring dequeue pointer past cur_td.
346 * Record the new state of the xHC's endpoint ring dequeue segment, 340 * Record the new state of the xHC's endpoint ring dequeue segment,
@@ -355,26 +349,30 @@ struct dequeue_state {
355 * - Finally we move the dequeue state one TRB further, toggling the cycle bit 349 * - Finally we move the dequeue state one TRB further, toggling the cycle bit
356 * if we've moved it past a link TRB with the toggle cycle bit set. 350 * if we've moved it past a link TRB with the toggle cycle bit set.
357 */ 351 */
358static void find_new_dequeue_state(struct xhci_hcd *xhci, 352void xhci_find_new_dequeue_state(struct xhci_hcd *xhci,
359 unsigned int slot_id, unsigned int ep_index, 353 unsigned int slot_id, unsigned int ep_index,
360 struct xhci_td *cur_td, struct dequeue_state *state) 354 struct xhci_td *cur_td, struct xhci_dequeue_state *state)
361{ 355{
362 struct xhci_virt_device *dev = xhci->devs[slot_id]; 356 struct xhci_virt_device *dev = xhci->devs[slot_id];
363 struct xhci_ring *ep_ring = dev->ep_rings[ep_index]; 357 struct xhci_ring *ep_ring = dev->ep_rings[ep_index];
364 struct xhci_generic_trb *trb; 358 struct xhci_generic_trb *trb;
365 struct xhci_ep_ctx *ep_ctx; 359 struct xhci_ep_ctx *ep_ctx;
360 dma_addr_t addr;
366 361
367 state->new_cycle_state = 0; 362 state->new_cycle_state = 0;
363 xhci_dbg(xhci, "Finding segment containing stopped TRB.\n");
368 state->new_deq_seg = find_trb_seg(cur_td->start_seg, 364 state->new_deq_seg = find_trb_seg(cur_td->start_seg,
369 ep_ring->stopped_trb, 365 ep_ring->stopped_trb,
370 &state->new_cycle_state); 366 &state->new_cycle_state);
371 if (!state->new_deq_seg) 367 if (!state->new_deq_seg)
372 BUG(); 368 BUG();
373 /* Dig out the cycle state saved by the xHC during the stop ep cmd */ 369 /* Dig out the cycle state saved by the xHC during the stop ep cmd */
370 xhci_dbg(xhci, "Finding endpoint context\n");
374 ep_ctx = xhci_get_ep_ctx(xhci, dev->out_ctx, ep_index); 371 ep_ctx = xhci_get_ep_ctx(xhci, dev->out_ctx, ep_index);
375 state->new_cycle_state = 0x1 & ep_ctx->deq; 372 state->new_cycle_state = 0x1 & ep_ctx->deq;
376 373
377 state->new_deq_ptr = cur_td->last_trb; 374 state->new_deq_ptr = cur_td->last_trb;
375 xhci_dbg(xhci, "Finding segment containing last TRB in TD.\n");
378 state->new_deq_seg = find_trb_seg(state->new_deq_seg, 376 state->new_deq_seg = find_trb_seg(state->new_deq_seg,
379 state->new_deq_ptr, 377 state->new_deq_ptr,
380 &state->new_cycle_state); 378 &state->new_cycle_state);
@@ -388,6 +386,12 @@ static void find_new_dequeue_state(struct xhci_hcd *xhci,
388 next_trb(xhci, ep_ring, &state->new_deq_seg, &state->new_deq_ptr); 386 next_trb(xhci, ep_ring, &state->new_deq_seg, &state->new_deq_ptr);
389 387
390 /* Don't update the ring cycle state for the producer (us). */ 388 /* Don't update the ring cycle state for the producer (us). */
389 xhci_dbg(xhci, "New dequeue segment = %p (virtual)\n",
390 state->new_deq_seg);
391 addr = xhci_trb_virt_to_dma(state->new_deq_seg, state->new_deq_ptr);
392 xhci_dbg(xhci, "New dequeue pointer = 0x%llx (DMA)\n",
393 (unsigned long long) addr);
394 xhci_dbg(xhci, "Setting dequeue pointer in internal ring state.\n");
391 ep_ring->dequeue = state->new_deq_ptr; 395 ep_ring->dequeue = state->new_deq_ptr;
392 ep_ring->deq_seg = state->new_deq_seg; 396 ep_ring->deq_seg = state->new_deq_seg;
393} 397}
@@ -437,6 +441,30 @@ static int queue_set_tr_deq(struct xhci_hcd *xhci, int slot_id,
437 unsigned int ep_index, struct xhci_segment *deq_seg, 441 unsigned int ep_index, struct xhci_segment *deq_seg,
438 union xhci_trb *deq_ptr, u32 cycle_state); 442 union xhci_trb *deq_ptr, u32 cycle_state);
439 443
444void xhci_queue_new_dequeue_state(struct xhci_hcd *xhci,
445 struct xhci_ring *ep_ring, unsigned int slot_id,
446 unsigned int ep_index, struct xhci_dequeue_state *deq_state)
447{
448 xhci_dbg(xhci, "Set TR Deq Ptr cmd, new deq seg = %p (0x%llx dma), "
449 "new deq ptr = %p (0x%llx dma), new cycle = %u\n",
450 deq_state->new_deq_seg,
451 (unsigned long long)deq_state->new_deq_seg->dma,
452 deq_state->new_deq_ptr,
453 (unsigned long long)xhci_trb_virt_to_dma(deq_state->new_deq_seg, deq_state->new_deq_ptr),
454 deq_state->new_cycle_state);
455 queue_set_tr_deq(xhci, slot_id, ep_index,
456 deq_state->new_deq_seg,
457 deq_state->new_deq_ptr,
458 (u32) deq_state->new_cycle_state);
459 /* Stop the TD queueing code from ringing the doorbell until
460 * this command completes. The HC won't set the dequeue pointer
461 * if the ring is running, and ringing the doorbell starts the
462 * ring running.
463 */
464 ep_ring->state |= SET_DEQ_PENDING;
465 xhci_ring_cmd_db(xhci);
466}
467
440/* 468/*
441 * When we get a command completion for a Stop Endpoint Command, we need to 469 * When we get a command completion for a Stop Endpoint Command, we need to
442 * unlink any cancelled TDs from the ring. There are two ways to do that: 470 * unlink any cancelled TDs from the ring. There are two ways to do that:
@@ -457,7 +485,7 @@ static void handle_stopped_endpoint(struct xhci_hcd *xhci,
457 struct xhci_td *cur_td = 0; 485 struct xhci_td *cur_td = 0;
458 struct xhci_td *last_unlinked_td; 486 struct xhci_td *last_unlinked_td;
459 487
460 struct dequeue_state deq_state; 488 struct xhci_dequeue_state deq_state;
461#ifdef CONFIG_USB_HCD_STAT 489#ifdef CONFIG_USB_HCD_STAT
462 ktime_t stop_time = ktime_get(); 490 ktime_t stop_time = ktime_get();
463#endif 491#endif
@@ -485,7 +513,7 @@ static void handle_stopped_endpoint(struct xhci_hcd *xhci,
485 * move the xHC endpoint ring dequeue pointer past this TD. 513 * move the xHC endpoint ring dequeue pointer past this TD.
486 */ 514 */
487 if (cur_td == ep_ring->stopped_td) 515 if (cur_td == ep_ring->stopped_td)
488 find_new_dequeue_state(xhci, slot_id, ep_index, cur_td, 516 xhci_find_new_dequeue_state(xhci, slot_id, ep_index, cur_td,
489 &deq_state); 517 &deq_state);
490 else 518 else
491 td_to_noop(xhci, ep_ring, cur_td); 519 td_to_noop(xhci, ep_ring, cur_td);
@@ -501,24 +529,8 @@ static void handle_stopped_endpoint(struct xhci_hcd *xhci,
501 529
502 /* If necessary, queue a Set Transfer Ring Dequeue Pointer command */ 530 /* If necessary, queue a Set Transfer Ring Dequeue Pointer command */
503 if (deq_state.new_deq_ptr && deq_state.new_deq_seg) { 531 if (deq_state.new_deq_ptr && deq_state.new_deq_seg) {
504 xhci_dbg(xhci, "Set TR Deq Ptr cmd, new deq seg = %p (0x%llx dma), " 532 xhci_queue_new_dequeue_state(xhci, ep_ring,
505 "new deq ptr = %p (0x%llx dma), new cycle = %u\n", 533 slot_id, ep_index, &deq_state);
506 deq_state.new_deq_seg,
507 (unsigned long long)deq_state.new_deq_seg->dma,
508 deq_state.new_deq_ptr,
509 (unsigned long long)xhci_trb_virt_to_dma(deq_state.new_deq_seg, deq_state.new_deq_ptr),
510 deq_state.new_cycle_state);
511 queue_set_tr_deq(xhci, slot_id, ep_index,
512 deq_state.new_deq_seg,
513 deq_state.new_deq_ptr,
514 (u32) deq_state.new_cycle_state);
515 /* Stop the TD queueing code from ringing the doorbell until
516 * this command completes. The HC won't set the dequeue pointer
517 * if the ring is running, and ringing the doorbell starts the
518 * ring running.
519 */
520 ep_ring->state |= SET_DEQ_PENDING;
521 xhci_ring_cmd_db(xhci);
522 } else { 534 } else {
523 /* Otherwise just ring the doorbell to restart the ring */ 535 /* Otherwise just ring the doorbell to restart the ring */
524 ring_ep_doorbell(xhci, slot_id, ep_index); 536 ring_ep_doorbell(xhci, slot_id, ep_index);
@@ -929,12 +941,15 @@ static int handle_tx_event(struct xhci_hcd *xhci,
929 if (event_trb != ep_ring->dequeue) { 941 if (event_trb != ep_ring->dequeue) {
930 /* The event was for the status stage */ 942 /* The event was for the status stage */
931 if (event_trb == td->last_trb) { 943 if (event_trb == td->last_trb) {
932 /* Did we already see a short data stage? */ 944 if (td->urb->actual_length != 0) {
933 if (td->urb->actual_length != 0) 945 /* Don't overwrite a previously set error code */
934 status = -EREMOTEIO; 946 if (status == -EINPROGRESS || status == 0)
935 else 947 /* Did we already see a short data stage? */
948 status = -EREMOTEIO;
949 } else {
936 td->urb->actual_length = 950 td->urb->actual_length =
937 td->urb->transfer_buffer_length; 951 td->urb->transfer_buffer_length;
952 }
938 } else { 953 } else {
939 /* Maybe the event was for the data stage? */ 954 /* Maybe the event was for the data stage? */
940 if (GET_COMP_CODE(event->transfer_len) != COMP_STOP_INVAL) { 955 if (GET_COMP_CODE(event->transfer_len) != COMP_STOP_INVAL) {
@@ -992,16 +1007,20 @@ static int handle_tx_event(struct xhci_hcd *xhci,
992 TRB_LEN(event->transfer_len)); 1007 TRB_LEN(event->transfer_len));
993 td->urb->actual_length = 0; 1008 td->urb->actual_length = 0;
994 } 1009 }
995 if (td->urb->transfer_flags & URB_SHORT_NOT_OK) 1010 /* Don't overwrite a previously set error code */
996 status = -EREMOTEIO; 1011 if (status == -EINPROGRESS) {
997 else 1012 if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
998 status = 0; 1013 status = -EREMOTEIO;
1014 else
1015 status = 0;
1016 }
999 } else { 1017 } else {
1000 td->urb->actual_length = td->urb->transfer_buffer_length; 1018 td->urb->actual_length = td->urb->transfer_buffer_length;
1001 /* Ignore a short packet completion if the 1019 /* Ignore a short packet completion if the
1002 * untransferred length was zero. 1020 * untransferred length was zero.
1003 */ 1021 */
1004 status = 0; 1022 if (status == -EREMOTEIO)
1023 status = 0;
1005 } 1024 }
1006 } else { 1025 } else {
1007 /* Slow path - walk the list, starting from the dequeue 1026 /* Slow path - walk the list, starting from the dequeue
@@ -1028,19 +1047,30 @@ static int handle_tx_event(struct xhci_hcd *xhci,
1028 TRB_LEN(event->transfer_len); 1047 TRB_LEN(event->transfer_len);
1029 } 1048 }
1030 } 1049 }
1031 /* The Endpoint Stop Command completion will take care of
1032 * any stopped TDs. A stopped TD may be restarted, so don't update the
1033 * ring dequeue pointer or take this TD off any lists yet.
1034 */
1035 if (GET_COMP_CODE(event->transfer_len) == COMP_STOP_INVAL || 1050 if (GET_COMP_CODE(event->transfer_len) == COMP_STOP_INVAL ||
1036 GET_COMP_CODE(event->transfer_len) == COMP_STOP) { 1051 GET_COMP_CODE(event->transfer_len) == COMP_STOP) {
1052 /* The Endpoint Stop Command completion will take care of any
1053 * stopped TDs. A stopped TD may be restarted, so don't update
1054 * the ring dequeue pointer or take this TD off any lists yet.
1055 */
1037 ep_ring->stopped_td = td; 1056 ep_ring->stopped_td = td;
1038 ep_ring->stopped_trb = event_trb; 1057 ep_ring->stopped_trb = event_trb;
1039 } else { 1058 } else {
1040 /* Update ring dequeue pointer */ 1059 if (GET_COMP_CODE(event->transfer_len) == COMP_STALL) {
1041 while (ep_ring->dequeue != td->last_trb) 1060 /* The transfer is completed from the driver's
1061 * perspective, but we need to issue a set dequeue
1062 * command for this stalled endpoint to move the dequeue
1063 * pointer past the TD. We can't do that here because
1064 * the halt condition must be cleared first.
1065 */
1066 ep_ring->stopped_td = td;
1067 ep_ring->stopped_trb = event_trb;
1068 } else {
1069 /* Update ring dequeue pointer */
1070 while (ep_ring->dequeue != td->last_trb)
1071 inc_deq(xhci, ep_ring, false);
1042 inc_deq(xhci, ep_ring, false); 1072 inc_deq(xhci, ep_ring, false);
1043 inc_deq(xhci, ep_ring, false); 1073 }
1044 1074
1045 /* Clean up the endpoint's TD list */ 1075 /* Clean up the endpoint's TD list */
1046 urb = td->urb; 1076 urb = td->urb;
@@ -1050,7 +1080,10 @@ static int handle_tx_event(struct xhci_hcd *xhci,
1050 list_del(&td->cancelled_td_list); 1080 list_del(&td->cancelled_td_list);
1051 ep_ring->cancels_pending--; 1081 ep_ring->cancels_pending--;
1052 } 1082 }
1053 kfree(td); 1083 /* Leave the TD around for the reset endpoint function to use */
1084 if (GET_COMP_CODE(event->transfer_len) != COMP_STALL) {
1085 kfree(td);
1086 }
1054 urb->hcpriv = NULL; 1087 urb->hcpriv = NULL;
1055 } 1088 }
1056cleanup: 1089cleanup:
@@ -1166,13 +1199,13 @@ static int prepare_ring(struct xhci_hcd *xhci, struct xhci_ring *ep_ring,
1166 */ 1199 */
1167 xhci_warn(xhci, "WARN urb submitted to disabled ep\n"); 1200 xhci_warn(xhci, "WARN urb submitted to disabled ep\n");
1168 return -ENOENT; 1201 return -ENOENT;
1169 case EP_STATE_HALTED:
1170 case EP_STATE_ERROR: 1202 case EP_STATE_ERROR:
1171 xhci_warn(xhci, "WARN waiting for halt or error on ep " 1203 xhci_warn(xhci, "WARN waiting for error on ep to be cleared\n");
1172 "to be cleared\n");
1173 /* FIXME event handling code for error needs to clear it */ 1204 /* FIXME event handling code for error needs to clear it */
1174 /* XXX not sure if this should be -ENOENT or not */ 1205 /* XXX not sure if this should be -ENOENT or not */
1175 return -EINVAL; 1206 return -EINVAL;
1207 case EP_STATE_HALTED:
1208 xhci_dbg(xhci, "WARN halted endpoint, queueing URB anyway.\n");
1176 case EP_STATE_STOPPED: 1209 case EP_STATE_STOPPED:
1177 case EP_STATE_RUNNING: 1210 case EP_STATE_RUNNING:
1178 break; 1211 break;
@@ -1724,10 +1757,12 @@ static int queue_set_tr_deq(struct xhci_hcd *xhci, int slot_id,
1724 u32 type = TRB_TYPE(TRB_SET_DEQ); 1757 u32 type = TRB_TYPE(TRB_SET_DEQ);
1725 1758
1726 addr = xhci_trb_virt_to_dma(deq_seg, deq_ptr); 1759 addr = xhci_trb_virt_to_dma(deq_seg, deq_ptr);
1727 if (addr == 0) 1760 if (addr == 0) {
1728 xhci_warn(xhci, "WARN Cannot submit Set TR Deq Ptr\n"); 1761 xhci_warn(xhci, "WARN Cannot submit Set TR Deq Ptr\n");
1729 xhci_warn(xhci, "WARN deq seg = %p, deq pt = %p\n", 1762 xhci_warn(xhci, "WARN deq seg = %p, deq pt = %p\n",
1730 deq_seg, deq_ptr); 1763 deq_seg, deq_ptr);
1764 return 0;
1765 }
1731 return queue_command(xhci, lower_32_bits(addr) | cycle_state, 1766 return queue_command(xhci, lower_32_bits(addr) | cycle_state,
1732 upper_32_bits(addr), 0, 1767 upper_32_bits(addr), 0,
1733 trb_slot_id | trb_ep_index | type); 1768 trb_slot_id | trb_ep_index | type);
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index 9c108c632704..d31d32206ba3 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -952,6 +952,12 @@ struct xhci_ring {
952 u32 cycle_state; 952 u32 cycle_state;
953}; 953};
954 954
955struct xhci_dequeue_state {
956 struct xhci_segment *new_deq_seg;
957 union xhci_trb *new_deq_ptr;
958 int new_cycle_state;
959};
960
955struct xhci_erst_entry { 961struct xhci_erst_entry {
956 /* 64-bit event ring segment address */ 962 /* 64-bit event ring segment address */
957 u64 seg_addr; 963 u64 seg_addr;
@@ -1203,6 +1209,12 @@ int xhci_queue_configure_endpoint(struct xhci_hcd *xhci, dma_addr_t in_ctx_ptr,
1203 u32 slot_id); 1209 u32 slot_id);
1204int xhci_queue_reset_ep(struct xhci_hcd *xhci, int slot_id, 1210int xhci_queue_reset_ep(struct xhci_hcd *xhci, int slot_id,
1205 unsigned int ep_index); 1211 unsigned int ep_index);
1212void xhci_find_new_dequeue_state(struct xhci_hcd *xhci,
1213 unsigned int slot_id, unsigned int ep_index,
1214 struct xhci_td *cur_td, struct xhci_dequeue_state *state);
1215void xhci_queue_new_dequeue_state(struct xhci_hcd *xhci,
1216 struct xhci_ring *ep_ring, unsigned int slot_id,
1217 unsigned int ep_index, struct xhci_dequeue_state *deq_state);
1206 1218
1207/* xHCI roothub code */ 1219/* xHCI roothub code */
1208int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex, 1220int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex,