state->new_cycle_state = ~(state->new_cycle_state) & 0x1;
        next_trb(xhci, ep_ring, &state->new_deq_seg, &state->new_deq_ptr);
 
+       /*
+        * If there is only one segment in a ring, find_trb_seg()'s while loop
+        * will not run, and it will return before it has a chance to see if it
+        * needs to toggle the cycle bit.  It can't tell if the stalled transfer
+        * ended just before the link TRB on a one-segment ring, or if the TD
+        * wrapped around the top of the ring, because it doesn't have the TD in
+        * question.  Look for the one-segment case where stalled TRB's address
+        * is greater than the new dequeue pointer address.
+        */
+       if (ep_ring->first_seg == ep_ring->first_seg->next &&
+                       state->new_deq_ptr < dev->eps[ep_index].stopped_trb)
+               state->new_cycle_state ^= 0x1;
+       xhci_dbg(xhci, "Cycle state = 0x%x\n", state->new_cycle_state);
+
        /* Don't update the ring cycle state for the producer (us). */
        xhci_dbg(xhci, "New dequeue segment = %p (virtual)\n",
                        state->new_deq_seg);