All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Vladimir Oltean" <vladimir.oltean@nxp.com>
Cc: linux-pci@vger.kernel.org, wsa+renesas@sang-engineering.com
Subject: Re: [PATCH v8 phy-next 12/31] scsi: ufs: qcom: make use of QMP PHY dynamic gear switching ability
Date: Thu, 07 May 2026 08:00:01 +0000	[thread overview]
Message-ID: <20260507080002.75B01C2BCC7@smtp.kernel.org> (raw)
In-Reply-To: <20260505100523.1922388-13-vladimir.oltean@nxp.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Missing error check on qmp_ufs_power_on() leads to a system crash on unclocked register access.
- [Medium] Bypassing the PHY framework for power cycling desynchronizes the framework's power state, causing resource double-disables on failure.
--

commit f4f0468d1ef7ec1cda5450a4d318d324cf1517f6
Author: Vladimir Oltean <vladimir.oltean@nxp.com>

scsi: ufs: qcom: make use of QMP PHY dynamic gear switching ability

This commit absorbs the PHY power cycling and calibration sequence into
qmp_ufs_set_mode() to simplify the consumer driver. It updates both the UFS
HCD consumer and the QMP PHY provider simultaneously to avoid breaking the
power sequence.

> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c
> index 771bc7c2ab505..e4e7966eb39a6 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c
> @@ -2012,6 +2012,12 @@ static int qmp_ufs_set_mode(struct phy *phy, enum phy_mode mode, int submode)
>  	qmp->mode = mode;
>  	qmp->submode = submode;
>  
> +	if (phy->power_count) {
> +		qmp_ufs_power_off(phy);
> +		qmp_ufs_power_on(phy);

Does the return value of qmp_ufs_power_on() need to be checked here?

If qmp_ufs_power_on() fails, the PHY clocks and regulators will remain
disabled.

Because the error is ignored, execution unconditionally proceeds to
qmp_ufs_phy_calibrate(), which performs read/modify/write operations on the
PHY memory-mapped registers. Accessing peripheral registers while their
clocks are disabled can cause a synchronous external abort and a kernel
panic.

Additionally, does calling the internal power routines directly cause issues
with the PHY framework state tracking?

By calling qmp_ufs_power_off() and qmp_ufs_power_on() instead of the public
phy_power_off() and phy_power_on() APIs, phy->power_count remains unchanged.

If qmp_ufs_power_on() fails leaving the hardware unpowered, the framework
will still believe the PHY is powered on. During error handling or teardown,
the core might call phy_power_off(). Would this result in a second call
to qmp_ufs_power_off() and cause reference count underflow warnings for the
clocks and regulators?

> +		return qmp_ufs_phy_calibrate(phy);
> +	}
> +
>  	return 0;
>  }

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260505100523.1922388-1-vladimir.oltean@nxp.com?part=12

  reply	other threads:[~2026-05-07  8:00 UTC|newest]

Thread overview: 158+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-05 10:04 [PATCH v8 phy-next 00/31] Split Generic PHY consumer and provider API Vladimir Oltean
2026-05-05 10:04 ` Vladimir Oltean
2026-05-05 10:04 ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 01/31] PCI: cadence: Preserve all error codes in cdns_plat_pcie_probe() Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 16:26   ` Bjorn Helgaas
2026-05-05 16:26     ` Bjorn Helgaas
2026-05-05 16:26     ` Bjorn Helgaas
2026-05-05 16:26     ` Bjorn Helgaas
2026-05-07  7:59   ` sashiko-bot
2026-05-07 15:50     ` Bjorn Helgaas
2026-05-05 10:04 ` [PATCH v8 phy-next 02/31] ata: add <linux/pm_runtime.h> where missing Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-07  7:59   ` sashiko-bot
2026-05-05 10:04 ` [PATCH v8 phy-next 03/31] PCI: Add missing headers transitively included by <linux/phy/phy.h> Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 04/31] usb: add " Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 05/31] drm: add <linux/pm_runtime.h> where missing Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 06/31] phy: " Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 07/31] phy: spacemit: include missing <linux/phy/phy.h> Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 08/31] net: lan969x: include missing <linux/of.h> Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 09/31] PCI: Remove device links to PHY Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  7:59   ` sashiko-bot
2026-05-07 15:47     ` Bjorn Helgaas
2026-05-08  2:14       ` Hans Zhang
2026-05-05 10:05 ` [PATCH v8 phy-next 10/31] scsi: ufs: exynos: use dedicated API for updating PHY bus width Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  7:59   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 11/31] scsi: ufs: qcom: call phy_init() before phy_power_on() Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 12/31] scsi: ufs: qcom: make use of QMP PHY dynamic gear switching ability Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot [this message]
2026-05-05 10:05 ` [PATCH v8 phy-next 13/31] scsi: ufs: qcom: keep separate track of PHY power state Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 14/31] scsi: ufs: qcom: include missing <linux/interrupt.h> Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 15/31] drm/rockchip: dw_hdmi: avoid direct dereference of phy->dev.of_node Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-20 14:21   ` Heiko Stuebner
2026-05-20 14:21     ` Heiko Stuebner
2026-05-20 14:21     ` Heiko Stuebner
2026-05-20 14:21     ` Heiko Stuebner
2026-05-20 15:20     ` Vladimir Oltean
2026-05-20 15:20       ` Vladimir Oltean
2026-05-20 15:20       ` Vladimir Oltean
2026-05-20 15:20       ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 16/31] usb: host: tegra: " Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 17/31] usb: gadget: tegra-xudc: " Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 18/31] phy: move provider API out of public <linux/phy/phy.h> Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 19/31] phy: make phy_get_mode(), phy_get_bus_width() NULL tolerant Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 20/31] phy: introduce phy_get_max_link_rate() helper for consumers Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 21/31] drm/rockchip: dsi: include PHY provider header Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 22/31] drm: bridge: cdns-mhdp8546: use consumer API for getting PHY bus width Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 23/31] media: sunxi: a83-mips-csi2: include PHY provider header Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 24/31] net: renesas: rswitch: " Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 25/31] pinctrl: tegra-xusb: " Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 26/31] power: supply: cpcap-charger: include missing <linux/property.h> Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 27/31] phy: move ulpi_phy.h from include/linux/phy/ to drivers/phy/ Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 28/31] phy: include PHY provider header (1/2) Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 29/31] phy: include PHY provider header (2/2) Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 30/31] phy: remove temporary provider compatibility from consumer header Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 31/31] MAINTAINERS: add regexes for linux-phy Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-21  9:38 ` (subset) [PATCH v8 phy-next 00/31] Split Generic PHY consumer and provider API Heiko Stuebner
2026-05-21  9:38   ` Heiko Stuebner
2026-05-21  9:38   ` Heiko Stuebner
2026-06-03 21:39 ` Sebastian Reichel
2026-06-03 21:39   ` Sebastian Reichel

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=20260507080002.75B01C2BCC7@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=sashiko@lists.linux.dev \
    --cc=vladimir.oltean@nxp.com \
    --cc=wsa+renesas@sang-engineering.com \
    /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.