Re: [PATCH] usb: dwc3: Fix GUID register programming order

From: Thinh Nguyen

Date: Thu Apr 16 2026 - 18:25:14 EST


On Wed, Apr 15, 2026, Selvarasu Ganesan wrote:
>
> On 4/15/2026 7:16 AM, Thinh Nguyen wrote:
> > On Tue, Apr 14, 2026, Selvarasu Ganesan wrote:
> >> On 4/14/2026 6:35 AM, Thinh Nguyen wrote:
> >>> On Fri, Apr 10, 2026, Selvarasu Ganesan wrote:
> >>>> The Linux Version Code is currently written to the GUID register before
> >>>> dwc3_core_soft_reset() is executed. Since the core soft reset clears the
> >>>> GUID register back to its default value, the version information is
> >>>> subsequently lost.
> >>> This is not right. Soft reset should not clear the GUID register.
> >>> Something else must have cleared it. Did you assert Vcc reset (hard
> >>> reset) during phy reset/initialization?
> >>>
> >>> BR,
> >>> Thinh
> >> Hi Thinh,
> >>
> >> Thank you for the clarification. Yes, you are correct, this issue is not
> >> related to a dwc3 core soft reset. Instead, the GUID value reverts to
> >> its default state when the PHY link_sw_reset completes during PHY init
> >> sequence.
> >>
> >> We are using the Synopsys eUSB PHY, this reset is triggered from our
> >> downstream driver during the PHY init sequence (invoked through
> >> |dwc3_core_init|).
> >>
> >> Could you please suggest the best way to retrieve the correct linux
> >> version information from the GUID?
> >> Additionally, would it be feasible to update the GUID register after the
> >> PHY init sequence (triggered by |dwc3_core_init|) completes?
> >>
> > Yes. Just fix up the changelog to properly describe the problem and
> > solution.
> >
> > BR,
> > Thinh
> Hi Thinh,
>
> Thanks for the confirmation. I have modified the changelog as shown
> below, please review it once then i will post updated patchset.
>
>
> From: Selvarasu Ganesan <selvarasu.g@xxxxxxxxxxx>
> Date: Thu, 9 Apr 2026 18:34:03 +0530
> Subject: [PATCH v2] usb: dwc3: Move GUID programming after PHY
> initialization
>
> The Linux Version Code is currently written to the GUID register before
> PHY initialization. Certain PHY implementations (such as Synopsys eUSB
> PHY performing link_sw_reset) clear the GUID register to its default
> value during initialization, causing the kernel version information to
> be lost.
>
> Move the GUID register programming to occur after PHY initialization
> completes to ensure the Linux version information persists.
>
> Fixes: fa0ea13e9f1c ("usb: dwc3: core: write LINUX_VERSION_CODE to our
> GUID register")
> Cc: stable@xxxxxxxxxxxxxxx
> Reported-by: Pritam Manohar Sutar <pritam.sutar@xxxxxxxxxxx>
> Signed-off-by: Selvarasu Ganesan <selvarasu.g@xxxxxxxxxxx>
> ---
>  drivers/usb/dwc3/core.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index 161a4d58b2cec..8b9e9d3e9589a 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -1341,12 +1341,6 @@ int dwc3_core_init(struct dwc3 *dwc)
>
>         hw_mode = DWC3_GHWPARAMS0_MODE(dwc->hwparams.hwparams0);
>
> -       /*
> -        * Write Linux Version Code to our GUID register so it's easy to
> figure
> -        * out which kernel version a bug was found.
> -        */
> -       dwc3_writel(dwc, DWC3_GUID, LINUX_VERSION_CODE);
> -
>         ret = dwc3_phy_setup(dwc);
>         if (ret)
>                 return ret;
> @@ -1374,6 +1368,12 @@ int dwc3_core_init(struct dwc3 *dwc)
>         if (ret)
>                 goto err_exit_ulpi;
>
> +       /*
> +        * Write Linux Version Code to our GUID register so it's easy to
> figure
> +        * out which kernel version a bug was found.
> +        */
> +       dwc3_writel(dwc, DWC3_GUID, LINUX_VERSION_CODE);
> +

In the really old kernel, the phy init was part of the
dwc3_core_soft_reset(). Move this after dwc3_core_soft_reset() just as
you had before. It will be better for backporting, and it looks more
fitting to place it there.

>         ret = dwc3_core_soft_reset(dwc);
>         if (ret)
>                 goto err_exit_phy;


The changelog looks good.

Thanks,
Thinh