Skip to content

Commit

Permalink
FIx recurrent suspend ISR.
Browse files Browse the repository at this point in the history
  • Loading branch information
HiFiPhile committed Nov 10, 2024
1 parent cf61abe commit 2ee7618
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/portable/synopsys/dwc2/dcd_dwc2.c
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,7 @@ bool dcd_init(uint8_t rhport, const tusb_rhport_init_t* rh_init) {
dwc2->dcfg |= DCFG_NZLSOHSK;

// Enable required interrupts
dwc2->gintmsk |= GINTMSK_OTGINT | GINTMSK_USBSUSPM | GINTMSK_USBRST | GINTMSK_ENUMDNEM | GINTMSK_WUIM;
dwc2->gintmsk |= GINTMSK_OTGINT | GINTMSK_USBRST | GINTMSK_ENUMDNEM | GINTMSK_WUIM;

// TX FIFO empty level for interrupt is complete empty
uint32_t gahbcfg = dwc2->gahbcfg;
Expand Down Expand Up @@ -914,7 +914,7 @@ void dcd_int_handler(uint8_t rhport) {
if (int_status & GINTSTS_ENUMDNE) {
// ENUMDNE is the end of reset where speed of the link is detected
dwc2->gintsts = GINTSTS_ENUMDNE;

dwc2->gintmsk |= GINTMSK_USBSUSPM;
tusb_speed_t speed;
switch ((dwc2->dsts & DSTS_ENUMSPD_Msk) >> DSTS_ENUMSPD_Pos) {
case DSTS_ENUMSPD_HS:
Expand All @@ -939,11 +939,13 @@ void dcd_int_handler(uint8_t rhport) {

if (int_status & GINTSTS_USBSUSP) {
dwc2->gintsts = GINTSTS_USBSUSP;
dwc2->gintmsk &= ~GINTMSK_USBSUSPM;
dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true);
}

if (int_status & GINTSTS_WKUINT) {
dwc2->gintsts = GINTSTS_WKUINT;
dwc2->gintmsk |= GINTMSK_USBSUSPM;
dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true);
}

Expand All @@ -963,6 +965,7 @@ void dcd_int_handler(uint8_t rhport) {

if(int_status & GINTSTS_SOF) {
dwc2->gintsts = GINTSTS_SOF;
dwc2->gintmsk |= GINTMSK_USBSUSPM;
const uint32_t frame = (dwc2->dsts & DSTS_FNSOF) >> DSTS_FNSOF_Pos;

// Disable SOF interrupt if SOF was not explicitly enabled since SOF was used for remote wakeup detection
Expand Down

0 comments on commit 2ee7618

Please sign in to comment.