diff options
| author | HiFiPhile <[email protected]> | 2026-05-29 11:42:47 +0200 |
|---|---|---|
| committer | HiFiPhile <[email protected]> | 2026-05-29 11:42:47 +0200 |
| commit | b4e7c25c1b57a69e4c04e41d0f2203abf0d8d358 (patch) | |
| tree | 4110c92842b3c98b9497764c7bd2f4e51d805b70 | |
| parent | 33f151a43b39de4207bcdc49ea1e9e8dd8a5d248 (diff) | |
dwc2: process IN EP before OUT
To avoid STATUS IN completion of previous control transfer treated as next DATA IN when IRQ latency is high.
Signed-off-by: HiFiPhile <[email protected]>
| -rw-r--r-- | src/portable/synopsys/dwc2/dcd_dwc2.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/portable/synopsys/dwc2/dcd_dwc2.c b/src/portable/synopsys/dwc2/dcd_dwc2.c index 233840e8b..c90429a15 100644 --- a/src/portable/synopsys/dwc2/dcd_dwc2.c +++ b/src/portable/synopsys/dwc2/dcd_dwc2.c @@ -1213,6 +1213,12 @@ void dcd_int_handler(uint8_t rhport) { dcd_event_sof(rhport, frame, true); } + // IN endpoint interrupt handling. + if (gintsts & GINTSTS_IEPINT) { + // IEPINT bit read-only, clear using DIEPINTn + handle_ep_irq(rhport, TUSB_DIR_IN); + } + #if CFG_TUD_DWC2_SLAVE_ENABLE // RxFIFO non-empty interrupt handling. if (gintsts & GINTSTS_RXFLVL) { @@ -1235,12 +1241,6 @@ void dcd_int_handler(uint8_t rhport) { } #endif - // IN endpoint interrupt handling. - if (gintsts & GINTSTS_IEPINT) { - // IEPINT bit read-only, clear using DIEPINTn - handle_ep_irq(rhport, TUSB_DIR_IN); - } - // Incomplete isochronous IN transfer interrupt handling. if (gintsts & GINTSTS_IISOIXFR) { dwc2->gintsts = GINTSTS_IISOIXFR; |
