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