This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 478f3bc39 tinyusb/synopsys: Add support for ULPI interface
478f3bc39 is described below

commit 478f3bc39543d6ed495574704383a5d3d5ea9ffa
Author: Jerzy Kasenberg <[email protected]>
AuthorDate: Fri Mar 13 20:32:37 2026 +0100

    tinyusb/synopsys: Add support for ULPI interface
    
    TinyUSB supports High Speed for STM32H7 with
    external ULPI interface.
    
    This adds support for this functionality.
    
    When USB_USE_OTG_HS_ULPI syscfg value is 1
    external PHY will be used instead of embedded FS PHY.
    
    Signed-off-by: Jerzy Kasenberg <[email protected]>
    Signed-off-by: Jerzy Kasenberg <[email protected]>
---
 hw/usb/tinyusb/synopsys/src/synopsys.c | 56 ++++++++++++++++++++++++++++++----
 hw/usb/tinyusb/synopsys/syscfg.yml     |  4 +++
 2 files changed, 54 insertions(+), 6 deletions(-)

diff --git a/hw/usb/tinyusb/synopsys/src/synopsys.c 
b/hw/usb/tinyusb/synopsys/src/synopsys.c
index 29301bc71..6ad7bcf15 100755
--- a/hw/usb/tinyusb/synopsys/src/synopsys.c
+++ b/hw/usb/tinyusb/synopsys/src/synopsys.c
@@ -37,8 +37,15 @@
 #endif
 #define GPIO_AF_USB        MYNEWT_VAL(USB_AF_USB)
 
-static void
-OTG_IRQHandler(void)
+void
+OTG_HS_IRQHandler(void)
+{
+    /* TinyUSB provides interrupt handler code */
+    tud_int_handler(1);
+}
+
+void
+OTG_FS_IRQHandler(void)
 {
     /* TinyUSB provides interrupt handler code */
     tud_int_handler(0);
@@ -47,8 +54,47 @@ OTG_IRQHandler(void)
 void
 tinyusb_hardware_init(void)
 {
-    NVIC_SetVector(USB_OTG_IRQn, (uint32_t)OTG_IRQHandler);
+    NVIC_SetVector(USB_OTG_IRQn, (uint32_t)USB_OTG_IRQHandler);
     NVIC_SetPriority(USB_OTG_IRQn, 2);
+#if MYNEWT_VAL(USB_USE_OTG_HS)
+#ifdef __HAL_RCC_PWR_CLK_ENABLE
+    __HAL_RCC_PWR_CLK_ENABLE();
+#endif
+    USB_OTG_CLK_ENABLE();
+#if MYNEWT_VAL(USB_USE_OTG_HS_ULPI)
+    hal_gpio_init_af(MCU_GPIO_PORTA(3), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTA(5), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTB(0), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTB(1), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTB(5), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTB(10), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTB(11), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTB(12), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTB(13), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTC(0), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTC(2), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTC(3), 10, GPIO_NOPULL, GPIO_MODE_AF_PP);
+
+    __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE();
+#else
+    /*
+     * USB Pin Init
+     * PB14- DM, PB15- DP
+     */
+    hal_gpio_init_af(MCU_GPIO_PORTB(14), 12, GPIO_NOPULL, GPIO_MODE_AF_PP);
+    hal_gpio_init_af(MCU_GPIO_PORTB(15), 12, GPIO_NOPULL, GPIO_MODE_AF_PP);
+#endif
+    /* No VBUS sense */
+    USB_OTG->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
+
+    /* B-peripheral session valid override enable */
+    USB_OTG->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN;
+    USB_OTG->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL;
+
+    /* Force device mode */
+    USB_OTG->GUSBCFG &= ~USB_OTG_GUSBCFG_FHMOD;
+    USB_OTG->GUSBCFG |= USB_OTG_GUSBCFG_FDMOD;
+#else
     /*
      * USB Pin Init
      * PA11- DM, PA12- DP
@@ -64,9 +110,6 @@ tinyusb_hardware_init(void)
 #endif
     hal_gpio_init_af(MCU_GPIO_PORTA(12), GPIO_AF_USB, GPIO_NOPULL, 
GPIO_MODE_AF_PP);
 
-#if MYNEWT_VAL(MCU_STM32H7)
-    HAL_PWREx_EnableUSBVoltageDetector();
-#endif
     /*
      * Enable USB OTG clock, force device mode
      */
@@ -106,6 +149,7 @@ tinyusb_hardware_init(void)
     USB_OTG->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL;
 #endif
 #endif
+#endif
 
 #if MYNEWT_VAL(MCU_STM32U5) || MYNEWT_VAL(MCU_STM32L4) || 
MYNEWT_VAL(MCU_STM32L5)
     __HAL_RCC_PWR_CLK_ENABLE();
diff --git a/hw/usb/tinyusb/synopsys/syscfg.yml 
b/hw/usb/tinyusb/synopsys/syscfg.yml
index 9349f14ad..e902f610d 100644
--- a/hw/usb/tinyusb/synopsys/syscfg.yml
+++ b/hw/usb/tinyusb/synopsys/syscfg.yml
@@ -44,3 +44,7 @@ syscfg.defs:
         description:
             USB pins alternate function mapping (10 or 12).
         value: 10
+    USB_USE_OTG_HS_ULPI:
+        description:
+            Use ULPI interface
+        value: 0

Reply via email to