summaryrefslogtreecommitdiff
path: root/src/portable
diff options
context:
space:
mode:
authorUwe Bonnes <[email protected]>2020-06-23 13:07:33 +0200
committerUwe Bonnes <[email protected]>2020-06-30 11:02:41 +0200
commit05bfd9ac4a804f6f8053bdbc8ee83813ad623fa0 (patch)
treede42ccf4198e79a556fd341e55d95dd3291ef532 /src/portable
parentf6660c39a19dda4f4b3c00ce007dfd3e9fd47d7f (diff)
dcd_synopsys: Handle HS and FS IP in one device
FIXME: Allow run-time selection to allow to handle both HS and FS with one file F746 HS port enumerates with error config 1 interface 2 altsetting 0 bulk endpoint 0x3 has invalid maxpacket 64
Diffstat (limited to 'src/portable')
-rw-r--r--src/portable/st/synopsys/dcd_synopsys.c44
1 files changed, 29 insertions, 15 deletions
diff --git a/src/portable/st/synopsys/dcd_synopsys.c b/src/portable/st/synopsys/dcd_synopsys.c
index 845aecf1e..6e26fd09a 100644
--- a/src/portable/st/synopsys/dcd_synopsys.c
+++ b/src/portable/st/synopsys/dcd_synopsys.c
@@ -53,33 +53,39 @@
// EP_FIFO_SIZE : Size of dedicated USB SRAM
#if CFG_TUSB_MCU == OPT_MCU_STM32F1
#include "stm32f1xx.h"
- #define EP_MAX 4
- #define EP_FIFO_SIZE 1280
+ #define EP_MAX_FS 4
+ #define EP_FIFO_SIZE_FS 1280
#elif CFG_TUSB_MCU == OPT_MCU_STM32F2
#include "stm32f2xx.h"
- #define EP_MAX USB_OTG_FS_MAX_IN_ENDPOINTS
- #define EP_FIFO_SIZE USB_OTG_FS_TOTAL_FIFO_SIZE
+ #define EP_MAX_FS USB_OTG_FS_MAX_IN_ENDPOINTS
+ #define EP_FIFO_SIZE_FS USB_OTG_FS_TOTAL_FIFO_SIZE
#elif CFG_TUSB_MCU == OPT_MCU_STM32F4
#include "stm32f4xx.h"
- #define EP_MAX USB_OTG_FS_MAX_IN_ENDPOINTS
- #define EP_FIFO_SIZE USB_OTG_FS_TOTAL_FIFO_SIZE
+ #define EP_MAX_FS USB_OTG_FS_MAX_IN_ENDPOINTS
+ #define EP_FIFO_SIZE_FS USB_OTG_FS_TOTAL_FIFO_SIZE
+ #define EP_MAX_HS USB_OTG_HS_MAX_IN_ENDPOINTS
+ #define EP_FIFO_SIZE_HS USB_OTG_HS_TOTAL_FIFO_SIZE
#elif CFG_TUSB_MCU == OPT_MCU_STM32H7
#include "stm32h7xx.h"
- #define EP_MAX 9
- #define EP_FIFO_SIZE 4096
+ #define EP_MAX_FS 9
+ #define EP_FIFO_SIZE_FS 4096
+ #define EP_MAX_HS 9
+ #define EP_FIFO_SIZE_HS 4096
#elif CFG_TUSB_MCU == OPT_MCU_STM32F7
#include "stm32f7xx.h"
- #define EP_MAX 6
- #define EP_FIFO_SIZE 1280
+ #define EP_MAX_FS 6
+ #define EP_FIFO_SIZE_FS 1280
+ #define EP_MAX_HS 9
+ #define EP_FIFO_SIZE_HS 4096
#elif CFG_TUSB_MCU == OPT_MCU_STM32L4
#include "stm32l4xx.h"
- #define EP_MAX 6
- #define EP_FIFO_SIZE 1280
+ #define EP_MAX_FS 6
+ #define EP_FIFO_SIZE_FS 1280
#else
#error "Unsupported MCUs"
@@ -140,7 +146,15 @@ typedef struct {
typedef volatile uint32_t * usb_fifo_t;
-xfer_ctl_t xfer_status[EP_MAX][2];
+#if TUD_OPT_RHPORT == 1
+xfer_ctl_t xfer_status[EP_MAX_HS][2];
+# define EP_MAX EP_MAX_HS
+# define EP_FIFO_SIZE EP_FIFO_SIZE_HS
+#else
+xfer_ctl_t xfer_status[EP_MAX_FS][2];
+# define EP_MAX EP_MAX_FS
+# define EP_FIFO_SIZE EP_FIFO_SIZE_FS
+#endif
#define XFER_CTL_BASE(_ep, _dir) &xfer_status[_ep][_dir]
// EP0 transfers are limited to 1 packet - larger sizes has to be split
@@ -206,9 +220,9 @@ static void bus_reset(uint8_t rhport)
// overwrite this.
#if TUD_OPT_HIGH_SPEED
- _allocated_fifo_words = 271 + 2*EP_MAX;
+ _allocated_fifo_words = 271 + 2*EP_MAX_HS;
#else
- _allocated_fifo_words = 47 + 2*EP_MAX;
+ _allocated_fifo_words = 47 + 2*EP_MAX_FS;
#endif
usb_otg->GRXFSIZ = _allocated_fifo_words;