From df36b162bd2cca2c59eec08e00dbb86bef311eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mo=C5=84?= Date: Thu, 28 Nov 2024 11:57:00 +0100 Subject: [PATCH] drivers: udc_dwc2: Wait for USBHS clock start MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Accessing DWC2 otg core registers before the clock starts results in complete system hang. Add a 1 us busy wait to make sure that software won't access registers before the clock is started. Signed-off-by: Tomasz Moń --- drivers/usb/udc/udc_dwc2_vendor_quirks.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/usb/udc/udc_dwc2_vendor_quirks.h b/drivers/usb/udc/udc_dwc2_vendor_quirks.h index d12d64ef848..f45404c2b84 100644 --- a/drivers/usb/udc/udc_dwc2_vendor_quirks.h +++ b/drivers/usb/udc/udc_dwc2_vendor_quirks.h @@ -201,6 +201,9 @@ static inline int usbhs_enable_core(const struct device *dev) wrapper->ENABLE = USBHS_ENABLE_PHY_Msk | USBHS_ENABLE_CORE_Msk; wrapper->TASKS_START = 1UL; + /* Wait for clock to start to avoid hang on too early register read */ + k_busy_wait(1); + /* Enable interrupts */ wrapper->INTENSET = 1UL;