xhci: Clean up cycle bit math used during stalls.
Use XOR to invert the cycle bit, instead of a more complicated calculation. Eliminate a check for the link TRB type in find_trb_seg(). We know that there will always be a link TRB at the end of a segment, so xhci_segment->trbs[TRBS_PER_SEGMENT - 1] will always have a link TRB type. Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> Tested-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
01a1fdb9a7
commit
ba0a4d9aaa
1 changed files with 3 additions and 5 deletions
|
@ -380,10 +380,8 @@ static struct xhci_segment *find_trb_seg(
|
|||
while (cur_seg->trbs > trb ||
|
||||
&cur_seg->trbs[TRBS_PER_SEGMENT - 1] < trb) {
|
||||
generic_trb = &cur_seg->trbs[TRBS_PER_SEGMENT - 1].generic;
|
||||
if ((generic_trb->field[3] & TRB_TYPE_BITMASK) ==
|
||||
TRB_TYPE(TRB_LINK) &&
|
||||
(generic_trb->field[3] & LINK_TOGGLE))
|
||||
*cycle_state = ~(*cycle_state) & 0x1;
|
||||
if (generic_trb->field[3] & LINK_TOGGLE)
|
||||
*cycle_state ^= 0x1;
|
||||
cur_seg = cur_seg->next;
|
||||
if (cur_seg == start_seg)
|
||||
/* Looped over the entire list. Oops! */
|
||||
|
@ -492,7 +490,7 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci,
|
|||
trb = &state->new_deq_ptr->generic;
|
||||
if ((trb->field[3] & TRB_TYPE_BITMASK) == TRB_TYPE(TRB_LINK) &&
|
||||
(trb->field[3] & LINK_TOGGLE))
|
||||
state->new_cycle_state = ~(state->new_cycle_state) & 0x1;
|
||||
state->new_cycle_state ^= 0x1;
|
||||
next_trb(xhci, ep_ring, &state->new_deq_seg, &state->new_deq_ptr);
|
||||
|
||||
/*
|
||||
|
|
Reference in a new issue