From: sashiko-bot@kernel.org
To: "Louis-Alexis Eyraud" <louisalexis.eyraud@collabora.com>
Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org,
linux-scsi@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org,
vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com
Subject: Re: [PATCH v14 07/23] scsi: ufs: mediatek: Rework 0.9V regulator
Date: Fri, 16 Oct 2026 12:44:06 +0000 [thread overview]
Message-ID: <sashiko-outbox-174331@kernel.org> (raw)
In-Reply-To: <20261016-mt8196-ufs-v14-7-e8d565e0cd45@collabora.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] scsi: ufs: unbalanced phy power refcount on regulator disable failure
--
commit 27b915ec9285afe5a63f7cbb4e66e08323344507
Author: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
scsi: ufs: mediatek: Rework 0.9V regulator
The mediatek UFS host driver is refactored to manage the 0.9V regulator
by relying on the regulator framework instead of adding explicit sleeps
and checking downstream names. It renames the regulator to avdd09 and
updates the devicetree matching appropriately.
> diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
> index 2aa13b5954800..bcb7f350984c0 100644
> --- a/drivers/ufs/host/ufs-mediatek.c
> +++ b/drivers/ufs/host/ufs-mediatek.c
[ ... ]
> @@ -508,56 +510,77 @@ static int ufs_mtk_wait_link_state(struct ufs_hba *hba, u32 state,
[ ... ]
> static int ufs_mtk_mphy_power_on(struct ufs_hba *hba, bool on)
> {
> struct ufs_mtk_host *host = ufshcd_get_variant(hba);
> struct phy *mphy = host->mphy;
> - struct arm_smccc_res res;
> - int err;
> - int ret = 0;
> + int ret;
>
> - if (!mphy || !(on ^ host->mphy_powered_on))
> + if (!mphy || on == host->mphy_powered_on)
> return 0;
>
> if (on) {
> - if (ufs_mtk_is_va09_supported(hba)) {
> - ret = regulator_enable(host->reg_va09);
> - if (ret < 0)
> - goto out;
> - /* wait 200 us to stablize VA09 */
> - usleep_range(200, 210);
> - ufs_mtk_va09_pwr_ctrl(res, 1);
> - }
> + ret = ufs_mtk_09v_on(host);
> + if (ret)
> + return ret;
> ret = phy_power_on(mphy);
> if (ret) {
> - if (ufs_mtk_is_va09_supported(hba)) {
> - ufs_mtk_va09_pwr_ctrl(res, 0);
> - err = regulator_disable(host->reg_va09);
> - if (err)
> - dev_err(hba->dev,
> - "failed to unwind va09: %d\n", err);
> - }
> dev_err(hba->dev, "failed to enable mphy: %d\n", ret);
> + ufs_mtk_09v_off(host, false);
> return ret;
> }
> } else {
> phy_power_off(mphy);
> - if (ufs_mtk_is_va09_supported(hba)) {
> - ufs_mtk_va09_pwr_ctrl(res, 0);
> - ret = regulator_disable(host->reg_va09);
> - }
> - }
> -out:
> - if (ret) {
> - dev_info(hba->dev,
> - "failed to %s va09: %d\n",
> - on ? "enable" : "disable",
> - ret);
> - } else {
> - host->mphy_powered_on = on;
> + ret = ufs_mtk_09v_off(host, true);
> + if (ret)
> + return ret;
[Severity: High]
Does returning early here leave the mphy_powered_on boolean out of sync with
the physical state?
If ufs_mtk_09v_off() fails, the early return skips updating
host->mphy_powered_on = on (where on is false). This leaves the state as
true even though phy_power_off(mphy) has already been called.
Because of the early return, a subsequent request to power off would evaluate
on == host->mphy_powered_on (false == true) to false, causing the function
to execute phy_power_off(mphy) again and underflow the PHY power count.
Conversely, a request to power on would evaluate true == true, causing an
early success return without actually powering on the PHY, potentially breaking
UFS I/O permanently.
> }
>
> - return ret;
> + host->mphy_powered_on = on;
> +
> + return 0;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261016-mt8196-ufs-v14-0-e8d565e0cd45@collabora.com?part=7
next prev parent reply other threads:[~2026-10-16 12:44 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 12:32 [PATCH v14 00/23] MediaTek UFS Cleanup and MT8196 Enablement Louis-Alexis Eyraud
2026-10-16 12:32 ` [PATCH v14 01/23] dt-bindings: phy: Add mediatek,mt8196-ufsphy variant Louis-Alexis Eyraud
2026-10-16 12:32 ` [PATCH v14 02/23] dt-bindings: ufs: mediatek,ufs: Complete the binding Louis-Alexis Eyraud
2026-10-16 12:46 ` sashiko-bot
2026-10-16 12:32 ` [PATCH v14 03/23] dt-bindings: ufs: mediatek,ufs: Add mt8196 variant Louis-Alexis Eyraud
2026-10-16 12:32 ` [PATCH v14 04/23] scsi: ufs: mediatek: Move MTK_SIP_UFS_CONTROL to mtk_sip_svc.h Louis-Alexis Eyraud
2026-10-16 12:32 ` [PATCH v14 05/23] phy: mediatek: ufs: Add support for resets Louis-Alexis Eyraud
2026-10-16 12:46 ` sashiko-bot
2026-10-16 12:32 ` [PATCH v14 06/23] scsi: ufs: mediatek: Rework resets Louis-Alexis Eyraud
2026-10-16 12:32 ` [PATCH v14 07/23] scsi: ufs: mediatek: Rework 0.9V regulator Louis-Alexis Eyraud
2026-10-16 12:44 ` sashiko-bot [this message]
2026-10-16 12:33 ` [PATCH v14 08/23] scsi: ufs: mediatek: Add dual 0.9V supply support Louis-Alexis Eyraud
2026-10-16 12:43 ` sashiko-bot
2026-10-16 12:33 ` [PATCH v14 09/23] scsi: ufs: mediatek: Rework init function Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 10/23] scsi: ufs: mediatek: Rework the crypt-boost stuff Louis-Alexis Eyraud
2026-10-16 12:43 ` sashiko-bot
2026-10-16 12:33 ` [PATCH v14 11/23] scsi: ufs: mediatek: Handle misc host voltage regulators Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 12/23] scsi: ufs: mediatek: Remove undocumented downstream reset cruft Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 13/23] scsi: ufs: mediatek: Remove vendor kernel quirks cruft Louis-Alexis Eyraud
2026-10-16 12:43 ` sashiko-bot
2026-10-16 12:33 ` [PATCH v14 14/23] scsi: ufs: mediatek: Use the common PHY framework Louis-Alexis Eyraud
2026-10-16 12:50 ` sashiko-bot
2026-10-16 12:33 ` [PATCH v14 15/23] scsi: ufs: mediatek: Remove mediatek,ufs-broken-rtc property Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 16/23] scsi: ufs: mediatek: Rework _ufs_mtk_clk_scale error paths Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 17/23] scsi: ufs: mediatek: Clean up logging prints Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 18/23] scsi: ufs: mediatek: Rework ufs_mtk_wait_idle_state Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 19/23] scsi: ufs: mediatek: Don't acquire dvfsrc-vcore twice Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 20/23] scsi: ufs: mediatek: Rework hardware version reading Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 21/23] scsi: ufs: mediatek: Remove ret local from link_startup_notify Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 22/23] scsi: ufs: mediatek: Remove undocumented "clk-scale-up-vcore-min" Louis-Alexis Eyraud
2026-10-16 12:33 ` [PATCH v14 23/23] scsi: ufs: mediatek: Add MT8196 compatible, update copyright Louis-Alexis Eyraud
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-174331@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=louisalexis.eyraud@collabora.com \
--cc=neil.armstrong@linaro.org \
--cc=olteanv@gmail.com \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=vkoul@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox