All of lore.kernel.org
 help / color / mirror / Atom feed
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 v5 14/16] power: sequencing: pcie-m2: Split Bluetooth unit based on interface
Date: Wed, 15 Jul 2026 09:34:32 +0000	[thread overview]
Message-ID: <20260715093433.32EAC1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260715085348.3457359-15-wenst@chromium.org>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Splitting a single shared physical reset GPIO into two logical power sequencing units bypasses the core's refcounting, causing the USB subsystem's runtime PM to inadvertently power off the Bluetooth controller while it is actively in use by the UART driver.
--

--- Patch [14]: [PATCH v5 14/16] power: sequencing: pcie-m2: Split Bluetooth unit based on interface ---
commit 87ef77e2c86fea3f38f875c67c427d48fa406c76
Author: Chen-Yu Tsai <wenst@chromium.org>

power: sequencing: pcie-m2: Split Bluetooth unit based on interface

This commit splits the Bluetooth power sequencing unit into two distinct
units (UART and USB) to allow independent control. It aims to fix
initialization and recovery for serdev drivers by letting either interface
toggle the power.

> diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequencing/pwrseq-pcie-m2.c
> --- 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)

[ ... ]

> -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",

[Severity: High]
Does splitting a single physical reset GPIO into two logical units bypass the
power sequencing core's refcounting?

The commit message notes there is no conflict in practice, but won't the USB
subsystem's runtime PM automatically turn off the Bluetooth controller while
the UART driver is actively using it?

Because a power sequencing target exists, the USB core removes the PM QoS
constraint for the port:

drivers/usb/core/port.c:usb_hub_create_port_device() {
    ...
    /* Userspace owns the policy, drop the kernel 'no_poweroff' request. */
    retval = dev_pm_qos_remove_request(port_dev->req);
    ...
}

If the USB port on the M.2 connector is physically empty (since Bluetooth is
using UART), runtime PM automatically suspends the empty port and powers it
off:

drivers/usb/core/port.c:usb_port_runtime_suspend() {
    ...
    retval = usb_hub_set_port_power(hdev, hub, port1, false);
    ...
}

This calls into the power sequence disable callback for the USB target. Since
both logical units control the exact same physical w_disable2_gpio, won't
this disable action blindly assert the reset GPIO and yank the power state
from underneath the active UART driver without any user interaction?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260715085348.3457359-1-wenst@chromium.org?part=14

  reply	other threads:[~2026-07-15  9:34 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-15  8:53 [PATCH v5 00/16] arm64: mediatek: Add M.2 E-key slot on Chromebooks Chen-Yu Tsai
2026-07-15  8:53 ` [PATCH v5 01/16] device property: Add fwnode_graph_get_port_by_id() Chen-Yu Tsai
2026-07-15  9:03   ` sashiko-bot
2026-07-16  5:00     ` Chen-Yu Tsai
2026-07-15  8:53 ` [PATCH v5 02/16] device property: Add fwnode_graph_get_next_port_endpoint() Chen-Yu Tsai
2026-07-15  9:09   ` sashiko-bot
2026-07-16  8:52     ` Chen-Yu Tsai
2026-07-15  8:53 ` [PATCH v5 03/16] power: sequencing: Add pwrseq_power_is_on() Chen-Yu Tsai
2026-07-15  9:08   ` sashiko-bot
2026-07-15  9:29   ` Andy Shevchenko
2026-07-15 12:10     ` Bartosz Golaszewski
2026-07-16  4:59       ` Chen-Yu Tsai
2026-07-16  8:14         ` Bartosz Golaszewski
2026-07-16  9:39           ` Chen-Yu Tsai
2026-07-16 12:39             ` Bartosz Golaszewski
2026-07-15  8:53 ` [PATCH v5 04/16] usb: hub: Use assign_bit() in usb_hub_set_port_power() Chen-Yu Tsai
2026-07-15  9:11   ` Andy Shevchenko
2026-07-15  8:53 ` [PATCH v5 05/16] usb: hub: Return actual error from hub_configure() in hub_probe() Chen-Yu Tsai
2026-07-15  8:53 ` [PATCH v5 06/16] usb: hub: Associate port@ fwnode with USB port device Chen-Yu Tsai
2026-07-15  9:20   ` Andy Shevchenko
2026-07-16  4:31     ` Chen-Yu Tsai
2026-07-15  8:53 ` [PATCH v5 07/16] usb: core: Move struct usb_port and related APIs to port.h Chen-Yu Tsai
2026-07-15  9:31   ` Andy Shevchenko
2026-07-15  8:53 ` [PATCH v5 08/16] usb: hub: Pass |struct usb_port*| to usb_port_is_power_on() Chen-Yu Tsai
2026-07-15  8:53 ` [PATCH v5 09/16] usb: hub: Use usb_hub_set_port_power() to control port power everywhere Chen-Yu Tsai
2026-07-15  8:53 ` [PATCH v5 10/16] usb: hub: Power on connected M.2 E-key connectors with power sequencing API Chen-Yu Tsai
2026-07-15  9:28   ` sashiko-bot
2026-07-16 10:54     ` Chen-Yu Tsai
2026-07-15 13:25   ` Andy Shevchenko
2026-07-16 10:02     ` Chen-Yu Tsai
2026-07-16 17:34       ` Andy Shevchenko
2026-07-15  8:53 ` [PATCH v5 11/16] dt-bindings: usb: mediatek,mtk-xhci: Switch to ports for USB connections Chen-Yu Tsai
2026-07-15  8:53 ` [PATCH v5 12/16] power: sequencing: pcie-m2: support matching on remote "port" node Chen-Yu Tsai
2026-07-15  9:29   ` sashiko-bot
2026-07-15  8:53 ` [PATCH v5 13/16] power: sequencing: pcie-m2: Add usb and sdio targets for E-key connector Chen-Yu Tsai
2026-07-15  9:34   ` sashiko-bot
2026-07-15  8:53 ` [PATCH v5 14/16] power: sequencing: pcie-m2: Split Bluetooth unit based on interface Chen-Yu Tsai
2026-07-15  9:34   ` sashiko-bot [this message]
2026-07-15  8:53 ` [PATCH v5 15/16] arm64: dts: mediatek: mt8195-cherry: Add M.2 E-key slot Chen-Yu Tsai
2026-07-15  9:45   ` sashiko-bot
2026-07-15  8:53 ` [PATCH v5 16/16] arm64: dts: mediatek: mt8188-geralt: Add WiFi/BT as " Chen-Yu Tsai

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=20260715093433.32EAC1F000E9@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 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.