Remove the event ring related checks in inc_enq()

Host hardware is the producer of events on the event ring,
driver will not queue anything, or call inc_enq() for the
event ring.

Signed-off-by: Mathias Nyman <[email protected]>
---
 drivers/usb/host/xhci-ring.c | 64 +++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 36 deletions(-)

diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 142e53e..c13b842 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -199,50 +199,42 @@ static void inc_enq(struct xhci_hcd *xhci, struct 
xhci_ring *ring,
 
        chain = le32_to_cpu(ring->enqueue->generic.field[3]) & TRB_CHAIN;
        /* If this is not event ring, there is one less usable TRB */
-       if (ring->type != TYPE_EVENT &&
-                       !last_trb(xhci, ring, ring->enq_seg, ring->enqueue))
+       if (!last_trb(xhci, ring, ring->enq_seg, ring->enqueue))
                ring->num_trbs_free--;
        next = ++(ring->enqueue);
 
        ring->enq_updates++;
-       /* Update the dequeue pointer further if that was a link TRB or we're at
-        * the end of an event ring segment (which doesn't have link TRBS)
-        */
+       /* Update the dequeue pointer further if that was a link TRB */
        while (last_trb(xhci, ring, ring->enq_seg, next)) {
-               if (ring->type != TYPE_EVENT) {
-                       /*
-                        * If the caller doesn't plan on enqueueing more
-                        * TDs before ringing the doorbell, then we
-                        * don't want to give the link TRB to the
-                        * hardware just yet.  We'll give the link TRB
-                        * back in prepare_ring() just before we enqueue
-                        * the TD at the top of the ring.
-                        */
-                       if (!chain && !more_trbs_coming)
-                               break;
 
-                       /* If we're not dealing with 0.95 hardware or
-                        * isoc rings on AMD 0.96 host,
-                        * carry over the chain bit of the previous TRB
-                        * (which may mean the chain bit is cleared).
-                        */
-                       if (!(ring->type == TYPE_ISOC &&
-                                       (xhci->quirks & XHCI_AMD_0x96_HOST))
-                                               && !xhci_link_trb_quirk(xhci)) {
-                               next->link.control &=
-                                       cpu_to_le32(~TRB_CHAIN);
-                               next->link.control |=
-                                       cpu_to_le32(chain);
-                       }
-                       /* Give this link TRB to the hardware */
-                       wmb();
-                       next->link.control ^= cpu_to_le32(TRB_CYCLE);
+               /*
+                * If the caller doesn't plan on enqueueing more TDs before
+                * ringing the doorbell, then we don't want to give the link TRB
+                * to the hardware just yet. We'll give the link TRB back in
+                * prepare_ring() just before we enqueue the TD at the top of
+                * the ring.
+                */
+               if (!chain && !more_trbs_coming)
+                       break;
 
-                       /* Toggle the cycle bit after the last ring segment. */
-                       if (last_trb_on_last_seg(xhci, ring, ring->enq_seg, 
next)) {
-                               ring->cycle_state ^= 1;
-                       }
+               /* If we're not dealing with 0.95 hardware or isoc rings on
+                * AMD 0.96 host, carry over the chain bit of the previous TRB
+                * (which may mean the chain bit is cleared).
+                */
+               if (!(ring->type == TYPE_ISOC &&
+                     (xhci->quirks & XHCI_AMD_0x96_HOST)) &&
+                   !xhci_link_trb_quirk(xhci)) {
+                       next->link.control &= cpu_to_le32(~TRB_CHAIN);
+                       next->link.control |= cpu_to_le32(chain);
                }
+               /* Give this link TRB to the hardware */
+               wmb();
+               next->link.control ^= cpu_to_le32(TRB_CYCLE);
+
+               /* Toggle the cycle bit after the last ring segment. */
+               if (last_trb_on_last_seg(xhci, ring, ring->enq_seg, next))
+                       ring->cycle_state ^= 1;
+
                ring->enq_seg = ring->enq_seg->next;
                ring->enqueue = ring->enq_seg->trbs;
                next = ring->enqueue;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to