From 6ef086a085c122e4c7be671e32d5bab9bc474458 Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Wed, 3 Apr 2024 15:44:43 +0800 Subject: add check for dwc2 fifo with ep mps --- port/dwc2/usb_dc_dwc2.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/port/dwc2/usb_dc_dwc2.c b/port/dwc2/usb_dc_dwc2.c index 4de89de1..e789924a 100644 --- a/port/dwc2/usb_dc_dwc2.c +++ b/port/dwc2/usb_dc_dwc2.c @@ -82,15 +82,15 @@ #endif #ifndef CONFIG_USB_DWC2_TX6_FIFO_SIZE -#define CONFIG_USB_DWC2_TX6_FIFO_SIZE (64 / 4) +#define CONFIG_USB_DWC2_TX6_FIFO_SIZE (0 / 4) #endif #ifndef CONFIG_USB_DWC2_TX7_FIFO_SIZE -#define CONFIG_USB_DWC2_TX7_FIFO_SIZE (64 / 4) +#define CONFIG_USB_DWC2_TX7_FIFO_SIZE (0 / 4) #endif #ifndef CONFIG_USB_DWC2_TX8_FIFO_SIZE -#define CONFIG_USB_DWC2_TX8_FIFO_SIZE (64 / 4) +#define CONFIG_USB_DWC2_TX8_FIFO_SIZE (0 / 4) #endif #define USBD_BASE (g_usbdev_bus[0].reg_base) @@ -710,6 +710,17 @@ int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep) USB_OTG_DOEPCTL_USBAEP; } } else { + uint16_t fifo_size; + if (ep_idx == 0) { + fifo_size = (USB_OTG_GLB->DIEPTXF0_HNPTXFSIZ >> 16); + } else { + fifo_size = (USB_OTG_GLB->DIEPTXF[ep_idx - 1U] >> 16); + } + if ((fifo_size * 4) < USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize)) { + USB_LOG_ERR("Ep addr %02x fifo overflow\r\n", ep->bEndpointAddress); + return -2; + } + g_dwc2_udc.in_ep[ep_idx].ep_mps = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize); g_dwc2_udc.in_ep[ep_idx].ep_type = USB_GET_ENDPOINT_TYPE(ep->bmAttributes); -- cgit v1.3.1