summaryrefslogtreecommitdiff
path: root/src/portable
diff options
context:
space:
mode:
authorHiFiPhile <[email protected]>2025-04-19 11:43:28 +0200
committerHiFiPhile <[email protected]>2025-04-19 11:43:28 +0200
commitb3a9b6e37ffb21dba2f6da5fdd4ac5cd90c94442 (patch)
tree32c0499b2e9f82ac18656e37a79843c363da7881 /src/portable
parentb7a26cc33c793a3fc03ee54e27f48d276405af0d (diff)
enable SOF interrupt only if not already enabled
Signed-off-by: HiFiPhile <[email protected]>
Diffstat (limited to 'src/portable')
-rw-r--r--src/portable/synopsys/dwc2/hcd_dwc2.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/portable/synopsys/dwc2/hcd_dwc2.c b/src/portable/synopsys/dwc2/hcd_dwc2.c
index be653fab0..378c2742b 100644
--- a/src/portable/synopsys/dwc2/hcd_dwc2.c
+++ b/src/portable/synopsys/dwc2/hcd_dwc2.c
@@ -748,8 +748,11 @@ static void channel_xfer_in_retry(dwc2_regs_t* dwc2, uint8_t ch_id, uint32_t hci
const dwc2_channel_tsize_t hctsiz = {.value = channel->hctsiz};
edpt->next_pid = hctsiz.pid; // save PID
edpt->uframe_countdown = edpt->uframe_interval - ucount;
- dwc2->gintsts = GINTSTS_SOF; // SOF flag is probably pending
- dwc2->gintmsk |= GINTSTS_SOF;
+ // enable SOF interrupt if not already enabled
+ if (!(dwc2->gintmsk & GINTMSK_SOFM)) {
+ dwc2->gintsts = GINTSTS_SOF;
+ dwc2->gintmsk |= GINTMSK_SOFM;
+ }
// already halted, de-allocate channel (called from DMA isr)
channel_dealloc(dwc2, ch_id);
}