mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-29 08:01:08 +00:00
usb: dwc3: optimize interrupt loop
There is no point in calling dwc3_thread_interrupt() if no event is pending. There is also no point in flushing event cache in EVERY loop iteration. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
This commit is contained in:
parent
16bece51c5
commit
137f7c590d
2 changed files with 13 additions and 9 deletions
|
@ -769,18 +769,11 @@ void dwc3_uboot_exit(int index)
|
|||
void dwc3_uboot_handle_interrupt(int index)
|
||||
{
|
||||
struct dwc3 *dwc = NULL;
|
||||
int i;
|
||||
struct dwc3_event_buffer *evt;
|
||||
|
||||
list_for_each_entry(dwc, &dwc3_list, list) {
|
||||
if (dwc->index != index)
|
||||
continue;
|
||||
|
||||
for (i = 0; i < dwc->num_event_buffers; i++) {
|
||||
evt = dwc->ev_buffs[i];
|
||||
dwc3_flush_cache((int)evt->buf, evt->length);
|
||||
}
|
||||
|
||||
dwc3_gadget_uboot_handle_interrupt(dwc);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -2683,6 +2683,17 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
|
|||
*/
|
||||
void dwc3_gadget_uboot_handle_interrupt(struct dwc3 *dwc)
|
||||
{
|
||||
dwc3_interrupt(0, dwc);
|
||||
dwc3_thread_interrupt(0, dwc);
|
||||
int ret = dwc3_interrupt(0, dwc);
|
||||
|
||||
if (ret == IRQ_WAKE_THREAD) {
|
||||
int i;
|
||||
struct dwc3_event_buffer *evt;
|
||||
|
||||
for (i = 0; i < dwc->num_event_buffers; i++) {
|
||||
evt = dwc->ev_buffs[i];
|
||||
dwc3_flush_cache((int)evt->buf, evt->length);
|
||||
}
|
||||
|
||||
dwc3_thread_interrupt(0, dwc);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue