From: sashiko-bot@kernel.org
To: "Chen-Yu Tsai" <wenst@chromium.org>
Cc: robh@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v9 13/15] power: sequencing: pcie-m2: Split Bluetooth unit based on interface
Date: Wed, 16 Sep 2026 08:13:58 +0000 [thread overview]
Message-ID: <20260916081358.9CEC91F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260916075745.3549953-14-wenst@chromium.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] pwrseq: conflicting hardware state toggles between USB and UART
--
commit 93617e3cd28ec70ace0cc6829369a35a56e3ca15
Author: Chen-Yu Tsai <wenst@chromium.org>
power: sequencing: pcie-m2: Split Bluetooth unit based on interface
This commit splits the Bluetooth unit into two (USB and UART) to allow
either interface to independently toggle power, unbreaking the Qualcomm
Bluetooth serdev driver.
> diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequencing/pwrseq-pcie-m2.c
> index 2066e3f1900df..bf5ebc2a82f53 100644
> --- a/drivers/power/sequencing/pwrseq-pcie-m2.c
> +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c
> @@ -83,8 +83,22 @@ static int pwrseq_pci_m2_e_bt_disable(struct pwrseq_device *pwrseq)
> return gpiod_set_value_cansleep(ctx->w_disable2_gpio, 1);
> }
>
> -static const struct pwrseq_unit_data pwrseq_pcie_m2_e_bt_unit_data = {
> - .name = "bt-enable",
> +/*
> + * XXX There are two Bluetooth units to allow either one to be able to power
> + * off and thus reset the controller. In practice only one of the interfaces
> + * is used, so there is no conflict. However userspace could power off the
> + * USB unit by disabling the associated USB port, without the UART unit or
> + * its consumer ever knowing.
> + */
> +static const struct pwrseq_unit_data pwrseq_pcie_m2_e_bt_uart_unit_data = {
> + .name = "bt-uart-enable",
> + .deps = pwrseq_pcie_m2_unit_deps,
> + .enable = pwrseq_pci_m2_e_bt_enable,
> + .disable = pwrseq_pci_m2_e_bt_disable,
> +};
> +
> +static const struct pwrseq_unit_data pwrseq_pcie_m2_e_bt_usb_unit_data = {
> + .name = "bt-usb-enable",
> .deps = pwrseq_pcie_m2_unit_deps,
> .enable = pwrseq_pci_m2_e_bt_enable,
> .disable = pwrseq_pci_m2_e_bt_disable,
> +};
[Severity: Medium]
Will this bypass unified reference counting for the physical GPIO line?
If the USB subsystem (e.g., via sysfs port disable or fault recovery) disables
its unit, pwrseq_pci_m2_e_bt_disable() unconditionally drives the shared GPIO
to 1.
Could this forcefully reset the hardware and abruptly drop the active connection
of the UART driver, even if its reference count is still greater than 0?
Although the comments and commit message acknowledge this flaw, without an
exclusive lockout mechanism, does this expose the active subsystem to state
corruption from independent events and violate the PM consistency model?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260916075745.3549953-1-wenst@chromium.org?part=13
next prev parent reply other threads:[~2026-09-16 8:14 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 7:57 [PATCH v9 00/15] usb: enable M.2 E-key slot USB with pwrseq Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 01/15] device property: Add fwnode_graph_get_port_by_id() Chen-Yu Tsai
2026-09-16 8:06 ` sashiko-bot
2026-09-16 7:57 ` [PATCH v9 02/15] device property: Add fwnode_graph_get_next_port_endpoint() Chen-Yu Tsai
2026-09-16 8:14 ` sashiko-bot
2026-09-16 7:57 ` [PATCH v9 03/15] power: sequencing: Add pwrseq_get_state() Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 04/15] usb: hub: Use assign_bit() in usb_hub_set_port_power() Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 05/15] usb: hub: Return actual error from hub_configure() in hub_probe() Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 06/15] usb: hub: Associate port@ fwnode with USB port device Chen-Yu Tsai
2026-10-01 10:53 ` Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 07/15] usb: hub: Pass |struct usb_port*| to usb_port_is_power_on() Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 08/15] usb: hub: Use usb_hub_set_port_power() to control port power everywhere Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 09/15] usb: hub: Power on connected M.2 E-key connectors with power sequencing API Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 10/15] dt-bindings: usb: mediatek,mtk-xhci: Switch to ports for USB connections Chen-Yu Tsai
2026-09-16 8:10 ` sashiko-bot
2026-09-16 7:57 ` [PATCH v9 11/15] power: sequencing: pcie-m2: support matching on remote "port" node Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 12/15] power: sequencing: pcie-m2: Add usb and sdio targets for E-key connector Chen-Yu Tsai
2026-09-16 7:57 ` [PATCH v9 13/15] power: sequencing: pcie-m2: Split Bluetooth unit based on interface Chen-Yu Tsai
2026-09-16 8:13 ` sashiko-bot [this message]
2026-09-16 7:57 ` [PATCH v9 14/15] arm64: dts: mediatek: mt8195-cherry: Add M.2 E-key slot Chen-Yu Tsai
2026-09-16 8:23 ` sashiko-bot
2026-09-16 7:57 ` [PATCH v9 15/15] arm64: dts: mediatek: mt8188-geralt: Add WiFi/BT as " Chen-Yu Tsai
2026-09-21 10:51 ` [PATCH v9 00/15] usb: enable M.2 E-key slot USB with pwrseq AngeloGioacchino Del Regno
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=20260916081358.9CEC91F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=wenst@chromium.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