*/
 static void xhci_update_erst_dequeue(struct xhci_hcd *xhci,
                                     struct xhci_interrupter *ir,
-                                    union xhci_trb *event_ring_deq,
                                     bool clear_ehb)
 {
        u64 temp_64;
        dma_addr_t deq;
 
        temp_64 = xhci_read_64(xhci, &ir->ir_set->erst_dequeue);
-       /* If necessary, update the HW's version of the event ring deq ptr. */
-       if (event_ring_deq != ir->event_ring->dequeue) {
-               deq = xhci_trb_virt_to_dma(ir->event_ring->deq_seg,
-                               ir->event_ring->dequeue);
-               if (deq == 0)
-                       xhci_warn(xhci, "WARN something wrong with SW event ring dequeue ptr\n");
-               /*
-                * Per 4.9.4, Software writes to the ERDP register shall
-                * always advance the Event Ring Dequeue Pointer value.
-                */
-               if ((temp_64 & ERST_PTR_MASK) == (deq & ERST_PTR_MASK))
-                       return;
+       deq = xhci_trb_virt_to_dma(ir->event_ring->deq_seg,
+                                  ir->event_ring->dequeue);
+       if (deq == 0)
+               xhci_warn(xhci, "WARN something wrong with SW event ring dequeue ptr\n");
+       /*
+        * Per 4.9.4, Software writes to the ERDP register shall always advance
+        * the Event Ring Dequeue Pointer value.
+        */
+       if ((temp_64 & ERST_PTR_MASK) == (deq & ERST_PTR_MASK) && !clear_ehb)
+               return;
 
-               /* Update HC event ring dequeue pointer */
-               temp_64 = ir->event_ring->deq_seg->num & ERST_DESI_MASK;
-               temp_64 |= deq & ERST_PTR_MASK;
-       }
+       /* Update HC event ring dequeue pointer */
+       temp_64 = ir->event_ring->deq_seg->num & ERST_DESI_MASK;
+       temp_64 |= deq & ERST_PTR_MASK;
 
        /* Clear the event handler busy flag (RW1C) */
        if (clear_ehb)
 irqreturn_t xhci_irq(struct usb_hcd *hcd)
 {
        struct xhci_hcd *xhci = hcd_to_xhci(hcd);
-       union xhci_trb *event_ring_deq;
        struct xhci_interrupter *ir;
        irqreturn_t ret = IRQ_NONE;
        u64 temp_64;
                goto out;
        }
 
-       event_ring_deq = ir->event_ring->dequeue;
        /* FIXME this should be a delayed service routine
         * that clears the EHB.
         */
        while (xhci_handle_event(xhci, ir) > 0) {
                if (event_loop++ < TRBS_PER_SEGMENT / 2)
                        continue;
-               xhci_update_erst_dequeue(xhci, ir, event_ring_deq, false);
-               event_ring_deq = ir->event_ring->dequeue;
+               xhci_update_erst_dequeue(xhci, ir, false);
 
                /* ring is half-full, force isoc trbs to interrupt more often */
                if (ir->isoc_bei_interval > AVOID_BEI_INTERVAL_MIN)
                event_loop = 0;
        }
 
-       xhci_update_erst_dequeue(xhci, ir, event_ring_deq, true);
+       xhci_update_erst_dequeue(xhci, ir, true);
        ret = IRQ_HANDLED;
 
 out: