Skip to content

Commit

Permalink
Merge pull request #18726 from bergzand/pr/synopsys_dwc2/rxflvl_dma
Browse files Browse the repository at this point in the history
usbdev_synopsys_dwc2: Mask RX FIFO irq when using DMA
  • Loading branch information
gschorcht authored Oct 12, 2022
2 parents 913bf37 + 8cecb81 commit 0a96492
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions drivers/usbdev_synopsys_dwc2/usbdev_synopsys_dwc2.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,7 @@
USB_OTG_GINTMSK_USBRST | \
USB_OTG_GINTMSK_OTGINT | \
USB_OTG_GINTMSK_IEPINT | \
USB_OTG_GINTMSK_OEPINT | \
USB_OTG_GINTMSK_RXFLVLM)
USB_OTG_GINTMSK_OEPINT)

#define DWC2_PKTSTS_GONAK 0x01 /**< Rx fifo global out nak */
#define DWC2_PKTSTS_DATA_UPDT 0x02 /**< Rx fifo data update */
Expand Down Expand Up @@ -855,9 +854,14 @@ static void _usbdev_init(usbdev_t *dev)
_device_regs(conf)->DIEPMSK |= USB_OTG_DIEPMSK_XFRCM;
}

uint32_t gint_mask = DWC2_FSHS_USB_GINT_MASK;
if (!_uses_dma(conf)) {
gint_mask |= USB_OTG_GINTMSK_RXFLVLM;
}

/* Clear the interrupt flags and unmask those interrupts */
_global_regs(conf)->GINTSTS |= DWC2_FSHS_USB_GINT_MASK;
_global_regs(conf)->GINTMSK |= DWC2_FSHS_USB_GINT_MASK;
_global_regs(conf)->GINTSTS |= gint_mask;
_global_regs(conf)->GINTMSK |= gint_mask;

DEBUG("usbdev: USB peripheral currently in %s mode\n",
(_global_regs(
Expand Down Expand Up @@ -1277,7 +1281,7 @@ void _isr_common(dwc2_usb_otg_fshs_t *usbdev)
uint32_t status = _global_regs(conf)->GINTSTS;

if (status) {
if (status & USB_OTG_GINTSTS_RXFLVL) {
if ((status & USB_OTG_GINTSTS_RXFLVL) && !_uses_dma(conf)) {
unsigned epnum = _global_regs(conf)->GRXSTSR &
USB_OTG_GRXSTSP_EPNUM_Msk;
usbdev->usbdev.epcb(&usbdev->out[epnum].ep, USBDEV_EVENT_ESR);
Expand Down

0 comments on commit 0a96492

Please sign in to comment.