From nobody Sun Jun 14 20:22:00 2026 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B96E288505; Mon, 6 Apr 2026 10:47:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775472469; cv=none; b=UtDiTDUKvXUnP9qHYQmgO+qd2OCQQ7NssPzqnOhAQ8JeosqpDfNqgsXkvkCbh7wmGGfKEkWUkq15oPS6fM8knf/dqjbJeCjrgaAvb0rLa9GUeFDautA5s58GmEc+K6f0G2NeIOWPaKM8LnQINi29rOsButphkKu13OduFCmEUTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775472469; c=relaxed/simple; bh=K5Y0PBLnucTW3zOL2uWce0Kl7pET+ylirq39OJDQdRY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PU0EtFcUsoqw/HVPD/syGhjIlUjAoCWFNCgtej2mBEqPpGCntUQDLKNXKiLmgiLmqq11e3zft21CuFb1YTErBiXe27WNYLbtKtQ7Z+Ay6GmEDd+Z7KdnJYUndLDfj45F/Hw1VySPR03ucMS4ozE3j9Oby+r1OhJP2dAGMbGENQA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=joq/718F; arc=none smtp.client-ip=220.197.31.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="joq/718F" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=2A iyRk9VuZ8SjJ/3y8MHKB5yKl6vNqKwzPKLEYzjPaw=; b=joq/718FEvRJzjRIjH wYBmvGwRIzVgdk9bh3UFTHXTFtianlsUit7ovRriYXX8CLPsFObGJYImsGkBXK4L 4RB/S4pPBziWoIdkgcmkdrVwULbIAxQ3nxWHIliLSyLfM4725Xprp7+3KgULJE5X kb+PziVzR41+2lhFdKGhCkhg4= Received: from Precision-7960.. (unknown []) by gzsmtp3 (Coremail) with SMTP id PigvCgDXX3Qwj9NpKHYUAA--.1246S3; Mon, 06 Apr 2026 18:47:18 +0800 (CST) From: Hans Zhang <18255117159@163.com> To: bhelgaas@google.com, lpieralisi@kernel.org, kw@linux.com, kwilczynski@kernel.org, mani@kernel.org, ilpo.jarvinen@linux.intel.com, jingoohan1@gmail.com Cc: robh@kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang <18255117159@163.com> Subject: [PATCH v5 1/3] PCI: Add public pcie_valid_speed() for shared validation Date: Mon, 6 Apr 2026 18:47:06 +0800 Message-Id: <20260406104708.1218648-2-18255117159@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260406104708.1218648-1-18255117159@163.com> References: <20260406104708.1218648-1-18255117159@163.com> 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 X-CM-TRANSID: PigvCgDXX3Qwj9NpKHYUAA--.1246S3 X-Coremail-Antispam: 1Uf129KBjvJXoW7urW5CF43uw45Xw15KF43trb_yoW8WrWxpa yDAFyYyF18Aa15XF4Dta18ZFy5uFZayrW0krW3u39xZF13A3s3Ja45tay8tryaqrWIvF1U Ja1YyF18Ca1jyF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0pRxnYrUUUUU= X-CM-SenderInfo: rpryjkyvrrlimvzbiqqrwthudrp/xtbC7BZA42nTjzb6zgAA3u Content-Type: text/plain; charset="utf-8" Extract the PCIe speed validation logic from bwctrl.c's static pcie_valid_speed() into a public static inline function in pci.h. This allows consistent speed range checks (2.5GT/s to 64.0GT/s) across multiple drivers and functions, avoiding duplicate code and ensuring validation consistency as per PCIe specifications. Signed-off-by: Hans Zhang <18255117159@163.com> --- drivers/pci/pci.h | 5 +++++ drivers/pci/pcie/bwctrl.c | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 4a14f88e543a..f0a082bfd6f1 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -606,6 +606,11 @@ void pci_bus_put(struct pci_bus *bus); (speed) =3D=3D PCIE_SPEED_2_5GT ? 2500*8/10 : \ 0) =20 +static inline bool pcie_valid_speed(enum pci_bus_speed speed) +{ + return (speed >=3D PCIE_SPEED_2_5GT) && (speed <=3D PCIE_SPEED_64_0GT); +} + static inline int pcie_dev_speed_mbps(enum pci_bus_speed speed) { switch (speed) { diff --git a/drivers/pci/pcie/bwctrl.c b/drivers/pci/pcie/bwctrl.c index c4c8d260bf96..ea82e326f164 100644 --- a/drivers/pci/pcie/bwctrl.c +++ b/drivers/pci/pcie/bwctrl.c @@ -48,11 +48,6 @@ struct pcie_bwctrl_data { /* Prevent port removal during Link Speed changes. */ static DECLARE_RWSEM(pcie_bwctrl_setspeed_rwsem); =20 -static bool pcie_valid_speed(enum pci_bus_speed speed) -{ - return (speed >=3D PCIE_SPEED_2_5GT) && (speed <=3D PCIE_SPEED_64_0GT); -} - static u16 pci_bus_speed2lnkctl2(enum pci_bus_speed speed) { static const u8 speed_conv[] =3D { --=20 2.34.1 From nobody Sun Jun 14 20:22:00 2026 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0959F42048; Mon, 6 Apr 2026 10:47:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775472481; cv=none; b=GM1EtW7v6ArlYdXRZHfeuv0cXWmb0pO9z6XfZvPCjhHQnrgk43C0lJE0hlKWtUZSZ59vfF4wiwdUnYTOcKbJ4uOQ+iYOxN4shJdJd6Rnv4Vltn21Ghb+rQvbeudnZWt9oSTHG3+3hryNU8b6/Xq24yrdh7LNoGM2R4o45dpz1ic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775472481; c=relaxed/simple; bh=CZU1bAFSf9JlR9KB4yeMbb8I48frV5NXpXIIz97ppHU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=S61qSoJHRyv5qFxIgqV2QSH+EcDSkB+DC5kbsiXNG0PcSqdnOBm7uEMU4ycnh+buWyKZAfQods6D5hMCIamqwvM4e7RvLHXy1q/VhdmR1begNbYhp7iY3XnRPLw8VihodNmMWRinObPBk/xDKKIWskGMj6MegRwp+AxiJtD00nI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=blLQMJQd; arc=none smtp.client-ip=117.135.210.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="blLQMJQd" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=6m MCrDR47EQMAbgME22s7g/ZL+FO83j+pRNlGGThkDM=; b=blLQMJQdBJzGMyIPNN X76MsQyuw1rlx+rsK7tEbxgtt38lWDapLabgxOGcJ9sNngN6LoR9eTn9l/TM7rfT K8de32Km8jFWsFgpPzBi75xdcu28S4b2rUlAmC311P/rGnn1BBSY9ViV2qDs1QfR Gqew97PHmn8nZNFW/71bne2B8= Received: from Precision-7960.. (unknown []) by gzsmtp3 (Coremail) with SMTP id PigvCgDXX3Qwj9NpKHYUAA--.1246S4; Mon, 06 Apr 2026 18:47:18 +0800 (CST) From: Hans Zhang <18255117159@163.com> To: bhelgaas@google.com, lpieralisi@kernel.org, kw@linux.com, kwilczynski@kernel.org, mani@kernel.org, ilpo.jarvinen@linux.intel.com, jingoohan1@gmail.com Cc: robh@kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang <18255117159@163.com> Subject: [PATCH v5 2/3] PCI: Move pci_bus_speed2lnkctl2() to public header Date: Mon, 6 Apr 2026 18:47:07 +0800 Message-Id: <20260406104708.1218648-3-18255117159@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260406104708.1218648-1-18255117159@163.com> References: <20260406104708.1218648-1-18255117159@163.com> 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 X-CM-TRANSID: PigvCgDXX3Qwj9NpKHYUAA--.1246S4 X-Coremail-Antispam: 1Uf129KBjvJXoW7Ww4UCw4ktF48ury7Kw1kAFb_yoW5JFy7pa 9xCFy5AF18A3W3AFZ0g3WkXa45XFn3GFWUCr43W393XFy3A395Ga4ayFWFvryaqrW0kryr J3WUJF48C3WUKF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0piZNVPUUUUU= X-CM-SenderInfo: rpryjkyvrrlimvzbiqqrwthudrp/xtbCxBdA42nTjzfV5AAA3D Content-Type: text/plain; charset="utf-8" Move the static array-based pci_bus_speed2lnkctl2() function from bwctrl.c to pci.h as a public inline function. This provides efficient O(1) speed-to-LNKCTL2 value conversion using static array lookup, maintaining optimal performance while enabling code reuse by other PCIe drivers. Signed-off-by: Hans Zhang <18255117159@163.com> --- drivers/pci/pci.h | 17 +++++++++++++++++ drivers/pci/pcie/bwctrl.c | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index f0a082bfd6f1..db91878a86ac 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -611,6 +611,23 @@ static inline bool pcie_valid_speed(enum pci_bus_speed= speed) return (speed >=3D PCIE_SPEED_2_5GT) && (speed <=3D PCIE_SPEED_64_0GT); } =20 +static inline u16 pci_bus_speed2lnkctl2(enum pci_bus_speed speed) +{ + static const u8 speed_conv[] =3D { + [PCIE_SPEED_2_5GT] =3D PCI_EXP_LNKCTL2_TLS_2_5GT, + [PCIE_SPEED_5_0GT] =3D PCI_EXP_LNKCTL2_TLS_5_0GT, + [PCIE_SPEED_8_0GT] =3D PCI_EXP_LNKCTL2_TLS_8_0GT, + [PCIE_SPEED_16_0GT] =3D PCI_EXP_LNKCTL2_TLS_16_0GT, + [PCIE_SPEED_32_0GT] =3D PCI_EXP_LNKCTL2_TLS_32_0GT, + [PCIE_SPEED_64_0GT] =3D PCI_EXP_LNKCTL2_TLS_64_0GT, + }; + + if (WARN_ON_ONCE(!pcie_valid_speed(speed))) + return 0; + + return speed_conv[speed]; +} + static inline int pcie_dev_speed_mbps(enum pci_bus_speed speed) { switch (speed) { diff --git a/drivers/pci/pcie/bwctrl.c b/drivers/pci/pcie/bwctrl.c index ea82e326f164..d48021bfd844 100644 --- a/drivers/pci/pcie/bwctrl.c +++ b/drivers/pci/pcie/bwctrl.c @@ -48,23 +48,6 @@ struct pcie_bwctrl_data { /* Prevent port removal during Link Speed changes. */ static DECLARE_RWSEM(pcie_bwctrl_setspeed_rwsem); =20 -static u16 pci_bus_speed2lnkctl2(enum pci_bus_speed speed) -{ - static const u8 speed_conv[] =3D { - [PCIE_SPEED_2_5GT] =3D PCI_EXP_LNKCTL2_TLS_2_5GT, - [PCIE_SPEED_5_0GT] =3D PCI_EXP_LNKCTL2_TLS_5_0GT, - [PCIE_SPEED_8_0GT] =3D PCI_EXP_LNKCTL2_TLS_8_0GT, - [PCIE_SPEED_16_0GT] =3D PCI_EXP_LNKCTL2_TLS_16_0GT, - [PCIE_SPEED_32_0GT] =3D PCI_EXP_LNKCTL2_TLS_32_0GT, - [PCIE_SPEED_64_0GT] =3D PCI_EXP_LNKCTL2_TLS_64_0GT, - }; - - if (WARN_ON_ONCE(!pcie_valid_speed(speed))) - return 0; - - return speed_conv[speed]; -} - static inline u16 pcie_supported_speeds2target_speed(u8 supported_speeds) { return __fls(supported_speeds); --=20 2.34.1 From nobody Sun Jun 14 20:22:00 2026 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A13442048; Mon, 6 Apr 2026 10:47:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775472470; cv=none; b=c0ryuj5qrjVbHVr1L1PjGWa1ZIoDYNPX9fPnJRaY5NEpDHcQyBwZUOuD/NzOHHe4c/dg7FuXmr0/mKWXZaEg6fQM+EDgYjs3YYcG9P0zV8G6ndXxugAorfF3zTJa9RBgD1L7N6JdbgWz5QRG7rumFLdpQ9xhSVEXIorl9aXMghY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775472470; c=relaxed/simple; bh=S2AriIuBuvp30fejzWifk5ycdL1eaTUQo96fmsrDPw8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=FxNJCW7YbMFTmETfNc6jG9/8MewF7UXjr/NHG1yHnJg9ZPy5ht+NygJny9nN+BZZ1Kx7ONXU7E8rTdBBD0EuU6GbGNRN1DIubqAMgJX5HaMPG25SvcbCOeOeaKXmarvuFP1JFcva6+BV00NcWZa1ILYjVg79y0uIxmCZMYSc6D8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=egnCr7Xa; arc=none smtp.client-ip=220.197.31.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="egnCr7Xa" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=Rz 1RVpHgELYtDURXbx4h0IiL7ZYeCIBnAb166C8nHmg=; b=egnCr7XaJdH34zQFQL Z7iiOUww5aGG6WeyAOAxKKQl/4WV33/f6GEvYlar5skg/yfbJgcOXPeatYhTgRnn c9/9RpqL7TAoa/ZL9SoDq0goKctUYcDlNkuFJ8vyk57Go7vtCfgQf1pPDZIKobuc lwDy3l1nHVV1H1lt1M53bWHRA= Received: from Precision-7960.. (unknown []) by gzsmtp3 (Coremail) with SMTP id PigvCgDXX3Qwj9NpKHYUAA--.1246S5; Mon, 06 Apr 2026 18:47:19 +0800 (CST) From: Hans Zhang <18255117159@163.com> To: bhelgaas@google.com, lpieralisi@kernel.org, kw@linux.com, kwilczynski@kernel.org, mani@kernel.org, ilpo.jarvinen@linux.intel.com, jingoohan1@gmail.com Cc: robh@kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang <18255117159@163.com> Subject: [PATCH v5 3/3] PCI: dwc: Use common speed conversion function Date: Mon, 6 Apr 2026 18:47:08 +0800 Message-Id: <20260406104708.1218648-4-18255117159@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260406104708.1218648-1-18255117159@163.com> References: <20260406104708.1218648-1-18255117159@163.com> 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 X-CM-TRANSID: PigvCgDXX3Qwj9NpKHYUAA--.1246S5 X-Coremail-Antispam: 1Uf129KBjvJXoW7uFWDZFy3tr4UWF4DXw1kKrg_yoW8Ary5pa y3AF4IyF48Ar43ZFs09as7ZFyUXFnxCrWDCFZ8W3ZaqFyayasxWF10y34Sq34akrZ2yr1a 9w13JrWUG3W7tF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zRYXdbUUUUU= X-CM-SenderInfo: rpryjkyvrrlimvzbiqqrwthudrp/xtbC7BdA42nTjzf69gAA3W Content-Type: text/plain; charset="utf-8" Replace the private switch-based speed conversion in dw_pcie_link_set_max_speed() with the public pci_bus_speed2lnkctl2() function. This eliminates duplicate conversion logic and ensures consistency with other PCIe drivers, while handling invalid speeds by falling back to hardware capabilities. Signed-off-by: Hans Zhang <18255117159@163.com> Acked-by: Manivannan Sadhasivam --- drivers/pci/controller/dwc/pcie-designware.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/con= troller/dwc/pcie-designware.c index 06792ba92aa7..f2dd5da69c76 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -861,24 +861,11 @@ static void dw_pcie_link_set_max_speed(struct dw_pcie= *pci) ctrl2 =3D dw_pcie_readl_dbi(pci, offset + PCI_EXP_LNKCTL2); ctrl2 &=3D ~PCI_EXP_LNKCTL2_TLS; =20 - switch (pcie_get_link_speed(pci->max_link_speed)) { - case PCIE_SPEED_2_5GT: - link_speed =3D PCI_EXP_LNKCTL2_TLS_2_5GT; - break; - case PCIE_SPEED_5_0GT: - link_speed =3D PCI_EXP_LNKCTL2_TLS_5_0GT; - break; - case PCIE_SPEED_8_0GT: - link_speed =3D PCI_EXP_LNKCTL2_TLS_8_0GT; - break; - case PCIE_SPEED_16_0GT: - link_speed =3D PCI_EXP_LNKCTL2_TLS_16_0GT; - break; - default: + link_speed =3D pci_bus_speed2lnkctl2(link_speed); + if (link_speed =3D=3D 0) { /* Use hardware capability */ link_speed =3D FIELD_GET(PCI_EXP_LNKCAP_SLS, cap); ctrl2 &=3D ~PCI_EXP_LNKCTL2_HASD; - break; } =20 dw_pcie_writel_dbi(pci, offset + PCI_EXP_LNKCTL2, ctrl2 | link_speed); --=20 2.34.1