From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA8FF45FFAA for ; Wed, 16 Sep 2026 07:58:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545522; cv=none; b=Mh08U5X6LQEb6q/FXDJ1f9aPMmn5gP7hiPtjCQ/KJa2AkE513QySZ2g7EAJJBW/ZgcEBJL7jrJuqECLsoQpne8h8B0E2K4wykfFT3BxhhxIvKP5NSJBCDikWd6BnCng3zK5SfMYTwyPkQr6EgcoJTFZ9WzrOqM2KTUs0NAOb8/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545522; c=relaxed/simple; bh=WB3HiPndp9Zotj1PQ53f357swoA5uLM5cWEs+E4kzDA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QIRFyfN3vDCgqFd68qcirzCQG+9d4HhEjzJd/Y+jJKfSmfiulAAGts3yyRoAWLmU3/tvCkwvUXrZWpEb2ctasem55YEvdhc1aqZZKu0q4AZQ83nw/QxvYZcDplRULT+8Y+aLAj0tHWSzthbh+iz2L+O0NPNtKeydW0kQIzaW1BY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=e5aAvZJf; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="e5aAvZJf" Received: by mail-pj2-f12.google.com with SMTP id 98e67ed59e1d1-396ccd5cf03so555665a91.1 for ; Wed, 16 Sep 2026 00:58:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545507; x=1790150307; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=27brx5O9Ivpq2x+qbJykPxVf6DAdKCDChl3K9VtBSIY=; b=e5aAvZJf7gy/oWNE8Bl8LCWnphU8XZBC0/zVc/gDAzCf4e7tNFTXFjGD+Y6FpBdGW1 ViY3eJ5fpE1Gl+5QSvMmHoPcqHTyBCUEhCDUra07Tt6fIngX5+623h++WNuSpjd+kHBl /5moxt7/Wxlzr1sJEY0LlG3LLg6VmBaQEBmu8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545507; x=1790150307; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=27brx5O9Ivpq2x+qbJykPxVf6DAdKCDChl3K9VtBSIY=; b=O3kfD3VX+KHPTcTDlYmoOxHOms0OrDxJ0XQGYK4VqMQDERSWHRhDRZEimOn/Mgb9hf 85Eu9kFEib0hKqiU1xHUHfxiZGvqMizDoDvSP9Mt6w1+qMfwLPmQjTGZHobbkyp3mXMz 7bKllGuu1k7sNr5/Jl+k5FhdO52zL34vDJn8YoACr3BdixYtv3TXP9PNj8HZTy5fhjNE wf5yNZTs+E0eLrQPsWzcblBPZy65t5GoPXF7rbIfWVaPWg5tffdhi3d2y1jH2oAGTqFR LLZ1qbcDESOUkhl3Y2+Xrxg4Gdc3IB1mbGKOcTAtt5MgflKVQlY5wqUj4hmO17PxOHg2 gQIg== X-Forwarded-Encrypted: i=1; AKwUvBy30XjczP6uuj47Lcg6YWp5DPTMM5HJxibdoraAjdNamaAEAqfrEN21x7Sl347lHI3N9DXYXzjd0QuIKuo=@vger.kernel.org X-Gm-Message-State: AFuF++ke5drjYUsO2gRHw/iSKhpRzkjzbf9OwF9l68gcumTSJ/QpU9s1 SPCytfzRshZpEcdf96ObzR2eBX77NfNxlLKvmOwFL0IddVZjhXrv4x83sX3haHaJGg== X-Gm-Gg: AYBFou0H+KtIGY2DSzT8sx+cVy6las/zyeBjjlhzU3hWukm/Dwlw/2KfZCBHmcV0UA3 q/ViS6lSni5/8vTN0Xa4aXsv+vx22iqP0KsbmToiWj8vLgT52E0OAFH5wTrj3ASgNdCcZUhbAaw eOB3PLm8xskb74rcfzNg8MGAV2DCIOBMaKMVJS3PkZvrUSu47Ucn69ziESl3LsUE6jeEuXkpCCu UjnnLdu7YCUkq8RZBdeg5CM8ddQv8m/YObxHp7d959C1SUiZhcQQmMGxpSShdzsbN/hVyM6Uf5H H27MqN2qGPXLSaH7pV4NSrYxXzo1FTbMGj1nYl1Z0QPgQ6pQvr4kV8+3WzF8Jjf2il/rbjltGXv D95K3vYhgwzvCnqn8NGc43tiCBBO8bSHDk2ztUa0eBDp1gAovSGuY6xS13qk71thAJgGCr/x9gy 5Qe8dIzNJmytIg/nHCGLfrpiEwcqdPr1C0aunaI0Hw6McHc2K0ESbXr1heq09HTsdHX30Vj/EmR y4hrJoyogf5RKHS12YeTNuZ5HVugzETH+TyNftpwal/Yrde5L6oleStKg== X-Received: by 2002:a17:90b:6cf:b0:38e:7168:281 with SMTP id 98e67ed59e1d1-39e1e329409mr4159709a91.10.1789545507055; Wed, 16 Sep 2026 00:58:27 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.58.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:58:26 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 01/15] device property: Add fwnode_graph_get_port_by_id() Date: Wed, 16 Sep 2026 15:57:27 +0800 Message-ID: <20260916075745.3549953-2-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In some cases the driver needs a reference to the port firmware node. Once such case is the upcoming USB power sequencing integration. The USB hub port is tied to the corresponding port firmware node if it exists. Provide a helper for this. Reviewed-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Reviewed-by: Sakari Ailus Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v8: - Collected Reviewed-by from Sakari Changes since v7: - Mention in kernel-doc that the function does not return ports that have no endpoints (Sakari) Changes since v5: - Dropped left-over declaration in header (Sashiko) Changes since v4: - Added flags parameter so users can specify whether incomplete ports are returned or not (Sashiko) Changes since v2: - Moved "Return:" kernel-doc section to the end. (Andy) Changes since v1: - New patch --- drivers/base/property.c | 31 +++++++++++++++++++++++++++++++ include/linux/property.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/drivers/base/property.c b/drivers/base/property.c index 51109794d727..c2b7a571fe03 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -1353,6 +1353,37 @@ int fwnode_graph_parse_endpoint(const struct fwnode_= handle *fwnode, } EXPORT_SYMBOL(fwnode_graph_parse_endpoint); =20 +/** + * fwnode_graph_get_port_by_id - get the port matching a given id + * @fwnode: parent fwnode_handle containing the graph + * @id: id of the port + * @flags: fwnode lookup flags + * + * The caller is responsible for calling fwnode_handle_put() on the return= ed + * fwnode pointer. + * + * Does not return ports that belong to disabled devices or endpoints that + * are unconnected, unless FWNODE_GRAPH_DEVICE_DISABLED is passed in @flag= s. + * + * Does not return ports that have no endpoints. + * + * Return: A 'port' firmware node pointer with refcount incremented. + */ +struct fwnode_handle *fwnode_graph_get_port_by_id(struct fwnode_handle *fw= node, + u32 id, + unsigned long flags) +{ + struct fwnode_handle *ep; + + ep =3D fwnode_graph_get_endpoint_by_id(fwnode, id, 0, + flags | FWNODE_GRAPH_ENDPOINT_NEXT); + if (!ep) + return NULL; + + return fwnode_get_next_parent(ep); +} +EXPORT_SYMBOL_GPL(fwnode_graph_get_port_by_id); + const void *device_get_match_data(const struct device *dev) { return fwnode_call_ptr_op(dev_fwnode(dev), device_get_match_data, dev); diff --git a/include/linux/property.h b/include/linux/property.h index 907c790a3f01..3dbbd01a52d0 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -507,6 +507,8 @@ int fwnode_get_phy_mode(const struct fwnode_handle *fwn= ode); =20 void __iomem *fwnode_iomap(struct fwnode_handle *fwnode, int index); =20 +struct fwnode_handle *fwnode_graph_get_port_by_id(struct fwnode_handle *fw= node, u32 id, + unsigned long flags); struct fwnode_handle *fwnode_graph_get_next_endpoint( const struct fwnode_handle *fwnode, struct fwnode_handle *prev); struct fwnode_handle * --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pz2-f42.google.com (mail-pz2-f42.google.com [74.125.228.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C6AB4137AD for ; Wed, 16 Sep 2026 07:58:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545530; cv=none; b=JEPtjsZENoXQWbNcAzqzI21IPYoXnbNsGm6Tcr5LFQy7w2pNjhDr4nrUmWptJszHWJZfqa2WtXfjvNUTk5N78tRCA0+XILsoLFZOFrE2YAQwBynuS8wVMoEyFDCt5YT8LE0vbObpJl1b5a17fL33DDUvgIazthpBuc3G6lfCHE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545530; c=relaxed/simple; bh=Ri/id/vx/k24FmJGCtv/k72ESmrqaseCj8QxRw0wDxA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fYI9R5DfQNG/bl01HQ2brJn8f2KTmXIzrcnVwV6imPQT3g8cnR1STIhusQzZ6SQObkqetEppr3PgWs8EO4iQqLJQifMftedMsK8+ANQRmKNROfWhjOTp3sJWXWVf5f6OM0XkXZGbcGTKklWI1fbXWjkUuueWvYj8PDdnXmBxFrw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=ZxN0Ive2; arc=none smtp.client-ip=74.125.228.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ZxN0Ive2" Received: by mail-pz2-f42.google.com with SMTP id 41be03b00d2f7-cc4c08393b0so550174a12.0 for ; Wed, 16 Sep 2026 00:58:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545512; x=1790150312; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fj62mBTPExqPPPR271cOhjtoM9DP+nCqq3W3jRfMxEI=; b=ZxN0Ive2ziowZ2fetadPk6xgyrDFrxJ1F3K0uMtr5XfXrbw22j2wt0vltvFJFjbQyE kctkBHAQL6lYHmqpf7rKzMQkQdgWhDXmkVU7TvmGLdwuTUb9HiQAWwHLS579S4oZ+UMI faXVmEDSdZwefUq54cBjx8Nfh2rZfPlnhHDdY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545512; x=1790150312; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=fj62mBTPExqPPPR271cOhjtoM9DP+nCqq3W3jRfMxEI=; b=wn+LepjlK1w+TxoNF6eu3OGoCrqJ7Cdq9r57Ea2ouC0xWwXnGvYSaYesLln26zXIcc GUM/q2qJWC77KtbokwoFoma5xNMDFvFpa3oL8e/RvyN9Z8lkm0dndr9R7Rg2iiP2G8NV 0aWZxWM3mA3d02WuofhT7clkdfw1ur1gqahb7Dmk4WGEcTVZUxvgcnzY/E5Ukzfr1wen LAiTxBAvfcf2zdakTePpLgW9K4jzp7R0YFX3A9KGZZ0JAutMuVmJSm4Ee8YWeiacJfGj 9USbIWqAwNUpCg11zDpPgTnCy4nklazvJUjkmCN+m0NdgolE7VXK5gEZfNxom6SRLka1 GdeQ== X-Forwarded-Encrypted: i=1; AKwUvBz6+erWAs0Mll5d3ImpclHtJzmgH0RCGLjFI3EX2OHIav+ZpLpvB+4pPPjBbs9vdg6N0Kj+vL3UE4nGBJo=@vger.kernel.org X-Gm-Message-State: AFuF++koY6S+blgp6nZOwCBDPHPQmnTVc0rcJUrrSX7Q2/k3d841nM5u Bgjv+Ea7Mv8Kz1XQkGyL4myJALHmtRHH5qyBPDUEvehz0zrZs4aj8KKQ7UlXd4W5UA== X-Gm-Gg: AYBFou2wqqxkUkk3HdDJmDuFHaTFYxA1xAFoxpSx+EuA7h1lJescHK/Op/aui78va5j 7iw+gzOqC7J8blgFGHsc/3Vy+Fs2oJbDNj+4yrgHFy98BxSS+c+xuhqPDrJGdHx8rjy7xAfIVXt O757KXqg6fWjl6m9BDETh/r2ZnEkiyXd9/WIQRLfZT0r8X0CGmdZSHeMTwEqWAZs5Ju9rcWKb1J /5o+9AGMmWc/BWnQ44hnzMMRN7xp59fYFKPU/9hYLENNWpDICkrhGygH9WqhFSjUIq0UiBinNQn dHkLE8rxc0T5OV20fiwkXkpAx3RXe5Mq5c1id3PT+4uyr527t3mEpxrpvnO1YoOCY6BIn/QGXRA zoKSZKwWsKMtlvfY9HU98YpU9LwiQvq8omMrzu30BeUl9Wm9QHzCzJx7tCB2jyxuAvuhUQeKVch jI7cPISErrouFrOAb2Qh/P5IVJLHX3oXgCR5+LoNi1OKXfNaCzVWeJROLzun9Cci+E3M7bhysSt MjfFOgwu+I1e5755T2ygK5IcSFs1zZiQh7oOmqIg8Pj1KgGRdbFhr8Uwg== X-Received: by 2002:a17:90b:4b83:b0:398:9bd5:490b with SMTP id 98e67ed59e1d1-39e1e4c4687mr4082007a91.18.1789545512315; Wed, 16 Sep 2026 00:58:32 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.58.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:58:31 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 02/15] device property: Add fwnode_graph_get_next_port_endpoint() Date: Wed, 16 Sep 2026 15:57:28 +0800 Message-ID: <20260916075745.3549953-3-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Due to design constraints of the power sequencing API, the consumer must first be sure that the other side is actually a provider, or it will continually get -EPROBE_DEFER when requesting the power sequencing descriptor. In the upcoming USB power sequencing integration, the USB hub driver first needs to check whether a graph connection exists, and whether the other side of the connection is a supported connector type. The USB port is tied to a "port" firmware node, and this new helper will be used to get the endpoint under the known "port" firmware node. Reviewed-by: Andy Shevchenko Reviewed-by: Bartosz Golaszewski Reviewed-by: Sakari Ailus Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Sashiko points out that the |prev| reference put is not done if |port| is NULL. However it seems that the fwnode_*() and of_*() API design implicitly makes the functions no-ops if the passed in node is NULL. So this new addition follows the same pattern. Changes since v8: - Moved Sashiko related comment to footnote (Sakari) - Collected Reviewed-by from Sakari Changes since v2: - Dropped unused |ep| variable - Rewrote as do {} while() - Dropped WARN() use --- drivers/base/property.c | 25 +++++++++++++++++++++++++ include/linux/property.h | 2 ++ 2 files changed, 27 insertions(+) diff --git a/drivers/base/property.c b/drivers/base/property.c index c2b7a571fe03..924d03df4995 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -1109,6 +1109,31 @@ int fwnode_irq_get_byname(const struct fwnode_handle= *fwnode, const char *name) } EXPORT_SYMBOL(fwnode_irq_get_byname); =20 +/** + * fwnode_graph_get_next_port_endpoint - Get next endpoint firmware node i= n port + * @port: Pointer to the target port firmware node + * @prev: Previous endpoint node or %NULL to get the first + * + * The caller is responsible for calling fwnode_handle_put() on the return= ed + * fwnode pointer. Note that this function also puts a reference to @prev + * unconditionally. + * + * Return: an endpoint firmware node pointer or %NULL if no more endpoints + * are available. + */ +struct fwnode_handle *fwnode_graph_get_next_port_endpoint(const struct fwn= ode_handle *port, + struct fwnode_handle *prev) +{ + do { + prev =3D fwnode_get_next_child_node(port, prev); + if (fwnode_name_eq(prev, "endpoint")) + break; + } while (prev); + + return prev; +} +EXPORT_SYMBOL_GPL(fwnode_graph_get_next_port_endpoint); + /** * fwnode_graph_get_next_endpoint - Get next endpoint firmware node * @fwnode: Pointer to the parent firmware node diff --git a/include/linux/property.h b/include/linux/property.h index 3dbbd01a52d0..691e792775d5 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -509,6 +509,8 @@ void __iomem *fwnode_iomap(struct fwnode_handle *fwnode= , int index); =20 struct fwnode_handle *fwnode_graph_get_port_by_id(struct fwnode_handle *fw= node, u32 id, unsigned long flags); +struct fwnode_handle *fwnode_graph_get_next_port_endpoint( + const struct fwnode_handle *port, struct fwnode_handle *prev); struct fwnode_handle *fwnode_graph_get_next_endpoint( const struct fwnode_handle *fwnode, struct fwnode_handle *prev); struct fwnode_handle * --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96282466B10 for ; Wed, 16 Sep 2026 07:58:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545534; cv=none; b=kvAg2h8QHmXiKjSH+y9fqwJPmjFMH4PuYIIhPxhil3+sHuZZHUS2emI5AQx0Cy2KZbZX7oYfXucDvrbC/1cKP+MOPpvZHVxs2jG5uENnlHFe+duCfhGW3yJpC/FOxvuPIfOyhwK3Yr0rUymW0L2J44O55l3VWaGO9QI3q9pi1V4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545534; c=relaxed/simple; bh=L6VSMNKkPXg4l9VS1SCcav8nfu3ymTFtfF0ofUQlcoE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ksIXElghXuzPGav/L/RGElCkDxB03hWUVN+shGBOFDNfamnJO8+nWiX/9nJrUpLsnmFGfjsHAX4jlgw5k3k7t0+weMfGLcptujTthBXwCQSm83B9W9SXjHMv0Sa3C5h+O4apQbfv+1vbrqAkWs+9s2T0ipIif2b7+7/s+srGBjs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=GBzusWew; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="GBzusWew" Received: by mail-pj2-f13.google.com with SMTP id 98e67ed59e1d1-396ccd5cf03so555825a91.1 for ; Wed, 16 Sep 2026 00:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545518; x=1790150318; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Fm2NU1dVk2SpuJ0fFyLgsSQpwqAtZZWxE/JzixP9q9s=; b=GBzusWewVtBHhHke5RksqATpbU0/huc+d336SYPaxyosNfiesaXKtV1JgWg0Jzote7 f0roi3BJSDAhn5jtc4jwhwyBeYGHfyAaASrTMR2G8i1AtFJNbyzNkh27gYu5wvEWIyZC /AasNZCngh+Vrs6oFwRqMyrj3mTU0TGUCj3Zc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545518; x=1790150318; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Fm2NU1dVk2SpuJ0fFyLgsSQpwqAtZZWxE/JzixP9q9s=; b=LbUsSFahculNn1Rqg11m/U6UYtXGYwiY6OIMVuyq0gda7FeF1w6FHi0vV/gLoYsLjb 52/N6qhVT64YOWkwFC+3HSX3WNh5gTaf2/SMyuUDEPf+Cfq0Fym8iif8H6DyMEOxkpXt ZjesdwUdVWU0RcGZi28Vp7GJM37FJcveWKnVCHnIlPmyJvTzelxMlQRHwLkvy9Uaplws ua1uyWqJDIeg53riDsYl4X5aUjg7m53KVUYmomrUGZEnToNJZzEkw/CbXaQPEpmHUMal sX8li1v+NyvmPucqBr4p+qmUyXwwgKGqi4Nf78/WGXOkTHrphQkpw1P2kI+/1wHbHmUO alyw== X-Forwarded-Encrypted: i=1; AKwUvBwqjO2hGx4jd5jtt4x8pjo6/Yh8yfbLR37rB2K1o8Kz4YHnXC61alIAM5BMbiOBX35lvBKwmOLPqcp/tTA=@vger.kernel.org X-Gm-Message-State: AFuF++n7uOyRJDCxmHlAogC3SXJoSxws3oi0xtJOIXia19eSR7pdqhyO PIrR/olvwt03M6MMzKjEgq3Tsics4wRqiPxm9xtitGncGEHSvm4v3+cXvjCnoFtzBg== X-Gm-Gg: AYBFou2t5oGhQwoLqwDBymjamvMfyog9oqvvCdjoNV2Xn/QebjzNEQVQy0ek9mW5DiM wRdM7ELXI5GzXJn7HV4EwNu7hG/IVCcCF1lCU2c422MnyiQxhDZu9M04j+MktEoSlscU85p7LQg WSXCONIYCtkyGxQXs/dU87TdxnQ9ktREK5xhXzQqHR3h7o5Eenk1KlHnExKCFEyZKtiUs7sGUj1 YmoCRC/gMaaakny7GgVBfHWluHZiUm6liQVLaBsfpXtFpzp4qixE7yna8NtQUTxd9/urnMIe6rS Bi8HC4TJ+QETowO7Gg9H7+JXe4uKcYJr/wYz4uHWRzCsseG5yQrpFP5aZo0ZF8xcF3p8bVu+ijv yZrZbg7SwNNtu+oYPwoAlFfU2+9r6wrwe/+bSQKowg7Be/JzYKZdT3YJuCPJdiZLnFrM/UAAaCJ AsBv4EvgED5gCoZseB6dy5WF4uks5MamsJHSaeSrxsLrWKEri3LU/PkBlvn8Dk221yfF3Yu0hnX Bpr7aFbuPxKDem1W4TX916btTIFZ9mvSlldQAHrdrKNoVoenftSirxunQ== X-Received: by 2002:a17:90b:2885:b0:39d:f130:8f13 with SMTP id 98e67ed59e1d1-39e1e4d3357mr4064349a91.21.1789545517871; Wed, 16 Sep 2026 00:58:37 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.58.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:58:37 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski , Manivannan Sadhasivam Subject: [PATCH v9 03/15] power: sequencing: Add pwrseq_get_state() Date: Wed, 16 Sep 2026 15:57:29 +0800 Message-ID: <20260916075745.3549953-4-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The power sequencing consumer API already does power on state tracking internally. Expose the state to consumers through pwrseq_get_state() so that they don't have to reimplement it locally. Instead of just on/off and error codes, the function can also return "unknown" state. This is in anticipation for "uncontrollable" power sequencers (such as GPIOs left unconnected). Acked-by: Bartosz Golaszewski Reviewed-by: Manivannan Sadhasivam Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v7: - Adapted to pwrseq_enable/disable() rename Changes since v6: - Changed to pwrseq_get_state() with enum return value Changes since v5: - Reverted back to returning -EINVAL if descriptor is NULL Changes since v4: - Make pwrseq_power_is_on() return 1 if descriptor is NULL, i.e. if the descriptor is optional, matching the other pwrseq consumer APIs Changes since v3: - Added missing stub function for !POWER_SEQUENCING Changes since v2: - New patch Needs to go in with "usb: hub: Power on connected M.2 E-key connectors" as it is a build time dependency. Bartosz wants the change on an immutable branch to pull into the pwrseq tree. --- drivers/power/sequencing/core.c | 19 +++++++++++++++++++ include/linux/pwrseq/consumer.h | 12 ++++++++++++ 2 files changed, 31 insertions(+) diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/cor= e.c index 3076b3879af9..8e06fe77fd6a 100644 --- a/drivers/power/sequencing/core.c +++ b/drivers/power/sequencing/core.c @@ -971,6 +971,25 @@ int pwrseq_disable(struct pwrseq_desc *desc) } EXPORT_SYMBOL_GPL(pwrseq_disable); =20 +/** + * pwrseq_get_state() - Queries the last requested state of the power sequ= encer. + * @desc: Descriptor referencing the power sequencer. + * + * This returns the last requested state of the power sequencer. + * + * Returns: + * On success, PWRSEQ_STATE_ON for on and PWRSEQ_STATE_OFF for off; + * negative error number on failure. + */ +int pwrseq_get_state(struct pwrseq_desc *desc) +{ + if (!desc) + return -EINVAL; + + return desc->powered_on ? PWRSEQ_STATE_ON : PWRSEQ_STATE_OFF; +} +EXPORT_SYMBOL_GPL(pwrseq_get_state); + /** * pwrseq_to_device() - Get the pwrseq device pointer from a descriptor. * @desc: Descriptor referencing the power sequencer. diff --git a/include/linux/pwrseq/consumer.h b/include/linux/pwrseq/consume= r.h index 16fad5f3e3ab..e2a2991b20c2 100644 --- a/include/linux/pwrseq/consumer.h +++ b/include/linux/pwrseq/consumer.h @@ -11,6 +11,12 @@ struct device; struct pwrseq_desc; =20 +enum { + PWRSEQ_STATE_UNKNOWN, + PWRSEQ_STATE_ON, + PWRSEQ_STATE_OFF, +}; + #if IS_ENABLED(CONFIG_POWER_SEQUENCING) =20 struct pwrseq_desc * __must_check @@ -22,6 +28,7 @@ devm_pwrseq_get(struct device *dev, const char *target); =20 int pwrseq_enable(struct pwrseq_desc *desc); int pwrseq_disable(struct pwrseq_desc *desc); +int pwrseq_get_state(struct pwrseq_desc *desc); =20 struct device *pwrseq_to_device(struct pwrseq_desc *desc); =20 @@ -53,6 +60,11 @@ static inline int pwrseq_disable(struct pwrseq_desc *des= c) return -ENOSYS; } =20 +static inline int pwrseq_get_state(struct pwrseq_desc *desc) +{ + return -ENOSYS; +} + static inline struct device *pwrseq_to_device(struct pwrseq_desc *desc) { return NULL; --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f43.google.com (mail-pj2-f43.google.com [74.125.227.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3588C44A3F0 for ; Wed, 16 Sep 2026 07:58:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545542; cv=none; b=GCJfYwFO8KcokaH/ghosZJt8tMItq1/M6BtXqkGOYqTGU90DZFxzDjhyp/fZsXyknN/dsnIEKSAwzsM7pXkNnDhvHPRU69KPC4JIsS6y2U2fi2TOX6jdpuwCsR0rgwRrAk6si2LOtfaHN24YFwpw7fB4Qr34gslqBhlqXgTpla0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545542; c=relaxed/simple; bh=guAn9TMfJdLxEfb0LTGkrmmVx3DDJgyF4Kcka2QfUz8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mIpQxtlcDbT1ctvP9PVt+olcjE1hMDhhsxHNBPRg29NNLWPckrPGuGUI6WXT78EqAXE6BuduC2yO4pBvGukSyTjLHA/zWjadvxu0tHHvdViyQnGOB1r/1fC968cD8X/fPruF6J/7s92h+tmOMqmlUXpTsSYRf+Lbg/QBW5059cU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=bFRS5K0f; arc=none smtp.client-ip=74.125.227.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="bFRS5K0f" Received: by mail-pj2-f43.google.com with SMTP id 98e67ed59e1d1-396cccbba92so527836a91.0 for ; Wed, 16 Sep 2026 00:58:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545523; x=1790150323; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9EP7B7Ij+uzgh7ozqOWENJmY+4dziA6HYdxmCK1rOAM=; b=bFRS5K0fJAFRwemfCnobO4KDZTJ0Upc+aurdNPL5HXxuXmicqD+uwP31FwD0DPH+2h guPLAibJTdNgLyZ1K8XB7SpjnWbvJ6sd6N2NPfzzBbnRJUZv5BtKeDkNWIzn/YTEs1p5 p/SihHo7CsS/rx2z6z70oTxKTyoxlUNDjUrVU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545523; x=1790150323; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=9EP7B7Ij+uzgh7ozqOWENJmY+4dziA6HYdxmCK1rOAM=; b=Uqf2sqE2jRlKPT/qGxVUE3QevXaJYty/GeRR078qHI4m0TwmIx9GupEcaBEvQqPozf L8mZtTGMZSYxDQJUTbhVLCwJi93oNCWazTw/bw/oup1AIJP/AC3CwQlTNFg/hQmALyk4 PBxxWavZZwkLTyIbEZO/wVI8tBiiviGIUak70W3+icmgOw5TzpkbtbRKWcpNozJiUqmu MaxU8zb9l7i3q7KS+OLsF0fjdXqpeKOpaasLGPGlXrzkAqiJomcHVCHRUy9wHEXW9ySX ldRzACUK/Sbo2WP5FB06rmBjjpcAFD2pqxIiD6ccIqOpb21nZmyovTgjGw+N8G9v8t7y 3RQg== X-Forwarded-Encrypted: i=1; AKwUvBzozMDdT+v/ijpi4Gm06+crQfB9UvIpm3JLwAFsmc8dqNrL07suG2mN7uosNmkhxETCsAJvzTinsI2h4ls=@vger.kernel.org X-Gm-Message-State: AFuF++kqZDLzGIs08eHBgdR1grtJ4IVvkp7UU1Q8ahuojRkz/yqsEGtc 59RN+HtgpZD3KulEdXPy+Zsa3n0M86XxQVuLZdLUiMDsxx5CY2Bw4GV2rtzHIBb9lA== X-Gm-Gg: AYBFou15PaSZbQ6S2ESsLi+sk7vUSAC2L24parMXM0f3sL8/8el3NQScgLIkZ96gRYD 2bGzP8IAKenQkfkmtN6z8EQOWfvPS9mhfEYNNaWgtYUF1vBZn+qEQX0YTTVMo2Nn7au+MdU5JaP v+UcW+epvcmCJ/X5ZP75eFfchOQILrKmkUze/PfBl87yo0Y6yml9mKxeG4PdWCtJJG3su/jkXdu aB+TszEZXjyh9pImaIVUjXxwhVynX6l0xAXecv4c4qRDAAyKFTiCVc1Ht7Wv2Sd7PbAVBRWgcH0 mVBVLBuMSC8NT0wfFD5W2n872eQJv97QOWI7EXrMZHL9Y4x61rQf8TFTQ8p23rmpa+aofWFYtM8 BIsPdTNqT+5kXIgBYbilOEMNnGt9XDxfpJQeplSqCGqgD6R4bGlQGz2Zg0XU3qyir79F0RxcL/A qH7FVXQRPhLPj+gDxkMpGn0wrF1jdOfs92dlgTVz7VqofnVFaUzC3fV/P5/TNapFHW/BRLX6N+O e0dfn9BKb2bDPmAKNcH4WsimO5Pq5J6Y90v2aUZ5xgRt08sQPjzK1KIVw== X-Received: by 2002:a17:90b:440c:b0:39d:fea0:c17 with SMTP id 98e67ed59e1d1-39e1e309c21mr3792094a91.8.1789545523106; Wed, 16 Sep 2026 00:58:43 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.58.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:58:42 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 04/15] usb: hub: Use assign_bit() in usb_hub_set_port_power() Date: Wed, 16 Sep 2026 15:57:30 +0800 Message-ID: <20260916075745.3549953-5-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" usb_hub_set_port_power() open-codes assign_bit(). Just use the assign_bit() macro instead. This makes subsequent additions to usb_hub_set_port_power() easier to read. This change does not introduce any functional changes. Suggested-by: Andy Shevchenko Reviewed-by: Andy Shevchenko Reviewed-by: Bartosz Golaszewski Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Attributing suggestion to Andy, since the change was originally requested as part of a review. Changes since v4: - New patch (split out from "usb: hub: Power on connected M.2 E-key connectors with power sequencing API") (Andy) --- drivers/usb/core/hub.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 199d3f535a89..a4ec79a06a5c 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -10,6 +10,7 @@ * Released under the GPLv2 only. */ =20 +#include #include #include #include @@ -902,10 +903,7 @@ int usb_hub_set_port_power(struct usb_device *hdev, st= ruct usb_hub *hub, if (ret) return ret; =20 - if (set) - set_bit(port1, hub->power_bits); - else - clear_bit(port1, hub->power_bits); + assign_bit(port1, hub->power_bits, set); return 0; } =20 --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F102468C01 for ; Wed, 16 Sep 2026 07:58:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545546; cv=none; b=KBVyp1s5z4XAnBKlLtG3k4zOIWhd/SjUDW1FGn2JaUhzqAc4DmNEyTa29cCyEeiKbqg6l//j7p/vmu0v3xYWVsjIRl9IZidzQ9cmrgGOWRQRckQPSBkZa+upJM1A63SnNDxG6jg3XF/pWBgH8OeUodnU3DE5J0mPgsPZjrpGT8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545546; c=relaxed/simple; bh=PPQwnBevhndYutuKDdDvehHKW7FqGHGO5QlRVDsedNs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kbZtRfFJvQnTyr1ArAogt9ikg12UaNX6Npo1rT3PT0h4oPnLZV0Mtu+XoiP1yvX40NxJd/ehgMafPGDq866DZQEgYtOQsSVcXncUheGz0BuLTjmaNp7w3RJHxUOtPpK0wH02PluW/E7Nm/AhOOnxVnTi6m3Koy+t/kQpBgvsSqY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=Ipq2ISt0; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="Ipq2ISt0" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2dd4b43b20bso4133555ad.1 for ; Wed, 16 Sep 2026 00:58:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545528; x=1790150328; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SWwi8XOZ6LU+PxR6btCprbkiTyl3Q4dICGc4z937Hmk=; b=Ipq2ISt0pOHBw/MedOHquRdKJL8cr81NU8lTbtIi0375m9EvnwtQ5Cu0+JLOohQWAH Z2yAczKbLMHtbCZ1JR5dvkvOPKbIZp1zWutKzSKJouwlTG0iavUXgS6XXeUJucT/9HoF LmR92+Lbp15SkFfG87C9Q9+StcoQp2bKXq/oQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545528; x=1790150328; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=SWwi8XOZ6LU+PxR6btCprbkiTyl3Q4dICGc4z937Hmk=; b=m2td1ZXufxnqGnkgIV8biR+KvEe9vGcC016y9J0YrLwgGQNdxPqAWJPclnY6SY45YC 9HMvMPcZeYYsrxcG4lwQY7E9kYkK7x0sXuO2H9ie0oY5WwsOcrCMxoZm2HwUhTJphHkz yasRP5l7oa/tv1Gop0JTGaLrfVLS/JHavs5Hg0dBvnaBvftJMcpeFLqZPskjVlw6D22H 26gTgv6dXP6Xyuizt/UW25oZXEE5SF/w0FVTJz2kkWj5ZR1sK3gTQzZRo/V9Ekn4Tb+Q 9S281jxn7RmgPSdQ0XKISjEA2uTPt4sQdQl4WqIvoNf7VMFrBVtYoMtvWBIMuKNQ4IQb Rx7w== X-Forwarded-Encrypted: i=1; AKwUvBzP2/Y694tNVrv4T7KFDrOZeHcWQ9KOdQA0go8VJSCt+8Z2Qa/pr/XjMV34b3CpflAIceoJ647HsLLBssw=@vger.kernel.org X-Gm-Message-State: AFuF++nXlZKecGoSvfbdtUqP5d/5te1L1sMFjvpclSj2kOQLjOuwnn8F tvl3CQtvFEi4x72P8j7UY5GAbVsODoRHUI7Y7CLdQqBhuLon/jk3Db5oUNFkIVrnoQ== X-Gm-Gg: AYBFou3KxQ8Xl5wUQfyoq+AoCTqSs7NTGWmvhlrxqbvxK5FMGvJub/Sfi6+9myC1QR+ rHML5WowFW9zq+V4BGaRtJEKUZTuHq8oXbqWn2mHSi3cG7aVDH0ITutUSA0tyAtsF5vzkawM5Fx /pYrS+CsDk27iOI/gRJNHzC8fUv3HMiherjir6bfK8S3wMnse7kdMLpMAAP7bHX2ZpKSEaG63B0 sLLXHaIPCzgLPW7dvEAbShYUhcvMdg9f6vO1ZdF+GbCv6bIRHsJOfpa79gspOqOhGu35zOt1tBw M1FoNwP1hEBjdu/Yva2E5wo9axmW+qJKb9BgncikwXgYDLDxDbstX4+yo0AXUPtGKi+bBk0Sq/e 0qCTThCdw4OJXFUtmZcWPjZElIZ5IUetYGvFf9swCQNp+pd1p+3RhMxbYQgrOBUzGSC8q4gyGZ3 obEVySt2S98NYN55rirp4Y07HiP3ogzrhye8fheg4ZYO57OlYP8tBbv4kX9nO5twTiWJESxQ/Pm iP8asBUQzI/dZnQqoTBpX33AoPFH1JJ8fcQYlUhec0sbXBeo0pmLpgtfsLnn2RgedEz X-Received: by 2002:a17:90b:39a3:b0:39e:233f:cee9 with SMTP id 98e67ed59e1d1-39e233fd063mr2563733a91.11.1789545528600; Wed, 16 Sep 2026 00:58:48 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.58.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:58:47 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 05/15] usb: hub: Return actual error from hub_configure() in hub_probe() Date: Wed, 16 Sep 2026 15:57:31 +0800 Message-ID: <20260916075745.3549953-6-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The addition of power sequencing descriptor handling in the USB hub code requires dealing with deferred probing from pwrseq_get(). The power sequencing provider may not yet be available when the USB hub probes. Return the actual error code from hub_configure() when it fails, so that the driver core can notice the deferred probe request. Also rewrite this section into the standard error handling pattern: if (error) { # handle error return error; } # do more work return 0; Reviewed-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v2: - Rewrite into standard error handling pattern Changes since v1: - Moved "int ret" declaration in hub_configure() over here from the next patch --- drivers/usb/core/hub.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index a4ec79a06a5c..707eeee198b0 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -1875,6 +1875,7 @@ static int hub_probe(struct usb_interface *intf, cons= t struct usb_device_id *id) struct usb_host_interface *desc; struct usb_device *hdev; struct usb_hub *hub; + int ret; =20 desc =3D intf->cur_altsetting; hdev =3D interface_to_usbdev(intf); @@ -2006,14 +2007,15 @@ static int hub_probe(struct usb_interface *intf, co= nst struct usb_device_id *id) usb_set_interface(hdev, 0, 0); } =20 - if (hub_configure(hub, &desc->endpoint[0].desc) >=3D 0) { - onboard_dev_create_pdevs(hdev, &hub->onboard_devs); - - return 0; + ret =3D hub_configure(hub, &desc->endpoint[0].desc); + if (ret < 0) { + hub_disconnect(intf); + return ret; } =20 - hub_disconnect(intf); - return -ENODEV; + onboard_dev_create_pdevs(hdev, &hub->onboard_devs); + + return 0; } =20 static int --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAC3446D2B1 for ; Wed, 16 Sep 2026 07:58:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545551; cv=none; b=QSPFSs89LPcJ/f7xmUUiTbDAPd1el2aPtH3JQ1apDZ7v6EzP77JEg2iI2EniIoGJTi7b7H8wdUvUvw4c7rIQ3sTtkxQ1ARb+2SFYiFFjY2D3ALqVQbjqJAc+S5ytxsEJHbAZ2JUigaFSdLJdW4KDRD+eunvI1WzQBuAYY6xfQVA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545551; c=relaxed/simple; bh=/ZoutxQ0ZJmBlGurPpdzCW+RhJfBFL4vY9B17VjHF/E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=B4DtBm+DlTPueVWn2KPybEoY881YYIO9xcOtC31wQ6Nc1sGZJETLktMPAvjfNsTDY7YVsFtRT/Ofda/wFEQB26WCmahI5w7eoWWQ7F1UZC2YuOVzU1oEoJj9tGW1WUt/RiyzlttUsA/0YIET3kAGKCZv1GW3qCgNCabBJhSiN2g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=FBTGVx+X; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="FBTGVx+X" Received: by mail-pj2-f12.google.com with SMTP id 98e67ed59e1d1-39b5b07ec78so462017a91.3 for ; Wed, 16 Sep 2026 00:58:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545534; x=1790150334; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=FWq5hvO3hBRGVn3uOxsC9S/weGAcU55UsXVnM8MhFFA=; b=FBTGVx+XreBB0No3JY3I1ljaehiVfYG95okspG0lIcfJ0ts3QzC1LMLHABTdX2yWWp 9PWU/Ydh3Q+uKRyFcruT0v8o4FC17PT3WMMrKYJgcaRtDafztky3V1p6FKZnq9xp9V6t Ospvv7BQNp1T2bA4cyb4AUR/7wmr/dmYv5J8E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545534; x=1790150334; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=FWq5hvO3hBRGVn3uOxsC9S/weGAcU55UsXVnM8MhFFA=; b=MO6O49DXpItKlSFUzqsZ2ixnWKkQpshBJ7croQhnnRpTOUaYS3F6+auRcYhAHQhQVq MEeMB0wBaRGG1Av3+tHaoTmBdyMFXQG34BJmfsTy16WnBItd3/3bBrDBUCfD4yE5vyX1 8a0QF8iUwqnLICcAlY1DgYWm4aFle0IJKoMAXLjpqi7bvHkN2j+CU8snKXtDnJYDJ9ki e6tzmXgIEpyltcFu+GoHwljPpbHsFCKGyPcRrhng4sczDqwVC0jj5EkGyIvxHD/adPPg ZutuVp+1WwMvOjHMu01zg64TqgM9J2/MlzjchI6QLDINvzXX6CEXVT6uSjXwVOD5nnLn RXOw== X-Forwarded-Encrypted: i=1; AKwUvBxt/F/VAVSo9Cl0BVd2V+aDiWMifvcGXwF0wqMKIRUGY0EZ5OaNwmNuXZ9fo9eVIacMPrTErdTeM1STWEU=@vger.kernel.org X-Gm-Message-State: AFuF++nrcJ/swp7Qa/LS/ueMhaHJ+gkR/W2qTnKXmOHvV59HbYKGaEcq Dg2l/35PIV/1vF4pOM4qp+g3hxiPvmTKTvANklJrBqr+zB3r77D9aoLB8bTJGSQf6g== X-Gm-Gg: AYBFou3aIgFER1asuxefXgT6a7FkoaseJqxh051yrRlAKvwGQsbEFGfWGySOebLLcsB 6PL2b4j/48VOdhATIySOolcFS/HHyEV6Ocyo006sc9w+HcUzhhLVpWscr38pI1UoFYUgdSZoEOp cuXu/KsbrgwsRCs2VILjrRzYRmiHCh5JuapqFdjZ5ZNd6V7TNKmrp014bdaLRVOeKHBBFTSfy50 HsgUMnZHpl7IL3P83ViEmwLvJStEPzh2aH5vv3fxW69DGAcO1eWXFu5euegh+BPgOs3cobptG99 luYJKRenw7Rtk85y13kRPHLNp8osuEa0HZYGmRHP0IS256+4u1uj9Y3HtU9Gbcm6YLgqPZ0RfV6 JuuoYsgeSQeNVpuHbt5BSwWZaomtL4k5f7kWbIZsCYVrkOmg5+isgcZpcLW6bd4hTWGWyVcEOYc IhUTrO/Ch3Oc0UmWedvcPwlvPJDxMqm9oENhwMDUsPWaA+5KUgdodLToz7L3WKra2Z7VLVRYh4G CnLjKQ22QKOEUbVx0Y9wh1PVTCw9GL3Yo1nhaKgrljAdlaHI1E5YgJKS5nNVMo1pBHG X-Received: by 2002:a17:90b:2d4f:b0:39e:1b0c:4773 with SMTP id 98e67ed59e1d1-39e1df86c10mr4199444a91.0.1789545534152; Wed, 16 Sep 2026 00:58:54 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.58.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:58:53 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 06/15] usb: hub: Associate port@ fwnode with USB port device Date: Wed, 16 Sep 2026 15:57:32 +0800 Message-ID: <20260916075745.3549953-7-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When a USB hub port is connected to a connector in a firmware node graph, the port itself has a node in the graph. Associate the port's firmware node with the USB port's device, usb_port::dev. This is used in later changes for the M.2 slot power sequencing provider to match against the requesting port. To avoid potential conflicts with ACPI firmware nodes and then causing power management issues, only assign the firmware node if the hub's firmware node is not an ACPI firmware node. Reviewed-by: Andy Shevchenko Reviewed-by: Bartosz Golaszewski Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v5: - Added extra |struct fwnode_handle *| local variables to shorten lines (Andy) - Added comment about passing fwnode_graph_get_port_by_id() return value directly to device_set_node() (Andy) Changes since v4: - Dropped unused |hdev| variable - Added flags for fwnode_graph_get_port_by_id() with FWNODE_GRAPH_DEVICE_DISABLED so that even incomplete ports can be connected Changes since v3: - Added missing fwnode_handle_put() Changes since v2: - Skip assignment if hub firmware node is ACPI node --- drivers/usb/core/port.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index b4452b665f59..c0a51d9b06a6 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c @@ -7,6 +7,7 @@ * Author: Lan Tianyu */ =20 +#include #include #include #include @@ -358,6 +359,11 @@ static void usb_port_device_release(struct device *dev) { struct usb_port *port_dev =3D to_usb_port(dev); =20 + /* + * At this point ACPI nodes and swnodes have been removed by + * device_platform_notify_remove() in device_del(). + */ + fwnode_handle_put(dev_fwnode(dev)); kfree(port_dev->req); kfree(port_dev); } @@ -754,6 +760,7 @@ int usb_hub_create_port_device(struct usb_hub *hub, int= port1) { struct usb_port *port_dev; struct usb_device *hdev =3D hub->hdev; + struct fwnode_handle *fwnode =3D dev_fwnode(&hdev->dev); int retval; =20 port_dev =3D kzalloc_obj(*port_dev); @@ -782,6 +789,24 @@ int usb_hub_create_port_device(struct usb_hub *hub, in= t port1) port_dev->dev.driver =3D &usb_port_driver; dev_set_name(&port_dev->dev, "%s-port%d", dev_name(&hub->hdev->dev), port1); + + /* + * ACPI FW nodes are associated later when device_register() happens. + * Skip assigning one here to avoid potential conflicts. + */ + if (!is_acpi_node(fwnode)) { + struct fwnode_handle *port; + + /* + * fwnode_graph_get_port_by_id() returns either a valid fwnode handle + * or NULL. Passing NULL to device_set_node() clears any associated + * fwnode. It is effectively a no-op here, since no fwnode has been + * assigned to the newly created device yet. + */ + port =3D fwnode_graph_get_port_by_id(fwnode, port1, FWNODE_GRAPH_DEVICE_= DISABLED); + device_set_node(&port_dev->dev, port); + } + mutex_init(&port_dev->status_lock); retval =3D device_register(&port_dev->dev); if (retval) { --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49E6C46AA7C for ; Wed, 16 Sep 2026 07:59:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545561; cv=none; b=euLhU8GzJ1MItdVLojXZiyKS0g5YxZhXPn+rWYhrOZRzDnrHOTdsZwpCXG9GPdgw3F3kHrxirhOshFkaMvXbrPOMzdDCP2YRDeOTU9Vx3x/Z/hvYzYfVAbqKNw4MmpwSBodZmp9uOXGEti1Vc/3vlHZLk/GYPEGEm/29zWMLkgI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545561; c=relaxed/simple; bh=tVWWoCrAiAOBE1no/RqFInBi9AakwZo+dXi9+HlMNas=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tw8hQ9POn5syQ5OtpuKxjkBxpvxRyvApD4fjmOMO+4QpGbfKj1DteFpu+DZfvvAQcE/QMO8oHZsK3Z2uRQ1rqpgMQEnpVwdkDjR5g022zUb9767W4I6hFpgFYB+kYhZR6WHtTOyTs+sGAIZH9IiNQI8HTqLodwf21HY45P5p6jw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=fwP8XXgw; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="fwP8XXgw" Received: by mail-pj2-f13.google.com with SMTP id 98e67ed59e1d1-396ccafb74fso589462a91.3 for ; Wed, 16 Sep 2026 00:59:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545539; x=1790150339; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=mxcOLcYtzXeNvmAXwxnBSPIznA4IuiBXVh28WxVeHIw=; b=fwP8XXgwWtX5wHvzEQhGz+5HS25MIF66fET6Z0zDnC3GP4Z6q/vw6vCQt1Id0WXyPq XIHDI7AQE1ONJ5DUhyFPlfMM2okX0ss3nK0yMk/VtWqsdOfPdxeVnM+xk4FtBA84/sd6 YTYl4VQPjDFGr705tfJSc0a+Aqf++t1cTnzfA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545539; x=1790150339; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=mxcOLcYtzXeNvmAXwxnBSPIznA4IuiBXVh28WxVeHIw=; b=z7CST5bSaTNWWbUppPSRoDTvv+PmkIzPbx6h4mja45I3YdPDmMJTPMdP9QLxLfiu/+ t8YqI0PkYNRkAJsZHr0euIpF7qfB1m37PrfXnGWzo3fse8Qy7ri9FLGHTw15e7v5M7Ey 0XYoNyzxzUUJcA797gfonqupSbxDRHbJ1gD2mZcaGfdyztCoksgJ0nNSFLYT1NyczrxU ps9A1Bme7T+fy5uxxMgwAGD6NgaKtUcjxj5m39e2XyK3ulhRJCrtnwKpBTvE6bl+vCSr SO+M2GcEmEKFiU7AtnaA9YVcr9XEjnRZfSwewh5tJzBWyV1GWiHeWdOjJUmpW50w+qgU 0Sew== X-Forwarded-Encrypted: i=1; AKwUvBxanio7HcIdmPEG63puoK8SGU8KLPognbalKYl6J838Lk1SU3gYjuFrpaATMIzM6yXl3EqoaKRRCKMxAHM=@vger.kernel.org X-Gm-Message-State: AFuF++mSQNDKieyMb5t4jzhPT5Wp3sy3WrIxG07MfbH/jClBxnWozPv5 YZYhPKNK2TohYBlK42fYToPCydtvHZtJz2vliVZ40uQRWffphP5ZblnC3FpN6TCNUA== X-Gm-Gg: AYBFou1hcVJw7NccS1VIZE5/JBcdry9rsMaCPUpzfz+CzEJuxdpT+1gyeuhiNR0HNm1 7Y8hobdh8JMOmpLDOV+sZDoZovz2nrRBygSJBQ7+SZP9aMfgWYcv5SiJSJzfyVEISiYg2AipJNn 5Q6NFLwkm/jT4eeVR3h0eH1fHPxkp7VmW7O1kmRDL6eoiA8J9F0Y7m1QGotxtXajWQAVe+AikXk X+T9ts1MOBTLaXsq0LOaXJMqlKrVJ7RQZ6z7QLFEUkq2uJuOR1G5/fQPuMWCszLq6uARK0hXgUF Kn60gUS0qlfze7/NrrqpQ+5mf+uWUc2iOBeG3ukcRKpeNG5tqErquK6otM6WBdsbA+0WOvE+Wol P8dtSGPgOboTlO9MiRDma/i4Ae0VPI5P4z+cOw798R3lHA2LTVdR3V1vHwVcA3eZ63vYb2r5kke 1maOUxCri8P78qVlrTtpFEllL9kWYB/huNyt1Ij+LFQ7T783tCAu9ygoxE7nmgRaCHOMrJNRAa1 s23w0mAOZY74wEiH79GC4q+QGppO6ni3BYUfgE+jNmXk4Mfk9kXSw6X5A== X-Received: by 2002:a17:90b:586f:b0:39e:28dc:3682 with SMTP id 98e67ed59e1d1-39e28dc380fmr622870a91.21.1789545539469; Wed, 16 Sep 2026 00:58:59 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.58.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:58:58 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 07/15] usb: hub: Pass |struct usb_port*| to usb_port_is_power_on() Date: Wed, 16 Sep 2026 15:57:33 +0800 Message-ID: <20260916075745.3549953-8-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" usb_port_is_power_on() currently takes |struct usb_hub*|, but only needs it to tell if the hub/port is SuperSpeed or not. In a subsequent change, usb_port_is_power_on() needs access to a pwrseq state tracking field in |struct usb_port|. Either structure can be used to identify whether a port/hub is SuperSpeed or not, as the field in |struct usb_port| is inherited from the hub: port->is_superspeed =3D hub_is_superspeed(hub) Replace usb_port_is_power_on()'s |struct usb_hub*| parameter with |struct usb_port*| so a subsequent change can use it. Reviewed-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v8: - Adapted to |struct usb_port| and usb_port_is_power_on() moving back to hub.[ch] Changes since v3: - Adapted to move of usb_port_is_power_on() to port.c and port.h --- drivers/usb/core/hub.c | 11 ++++++----- drivers/usb/core/hub.h | 2 +- drivers/usb/core/port.c | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 707eeee198b0..1a98ccfe2664 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -3249,11 +3249,11 @@ static bool hub_port_stop_enumerate(struct usb_hub = *hub, int port1, int retries) } =20 /* Check if a port is power on */ -int usb_port_is_power_on(struct usb_hub *hub, unsigned int portstatus) +int usb_port_is_power_on(struct usb_port *port, unsigned int portstatus) { int ret =3D 0; =20 - if (hub_is_superspeed(hub->hdev)) { + if (port->is_superspeed) { if (portstatus & USB_SS_PORT_STAT_POWER) ret =3D 1; } else { @@ -3315,7 +3315,7 @@ static int check_port_resume_type(struct usb_device *= udev, } /* Is the device still present? */ else if (status || port_is_suspended(hub, portstatus) || - !usb_port_is_power_on(hub, portstatus)) { + !usb_port_is_power_on(port_dev, portstatus)) { if (status >=3D 0) status =3D -ENODEV; } else if (!(portstatus & USB_PORT_STAT_CONNECTION)) { @@ -3757,12 +3757,13 @@ static int wait_for_connected(struct usb_device *ud= ev, struct usb_hub *hub, int port1, u16 *portchange, u16 *portstatus) { + struct usb_port *port_dev =3D hub->ports[port1 - 1]; int status =3D 0, delay_ms =3D 0; =20 while (delay_ms < 2000) { if (status || *portstatus & USB_PORT_STAT_CONNECTION) break; - if (!usb_port_is_power_on(hub, *portstatus)) { + if (!usb_port_is_power_on(port_dev, *portstatus)) { status =3D -ENODEV; break; } @@ -5458,7 +5459,7 @@ static void hub_port_connect(struct usb_hub *hub, int= port1, u16 portstatus, * but only if the port isn't owned by someone else. */ if (hub_is_port_power_switchable(hub) - && !usb_port_is_power_on(hub, portstatus) + && !usb_port_is_power_on(port_dev, portstatus) && !port_dev->port_owner) set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); =20 diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h index 9ebc5ef54a32..b65d9192379d 100644 --- a/drivers/usb/core/hub.h +++ b/drivers/usb/core/hub.h @@ -138,7 +138,7 @@ extern int usb_clear_port_feature(struct usb_device *hd= ev, int port1, int feature); extern int usb_hub_port_status(struct usb_hub *hub, int port1, u16 *status, u16 *change); -extern int usb_port_is_power_on(struct usb_hub *hub, unsigned int portstat= us); +extern int usb_port_is_power_on(struct usb_port *port, unsigned int portst= atus); =20 static inline bool hub_is_port_power_switchable(struct usb_hub *hub) { diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index c0a51d9b06a6..67ae2bfd3e93 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c @@ -98,7 +98,7 @@ static ssize_t disable_show(struct device *dev, } =20 usb_hub_port_status(hub, port1, &portstatus, &unused); - disabled =3D !usb_port_is_power_on(hub, portstatus); + disabled =3D !usb_port_is_power_on(port_dev, portstatus); =20 out_hdev_lock: usb_unlock_device(hdev); --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9237B46EF87 for ; Wed, 16 Sep 2026 07:59:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545567; cv=none; b=Og0A1/SszMu4dfVcFvwZi5GZ3MuWTtkCVqBOS6c3LJZbDSs1Hdg2wCxc0IbJ6JduQXk5mZLKKD+0bm9oPPLPEt8bghlmdTH4pB9Pja2F/qEItOdVZQgQ/T4f4MQ3bVfUCs2FyOQYO2oJNpDSKwsihzdtRpqhZEnLT4mb0uhdU/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545567; c=relaxed/simple; bh=SHgJWoiUkxW7Auz32fIVCxJL51q1VUFL5lzA1MkMflA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KgOLgsoxqTDynKAR+gU7kC0QiBdmHrsABzNEqWGP/HvvAsik5OEV+sLhWfEj+AEEmGhWF1dsbFVds0JtCNvaapSDBHuMSD5WKmSeJx7v76cUFoIpB4IYHJX12Xy9lAnbzV4nytZPYMAmlHqBIsO7eFw7LzdwRgOiPRzC+iCgsrM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=bTpPwfgt; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="bTpPwfgt" Received: by mail-pj2-f12.google.com with SMTP id 98e67ed59e1d1-396cccbba92so528064a91.0 for ; Wed, 16 Sep 2026 00:59:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545545; x=1790150345; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JKZMmlDJFNSMtO9huPhOVTb/TTA3LxjwLBEnHIboH44=; b=bTpPwfgt2dg6mAR22GIGoVXoXt5LVnIna9UME4o87hnvazveaRCXjchh3OySTCMIZo 8Me+CeP2zrfN60uDgL0ffEtx3e/YGqozMJK5dE/lp8b5IdHuBLYJ1JzEbpmvUMCpiEYR PgD1ToM0uCq3nFBiay7EB5kBKI5ygM4mXxamk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545545; x=1790150345; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=JKZMmlDJFNSMtO9huPhOVTb/TTA3LxjwLBEnHIboH44=; b=BFwX6iuGHpP36hsazvpXCiPKjozBJw2Cx54imHTq9G4fPczVBoPWBzQcf3PPBCLC+b 9q/+mInrulml91Mkc2RECD6NQqIAuSqzUrzu9Gu6Sx13oEDZ8uFsR0JFkHYakwX6nrok EQ3UeptbIyTpiOF/irLQ/1MtQ7aIo9AMyhi2LIL8K6DFqK9Wxf0sMRfAfTbfauu0+9Py IgoVSnBtRg0J6SfWrf9m8iAf//mdFN37iQu3dJTKqau9xfEtlLJd2ksuj4nX+uZ9IFzL tJTf0zIf+h1iM8EuW66PLnTdLDiTnz3Roq4+MRkO9z8VpgE475pMx5ii7X90joxZJP6T MNTg== X-Forwarded-Encrypted: i=1; AKwUvBxkFYQ22vgQrLi8kPLQFWAH+jUDZ5wHm9tF0EFdI9UucvA4MTEid5sKnIZRLJrhPsXtX0YGVyrokp18GoA=@vger.kernel.org X-Gm-Message-State: AFuF++l4IDuJbmkSl8yCygAkebTiyGVky3ZcJMJ55RJDi7XTne+0SY+/ GLdYg9LzNM6PfXLpuI9Lge4rWOR5Z4KXGLrZRVcGqQkI4L1t4kcTSNN+7QMPOOdHuQ== X-Gm-Gg: AYBFou0xqQx26LOoPMWX9DCaMPExrPJ9e/kNPzE2RrIJ0wQXSzZDL7t4nVaG6N8/ZJ8 7BrLJmAMia4NbGH1yILcct8Cj51IiotRI43QP7kH95Vgl4X2ABC0k3NfOE8J+jPRNLFzZj+9okE OEJhgbIWsSpFcsovNECjm6SShkZkJ0eflAWOTrlU/A3Gw8+a2JexShStxt6+q4Mfnx10L0OM9Eo 5HLDlxdsbXZ830VgUGqitDTVkvhbi/xNY2EAsODJugm24aHKksJJrhK1ir517q8I/NgoKMgT3sp fLoX1piK5yB/2Dlc+Mm6PIdYZpbzYDHY0XrYiyG+2A1TyLb/65BhTQyg3/pnrt3IWQgcU8L87ZA xxJzxj4/5V804j1zD0BgVkbW2FFW4ZyErnU4LBCWoGQO8q5CfjcP5zYvUxQJ35pcL/sq0NRwXku V3cQdqo04f0jCHXRflXAmSELS2wcN5l+WN96usIHrMoox1rjDOlp4EWBFCbafs2xptbTZNwwFqE LgCNCs8qcUpo4ki0PLWAxgJb7lwJfFzbUcx/R/klYpDIU6TdD6eidojRg== X-Received: by 2002:a17:90b:440c:b0:39d:fea0:c17 with SMTP id 98e67ed59e1d1-39e1e309c21mr3793724a91.8.1789545544841; Wed, 16 Sep 2026 00:59:04 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.58.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:59:04 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 08/15] usb: hub: Use usb_hub_set_port_power() to control port power everywhere Date: Wed, 16 Sep 2026 15:57:34 +0800 Message-ID: <20260916075745.3549953-9-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There are still some instances in the USB hub driver where port power is directly controlled by toggling the USB_PORT_FEAT_POWER feature flag. Switch these instances over to usb_hub_set_port_power() so that only one unified function to do this exists. This makes adding external power control with the power sequencing API easier and consistently applied. Reviewed-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v2: - New patch --- drivers/usb/core/hub.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 1a98ccfe2664..f309ceea1969 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -979,11 +979,8 @@ static void hub_power_on(struct usb_hub *hub, bool do_= delay) dev_dbg(hub->intfdev, "trying to enable port power on " "non-switchable hub\n"); for (port1 =3D 1; port1 <=3D hub->hdev->maxchild; port1++) - if (test_bit(port1, hub->power_bits)) - set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER); - else - usb_clear_port_feature(hub->hdev, port1, - USB_PORT_FEAT_POWER); + usb_hub_set_port_power(hub->hdev, hub, port1, + test_bit(port1, hub->power_bits)); if (do_delay) msleep(hub_power_on_good_delay(hub)); } @@ -5461,7 +5458,7 @@ static void hub_port_connect(struct usb_hub *hub, int= port1, u16 portstatus, if (hub_is_port_power_switchable(hub) && !usb_port_is_power_on(port_dev, portstatus) && !port_dev->port_owner) - set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); + usb_hub_set_port_power(hdev, hub, port1, true); =20 if (portstatus & USB_PORT_STAT_ENABLE) goto done; --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3B7846983C for ; Wed, 16 Sep 2026 07:59:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545582; cv=none; b=Dg7MkG+NiZepc0Nf3UErJptye5m0Ulzy/I+fdyzeMjyxtJG63jcb9Y5j8CFPrjUKSXYL3MZKy+IG+0eRiQJQWdG1+oe0kccrZAJgC7mjHyNPGqUrvIshdfeq7HiGMYX8OjJBTUVnYKxK5yq7QeQK4XQcdQDU8M7BcdTw0PBh0pc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545582; c=relaxed/simple; bh=CW4SWQaoLLWxlLCUcarmKZeaj45YHYfyufaN1AW2LBU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rChU3lsT9p5AoTetu1KkqaXyqAAg7cvveqfQ6b8t8ENEw31fF6TfH4ZUMlLMg9I2tb7E/U3WFikSFM/n6Z2NUb1sJ1H0LQkbKTjiRCucK6jbNrXNxSRN7l+qH/ZEzacUT5c1kbED/c68W9635DxSnFgNjPRik/gi1QJJgGmjiTY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=LxtcEELX; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="LxtcEELX" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2d747ed9866so6116775ad.2 for ; Wed, 16 Sep 2026 00:59:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545550; x=1790150350; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LBlifXBc8TeLjZFKtJEs7hY8wBigqZQzlvtfz7/nzb0=; b=LxtcEELXoqPpXKUxFVsRSSyxWnPw+hegoR5JeAY3VhKOYUUMINgHBR9arO36quS5/O avVEl8lNoFrwBupPar1XxxFw2Ccs0q2bdxvzGRlPpn2uZHVOjGBmSxNBK0MCsTLMbtur pxT2w3tnL7SavrJM6axm5CO1z7qO0OA0DndNw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545550; x=1790150350; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=LBlifXBc8TeLjZFKtJEs7hY8wBigqZQzlvtfz7/nzb0=; b=nyqPC62qGbGI1T06Qocpn+Ckc1bks+BmgA3LDzXY+lJ6qhzONGEitT4zQS9j/J0Fxx GYAstq/dcI8WjwRwmJEyorsiJpdkCxDcbQis6LZ6i50NitNSe9l71EDaT7t8n7xFBFq9 iY8jRP2Al3QNJJhksd43HiFJCTNQXT53E7LpHIZraxFvSDGd6csQ4vjMXqkVz3pWff5O fVy6P3N8XHfUwA7CFARwcWhRY9vfWLhK3cSGtXZAB43bcYLuwIYQuNbA9WkjTT7mVvOK zBZoJzZeFINnORNfyw1QUhbXaVz84rfl8xJUQ7eaBnDvzjP0QkBU6aHyRiMt8ITucutk Hs9w== X-Forwarded-Encrypted: i=1; AKwUvByqtkXvt/kJqJbduYBihHUJzBpA7WFXVdJSvKScewLm4W6ZAQQxxxoqwreHzUbudW6wl5LcfszMOO8SRUI=@vger.kernel.org X-Gm-Message-State: AFuF++n4V0NkkCZkCCzJYqiNFcczwWYoWcQAerX15ndjPB3Holohq41V Q6tnbXF3Xm8nDvafPRhURDnYEYd3MaikOX/Hyuz/5gLNDKIB4VwiAU/nZ+7c2GrluA== X-Gm-Gg: AYBFou2JiVMlY3qHl73rsSwSdyToNmSBD323aLkoFevA63Skd9G3C2A5vcaNFJ9dnX7 LyoOejikMnZlIdpeCNluvr4VhPJe/ViFzmL+JenyNdnJ2nArpXVZ81NhRuPhbAMrl+TIRPFCipl ZBnrQu0kjdSpEaF+9OexYP2cqSI0JuJ2g6xVr3pMcA6bqWNMj8xTqjkP7qGrygv2Cy2IOrt3VVU rWbjZ87UIrdBLUKz5q4cGKNQBubjb2F6CAc7xHdt9sScHz4gVCRdTL59hUwG0EV7b64M3Woj8lg v40jWwBiP9jvh35tgNVYX6x6U+WfaoLMiQCkJJrpI85+thlJNHPwtsiohrnvhWY1G9yG1GrChcg LwBnzk40s+zjGc19q02akuAXlc15sMsVtDZwD60WsSEE/ZIYTQxPe9RTyhn+pZmVporuLBN4p1X O0JHNQ8PXJCybbnDv5uWMDDmOl2FZ8r4Ls2H+658b+6sqdIg8H0znWifF26QLVdgfCq7Vb2fWwC SO/BP3vU6pcqGU33C2W6IsSnUWzBX6y0HVTFktNRi7L8Ajvzzq6VnKTzTA= X-Received: by 2002:a17:90a:c105:b0:39e:27e:2f09 with SMTP id 98e67ed59e1d1-39e1e284ff2mr4191391a91.8.1789545550190; Wed, 16 Sep 2026 00:59:10 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.59.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:59:09 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 09/15] usb: hub: Power on connected M.2 E-key connectors with power sequencing API Date: Wed, 16 Sep 2026 15:57:35 +0800 Message-ID: <20260916075745.3549953-10-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The new M.2 E-key connector can have a USB connection. For the USB device on this connector to work, its power must be enabled and the W_DISABLE2# signal deasserted. The connector driver handles this and provides a toggle over the power sequencing API. This feature currently only supports a directly connected (no mux in between) M.2 E-key connector. Existing USB connector types are not covered. The USB A connector was recently added to the onboard devices driver. USB B connectors have historically been managed by the USB gadget or dual-role device controller drivers. USB C connectors are handled by TCPM drivers. The power sequencing API does not know whether a power sequence provider is not needed or not available yet, so we only request it for connectors that we know need it, which at this time is just the E-key connector. On the USB side, the port firmware node (if present) is tied to the usb_port device. This device is used to acquire the power sequencing descriptor. This allows the provider to tell the different ports on one hub apart. This feature is not implemented in the onboard USB devices driver. The power sequencing API expects the consumer device to make the request, but there is no device node to instantiate a platform device to tie the driver to. The connector is not a child node of the USB host or hub, and the graph connection is from a USB port to the connector. And the connector itself already has a driver. Power sequencing is not directly enabled in the connector driver as that would completely decouple the timing of it from the USB subsystem. It would not be possible for the USB subsystem to toggle the power for a power cycle or to disable the port. Reviewed-by: Bartosz Golaszewski Link: https://lore.kernel.org/all/20260610084053.2059858-1-wenst@chromium.o= rg/ Link: https://lore.kernel.org/all/20260515090149.3169406-1-wenst@chromium.o= rg/ Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Sashiko mentions possible use-after-free of hub->ports from the sysfs callbacks. This is actually not possible, since the sysfs callbacks acquire the hub device and its lock, and then check if it is in the process of disconnect / removal. If it is, then the callbacks just error out. Changes since v8: - Adapted to |struct usb_port| and usb_port_is_power_on() moving back to hub.[ch] - Moved comment about Sashiko false-positive to footnote Changes since v7: - Adapted to pwrseq_enable/disable() rename Changes since v6: - Added braces ("{}") to for loop in hub_is_port_power_switchable() (Andy) - Adapted usb_port_is_power_on() to new pwrseq_get_state() function return values (Bartosz) Changes since v5: - Only assign port_dev->pwrseq if successfully retrieved pwrseq descriptor (Andy) - Dropped the pwrseq error pointer check in the release function (Andy) - Added check for port->pwrseq !=3D NULL before calling pwrseq_is_power_on() (API change in patch 3) Changes since v4: - Rewrote usb_port_is_power_on() to better express intent and restrictions of pwrseq API (Andy) - Switched to dev_fwnode() in port_pwrseq_is_supported() (Andy) - Added blank line separating normal variable declarations and __free() type declarations (Andy) - Split out assign_bit() rewrite (Andy) - Moved pwrseq_put() to release function to avoid UAF (Sashiko) - Added back pwrseq_power_off() call in usb_hub_remove_port_device(); otherwise power off could be delayed to object release - Don't clear hub->ports[port1 - 1] in main error path; by that time the port device is registered and sysfs attributes are available to userspace (Sashiko) Changes since v3: - Adapted to move of usb_port_is_power_on() to port.c and port.h - Simplified usb_hub_set_port_pwrseq() (Andy) - Renamed usb_hub_set_port_pwrseq()'s "set" parameter to "on" - Dropped usb_hub_restore_port_pwrseq() (use usb_hub_set_port_pwrseq() with inverted argument) - Fixed off-by-one access in hub_is_port_power_switchable() (Sashiko) - Assign retval from dev_err_probe() instead of the other way around (Andy) - Clear hub->ports[port1 - 1] in USB port error and remove paths to avoid other threads from accidental UAF while the USB hub device is being unwound (Sashiko) - Short-circuit out of helpers if !IS_ENABLED(CONFIG_POWER_SEQUENCING) to avoid errors from stub functions (Sashiko) Changes since v2: - Expanded subject to mention power sequencing API - Dropped commit message bit about power sequencing Kconfig symbol change to bool - Added optional dependency on POWER_SEQUENCING to USB - Split out pwrseq_power_*() calls into separate helpers - Rewrote set_bit() and clear_bit() branches with assign_bit() - Dropped the pwrseq_power_off() before pwrseq_put(): pwrseq_put() does it automatically. - Removed pwrseq_power_on() from usb_hub_create_port_device(); it will get called through usb_hub_set_port_power() in hub_activate(). - Added checks for port->pwrseq in hub_is_port_power_switchable() - Use separate pwrseq descriptors for HighSpeed and SuperSpeed ports. This makes things simpler. On the other hand to power cycle a port userspace needs to toggle it on both the HS and SS ports together. - Dropped pwrseq state tracking again The power sequencing consumer API already tracks the state internally; doing it again in |struct usb_port| is not necessary especially now that the descriptors aren't shared. It's unclear to me how actual hubs reconcile USB_PORT_FEAT_POWER settings from the HS side and SS side. One hub chip vendor said that VBUS_EN for a port is on if the flag is set on either side; however actually testing on one of their hubs showed that VBUS was cut as soon as the flag is cleared on the HS port. Maybe it could be different if a SS device was connected? That scenario was not tested. Testing on another retail bought hub seemed to work exactly as described though: USB_PORT_FEAT_POWER needed to be clear on both HS and SS ports to turn off VBUS. Under this scheme, I'm not sure how the power cycle in hub_port_connect() would work correctly. - Link to v2: https://lore.kernel.org/all/20260610084053.2059858-1-wenst@chromium.org/ Changes since v1: - Switch to fwnode instead of OF - Tie port@ fwnode to usb_port device - Move remote node compatible checking to separate helper - Use usb_port device to request power sequencing descriptor - Drop "index" parameter from pwrseq_get() - Do not get pwrseq descriptor for SuperSpeed port; share one for one physical port - Add pwrseq state tracking - Link to v1: https://lore.kernel.org/all/20260515090149.3169406-1-wenst@chromium.org/ --- drivers/usb/Kconfig | 1 + drivers/usb/core/hub.c | 29 ++++++++++++++++++++-- drivers/usb/core/hub.h | 12 +++++++++- drivers/usb/core/port.c | 53 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 3 deletions(-) diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index abf8c6cdea9e..ef1959363fb1 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -44,6 +44,7 @@ config USB_ARCH_HAS_HCD config USB tristate "Support for Host-side USB" depends on USB_ARCH_HAS_HCD + depends on POWER_SEQUENCING if POWER_SEQUENCING select GENERIC_ALLOCATOR select USB_COMMON select NLS # for UTF-8 strings diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index f309ceea1969..0e929a4c9fa1 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -33,6 +33,7 @@ #include #include #include +#include #include =20 #include @@ -878,6 +879,16 @@ static void hub_tt_work(struct work_struct *work) spin_unlock_irqrestore(&hub->tt.lock, flags); } =20 +static int usb_hub_set_port_pwrseq(struct usb_port *port, bool on) +{ + if (!IS_ENABLED(CONFIG_POWER_SEQUENCING)) + return 0; + + if (on) + return pwrseq_enable(port->pwrseq); + return pwrseq_disable(port->pwrseq); +} + /** * usb_hub_set_port_power - control hub port's power state * @hdev: USB device belonging to the usb hub @@ -893,15 +904,22 @@ static void hub_tt_work(struct work_struct *work) int usb_hub_set_port_power(struct usb_device *hdev, struct usb_hub *hub, int port1, bool set) { + struct usb_port *pwrseq_port =3D hub->ports[port1 - 1]; int ret; =20 + ret =3D usb_hub_set_port_pwrseq(pwrseq_port, set); + if (ret) + return ret; + if (set) ret =3D set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); else ret =3D usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_POWER); =20 - if (ret) + if (ret) { + usb_hub_set_port_pwrseq(pwrseq_port, !set); return ret; + } =20 assign_bit(port1, hub->power_bits, set); return 0; @@ -3249,6 +3267,7 @@ static bool hub_port_stop_enumerate(struct usb_hub *h= ub, int port1, int retries) int usb_port_is_power_on(struct usb_port *port, unsigned int portstatus) { int ret =3D 0; + int pwrseq_state; =20 if (port->is_superspeed) { if (portstatus & USB_SS_PORT_STAT_POWER) @@ -3258,7 +3277,13 @@ int usb_port_is_power_on(struct usb_port *port, unsi= gned int portstatus) ret =3D 1; } =20 - return ret; + /* stub function returns error */ + pwrseq_state =3D pwrseq_get_state(port->pwrseq); + /* fall back to port status if pwrseq is in unknown state */ + if (pwrseq_state < 0 || pwrseq_state =3D=3D PWRSEQ_STATE_UNKNOWN) + return ret; + + return ret && pwrseq_state =3D=3D PWRSEQ_STATE_ON; } =20 static void usb_lock_port(struct usb_port *port_dev) diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h index b65d9192379d..e3a0f7ec0775 100644 --- a/drivers/usb/core/hub.h +++ b/drivers/usb/core/hub.h @@ -85,6 +85,7 @@ struct usb_hub { * @port_owner: port's owner * @peer: related usb2 and usb3 ports (share the same connector) * @connector: USB Type-C connector + * @pwrseq: power sequencing descriptor for the port * @req: default pm qos request for hubs without port power control * @connect_type: port's connect type * @state: device state of the usb device attached to the port @@ -104,6 +105,7 @@ struct usb_port { struct usb_dev_state *port_owner; struct usb_port *peer; struct typec_connector *connector; + struct pwrseq_desc *pwrseq; struct dev_pm_qos_request *req; enum usb_port_connect_type connect_type; enum usb_device_state state; @@ -147,7 +149,15 @@ static inline bool hub_is_port_power_switchable(struct= usb_hub *hub) if (!hub) return false; hcs =3D hub->descriptor->wHubCharacteristics; - return (le16_to_cpu(hcs) & HUB_CHAR_LPSM) < HUB_CHAR_NO_LPSM; + if ((le16_to_cpu(hcs) & HUB_CHAR_LPSM) < HUB_CHAR_NO_LPSM) + return true; + /* check for controllable external power sequencers */ + for (unsigned int i =3D 0; i < hub->hdev->maxchild; i++) { + if (hub->ports[i] && hub->ports[i]->pwrseq) + return true; + } + + return false; } =20 static inline int hub_is_superspeed(struct usb_device *hdev) diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index 67ae2bfd3e93..14a4a8f5d152 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c @@ -8,11 +8,14 @@ */ =20 #include +#include #include #include #include #include #include +#include +#include #include #include =20 @@ -29,6 +32,9 @@ static bool usb_port_allow_power_off(struct usb_device *h= dev, if (hub_is_port_power_switchable(hub)) return true; =20 + if (port_dev->pwrseq) + return true; + if (!IS_ENABLED(CONFIG_ACPI)) return false; =20 @@ -364,6 +370,8 @@ static void usb_port_device_release(struct device *dev) * device_platform_notify_remove() in device_del(). */ fwnode_handle_put(dev_fwnode(dev)); + /* usb_hub_create_port_device() could leave an error value */ + pwrseq_put(port_dev->pwrseq); kfree(port_dev->req); kfree(port_dev); } @@ -756,11 +764,46 @@ static const struct component_ops connector_ops =3D { .unbind =3D connector_unbind, }; =20 +static bool port_pwrseq_is_supported(struct usb_port *port_dev) +{ + struct device *dev =3D &port_dev->dev; + struct fwnode_handle *port =3D dev_fwnode(dev); + + struct fwnode_handle *ep __free(fwnode_handle) =3D + fwnode_graph_get_next_port_endpoint(port, NULL); + if (!ep) + return false; + + struct fwnode_handle *remote __free(fwnode_handle) =3D + fwnode_graph_get_remote_port_parent(ep); + if (!remote) + return false; + + if (!fwnode_device_is_compatible(remote, "pcie-m2-e-connector")) { + dev_dbg(dev, "remote endpoint %pfw is not a supported connector", remote= ); + return false; + } + + return true; +} + +static struct pwrseq_desc *usb_hub_port_pwrseq_get(struct usb_port *port_d= ev) +{ + if (!IS_ENABLED(CONFIG_POWER_SEQUENCING)) + return NULL; + + if (!port_pwrseq_is_supported(port_dev)) + return NULL; + + return pwrseq_get(&port_dev->dev, "usb"); +} + int usb_hub_create_port_device(struct usb_hub *hub, int port1) { struct usb_port *port_dev; struct usb_device *hdev =3D hub->hdev; struct fwnode_handle *fwnode =3D dev_fwnode(&hdev->dev); + struct pwrseq_desc *pwrseq; int retval; =20 port_dev =3D kzalloc_obj(*port_dev); @@ -811,6 +854,7 @@ int usb_hub_create_port_device(struct usb_hub *hub, int= port1) retval =3D device_register(&port_dev->dev); if (retval) { put_device(&port_dev->dev); + hub->ports[port1 - 1] =3D NULL; return retval; } =20 @@ -828,6 +872,14 @@ int usb_hub_create_port_device(struct usb_hub *hub, in= t port1) goto err_put_kn; } =20 + pwrseq =3D usb_hub_port_pwrseq_get(port_dev); + if (IS_ERR(pwrseq)) { + retval =3D dev_err_probe(&port_dev->dev, PTR_ERR(pwrseq), + "failed to get power sequencing descriptor\n"); + goto err_put_kn; + } + port_dev->pwrseq =3D pwrseq; + retval =3D component_add(&port_dev->dev, &connector_ops); if (retval) { dev_warn(&port_dev->dev, "failed to add component\n"); @@ -885,6 +937,7 @@ void usb_hub_remove_port_device(struct usb_hub *hub, in= t port1) peer =3D port_dev->peer; if (peer) unlink_peers(port_dev, peer); + pwrseq_disable(port_dev->pwrseq); component_del(&port_dev->dev, &connector_ops); sysfs_put(port_dev->state_kn); device_unregister(&port_dev->dev); --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pz2-f12.google.com (mail-pz2-f12.google.com [74.125.228.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F07814746AB for ; Wed, 16 Sep 2026 07:59:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545584; cv=none; b=fyqoYusmiT/o9Da1KI+DXZqPIf/uaiWMAtVNm4TYgu+8I5PR02ELnUcOFOi/LO5SXbyAv6g10YjZBnR2pAoNYGKUpugE8+o5BY5X7nesD5JXSM4MDEwNhD/F1Ms4YEt3fsrCDC7QdhFZXc5ECJ7RX/GxBspzU66/5hw8zxOMzwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545584; c=relaxed/simple; bh=n5OM2/VFYsx7oj5lWPwm1kxpni3dSJJQk03UQEkKIio=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Bh8RpG8WLrLH+U7J2ZhAvSHLqK9eybzYra5j2pkL6CjceCkz3kCyyQ4NDQSL5tz0s6UBX40eLFS0VBVr2yu8RP7X/VahaqD6WVePV+4x4xRp0wejA+DnJBPP3c214ShRuaUoqLIWjGOF3E0cyI9o3BhZkKH9xAgA6pKLrn0pkPI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=ohYqnxUt; arc=none smtp.client-ip=74.125.228.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ohYqnxUt" Received: by mail-pz2-f12.google.com with SMTP id 41be03b00d2f7-cc1cea4c79fso330966a12.0 for ; Wed, 16 Sep 2026 00:59:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545556; x=1790150356; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=UnPIF04bEgfqnB06sJJ+n/4J6DJ5aXluvuxFl2QwIxQ=; b=ohYqnxUtCPXeFU+yDLfm/g1jv2GU38BjR70gPaXT6fZBcN1akUi9BoI/csovFlpLeS X8cZbpOkdAT7PpAIHjYLJsNJXHKv2pVqHHFVhp77Ze8Mz8Pjou+T1OuotuigsqHGgzKo GTUvC3aWZ47Z7rkhK+0MjnFLYucVqepA4e0UI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545556; x=1790150356; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=UnPIF04bEgfqnB06sJJ+n/4J6DJ5aXluvuxFl2QwIxQ=; b=GAPtYY1W1wZDwWwv4ue02B9Z1bP4ht6I7Ji4Qt8m/vOR5OFFtIe/GCGh9CNpT/MuAe bC53pWLMm8Hg1+bzvgOLlb6+UlQ4X8cP7sIdIkUc+oUIaP0MmEB66iPF2LYhAggnwKkm jVdcvVMf2U2hNRWYV0I3OIn14wlJsFmya2Efo1yPEmkw9DjXWcV+AV6j1OzvpIuDIwfs 6TNsWVU0wF2rtACaFJTQX+MEN1mfnBJVjCw8DGf2C+9WHRt0GHLUZgne20Qr1gl0C64d YSFQ938RyJA/F3YU5fRn/RVAKexZbJSLTq+EMQzn7mLiBXwCtSpS7CcchW7DQPkEgA5K 4j6g== X-Forwarded-Encrypted: i=1; AKwUvBz7qxb4NlnC6IwymrYoB13YkNMYMxnhQGdCv7yjp2WelEXq3qLThqYh73BaODw57VdXSsVma8c06CjauEY=@vger.kernel.org X-Gm-Message-State: AFuF++n3fcC46XLzsjHNObNUq4EYG7hsdN7rx/yUax9ed9fsTwUwPALf gxUxibov+CyruBSba3BNUy8xkwZTX4nxf59mw6Qe3kM1YBqcFIC6kr1CwMuyhFcjlQ== X-Gm-Gg: AYBFou2+hXH+3Qr+1LPTovmVVvcJN/jJgbiMyJt/YBJGhnpkSVpFnZAiIjxHAnNdXBr 0eNhyw1/n2Vcs0MlY6KrFy10nvmM/MGSHDSzMUiYC/Z00repc97cdk93ZCDuf/Og4kdsPuF88Nm 6fVWrXvWHiv6TTgZJZfRx5elsnNnN/iThpv0jokJxUJkoCDSAF0n17FKU0r/Dbjpza6/xmDKfRF iDTrzTkKk/wSiUUyC7ltnICSa9/cU4f+6MilJ/1O35VvhDgGsS9KJb1GAoz5MBEUe28pwtsX4OH W2p36nGbHhbh2n5LU+9Gq8xrbP0ydKCniFSP2/quGBuo+oZym44rY0YgaJkZfl0Vxz7pAxMhD/0 63aNvInUOLMp043Ya6QtTc993uDKJLFhI4Jl+RkaqI+TR3kqoNL1MB0cZmI8ccS87dJfvV2so8R NL3a4A+G3WSqf9jxliGfDUwMvNjd/6Q4mn8E9UmoUJaah5BXgapZNt4tL3xST4ztgyi6T6a4Ywm n27vrNsJUEwXTGZ3PtwuS7cO//H/ke+VESzeXsC8c9/91Z7cuwbN2aGAQ== X-Received: by 2002:a17:90b:4cc8:b0:398:c292:ac80 with SMTP id 98e67ed59e1d1-39e1e330a2dmr4372580a91.10.1789545556050; Wed, 16 Sep 2026 00:59:16 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.59.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:59:15 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Krzysztof Kozlowski , Bartosz Golaszewski Subject: [PATCH v9 10/15] dt-bindings: usb: mediatek,mtk-xhci: Switch to ports for USB connections Date: Wed, 16 Sep 2026 15:57:36 +0800 Message-ID: <20260916075745.3549953-11-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This reverts commit 454a1e3cd36c113341d7b71e8e691c6e47ab4a8a. MediaTek's XHCI implementation supports both USB 2.0 High Speed (HS) and USB 3.x Super Speed (SS). The block can also be synthesized with either HS-only capability or HS+SS capability. The SSUSB controller handles the device or gadget mode. Saying that SSUSB handles the HS portion is wrong. For example, on the MT8195, the first two instances support both HS and SS, while the latter two instances support only HS. Switch to a "ports" sub-node for describing USB connections. Port 1 is Super Speed if the controller is SS-capable, otherwise it is High Speed. Port 2 is High Speed if SS-capable. This port mapping scheme directly matches what the hardware returns in its capability registers. Fixes: 454a1e3cd36c ("dt-bindings: usb: mediatek,mtk-xhci: Add port for Sup= erSpeed EP") Cc: AngeloGioacchino Del Regno Reviewed-by: Krzysztof Kozlowski Reviewed-by: Bartosz Golaszewski Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v1: - Squashed DT binding revert and addition together - Dropped reviewed-by from Bartosz --- .../bindings/usb/mediatek,mtk-xhci.yaml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml b= /Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml index 231e6f35a986..d6c75bd20b78 100644 --- a/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml +++ b/Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml @@ -107,10 +107,6 @@ properties: - description: USB3/SS(P) PHY - description: USB2/HS PHY =20 - port: - $ref: /schemas/graph.yaml#/properties/port - description: Super Speed (SS) Output endpoint to a Type-C connector - vusb33-supply: description: Regulator of USB AVDD3.3v =20 @@ -188,6 +184,19 @@ properties: "#size-cells": const: 0 =20 + ports: + $ref: /schemas/graph.yaml#/properties/ports + + properties: + port@1: + $ref: /schemas/graph.yaml#/properties/port + description: Super Speed (SS) data bus if SS-capable; + otherwise High Speed (HS) data bus. + + port@2: + $ref: /schemas/graph.yaml#/properties/port + description: High Speed (HS) data bus if controller is SS-capable. + patternProperties: "@[0-9a-f]{1}$": type: object --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB9C44772B7 for ; Wed, 16 Sep 2026 07:59:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545584; cv=none; b=rBIr59mALNsWLpnEU/MyoDDRZqnUSBxHQkJJBTz1vmOK2IVc32GNLSDE6sbvoNsofU5hXk22+tM4L5/iJht8RqWeG9cyG9p0tFRF2FXaBC56MzW5iZrXrBBYtZ8dtm4ANyydn1ASL4hNFa1XVnn8LYTtDh2HrZlF0outvP4DDPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545584; c=relaxed/simple; bh=eyI1vaHvczB69tPN00V8OLfMpbO9IL68H/HlfpvrLfY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RG26P297vCpz1wrNxdtoL67H3Zd1rEUdnMnxAOfvshfNwA0VUlWon1gZckJ88EnJkNkUWdfz+r+Hi0Jh/edCh2B7ZZkOwVdYtfUfzxFB657z44a5lAMbhX1o5Bwpj1B0ndQPC5+H0QMuxzrtBj3/gwlSJi9NMwNW8MW3So8JuD4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=EdYWdqak; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="EdYWdqak" Received: by mail-pj2-f12.google.com with SMTP id 98e67ed59e1d1-396ccd66bb4so593565a91.1 for ; Wed, 16 Sep 2026 00:59:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545561; x=1790150361; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ud8Ab8x/DbJP2ljWLphVYfSDOg1pJvQBgrltchLDCh0=; b=EdYWdqak89mpGcCcIBBIMtsyZhroWNz1AS049I9fmXFVAZFhiphJZcuAOtyVaCGoAQ 3tTGpR6qDAYUev2vE6cobStk69IjGrt70exJu50kDrTkne6lTpdWr/Rv60/91Eepttva 79ezHXoQ0iqFtMl9WNAlvPFXVJMn6XgZLp1HI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545561; x=1790150361; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ud8Ab8x/DbJP2ljWLphVYfSDOg1pJvQBgrltchLDCh0=; b=SyFsi7Z0cqY3qBgfogUQWkcpxBgGMRZHesbTWc5+QKRjPaARSnhmMhVlt6bxP38hyH m5wG6aLnAGAiQYhR+ND7FPJ9/FN8z7SLEjHas11bykzVqOJ27VdT1dOtJ05KsdgPMNxY +uRjqmyidzV4BRB8Use1+5F9jvUoJUBd6qQ8yQgMIaGkMBnIZqB5nziofCabB+tkBF8L H2+yy/gMJDbukYyF5pY8TYlPfkOCapDX9Ehp/f3qEUYazA2AaDchY+xd35ISdzzPKl8C Ww4TbR+d/US75KWkMK7UiBCPiMU4s1aiv1eH1YnWKkDN8mpKbax01RglATQGOXtSXOtv aaOQ== X-Forwarded-Encrypted: i=1; AKwUvBwsQIYUIo/sHiapZuU+zFbf8Ws+xRMhs/lCtKIcQAxu0j+4SxxtUVSx/UGbxta63UAoSjBr1T3Emz68J8Y=@vger.kernel.org X-Gm-Message-State: AFuF++nJp8eaFQ4mEwIXHBU+yU19qFRF+IWONFHmKn4WpfriNKmgKqk9 Tao7bIsjy5m5nJWp3zjN7KxxD3VLVjiYfYPTCvAsZhFbiGf/kVdAKF8Zpzcs4w4f8w== X-Gm-Gg: AYBFou01pEQHCY1EAaZA90ujCIRADx89EYgiXMMD4fqaxBg2Bz/DmATQ1t5xqjt/uWp xKycbS8n25vjeuAqFsNKwT33QGMzGNfa2Xd6ogUJXFt1N4c68HtpTfzSVcaYiqtmkwtPwYIU7Ul PPQmmAApVSvPcxWz4p2vAI8w4lhIwMErV9nErgeoCmuCdIRx0z1qRFtutr+3kRLrAJ9xvhdoigQ bKPOLOi2+MBvVl5bJ1sYKXiA+JIIEuGFtN7+eFryCdHt/fJbywjsmiU2cnfm9wipWqiLn+hYE1i 2LcOY6cbM1jBdBE4v37CwbgMNdD8kbI9wTC6mtppSmGuRSuVL1XwMBtrUXHoxLS2dLZ58UZWb1Y i5PmJz2P0w9lZ1Lct7zR85VMeE4+vTiHOohXjieyjZzPuOx799QpptS3jTVq1kau9O/4vl/csWM +ZUFs//wRgu5MO19quOGlKUocPqEdeG/XpoDNGT5emibCRTEtnDaZU+CzxX2SGPqJwOnRYnvLWm QkDdzppXHwd4TT3hpm5Gmyqv2NDLmCxxArXrrYh3RCpWuRNb4gR5UzqMw== X-Received: by 2002:a17:90b:3e85:b0:398:bee5:61d6 with SMTP id 98e67ed59e1d1-39e1e55f7ffmr3982483a91.24.1789545561399; Wed, 16 Sep 2026 00:59:21 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.59.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:59:20 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Manivannan Sadhasivam Subject: [PATCH v9 11/15] power: sequencing: pcie-m2: support matching on remote "port" node Date: Wed, 16 Sep 2026 15:57:37 +0800 Message-ID: <20260916075745.3549953-12-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A USB hub can have multiple ports, and this driver needs to differentiate which port is being matched to. The USB hub driver now associates the "port" node with the usb_port device, so here we can use the remote "port" node to check for a match. Then fall back to the remote device node for the other connection types. Also rewrite the existing "remote =3D=3D dev_of_node(dev)" with device_match_of_node() for consistency. Reviewed-by: Manivannan Sadhasivam Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v4: - Dropped blank line between __free() variable declaration and subsequent use of the variable in conditional Changes since v3: - Drop redundant device node validity check; device_match_of_node() does it internally Changes since v2: - Use device_match_of_node() --- drivers/power/sequencing/pwrseq-pcie-m2.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index 322c307ce6c6..350a4c8831f7 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -175,9 +175,16 @@ static int pwrseq_pcie_m2_match(struct pwrseq_device *= pwrseq, * parent matches the OF node of 'dev'. */ for_each_endpoint_of_node(ctx->of_node, endpoint) { + /* USB port devices are tied to the port nodes. */ + struct device_node *remote_port __free(device_node) =3D + of_graph_get_remote_port(endpoint); + if (device_match_of_node(dev, remote_port)) + return PWRSEQ_MATCH_OK; + + /* Try the remote port parent for other types. */ struct device_node *remote __free(device_node) =3D of_graph_get_remote_port_parent(endpoint); - if (remote && (remote =3D=3D dev_of_node(dev))) + if (device_match_of_node(dev, remote)) return PWRSEQ_MATCH_OK; } =20 --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D860345FFA5 for ; Wed, 16 Sep 2026 07:59:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545586; cv=none; b=gvOjbHG5MJuHSAEYozXg/gm6weNHUpTi57XYmhu2RIlvdw15J5xiVXV8+dgC20gr4eSm7zjP4R73+H9hdN34L9xuWcgffoChvXDq4O499vcbMupUC4yb/tSDG3W3p9CY40baNikuPKzhkZAyAOYkxGhgnXKGmoKH+kvVgdOmPSg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545586; c=relaxed/simple; bh=KzBRa+RHmHfvRkSmrTiTEZJDRCsgTkmMAnZOypFRNhg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cPnQeBA56b5mOpVW0a1NJ8mazMcgsTUG9CJdWAJcE1yq31KdG1s0saqJ9a0OAWfAxFFI1yakq5t8JcE9IL/ylPOO+nyW/u+BGcHXSqcs2EQ0tG9OmcrrCu/zxNYM+eNbrZmq25Fh4gsVyDqQyz+EDkCJImXvF8z6jmUc0UVu7Nc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=MPGm4er8; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="MPGm4er8" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d747eb79f7so4446675ad.1 for ; Wed, 16 Sep 2026 00:59:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545566; x=1790150366; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HG7OvbliYWQiE77ZMzyIyMkMvjpjZCW/b60QdeLOOYM=; b=MPGm4er8aa5ZKi7sW70lq5LixCUx77tzPTczvaXQhr/j87gnZaw7ymIgxEq0oLQns/ RmahgFk5Nf2BBfext2RpCNYAAL+Ra/eM0SAjijf/+BsIoGTVktuCbTCNqzBCl0HaPTeb 5esJFe370PFwfXgtV+j+PsTzrcXkRRtOhZ6So= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545566; x=1790150366; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=HG7OvbliYWQiE77ZMzyIyMkMvjpjZCW/b60QdeLOOYM=; b=V5lmdK7wp5AbzhC/LqiV61SE1qKQabL69o0TNp4wU2zQmfUm70FfKdp52RBW1mUjxF JlcnwOjeWghWqko5YYtw/qwm0Q4hPJKiRpH1UswgPFWD6lRuxziLqvYjE3NsgLqvjGoH BuqbZ4JJcwTpN1VdjlGP0diE11sYcz6Kcshy1QM9Kwy6w13x3h6VLxA2rvDmZWlrwh95 yqx1MuGtq74/Q8qa2HNeQjUX4XLJ+ZisWxa1wxTQphYu2Ga0fSUJ+VYuQW37AmMSK1as KRnJbaMx4VkFTD01GAKahf2QK7vAwgM82iP7N6Xx5TAuhEOTkneU96PQVxPWHV1C9h1J 1WQg== X-Forwarded-Encrypted: i=1; AKwUvBw3PNGvnKRGKUoXxCf2clT4zEIwLNrA8JiOwXnbJQtdam1gQHkj+au+cYdjIyvjOtfMmuX4fRE9D+DRqxk=@vger.kernel.org X-Gm-Message-State: AFuF++lyM/eIjodH7sBrVdB8/QXY+mLv1Lty9EdhJO00zb2pW5SN5DsQ GLNA+r2dCoioxDt5tGaOml1BJsbV6/6hH5xPpb9RQ7i1qB2yvAASYf52E4kQ3GSWzw== X-Gm-Gg: AYBFou0Izu6KX2lLioxeWuUFHnX1BUzGD+VPHIsjKgoKhkIngSDKJZQcxg0m7r1ajvr XiqDG+AQZKzCo21/GiZaWFq5CRkzKHBIhTTeXlfN/YuKDpsXtdcDJGhEtY+yK072XIjgv0RCbzx tIaE4fI34aRP7zbgmyK07VccLq8YS1TtqMyxd/X8gCxo7e+vaACM4SXyTUm//1+5Hdb58+D5DDG INfmtTck2/lL+Wp3cFx/UQl471sIF0fGnXQgheAWxfcZBCfOGL9YKTGsS87K3d7xOzBN7/LK+eP FySHpZ14VG4PWQ+2LZwRUQp/Qnev61hR1KM/+vW39sWqZlODR7bfyeHtXuP7NaK9VH3s3Y66zdY of3UwqZ/kJHNBAfds/hUHJMPpNUxaZgkOhBB0ozZDX2GTV1SSPI93Kn3JoQHiE908xa7X5uRTdV Twp8vafeqBxv20iXct3Br+vIpiuKkSJZuazqw1RhpvH9dpFjabrZllnPYfqxCYC9FnVQcViBipZ jrxfN42w6uRqQ8Xdnr0QYBTgPfho5TVgCo+zDUxsBNY+6tbAh0I0Q0F2skDQR1DSWOS X-Received: by 2002:a17:90b:3b91:b0:398:a486:81ec with SMTP id 98e67ed59e1d1-39e1e380e12mr4028912a91.11.1789545566189; Wed, 16 Sep 2026 00:59:26 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.59.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:59:25 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Manivannan Sadhasivam Subject: [PATCH v9 12/15] power: sequencing: pcie-m2: Add usb and sdio targets for E-key connector Date: Wed, 16 Sep 2026 15:57:38 +0800 Message-ID: <20260916075745.3549953-13-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The M.2 E-key connector allows either PCIe or SDIO for WiFi and USB or UART for BT. Currently the driver only supports PCIe and UART. Add power sequencing targets for SDIO and USB. To avoid adding a complicated dependency tree, rename the existing power sequencing units "pcie" and "uart" to "wifi" and "bt". The existing target names are left untouched. The new "sdio" and "usb" targets just point to the renamed "wifi" and "bt" units. The "unit" names are internal to the power sequencing framework, and should be confined to a single provider. The names are only informational. Dependencies are tracked with pointers to other units. The "target" names are the strings that the consumer uses to acquire a descriptor with. As these remain the same, existing users will continue to work. Reviewed-by: Manivannan Sadhasivam Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v2: - Expand commit message --- drivers/power/sequencing/pwrseq-pcie-m2.c | 41 +++++++++++++++-------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index 350a4c8831f7..499cfd291a39 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -69,46 +69,46 @@ static const struct pwrseq_unit_data *pwrseq_pcie_m2_un= it_deps[] =3D { NULL }; =20 -static int pwrseq_pci_m2_e_uart_enable(struct pwrseq_device *pwrseq) +static int pwrseq_pci_m2_e_bt_enable(struct pwrseq_device *pwrseq) { struct pwrseq_pcie_m2_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); =20 return gpiod_set_value_cansleep(ctx->w_disable2_gpio, 0); } =20 -static int pwrseq_pci_m2_e_uart_disable(struct pwrseq_device *pwrseq) +static int pwrseq_pci_m2_e_bt_disable(struct pwrseq_device *pwrseq) { struct pwrseq_pcie_m2_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); =20 return gpiod_set_value_cansleep(ctx->w_disable2_gpio, 1); } =20 -static const struct pwrseq_unit_data pwrseq_pcie_m2_e_uart_unit_data =3D { - .name =3D "uart-enable", +static const struct pwrseq_unit_data pwrseq_pcie_m2_e_bt_unit_data =3D { + .name =3D "bt-enable", .deps =3D pwrseq_pcie_m2_unit_deps, - .enable =3D pwrseq_pci_m2_e_uart_enable, - .disable =3D pwrseq_pci_m2_e_uart_disable, + .enable =3D pwrseq_pci_m2_e_bt_enable, + .disable =3D pwrseq_pci_m2_e_bt_disable, }; =20 -static int pwrseq_pci_m2_e_pcie_enable(struct pwrseq_device *pwrseq) +static int pwrseq_pci_m2_e_wifi_enable(struct pwrseq_device *pwrseq) { struct pwrseq_pcie_m2_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); =20 return gpiod_set_value_cansleep(ctx->w_disable1_gpio, 0); } =20 -static int pwrseq_pci_m2_e_pcie_disable(struct pwrseq_device *pwrseq) +static int pwrseq_pci_m2_e_wifi_disable(struct pwrseq_device *pwrseq) { struct pwrseq_pcie_m2_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); =20 return gpiod_set_value_cansleep(ctx->w_disable1_gpio, 1); } =20 -static const struct pwrseq_unit_data pwrseq_pcie_m2_e_pcie_unit_data =3D { - .name =3D "pcie-enable", +static const struct pwrseq_unit_data pwrseq_pcie_m2_e_wifi_unit_data =3D { + .name =3D "wifi-enable", .deps =3D pwrseq_pcie_m2_unit_deps, - .enable =3D pwrseq_pci_m2_e_pcie_enable, - .disable =3D pwrseq_pci_m2_e_pcie_disable, + .enable =3D pwrseq_pci_m2_e_wifi_enable, + .disable =3D pwrseq_pci_m2_e_wifi_disable, }; =20 static const struct pwrseq_unit_data pwrseq_pcie_m2_m_pcie_unit_data =3D { @@ -130,13 +130,24 @@ static int pwrseq_pcie_m2_e_pwup_delay(struct pwrseq_= device *pwrseq) =20 static const struct pwrseq_target_data pwrseq_pcie_m2_e_uart_target_data = =3D { .name =3D "uart", - .unit =3D &pwrseq_pcie_m2_e_uart_unit_data, + .unit =3D &pwrseq_pcie_m2_e_bt_unit_data, .post_enable =3D pwrseq_pcie_m2_e_pwup_delay, }; =20 +static const struct pwrseq_target_data pwrseq_pcie_m2_e_usb_target_data = =3D { + .name =3D "usb", + .unit =3D &pwrseq_pcie_m2_e_bt_unit_data, +}; + static const struct pwrseq_target_data pwrseq_pcie_m2_e_pcie_target_data = =3D { .name =3D "pcie", - .unit =3D &pwrseq_pcie_m2_e_pcie_unit_data, + .unit =3D &pwrseq_pcie_m2_e_wifi_unit_data, + .post_enable =3D pwrseq_pcie_m2_e_pwup_delay, +}; + +static const struct pwrseq_target_data pwrseq_pcie_m2_e_sdio_target_data = =3D { + .name =3D "sdio", + .unit =3D &pwrseq_pcie_m2_e_wifi_unit_data, .post_enable =3D pwrseq_pcie_m2_e_pwup_delay, }; =20 @@ -147,7 +158,9 @@ static const struct pwrseq_target_data pwrseq_pcie_m2_m= _pcie_target_data =3D { =20 static const struct pwrseq_target_data *pwrseq_pcie_m2_e_targets[] =3D { &pwrseq_pcie_m2_e_pcie_target_data, + &pwrseq_pcie_m2_e_sdio_target_data, &pwrseq_pcie_m2_e_uart_target_data, + &pwrseq_pcie_m2_e_usb_target_data, NULL }; =20 --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A929A479877 for ; Wed, 16 Sep 2026 07:59:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545580; cv=none; b=ECSk/Dob7c2y3W2YlX9bHcRglmSmMHbgN1jYLSLKItRlxIrHrrD8BTIxOihSaZodb3xL5higk7+q2OK56VZxs+U86xrK9+/KRxeNdbWqklQxQAJl5l5/4HphucM0POyQkhPXLWxg2+F7naYDQc4s/lUl2sCDai1wYFzKBNaVJ2g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545580; c=relaxed/simple; bh=hSWKx7tzryLVW6Q1z4sc3gQFmOjDfslid4a9Mq6tRHA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eXCAm9uM4oSeuC8/SUZ8AdduAFYpqzbxEkrLiVLUtz49dQ1q4JvDlc9qy+q9Azq4BVbuQ2zf8emJYaeC56W90xrB8GKblmFESkSueZHV1k8tLGQ4nFJYjOr6OEnr6dwPnbTMOrz0sSuNRmywkwJ+d77gds/VUUcSnebEMNsDbg0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=UwwoKxDu; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="UwwoKxDu" Received: by mail-pj2-f13.google.com with SMTP id 98e67ed59e1d1-396ccb652d7so531210a91.0 for ; Wed, 16 Sep 2026 00:59:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545572; x=1790150372; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2zziC+imJfNqpibEo8R3DN11n7Ds3Jxw6/OGyIDHBdk=; b=UwwoKxDuiJwXahH44XE6huPcfQVktMnIS6Pszzy3bQ9mi7/vGy1cDZGZ1AIk3JTJxZ 4kHbG82mwO/rMh5bcRU6YFgfvwTEdUzIvMlRU2iP1Bbk3JktOeNFCVGCVgG5vv9iODXd yq/dULkEC+KhkD/f18hETZzObc9VKYUFY7SEE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545572; x=1790150372; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=2zziC+imJfNqpibEo8R3DN11n7Ds3Jxw6/OGyIDHBdk=; b=folQ3bPEUlS96kozbkpaQOiDTSxHs+ZCPXK0+z3p/AoOWoJ/AFAN3dYTQPS0Rpq/2O yjrZze75+7ovhzOD8Gsq+BpY3BZv5mYG28w2xx2tna8vh0jo9mdfT4WWsMyvfDa3ww5f eBGxvmukdsoeLxa5YB8NYgqmlanC5sEO+UwTCP/kMu5nvVaof70/lsO/ZITySB0X8grg boo0m5LAc92gPW0qVC5qtTAjkrTK8x6hOozrhaY4HhEDNBn/g6FPEewC91Ob+gU4HVpx i5iiFJyJi0jMCa/pdzMX9JrIbuzskmQ58xv/bsDwS5Xdotgq329dA139k/04zB7vB9Ii WtMQ== X-Forwarded-Encrypted: i=1; AKwUvBz+kpGsiJ7y8zfq8XYcJRU1d6hMjw1f6A3aJ4FWQCFYERYJ9JRRyowuAU6yKFUBKeYZk2VwqkHzjCCs2Mo=@vger.kernel.org X-Gm-Message-State: AFuF++lXintv0Pv4huNvPqFgpfDwS/nnzs/L4fSGxnmlzobAE6fiO9L5 Y7u5tCGhgRhmab+JgAWfApa2MuXJo45+NmJW9FMAcCDLFDmj8+hdj0nyquN66drCMQ== X-Gm-Gg: AYBFou0zMza6X+UqourV3kdDmQKCEyCu8Vky0c6I2dbC/sRPIvFjUZ4aOx8alGuEG+u uIc+YiqZm6IXx6jZsoVcc6K7LK4mtt7umdaL5jcwrPapTHNfuFSeivhJRpzaUaq7vplHdRfJURR y2i97RZ6xWpAmicWncRqwjK9YpMSByxdFUCdNKWAHNr6bqQf19YxFmyw+Sf3Spg6EqbToymdrbU cAUBu4XdpBjQqMKhXYaq9qy1ekbIgl/+q/HnoXu/htqU9q7XMoXBr9FYZL4WQ2mnlvvl0/+C/lq sQ5tq5WOcj8rb98UGrIQvWUCtjXMP54uEfskxdHTa5qTOza1fclXRqH+UDXOqshDgHSnqGs1m6A f22nZzvVUIu/JPebtwde8Fc8gpI9qDNmGSiOQLuYfXHdoHIL1oWD/UG+OIauwETww91Zv6kLO9+ WN48KWf4/vnGcvO3M2aJ13WDDypNaFecFGAPI3o8J0nIuVpTzrRTiSzNEoAcE7WZLPHWcHDP8Jf gmDZHzCo+bg5F+92k9jl5u/8iCQs7RcAp/REH9nHycNos70s27DwC/s/Q== X-Received: by 2002:a17:90b:3c07:b0:398:dc16:3c29 with SMTP id 98e67ed59e1d1-39e1e2e2326mr4169180a91.7.1789545571154; Wed, 16 Sep 2026 00:59:31 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.59.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:59:30 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Wei Deng , Manivannan Sadhasivam Subject: [PATCH v9 13/15] power: sequencing: pcie-m2: Split Bluetooth unit based on interface Date: Wed, 16 Sep 2026 15:57:39 +0800 Message-ID: <20260916075745.3549953-14-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some UART / serdev based Bluetooth drivers need to be able to reset the hardware during initialization or recovery. This is not possible with the current power sequencing API if a unit is shared between USB and UART interfaces. For now, split the Bluetooth unit into two, one for each interface. This allows either interface to independently toggle the power, with the last action prevailing, thereby unbreaking the Qualcomm Bluetooth serdev driver. This is also needed for the Realtek Bluetooth serdev driver (hci_h5). Having independent control from either interface unfortunately means that userspace is able to shut down the controller from sysfs using the USB port's "disable" setting without the serdev driver knowing about it. On the USB side, independent control is also desired, as it allows the USB core to power cycle the port/device during faults, and for userspace to initiate reset and recovery using the aforementioned "disable" setting. However when USB is used, a serdev device is not created, and there is no conflicting usage, which allows the power sequencing to work even without the split unit. Suggested-by: Wei Deng Reviewed-by: Manivannan Sadhasivam Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v4: - New patch This patch is _not_ squashed into the previous to provide clear context on the change, and the less than perfect nature of it. I think what we need in this case is some sort of lockout. The serdev consumer would want "exclusive" access, locking out the USB consumer, which can tolerate "shared" access. Something similar would be needed for the WiFi if we ever add support for SDIO for toggling the state of W_DISABLE#1. At least the SDIO and PCIe reset signals are separate. --- drivers/power/sequencing/pwrseq-pcie-m2.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index 499cfd291a39..357aedd2a17f 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_devi= ce *pwrseq) return gpiod_set_value_cansleep(ctx->w_disable2_gpio, 1); } =20 -static const struct pwrseq_unit_data pwrseq_pcie_m2_e_bt_unit_data =3D { - .name =3D "bt-enable", +/* + * XXX There are two Bluetooth units to allow either one to be able to pow= er + * off and thus reset the controller. In practice only one of the interfac= es + * 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 = =3D { + .name =3D "bt-uart-enable", + .deps =3D pwrseq_pcie_m2_unit_deps, + .enable =3D pwrseq_pci_m2_e_bt_enable, + .disable =3D pwrseq_pci_m2_e_bt_disable, +}; + +static const struct pwrseq_unit_data pwrseq_pcie_m2_e_bt_usb_unit_data =3D= { + .name =3D "bt-usb-enable", .deps =3D pwrseq_pcie_m2_unit_deps, .enable =3D pwrseq_pci_m2_e_bt_enable, .disable =3D pwrseq_pci_m2_e_bt_disable, @@ -130,13 +144,13 @@ static int pwrseq_pcie_m2_e_pwup_delay(struct pwrseq_= device *pwrseq) =20 static const struct pwrseq_target_data pwrseq_pcie_m2_e_uart_target_data = =3D { .name =3D "uart", - .unit =3D &pwrseq_pcie_m2_e_bt_unit_data, + .unit =3D &pwrseq_pcie_m2_e_bt_uart_unit_data, .post_enable =3D pwrseq_pcie_m2_e_pwup_delay, }; =20 static const struct pwrseq_target_data pwrseq_pcie_m2_e_usb_target_data = =3D { .name =3D "usb", - .unit =3D &pwrseq_pcie_m2_e_bt_unit_data, + .unit =3D &pwrseq_pcie_m2_e_bt_usb_unit_data, }; =20 static const struct pwrseq_target_data pwrseq_pcie_m2_e_pcie_target_data = =3D { --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2635B446BE8 for ; Wed, 16 Sep 2026 07:59:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545600; cv=none; b=ZMIvzQcSkcZ7v0vZD8RR3N7aXTBONc0PwH1etQuBBhjB/YXDglcZjrSXgDXlnQ3P+t1I/0anG9mdLJSLIyr67zBjz+OA61B5PFOHaaZYoQaV9xI1JyY9KYDullVaAlUVkBhA/ZaYKk5e6QeVLJ3KFJhvydkeW0DtujdE9QtCXMs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545600; c=relaxed/simple; bh=gM8tPRMx33Qx0BJjFPOzM7No2FKd/oVjiOutbBIFOqM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ra27jKhmK1sBD70hnIgE5kgwFjpzEhFGdojSIj+33BQkhgMv9Lyd2+Z2Qu/asosVjSkJi+SWv2ssUCUiPhlnrJg4QzT+6DMkrWmJBaBHKezO6ThV5RW/l8wyhPhTk3JNKzw4VSqzGCY74IWt6zycih9SGOR45dJyvdieeOcDevA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=jdg7GW8C; arc=none smtp.client-ip=209.85.216.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="jdg7GW8C" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-395cf2535acso2053440a91.1 for ; Wed, 16 Sep 2026 00:59:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545576; x=1790150376; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PYR5maRbUEPUYHaCDp1coaVQzS9XJQmry5uta3mhbEE=; b=jdg7GW8C1HHcNqR7aJd+x91iUTOLTL7Happ2lazp2b7ruVjlH7ScUU0ArKUwp0LXFU wRgvKrHC8NVrxJzF1Ag6XfzZN6HnbPO9Wsozn7hnxgChR/hXqispWTs3/0HIo2hCKDeo DJtRtuSixpbhyxM+rEX1IOndzpapMamJGrttA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545576; x=1790150376; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=PYR5maRbUEPUYHaCDp1coaVQzS9XJQmry5uta3mhbEE=; b=hfEdcIH5dfppTdRzAHWWbTp6+H3IoliDngemf/KyeyAQIEGL9oHK3Xt3ZnkCD6If6+ zdIdOBGsWf9363MnDsHzO9ZHJc7GOHJCundctGNXd1X8dkjmgPfHkVcL/EAWf44U2tiw acESAgXY4VNobM8Z1yFLHpZfNpCP/wjtT1neBlydGdJHenymkG0TMGTZ/MNfwitb+6DC e/ZlO1UtPamhR6fI+j2+8CfefZrS2iSeh3nyyn7X06E21IlD2K3ARUAULtSGJim9hV2H 4bj09CwBlNLsK+S0tFr9YFMf1iBmDAnDdOsqm6vo2JUWJINdMxWu0wp7RQG7tIQ5/kzy V2Gg== X-Forwarded-Encrypted: i=1; AKwUvBwX4K3W2HQp/SLxbh2V3KHq6U/teavJy703gW/wPIBD44L6+JluWssoOIZQHuQg5BdAdhuXiDQu0HIb7M0=@vger.kernel.org X-Gm-Message-State: AFuF++kx2eKcmYxRUuDctuF2iOxw0IKk7ZNvGeBfLyuMSVUv4D1eob6I 1Le+Nsg5p362QMQ9qud7K5lz/Po1jTPBY/J/le8Qf3lEhNYRHC8NxLR2fR908GcExg== X-Gm-Gg: AYBFou3mxZQb0LocXUVhYgfuMcoDnRuSGVhVsAJHGRM3W2+ML27qEq7OQ2b2nLAxH4j 9vuIv0fqPRNpQ2sKgHFSMaAwACM/fPZVl7GHO+4mxbl3oCrRL+NFCJJWqfk7PMbT9D3cHurwXy4 jUH3K7uITD5PnLwjt3n1mCTd8K/qIoIAR1yuRmRzVXbUDngVaToLc4AoZrNtUz6ckbny5flf8ym XLLSmqn6cnsIHGU9wI77f3N2e3tkXe959j4iC+v7583pFolFDnyosVxYcm3zK/Rqzkj0PMh3qLP VXHNRd+pbg62F8CjEOoeXuBLT2wAZEjG3T0sSEZMLbrA8L5N5MktVyIrCRBr56b4eQqyk0WTfpp 3ipJ3aN1rcpejALO5svkgKQT+JIRIvUoeLUWIWkzOqPxnsqtvA/Lb+GrCJ2WbA20cI8zht7DwmR jo7sYaRhxEtbTVFoejoslMVnX8AibPwgBhAKhr3EKUbg7kfyan62RDma5rXMVtLtwudt3Gwjy9G kz/jT3/n5S8pGuBd4CBz8TXcHi3C5iToeLiLvIl7gZUdLkum6CwzMlCUWqNl+k4gzHP X-Received: by 2002:a17:90b:3c08:b0:39e:fe9:c5b8 with SMTP id 98e67ed59e1d1-39e0fe9c653mr6440889a91.10.1789545575967; Wed, 16 Sep 2026 00:59:35 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.59.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:59:35 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 14/15] arm64: dts: mediatek: mt8195-cherry: Add M.2 E-key slot Date: Wed, 16 Sep 2026 15:57:40 +0800 Message-ID: <20260916075745.3549953-15-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Mt8195 Cherry design features an M.2 E-key slot for WiFi/BT combo cards. Only PCIe and USB are wired from the SoC to the slot, along with some auxiliary signals. Add the proper representation for it, replacing the PCIe wifi node and vpcie3v3-supply property under the PCIe controller, and the vbus-supply property under the xhci3 node. Reviewed-by: Bartosz Golaszewski Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v2: - Drop default GPIO output state from kill pins pinconfig --- .../boot/dts/mediatek/mt8195-cherry.dtsi | 73 +++++++++++++++++-- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi b/arch/arm64/b= oot/dts/mediatek/mt8195-cherry.dtsi index f06ca2bc165d..5d65f4554c6e 100644 --- a/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi @@ -271,6 +271,47 @@ tboard_thermistor2: thermal-sensor-t2 { 120000 51 125000 44>; }; + + wifi-bt-connector { + compatible =3D "pcie-m2-e-connector"; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&m2_e_key_kill_pins>; + vpcie3v3-supply =3D <&pp3300_wlan>; + w-disable1-gpios =3D <&pio 61 GPIO_ACTIVE_LOW>; + w-disable2-gpios =3D <&pio 59 GPIO_ACTIVE_LOW>; + /* PCIe auxiliary signals wired to controller. */ + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + /* PCIe for WiFi */ + port@0 { + reg =3D <0>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + wifi_ep: endpoint@0 { + reg =3D <0>; + remote-endpoint =3D <&pcie1_ep>; + }; + }; + + /* USB for Bluetooth */ + port@2 { + reg =3D <2>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + bt_ep: endpoint@0 { + reg =3D <0>; + remote-endpoint =3D <&usb3_ep>; + }; + }; + + /* SDIO, UART and I2S not implemented */ + }; + }; }; =20 &adsp { @@ -796,14 +837,14 @@ pcie@0 { reg =3D <0 0 0 0 0>; device_type =3D "pci"; num-lanes =3D <1>; - vpcie3v3-supply =3D <&pp3300_wlan>; #address-cells =3D <3>; #size-cells =3D <2>; ranges; =20 - wifi@0 { - reg =3D <0 0 0 0 0>; - wakeup-source; + port { + pcie1_ep: endpoint { + remote-endpoint =3D <&wifi_ep>; + }; }; }; }; @@ -1090,6 +1131,13 @@ pins-bus { }; }; =20 + m2_e_key_kill_pins: m2-e-key-kill-pins { + pins-kill { + pinmux =3D , + ; + }; + }; + mmc0_pins_default: mmc0-default-pins { pins-cmd-dat { pinmux =3D , @@ -1642,9 +1690,24 @@ &xhci2 { &xhci3 { /* MT7921's USB Bluetooth has issues with USB2 LPM */ usb2-lpm-disable; - vbus-supply =3D <&pp3300_wlan>; vusb33-supply =3D <&mt6359_vusb_ldo_reg>; status =3D "okay"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@1 { + reg =3D <1>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + usb3_ep: endpoint@0 { + reg =3D <0>; + remote-endpoint =3D <&bt_ep>; + }; + }; + }; }; =20 #include --=20 2.55.0.1032.g73a4cd73de-goog From nobody Fri Sep 25 06:00:33 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6DCC343C054 for ; Wed, 16 Sep 2026 07:59:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545599; cv=none; b=aJC4y7f4voDxUHLYfbQIz9bWWXZw4VMVFZGUVQBXorFwrSnpWavuj2DJrmHUSPx0ST6xbfz1TN/ihBdwuatDR4iUhYtwJ8bLyk7vfD3hRu++j7pYysblVQmcQzzhfJlmROaLWCN0ZOyoCXnKjtAkwlKV0dmRvRs2nbZt0R7kccA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789545599; c=relaxed/simple; bh=L2XN2l4t/z1NfZp3cK1qJqnXsY4CQFylN1pjRRHNQ54=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t6m0DhylGsqhkJhyTTCeba+W9+sXEr1EZD5vF79TbFkZlPLtqlmccVpRkMBShNYZQpw8V/dJ94VjDDYIIpu4pBrpKJWXP7Ojk98Hd9eWToqynb8Y4BX5BTWj6xIgWv4qJ/bN+Zvkj/vsF7+j32aBULC4cR9pW1Uf4VwVyN9BVig= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=XBbTnAAz; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="XBbTnAAz" Received: by mail-pj2-f13.google.com with SMTP id 98e67ed59e1d1-396ccd4f99cso678181a91.0 for ; Wed, 16 Sep 2026 00:59:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789545581; x=1790150381; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=R/vaPDanA3j6zkOBVwes5rnF9vpdWJpKDteNb10H5RQ=; b=XBbTnAAzXr3MB2b3V/R+MW39OWgoP6RHN/c+ZuwfEFcrxKPBln5w5BEqxEGFqCq4HF zHMZpHjed+KhCylaH+77qGohjFK2hwpeMgGls5ExnSvFiqtqc3N0c3d2WFpD0KGvi0gv g8qkJr/+G0m3WVGAVgRPP0d3UlonIVdOM+La0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789545581; x=1790150381; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=R/vaPDanA3j6zkOBVwes5rnF9vpdWJpKDteNb10H5RQ=; b=A6ixRF1kRGDz0w77hGOzDBEVmCyhbHQFYIZkWCENQ5e7dtIp+rDc5dXsYknzMiR/Nt T5px53s2PhpCRb3v6bxQXZZXFUuoI39HNFY2wK3vDqogHma1sm7Gl9MblzRSxAGZmQWg W0ye3QgwzVNFCAQVpbsn9d6NCD+4qPDHHF2QlISBBjOEy1QgiDMJA5SX594Jxs9mIABj +ZLcqKXe28yRjn83TNerfW7DWVEwZXeEadB0KCfPSLJsDfCNTnfDEBHkRQfAJ2gbRg4j Plrk45ttfrDjFcHgGcTrVfggtkzw8hE1klR/vveILgXqJXxW8LKngn6uXt0G9cV7zeQU 64sg== X-Forwarded-Encrypted: i=1; AKwUvBz9baOOkwlE+bbuFNILhEJhVAB74uMJctHiZ3I4ebnKcNHc+f+aoI2KL99491QBtQ/s6VMtKQ5x2AriVVc=@vger.kernel.org X-Gm-Message-State: AFuF++m6TbI+SIBAFf0aDuypMUwsF+G3/tqzWZ0t7VLNYBJ+sYjJ6n3S L7jO6md7qaxTyobrOKoGUOlvubop0r0uFRFRqAZWAqZ6Ik3iReEQGEg1r8kuaTgfEw== X-Gm-Gg: AYBFou0QhmbTQZ4fHmVjBGkUtT79RLh0jDoXLZGPy2bvfL9qMdQomqr6ET8awJm8Yfu 4FPnjXXsg76OMAmHzKsU6dpwWyfpymkGKwMEUizvTg7AJnBpMLgGXQ6HLB+InynQwVMqCZaTgjj lHWw/yO1GdpUsev+w1dGzCVpRR9IFvCAYD1xuHq2x5hnyWsmY8hWj7G0cCJmOORmB5FP2Z4K7gU 9BDP8bRIZxpbyUE2AOsDxKjAdbF50cHn8LOVosL5gXGP2FpFnIDH/PuBkdjIzYVFu7Dof4QGdNW lraeUJzedpKC0D1Gg5moVmE/Ep+d6X+J06qsCWZTz2dSUI6LXnI/Q6jJ4hlabaDaypEacRT4jec P1ep99ajnSicQ9f6+wZgVxBwGlKmC7Skym5nPFsqjH2KAowGneM1YTiM3MDduY1lFQ3ptoIuIho 7BvvHH2haN6QVjAsCHIOTeh9UFjUTztzFRqt44CZOvzTT7LPTo5BOPMkgtJUjZtTVqVTrLFYNCS JRlz2fqZiHAJqKhc3k/bMTsCShvVGCf/nuJI/CtUoiIpR5jhz0yXxsYsw8= X-Received: by 2002:a17:90b:33c9:b0:39e:1bff:b383 with SMTP id 98e67ed59e1d1-39e1e51bdf8mr4030101a91.24.1789545580791; Wed, 16 Sep 2026 00:59:40 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1b7acba2sm4348197a91.16.2026.09.16.00.59.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2026 00:59:40 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v9 15/15] arm64: dts: mediatek: mt8188-geralt: Add WiFi/BT as M.2 E-key slot Date: Wed, 16 Sep 2026 15:57:41 +0800 Message-ID: <20260916075745.3549953-16-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916075745.3549953-1-wenst@chromium.org> References: <20260916075745.3549953-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The MT8188 Geralt design features a chip-on-board WiFi/BT solution. This is a M.2 E-key WiFi/BT board layout directly inserted into the mainboard design. The connections to the rest of the board are almost the same as if it were a separate M.2 card. The only addition is the PMU_EN pin on the chip; on M.2 cards this would be tied to the primary power source. Model the chip-on-board WiFi/BT solution as a M.2 E-key slot with PCIe, USB and auxiliary signals. The PMU_EN pin, which enables the internal power controls and regulators, is modeled as a regulator fed by the pp3300_wlan regulator. Since power sequencing is now correctly modeled using the M.2 E-key slot, drop the "regulator-always-on" property one pp3300_wlan regulator. Also drop the comment in xhci2 saying "MT7921's power is controlled by PCIe". Also drop the voltage range on the pp3300_wlan regulator. This "regulator" is just a load switch and does not provide any regulation. Reviewed-by: Bartosz Golaszewski Signed-off-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno --- Changes since v2: - Drop default GPIO output state from kill pins pinconfig --- .../boot/dts/mediatek/mt8188-geralt.dtsi | 92 ++++++++++++++++++- 1 file changed, 88 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/mediatek/mt8188-geralt.dtsi b/arch/arm64/b= oot/dts/mediatek/mt8188-geralt.dtsi index ba3dcfc50956..4704abaebcf8 100644 --- a/arch/arm64/boot/dts/mediatek/mt8188-geralt.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8188-geralt.dtsi @@ -93,13 +93,11 @@ pp3300_z1: regulator-pp3300-z1 { pp3300_wlan: regulator-pp3300-wlan { compatible =3D "regulator-fixed"; regulator-name =3D "pp3300_wlan"; - regulator-always-on; - regulator-min-microvolt =3D <3300000>; - regulator-max-microvolt =3D <3300000>; enable-active-high; gpio =3D <&pio 12 GPIO_ACTIVE_HIGH>; pinctrl-0 =3D <&wlan_en>; pinctrl-names =3D "default"; + /* load switch */ vin-supply =3D <&pp3300_z1>; }; =20 @@ -166,6 +164,17 @@ ppvar_mipi_disp_avee: regulator-ppvar-mipi-disp-avee { vin-supply =3D <&pp5000_z1>; }; =20 + /* PMU_EN pin controls internal regulators and power sequence */ + wlan_pmu: regulator-wlan-pmu { + compatible =3D "regulator-fixed"; + regulator-name =3D "wlan-pmu"; + enable-active-high; + gpio =3D <&pio 145 GPIO_ACTIVE_HIGH>; + pinctrl-0 =3D <&wlan_pmu_en>; + pinctrl-names =3D "default"; + vin-supply =3D <&pp3300_wlan>; + }; + reserved_memory: reserved-memory { #address-cells =3D <2>; #size-cells =3D <2>; @@ -200,6 +209,39 @@ adsp_dma_mem: memory@61000000 { no-map; }; }; + + wifi-bt-connector { + compatible =3D "pcie-m2-e-connector"; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&m2_e_key_kill_pins>; + vpcie1v8-supply =3D <&mt6359_vcn18_ldo_reg>; + vpcie3v3-supply =3D <&wlan_pmu>; + w-disable1-gpios =3D <&pio 13 GPIO_ACTIVE_LOW>; + w-disable2-gpios =3D <&pio 14 GPIO_ACTIVE_LOW>; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + /* PCIe for WiFi */ + port@0 { + reg =3D <0>; + + wifi_ep: endpoint { + remote-endpoint =3D <&pcie_ep>; + }; + }; + + /* USB for Bluetooth */ + port@2 { + reg =3D <2>; + + bt_ep: endpoint { + remote-endpoint =3D <&usb2_ep>; + }; + }; + }; + }; }; =20 &adsp { @@ -664,6 +706,22 @@ &pcie { pinctrl-names =3D "default"; pinctrl-0 =3D <&pcie_pins>; status =3D "okay"; + + pcie@0 { + compatible =3D "pciclass,0604"; + reg =3D <0 0 0 0 0>; + device_type =3D "pci"; + num-lanes =3D <1>; + #address-cells =3D <3>; + #size-cells =3D <2>; + ranges; + + port { + pcie_ep: endpoint { + remote-endpoint =3D <&wifi_ep>; + }; + }; + }; }; =20 &pciephy { @@ -1007,6 +1065,13 @@ pins-bus { }; }; =20 + m2_e_key_kill_pins: m2-e-key-kill-pins { + pins-kill { + pinmux =3D , + ; + }; + }; + mipi_disp_avdd_en: mipi-disp-avdd-en-pins { pins-en-ppvar-mipi-disp { pinmux =3D ; @@ -1179,6 +1244,13 @@ pins-bus { }; }; =20 + wlan_pmu_en: wlan-pmu-en-pins { + pins-wlan-pmu-en { + pinmux =3D ; + output-low; + }; + }; + wlan_en: wlan-en-pins { pins-en-pp3300-wlan { pinmux =3D ; @@ -1422,10 +1494,22 @@ vdosys1_ep_ext: endpoint@1 { }; =20 &xhci2 { - /* no power supply since MT7921's power is controlled by PCIe */ /* MT7921's USB BT has issues with USB2 LPM */ usb2-lpm-disable; status =3D "okay"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@1 { + reg =3D <1>; + + usb2_ep: endpoint { + remote-endpoint =3D <&bt_ep>; + }; + }; + }; }; =20 #include --=20 2.55.0.1032.g73a4cd73de-goog