[PATCH] usb: dwc2: fix reset logic in dwc2_core_reset
Patrick Delaunay
patrick.delaunay at foss.st.com
Wed Jul 23 17:09:16 CEST 2025
Use GUSBCFG_FORCEHOSTMODE to detected the HOST forced mode as it is done
in the Linux driver drivers/usb/dwc2/core.c:dwc2_core_reset().
The host polling must be executed only if the current mode is host,
either due to the force HOST mode (which persists after core reset)
or the connector id pin.
The GUSBCFG_FORCEDEVMODE bits is used to force the device mode (for
example used on STM32MP1x platform) and when it is activated the DWC2 reset
failed with the trace:
"dwc2_core_reset: Waiting for GINTSTS_CURMODE_HOST timeout"
Fixes: c5d685b8993c ("usb: dwc2: Unify flush and reset logic with v4.20a support")
Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
---
drivers/usb/common/dwc2_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/common/dwc2_core.c b/drivers/usb/common/dwc2_core.c
index 63062d5cc943..37007134e5b3 100644
--- a/drivers/usb/common/dwc2_core.c
+++ b/drivers/usb/common/dwc2_core.c
@@ -17,7 +17,7 @@ int dwc2_core_reset(struct dwc2_core_regs *regs)
bool host_mode = false;
if (!(readl(®s->global_regs.gotgctl) & GOTGCTL_CONID_B) ||
- (readl(®s->global_regs.gusbcfg) & GUSBCFG_FORCEDEVMODE))
+ (readl(®s->global_regs.gusbcfg) & GUSBCFG_FORCEHOSTMODE))
host_mode = true;
/* Core Soft Reset */
--
2.25.1
More information about the U-Boot
mailing list