[PATCH] usb: dwc2: fix reset logic in dwc2_core_reset

Patrice CHOTARD patrice.chotard at foss.st.com
Mon Aug 18 09:11:56 CEST 2025



On 7/23/25 17:09, Patrick Delaunay wrote:
> 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(&regs->global_regs.gotgctl) & GOTGCTL_CONID_B) ||
> -	    (readl(&regs->global_regs.gusbcfg) & GUSBCFG_FORCEDEVMODE))
> +	    (readl(&regs->global_regs.gusbcfg) & GUSBCFG_FORCEHOSTMODE))
>  		host_mode = true;
>  
>  	/* Core Soft Reset */
Hi

tested on stm32mp157c-dk2

Tested-by: Patrice Chotard <patrice.chotard at foss.st.com>

Thanks
Patrice


More information about the U-Boot mailing list