Loading drivers/usb/dwc3/gadget.c +44 −37 Original line number Diff line number Diff line Loading @@ -2442,25 +2442,18 @@ static void dwc3_process_event_entry(struct dwc3 *dwc, } } static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc) static irqreturn_t dwc3_process_event_buf(struct dwc3 *dwc, u32 buf) { struct dwc3 *dwc = _dwc; unsigned long flags; irqreturn_t ret = IRQ_NONE; u32 reg; int i; spin_lock_irqsave(&dwc->lock, flags); for (i = 0; i < dwc->num_event_buffers; i++) { struct dwc3_event_buffer *evt; irqreturn_t ret = IRQ_NONE; int left; u32 reg; evt = dwc->ev_buffs[i]; evt = dwc->ev_buffs[buf]; left = evt->count; if (!(evt->flags & DWC3_EVENT_PENDING)) continue; return IRQ_NONE; while (left > 0) { union dwc3_event event; Loading @@ -2481,7 +2474,7 @@ static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc) evt->lpos = (evt->lpos + 4) % DWC3_EVENT_BUFFERS_SIZE; left -= 4; dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(i), 4); dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(buf), 4); } evt->count = 0; Loading @@ -2489,11 +2482,25 @@ static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc) ret = IRQ_HANDLED; /* Unmask interrupt */ reg = dwc3_readl(dwc->regs, DWC3_GEVNTSIZ(i)); reg = dwc3_readl(dwc->regs, DWC3_GEVNTSIZ(buf)); reg &= ~DWC3_GEVNTSIZ_INTMASK; dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(i), reg); dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(buf), reg); return ret; } static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc) { struct dwc3 *dwc = _dwc; unsigned long flags; irqreturn_t ret = IRQ_NONE; int i; spin_lock_irqsave(&dwc->lock, flags); for (i = 0; i < dwc->num_event_buffers; i++) ret |= dwc3_process_event_buf(dwc, i); spin_unlock_irqrestore(&dwc->lock, flags); return ret; Loading Loading
drivers/usb/dwc3/gadget.c +44 −37 Original line number Diff line number Diff line Loading @@ -2442,25 +2442,18 @@ static void dwc3_process_event_entry(struct dwc3 *dwc, } } static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc) static irqreturn_t dwc3_process_event_buf(struct dwc3 *dwc, u32 buf) { struct dwc3 *dwc = _dwc; unsigned long flags; irqreturn_t ret = IRQ_NONE; u32 reg; int i; spin_lock_irqsave(&dwc->lock, flags); for (i = 0; i < dwc->num_event_buffers; i++) { struct dwc3_event_buffer *evt; irqreturn_t ret = IRQ_NONE; int left; u32 reg; evt = dwc->ev_buffs[i]; evt = dwc->ev_buffs[buf]; left = evt->count; if (!(evt->flags & DWC3_EVENT_PENDING)) continue; return IRQ_NONE; while (left > 0) { union dwc3_event event; Loading @@ -2481,7 +2474,7 @@ static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc) evt->lpos = (evt->lpos + 4) % DWC3_EVENT_BUFFERS_SIZE; left -= 4; dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(i), 4); dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(buf), 4); } evt->count = 0; Loading @@ -2489,11 +2482,25 @@ static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc) ret = IRQ_HANDLED; /* Unmask interrupt */ reg = dwc3_readl(dwc->regs, DWC3_GEVNTSIZ(i)); reg = dwc3_readl(dwc->regs, DWC3_GEVNTSIZ(buf)); reg &= ~DWC3_GEVNTSIZ_INTMASK; dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(i), reg); dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(buf), reg); return ret; } static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc) { struct dwc3 *dwc = _dwc; unsigned long flags; irqreturn_t ret = IRQ_NONE; int i; spin_lock_irqsave(&dwc->lock, flags); for (i = 0; i < dwc->num_event_buffers; i++) ret |= dwc3_process_event_buf(dwc, i); spin_unlock_irqrestore(&dwc->lock, flags); return ret; Loading