All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Fabrice Gasnier" <fabrice.gasnier@foss.st.com>
Cc: linux-usb@vger.kernel.org
Subject: Re: [PATCH v2 4/5] usb: dwc2: hcd: don't disable/enable external vbus by system suspend/resume
Date: Tue, 13 Oct 2026 14:28:50 +0000	[thread overview]
Message-ID: <sashiko-outbox-169908@kernel.org> (raw)
In-Reply-To: <20261013-dwc2-low-power-fixes-stm32-v2-4-79865a4f1b63@foss.st.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] usb: dwc2: state desync leaves VBUS regulator permanently off
--

commit 4667cf4d4bc9dadbb9a896c9a4811136f2ba1208
Author: Fabrice Gasnier <fabrice.gasnier@foss.st.com>

usb: dwc2: hcd: don't disable/enable external vbus by system suspend/resume

This commit removes the disable and enable calls for the external vbus in
the bus suspend and resume routines. It aims to avoid an unbalanced regulator
enable count that occurs when registers are lost during system suspend.

> diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
> index c966c08cd7d82..263713ebd4801 100644
> --- a/drivers/usb/dwc2/hcd.c
> +++ b/drivers/usb/dwc2/hcd.c

[ ... ]

> @@ -4500,10 +4496,7 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)
>  		spin_lock_irqsave(&hsotg->lock, flags);
>  	}
>  
> -	/* Enable external vbus supply after resuming the port. */
>  	spin_unlock_irqrestore(&hsotg->lock, flags);
> -	dwc2_vbus_supply_init(hsotg);
> -

[Severity: Medium]
Will this leave the physical regulator permanently off if the port power was 
cleared before system suspend?

If the port is powered off by the hub driver before suspend, the external
regulator count is 0 and HPRT0_PWR is 0. During system resume, if controller
registers are lost, _dwc2_hcd_resume() unconditionally sets HPRT0_PWR to 1
further down in this function:

    dwc2_writel(hsotg, HPRT0_PWR | HPRT0_CONNDET |
                    HPRT0_ENACHG, HPRT0);

By removing the dwc2_vbus_supply_init() call here, the physical regulator
remains off, but the HPRT0_PWR bit is forced to 1, causing a state desync.

When the hub driver later tries to power on the port in dwc2_hcd_hub_control(),
it checks the current state:

    case USB_PORT_FEAT_POWER:
        ...
        hprt0 = dwc2_read_hprt0(hsotg);
        pwr = hprt0 & HPRT0_PWR;
        hprt0 |= HPRT0_PWR;
        dwc2_writel(hsotg, hprt0, HPRT0);
        if (!pwr)
            dwc2_vbus_supply_init(hsotg);
        break;

Since HPRT0_PWR is already 1, the check for !pwr evaluates to false, and the
external regulator is silently skipped.

Does this lock the port in an permanently unpowered state where it is unable
to detect or enumerate devices? Could this be avoided by only setting HPRT0_PWR
during resume if the regulator is also being enabled, or by restoring the
exact prior port power state instead of unconditionally setting it?

>  	/* Wait for controller to correctly update D+/D- level */
>  	usleep_range(3000, 5000);
>  	spin_lock_irqsave(&hsotg->lock, flags);

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261013-dwc2-low-power-fixes-stm32-v2-0-79865a4f1b63@foss.st.com?part=4

  reply	other threads:[~2026-10-13 14:28 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-13 13:15 [PATCH v2 0/5] usb: dwc2: fix low power issues found on stm32mp1 Fabrice Gasnier
2026-10-13 13:15 ` [PATCH v2 1/5] usb: dwc2: fix recovery after PM domain off Fabrice Gasnier
2026-10-13 13:37   ` sashiko-bot
2026-10-13 13:15 ` [PATCH v2 2/5] usb: dwc2: fix a possible interrupt storm on stm32mp1 Fabrice Gasnier
2026-10-13 13:57   ` sashiko-bot
2026-10-13 13:15 ` [PATCH v2 3/5] usb: dwc2: hcd: fix possible successive vbus supply enables Fabrice Gasnier
2026-10-13 14:17   ` sashiko-bot
2026-10-13 13:15 ` [PATCH v2 4/5] usb: dwc2: hcd: don't disable/enable external vbus by system suspend/resume Fabrice Gasnier
2026-10-13 14:28   ` sashiko-bot [this message]
2026-10-13 13:15 ` [PATCH v2 5/5] usb: dwc2: platform: fix stm32mp15 detection logic power management Fabrice Gasnier
2026-10-13 14:41   ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-169908@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=fabrice.gasnier@foss.st.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.