From nobody Tue Apr 7 14:39:55 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 80754390210; Thu, 12 Mar 2026 16:38:17 +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=1773333502; cv=none; b=krz3HB9LX+gYkfnJEcY1KNH3pP4XNcGupICuna9AtWczUqeel0T867LVyOLhvtKxcylZJTC8xWMjJHOoF29BEM5b5G+lKAo6OWt4hEjCJl4dKqLkufHBMzAX0zXHIUzhKos0N2xYlphod+fjOOb/qkHZuEfRn/6JsythlzBbSGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773333502; c=relaxed/simple; bh=PS08veSgSk3UxGP/F/Lk1A1tp354yiWiPHcmO/0I4H0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=vEn6i0TfYSr5FY7BDugn39DhzTM0opnXn45Ns1aMI5jbVXKHmSzNYjYe10H5bheN/MXCYS9R2UpFwvb9vyrbQMD8qC6FBhldjLLU/tqEQK9mn5f7YvRfhbfvIiTZN33EFQM1I9Imv2EE4mjFPPbuguFklGzn3A4uUJL3u1635J8= 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=mM77P+dW; 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="mM77P+dW" 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=EK AEulDdVQpUy/F6OpD/8nSvWxKf3rH6D2RiMfRuwp8=; b=mM77P+dWkFeNfJifuo hzNgYr2j2etbXn1mIt//3mZFUnDmV36czGxa8guAgfzEEaaikrU6M8afVB+7xLFC 1A9UQQsbZQ0W99NKeGbqhaEKMWyOGe3sXMu36sf79x6LFxIe0nKFrGULWQl714LD 2G2U43Eun5aGjegfT6ztU/KeI= Received: from zhb.. (unknown []) by gzga-smtp-mtada-g1-4 (Coremail) with SMTP id _____wDnN1Gl67JpMC_OAQ--.12929S3; Fri, 13 Mar 2026 00:36:59 +0800 (CST) From: Hans Zhang <18255117159@163.com> To: lpieralisi@kernel.org, jingoohan1@gmail.com, mani@kernel.org, kwilczynski@kernel.org, bhelgaas@google.com, helgaas@kernel.org, florian.fainelli@broadcom.com, jim2101024@gmail.com Cc: robh@kernel.org, ilpo.jarvinen@linux.intel.com, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-renesas-soc@vger.kernel.org, claudiu.beznea.uj@bp.renesas.com, linux-mediatek@lists.infradead.org, linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang <18255117159@163.com> Subject: [PATCH v8 1/5] PCI: Add pcie_get_link_speed() helper for safe array access Date: Fri, 13 Mar 2026 00:36:48 +0800 Message-Id: <20260312163652.113228-2-18255117159@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260312163652.113228-1-18255117159@163.com> References: <20260312163652.113228-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: _____wDnN1Gl67JpMC_OAQ--.12929S3 X-Coremail-Antispam: 1Uf129KBjvJXoW7WF48JF4fKFW8CrWUXr13urg_yoW8ZF43pF W2kw1Fyr10qF13Xr43Zas8uFy5X3ZxGFW7GrW7GasF9F43Jr9xXr4a9rWfJr9akrsrZry2 qF13tF4UC3W2yF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zEF1vxUUUUU= X-CM-SenderInfo: rpryjkyvrrlimvzbiqqrwthudrp/xtbCxAssz2my66tRVQAA3z Content-Type: text/plain; charset="utf-8" The pcie_link_speed[] array is indexed by PCIe generation numbers (1 =3D 2.5 GT/s, 2 =3D 5 GT/s, ...). Several drivers use it directly, which can lead to out-of-bounds accesses if an invalid generation number is used. Introduce a helper function pcie_get_link_speed() that returns the corresponding enum pci_bus_speed value for a given generation number, or PCI_SPEED_UNKNOWN if the generation is out of range. This will allow us to safely handle invalid values after the range check is removed from of_pci_get_max_link_speed(). Signed-off-by: Hans Zhang <18255117159@163.com> --- drivers/pci/pci.h | 2 ++ drivers/pci/probe.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 13d998fbacce..6bf3e59f42e5 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -108,6 +108,8 @@ struct pcie_tlp_log; PCI_EXP_DEVCTL_FERE | PCI_EXP_DEVCTL_URRE) =20 extern const unsigned char pcie_link_speed[]; +unsigned char pcie_get_link_speed(int speed); + extern bool pci_early_dump; =20 extern struct mutex pci_rescan_remove_lock; diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index bccc7a4bdd79..a95afbcee421 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -783,6 +783,22 @@ const unsigned char pcie_link_speed[] =3D { }; EXPORT_SYMBOL_GPL(pcie_link_speed); =20 +/** + * pcie_link_speed_value - Get speed value from PCIe generation number + * @speed: PCIe speed (1-based: 1 =3D 2.5GT, 2 =3D 5GT, ...) + * + * Returns the speed value (e.g., PCIE_SPEED_2_5GT) if @speed is valid, + * otherwise returns PCI_SPEED_UNKNOWN. + */ +unsigned char pcie_get_link_speed(int speed) +{ + if (speed <=3D 0 || speed >=3D ARRAY_SIZE(pcie_link_speed)) + return PCI_SPEED_UNKNOWN; + + return pcie_link_speed[speed]; +} +EXPORT_SYMBOL_GPL(pcie_get_link_speed); + const char *pci_speed_string(enum pci_bus_speed speed) { /* Indexed by the pci_bus_speed enum */ --=20 2.34.1 From nobody Tue Apr 7 14:39:55 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 BA8E0390992; Thu, 12 Mar 2026 16:38:21 +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=1773333506; cv=none; b=Tzz514OpIkBLWPzoku1Tr/7hXFXoycXZb5jrdZLFWaCYeMy4oG8hyDyTl5CFeqoMcaqLCpbrpN/AyiPAnPenwDGsXsU8tK16IWyN9L/vCdBWHj+UMFfPYX/1c3v12pNQrPvf9wIm/cHKvX9ZwPPepVR211TQiTTKgyHK+67WSwM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773333506; c=relaxed/simple; bh=dLBK1diKeZlLb7ErFd5QdJ4eb2kSmDhcrwFtiWopAxI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZJCa7UANFqehf3hYgd3GFilJVqqYlQx4s+HmaixoAy9Y/BAs3Irym/CU4p89e0F/OCjDRWB74zBNUSCYHRyi/g9r1xmtw10+gnZusGni+i32hfp4yb2lHBc8CZHS8cGsmb/Ajh/TYSKPdUQJQf8/OqmWLnfbh2Fjc1fHq4IzSiw= 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=RVkOivPL; 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="RVkOivPL" 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=q8 94oIJ4bYAg9Q9C0Fcsffh5Nho2Uop1nYGfUhyAYk8=; b=RVkOivPLF2oYlKsoob P2TTQrKWrtIY8AWtdHGOKmIFQ9Xd0hP8UhOn5PkVq8pnTqmphsbqFr1qkT8ZfZMs VVEphoq6HJmOjkFghoK3j6OdMWYMUW/BrUFmpQHehmcnMAJVe8RGRni5cWucza6A aOV65GcMc6Eqrw4cVf0Ju4toc= Received: from zhb.. (unknown []) by gzga-smtp-mtada-g1-4 (Coremail) with SMTP id _____wDnN1Gl67JpMC_OAQ--.12929S4; Fri, 13 Mar 2026 00:37:00 +0800 (CST) From: Hans Zhang <18255117159@163.com> To: lpieralisi@kernel.org, jingoohan1@gmail.com, mani@kernel.org, kwilczynski@kernel.org, bhelgaas@google.com, helgaas@kernel.org, florian.fainelli@broadcom.com, jim2101024@gmail.com Cc: robh@kernel.org, ilpo.jarvinen@linux.intel.com, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-renesas-soc@vger.kernel.org, claudiu.beznea.uj@bp.renesas.com, linux-mediatek@lists.infradead.org, linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang <18255117159@163.com> Subject: [PATCH v8 2/5] PCI: dwc: Use pcie_get_link_speed() helper for safe array access Date: Fri, 13 Mar 2026 00:36:49 +0800 Message-Id: <20260312163652.113228-3-18255117159@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260312163652.113228-1-18255117159@163.com> References: <20260312163652.113228-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: _____wDnN1Gl67JpMC_OAQ--.12929S4 X-Coremail-Antispam: 1Uf129KBjvJXoW3GFWrCFW8Jr4UXw15GF4UArb_yoW7KFWUpa y5tFyIyF18JF45ur4Yyas5ZFyYqFnxCrW7GwsxW3Z29FyakrZxKa48tFWftryfKFsFvry3 Kr17t3W7CF13tr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zidHUfUUUUU= X-CM-SenderInfo: rpryjkyvrrlimvzbiqqrwthudrp/xtbC6wwt0Gmy66zEeQAA37 Content-Type: text/plain; charset="utf-8" Replace direct indexing of pcie_link_speed[] with the new helper pcie_get_link_speed() in all DesignWare core and glue drivers. This ensures that out-of-range generation numbers do not cause out-of-bounds accesses when the helper returns PCI_SPEED_UNKNOWN, and prepares for the removal of the range check in of_pci_get_max_link_speed(). The actual validation of the "max-link-speed" DT property (e.g., fallback to a safe default and warning) is added in subsequent patches for each driver that reads the property. Signed-off-by: Hans Zhang <18255117159@163.com> --- drivers/pci/controller/dwc/pcie-designware-host.c | 2 +- drivers/pci/controller/dwc/pcie-designware.c | 2 +- drivers/pci/controller/dwc/pcie-qcom-common.c | 2 +- drivers/pci/controller/dwc/pcie-qcom-ep.c | 4 ++-- drivers/pci/controller/dwc/pcie-qcom.c | 6 +++--- drivers/pci/controller/dwc/pcie-tegra194.c | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pc= i/controller/dwc/pcie-designware-host.c index 6ae6189e9b8a..0e05c5280344 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c @@ -1081,7 +1081,7 @@ static void dw_pcie_program_presets(struct dw_pcie_rp= *pp, enum pci_bus_speed sp static void dw_pcie_config_presets(struct dw_pcie_rp *pp) { struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); - enum pci_bus_speed speed =3D pcie_link_speed[pci->max_link_speed]; + enum pci_bus_speed speed =3D pcie_get_link_speed(pci->max_link_speed); =20 /* * Lane equalization settings need to be applied for all data rates the diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/con= troller/dwc/pcie-designware.c index 5741c09dde7f..06792ba92aa7 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -861,7 +861,7 @@ 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_link_speed[pci->max_link_speed]) { + switch (pcie_get_link_speed(pci->max_link_speed)) { case PCIE_SPEED_2_5GT: link_speed =3D PCI_EXP_LNKCTL2_TLS_2_5GT; break; diff --git a/drivers/pci/controller/dwc/pcie-qcom-common.c b/drivers/pci/co= ntroller/dwc/pcie-qcom-common.c index 01c5387e53bf..5aa73c628737 100644 --- a/drivers/pci/controller/dwc/pcie-qcom-common.c +++ b/drivers/pci/controller/dwc/pcie-qcom-common.c @@ -22,7 +22,7 @@ void qcom_pcie_common_set_equalization(struct dw_pcie *pc= i) * applied. */ =20 - for (speed =3D PCIE_SPEED_8_0GT; speed <=3D pcie_link_speed[pci->max_link= _speed]; speed++) { + for (speed =3D PCIE_SPEED_8_0GT; speed <=3D pcie_get_link_speed(pci->max_= link_speed); speed++) { if (speed > PCIE_SPEED_32_0GT) { dev_warn(dev, "Skipped equalization settings for unsupported data rate\= n"); break; diff --git a/drivers/pci/controller/dwc/pcie-qcom-ep.c b/drivers/pci/contro= ller/dwc/pcie-qcom-ep.c index 18460f01b2c6..4b7184d4a6fa 100644 --- a/drivers/pci/controller/dwc/pcie-qcom-ep.c +++ b/drivers/pci/controller/dwc/pcie-qcom-ep.c @@ -152,7 +152,7 @@ #define WAKE_DELAY_US 2000 /* 2 ms */ =20 #define QCOM_PCIE_LINK_SPEED_TO_BW(speed) \ - Mbps_to_icc(PCIE_SPEED2MBS_ENC(pcie_link_speed[speed])) + Mbps_to_icc(PCIE_SPEED2MBS_ENC(pcie_get_link_speed(speed))) =20 #define to_pcie_ep(x) dev_get_drvdata((x)->dev) =20 @@ -531,7 +531,7 @@ static int qcom_pcie_perst_deassert(struct dw_pcie *pci) =20 qcom_pcie_common_set_equalization(pci); =20 - if (pcie_link_speed[pci->max_link_speed] =3D=3D PCIE_SPEED_16_0GT) + if (pcie_get_link_speed(pci->max_link_speed) =3D=3D PCIE_SPEED_16_0GT) qcom_pcie_common_set_16gt_lane_margining(pci); =20 /* diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controlle= r/dwc/pcie-qcom.c index 67a16af69ddc..5c7c105bb745 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -170,7 +170,7 @@ #define QCOM_PCIE_CRC8_POLYNOMIAL (BIT(2) | BIT(1) | BIT(0)) =20 #define QCOM_PCIE_LINK_SPEED_TO_BW(speed) \ - Mbps_to_icc(PCIE_SPEED2MBS_ENC(pcie_link_speed[speed])) + Mbps_to_icc(PCIE_SPEED2MBS_ENC(pcie_get_link_speed(speed))) =20 struct qcom_pcie_resources_1_0_0 { struct clk_bulk_data *clks; @@ -320,7 +320,7 @@ static int qcom_pcie_start_link(struct dw_pcie *pci) =20 qcom_pcie_common_set_equalization(pci); =20 - if (pcie_link_speed[pci->max_link_speed] =3D=3D PCIE_SPEED_16_0GT) + if (pcie_get_link_speed(pci->max_link_speed) =3D=3D PCIE_SPEED_16_0GT) qcom_pcie_common_set_16gt_lane_margining(pci); =20 /* Enable Link Training state machine */ @@ -1579,7 +1579,7 @@ static void qcom_pcie_icc_opp_update(struct qcom_pcie= *pcie) ret); } } else if (pcie->use_pm_opp) { - freq_mbps =3D pcie_dev_speed_mbps(pcie_link_speed[speed]); + freq_mbps =3D pcie_dev_speed_mbps(pcie_get_link_speed(speed)); if (freq_mbps < 0) return; =20 diff --git a/drivers/pci/controller/dwc/pcie-tegra194.c b/drivers/pci/contr= oller/dwc/pcie-tegra194.c index 06571d806ab3..47f08adfbd79 100644 --- a/drivers/pci/controller/dwc/pcie-tegra194.c +++ b/drivers/pci/controller/dwc/pcie-tegra194.c @@ -310,7 +310,7 @@ static void tegra_pcie_icc_set(struct tegra_pcie_dw *pc= ie) speed =3D FIELD_GET(PCI_EXP_LNKSTA_CLS, val); width =3D FIELD_GET(PCI_EXP_LNKSTA_NLW, val); =20 - val =3D width * PCIE_SPEED2MBS_ENC(pcie_link_speed[speed]); + val =3D width * PCIE_SPEED2MBS_ENC(pcie_get_link_speed(speed)); =20 if (icc_set_bw(pcie->icc_path, Mbps_to_icc(val), 0)) dev_err(pcie->dev, "can't set bw[%u]\n", val); --=20 2.34.1 From nobody Tue Apr 7 14:39:55 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 8A631391828; Thu, 12 Mar 2026 16:38:22 +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=1773333505; cv=none; b=nSDckZYW3pXKGPyKSkGX0IKvTLML/puNXaBuehkkUmHHXVecY1JajFsjnRIEOXEkCxvGM2/oVut1yCBeFl/WeBii6kAl94wHeJWEE0V9tiYEp6t7/dwlWyCOzWcCjQR3z5neKGFcLAWjANTNwTd0xFsvKigDm2mG6PQagojpEGQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773333505; c=relaxed/simple; bh=LaDMrP+pcd/JXJQNPKeJRt91RMSc2WISQEFS4Meu+2s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NTMqTgqyymKZxY+GeIfMu7z7ZusqzioYB/x/NB5CPcZn+W/nBYrsOX/NxJ2zVFV/QnwgmZJfL914qg4S4Xih0upu18KqqwdtqFLdZKjSo72CawLoRbXFOhsAbCiogkQoG3C29z+1NYwp7/givmJ4K2D7tkmVHZZvP+PpBXuYVXQ= 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=X2NtGY0w; 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="X2NtGY0w" 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=jq SuO3F12+BG9vDtSc8L1vzzspX/dhmwJJslZsHS+5w=; b=X2NtGY0w8SBaIDWXj5 Il37UHQvb343cKnDnms4MUpmABVPpI9rNone/r00hKvAMwWSH449oZcM9PLYLNel 49+SQmv2PRoO2drBhMBpbnm10yvwzTJ9xAxa+DnrjZLU3nJ7BJehmDf1FWJIgOvF L74Z2m3KlLuP6+Y6PtqCHbIz4= Received: from zhb.. (unknown []) by gzga-smtp-mtada-g1-4 (Coremail) with SMTP id _____wDnN1Gl67JpMC_OAQ--.12929S5; Fri, 13 Mar 2026 00:37:01 +0800 (CST) From: Hans Zhang <18255117159@163.com> To: lpieralisi@kernel.org, jingoohan1@gmail.com, mani@kernel.org, kwilczynski@kernel.org, bhelgaas@google.com, helgaas@kernel.org, florian.fainelli@broadcom.com, jim2101024@gmail.com Cc: robh@kernel.org, ilpo.jarvinen@linux.intel.com, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-renesas-soc@vger.kernel.org, claudiu.beznea.uj@bp.renesas.com, linux-mediatek@lists.infradead.org, linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang <18255117159@163.com> Subject: [PATCH v8 3/5] PCI: j721e: Validate max-link-speed from DT Date: Fri, 13 Mar 2026 00:36:50 +0800 Message-Id: <20260312163652.113228-4-18255117159@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260312163652.113228-1-18255117159@163.com> References: <20260312163652.113228-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: _____wDnN1Gl67JpMC_OAQ--.12929S5 X-Coremail-Antispam: 1Uf129KBjvdXoW7JF4rZw1ftr4xWFyxGF1DGFg_yoWDXFXE9F 1UXFWrAr4Uuryakr1YyryayF95A34Uuw18Wa4rtF4fAFyxWay5ZrnxAFWUWa97u3W7JF17 JFyDKFn5J3ZFkjkaLaAFLSUrUUUUjb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUvcSsGvfC2KfnxnUUI43ZEXa7xRMjjg7UUUUU== X-CM-SenderInfo: rpryjkyvrrlimvzbiqqrwthudrp/xtbCxA0t0Gmy661RhQAA39 Content-Type: text/plain; charset="utf-8" Use the new pcie_get_link_speed() helper to validate the value read from the "max-link-speed" DT property. If the value is missing or invalid, fall back to Gen2 (speed =3D 2). This prepares for the removal of the range check in of_pci_get_max_link_speed(). Signed-off-by: Hans Zhang <18255117159@163.com> --- drivers/pci/controller/cadence/pci-j721e.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/contr= oller/cadence/pci-j721e.c index 6f2501479c70..bfdfe98d5aba 100644 --- a/drivers/pci/controller/cadence/pci-j721e.c +++ b/drivers/pci/controller/cadence/pci-j721e.c @@ -202,7 +202,8 @@ static int j721e_pcie_set_link_speed(struct j721e_pcie = *pcie, int ret; =20 link_speed =3D of_pci_get_max_link_speed(np); - if (link_speed < 2) + if ((link_speed < 2) || + (pcie_get_link_speed(link_speed) =3D=3D PCI_SPEED_UNKNOWN)) link_speed =3D 2; =20 val =3D link_speed - 1; --=20 2.34.1 From nobody Tue Apr 7 14:39:55 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 B38E9390225; Thu, 12 Mar 2026 16:38:17 +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=1773333502; cv=none; b=ovYQV5HKSG3JwtPiQPPDTUzLdC1a4Ddsl7qi0ZI63D9JuvA4js4H2ossYwTLbAYlNMqoZ6DSEgtx60tNLtn7757WY83rvFR2lBVXaSiE2lTQ9pqoZ2A61VYgouIoxehl9ZXx3GEigOOItQA4RiICMGXvE+P16gmQ64jU6lBZbJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773333502; c=relaxed/simple; bh=Dcw+sstqEEl+GfJmTNCmY4ECojIpOSogXcJzVcb1fR8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kIdAhhX+9sz+cQ056phRaSLbIsmmkpb/oWF0rAwpC10Fhfm+02TqjmREDE9wbSqS4emPEt/MLDMojdJeCBg1PVJ9mM8d/4pcAJbwKUxfu6BzMT/wTPxv473frZBqw/h0rgcyFrjynqHPsb+ZSHLv6MjpyUSuCVWAidwhVvwQSoE= 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=eQpOfdy+; 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="eQpOfdy+" 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=Ok paxYlsToPKG5PCwsUr7hGf9f4Il4PfIr73LI8TjoI=; b=eQpOfdy+f+3rEs3ayp FFmg+oe9VhQ3UaTIEtJHMFqD2J11J7uJDGqT3O8mqbS5EMx1SV9iS8pw1NSyp9sV VbyBj0KSBU/yDfCijZroSmu8kGdORGgLCYOpkIga+NuvRuln8eeWRq1+67iHhVpn 1fiqSRB8KcMquhbnxU9p2D25Q= Received: from zhb.. (unknown []) by gzga-smtp-mtada-g1-4 (Coremail) with SMTP id _____wDnN1Gl67JpMC_OAQ--.12929S6; Fri, 13 Mar 2026 00:37:02 +0800 (CST) From: Hans Zhang <18255117159@163.com> To: lpieralisi@kernel.org, jingoohan1@gmail.com, mani@kernel.org, kwilczynski@kernel.org, bhelgaas@google.com, helgaas@kernel.org, florian.fainelli@broadcom.com, jim2101024@gmail.com Cc: robh@kernel.org, ilpo.jarvinen@linux.intel.com, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-renesas-soc@vger.kernel.org, claudiu.beznea.uj@bp.renesas.com, linux-mediatek@lists.infradead.org, linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang <18255117159@163.com> Subject: [PATCH v8 4/5] PCI: controller: Validate max-link-speed Date: Fri, 13 Mar 2026 00:36:51 +0800 Message-Id: <20260312163652.113228-5-18255117159@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260312163652.113228-1-18255117159@163.com> References: <20260312163652.113228-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: _____wDnN1Gl67JpMC_OAQ--.12929S6 X-Coremail-Antispam: 1Uf129KBjvJXoWxur1rGryftF1rKryUGFyDKFg_yoW5Zr18pa 9rA3WIyF1UJF45ur4Dt3Z8WF1Yq3ZxZrWDJ3s3W3W7uFnxGFZ8GFyj9FyftF97KFs7ur17 X3W7tF47GanFyF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0piqg43UUUUU= X-CM-SenderInfo: rpryjkyvrrlimvzbiqqrwthudrp/xtbCxA4t0Gmy665RnQAA3l Content-Type: text/plain; charset="utf-8" Add validation for the "max-link-speed" DT property in three more drivers, using the pcie_get_link_speed() helper. - brcmstb: If the value is missing or invalid, fall back to no limitation (pcie->gen =3D 0). Fix the previous incorrect logic. - mediatek-gen3: If the value is missing or invalid, use the maximum speed supported by the controller. - rzg3s-host: If the value is missing or invalid, fall back to Gen2. This ensures that all users of of_pci_get_max_link_speed() are ready for the removal of the central range check. Signed-off-by: Hans Zhang <18255117159@163.com> Reviewed-by: Florian Fainelli --- drivers/pci/controller/pcie-brcmstb.c | 5 +++-- drivers/pci/controller/pcie-mediatek-gen3.c | 2 +- drivers/pci/controller/pcie-rzg3s-host.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/pci/controller/pcie-brcmstb.c b/drivers/pci/controller= /pcie-brcmstb.c index 062f55690012..714bcab97b60 100644 --- a/drivers/pci/controller/pcie-brcmstb.c +++ b/drivers/pci/controller/pcie-brcmstb.c @@ -1442,7 +1442,7 @@ static int brcm_pcie_start_link(struct brcm_pcie *pci= e) cls =3D FIELD_GET(PCI_EXP_LNKSTA_CLS, lnksta); nlw =3D FIELD_GET(PCI_EXP_LNKSTA_NLW, lnksta); dev_info(dev, "link up, %s x%u %s\n", - pci_speed_string(pcie_link_speed[cls]), nlw, + pci_speed_string(pcie_get_link_speed(cls)), nlw, ssc_good ? "(SSC)" : "(!SSC)"); =20 return 0; @@ -2072,7 +2072,8 @@ static int brcm_pcie_probe(struct platform_device *pd= ev) return PTR_ERR(pcie->clk); =20 ret =3D of_pci_get_max_link_speed(np); - pcie->gen =3D (ret < 0) ? 0 : ret; + if (pcie_get_link_speed(ret) =3D=3D PCI_SPEED_UNKNOWN) + pcie->gen =3D 0; =20 pcie->ssc =3D of_property_read_bool(np, "brcm,enable-ssc"); =20 diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/cont= roller/pcie-mediatek-gen3.c index 75ddb8bee168..3b903ef7d3cf 100644 --- a/drivers/pci/controller/pcie-mediatek-gen3.c +++ b/drivers/pci/controller/pcie-mediatek-gen3.c @@ -1150,7 +1150,7 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie) return err; =20 err =3D of_pci_get_max_link_speed(pcie->dev->of_node); - if (err) { + if (pcie_get_link_speed(err) !=3D PCI_SPEED_UNKNOWN) { /* Get the maximum speed supported by the controller */ max_speed =3D mtk_pcie_get_controller_max_link_speed(pcie); =20 diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/control= ler/pcie-rzg3s-host.c index 2809112e6317..00a11f986117 100644 --- a/drivers/pci/controller/pcie-rzg3s-host.c +++ b/drivers/pci/controller/pcie-rzg3s-host.c @@ -966,7 +966,7 @@ static int rzg3s_pcie_set_max_link_speed(struct rzg3s_p= cie_host *host) ls =3D readw_relaxed(host->pcie + pcie_cap + PCI_EXP_LNKSTA); cs2 =3D readl_relaxed(host->axi + RZG3S_PCI_PCSTAT2); =20 - switch (pcie_link_speed[host->max_link_speed]) { + switch (pcie_get_link_speed(host->max_link_speed)) { case PCIE_SPEED_5_0GT: max_supported_link_speeds =3D GENMASK(PCI_EXP_LNKSTA_CLS_5_0GB - 1, 0); link_speed =3D PCI_EXP_LNKCTL2_TLS_5_0GT; --=20 2.34.1 From nobody Tue Apr 7 14:39:55 2026 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.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 C577339022C; Thu, 12 Mar 2026 16:38:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773333503; cv=none; b=U2xz8GqX9D+LjkXFWnuGh0fZmKKLq/kNW2vn4EFJCJtNFtS0FuOvqpiRf0u1WsNDfjqp95IOUJSZEaNy2BkMpF8769mckyOH+MTD/6DnSfipxFyQQNxHhZhd3yiKbmM2GScTIlQXnZFzGdco29k1EF9Ou1h7Sox0UTokDsBWRUA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773333503; c=relaxed/simple; bh=LtkwWx8TXzq6h4OVaKOfQQ3Q7iXxe5rKsjtz4sjr4ww=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=iBuGkxzQa1ch6h8cV+IpeAesGSxM2230Qyucl3kuX/xzaz689LFROlK9XmzpXhg4Vpte7+fMfbQzYikzguUi0K3eMigWzd4vnIZ7NhDDg92yz6RD/uB7MtaA7SC4ted9KoI7++P3RTuOwFnTtLWBdkaaes2i1/LmkAfBkgOBUgk= 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=S+iaI+j9; arc=none smtp.client-ip=117.135.210.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="S+iaI+j9" 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=No z8BKpLkezZAolANRl1sFT+p7wODBoKnA2WzCpg5Ks=; b=S+iaI+j9W4rhVrnlJI SJ1/XJU0bpNQhkAu32wUNbBDfiYaK70uNZDsrlLFNWgDVBOd+N7qS8qeHY8qlm9L NeEKIIli08ntF6HJ6AudqbgQnL9G9qEXNIYlpOZO5L+Qw1ezY2PAhtVqytJGgXhy NylsYBkRvhamFNaKaKTKHKIxc= Received: from zhb.. (unknown []) by gzga-smtp-mtada-g1-4 (Coremail) with SMTP id _____wDnN1Gl67JpMC_OAQ--.12929S7; Fri, 13 Mar 2026 00:37:03 +0800 (CST) From: Hans Zhang <18255117159@163.com> To: lpieralisi@kernel.org, jingoohan1@gmail.com, mani@kernel.org, kwilczynski@kernel.org, bhelgaas@google.com, helgaas@kernel.org, florian.fainelli@broadcom.com, jim2101024@gmail.com Cc: robh@kernel.org, ilpo.jarvinen@linux.intel.com, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-renesas-soc@vger.kernel.org, claudiu.beznea.uj@bp.renesas.com, linux-mediatek@lists.infradead.org, linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Hans Zhang <18255117159@163.com> Subject: [PATCH v8 5/5] PCI: of: Remove max-link-speed generation validation Date: Fri, 13 Mar 2026 00:36:52 +0800 Message-Id: <20260312163652.113228-6-18255117159@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260312163652.113228-1-18255117159@163.com> References: <20260312163652.113228-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: _____wDnN1Gl67JpMC_OAQ--.12929S7 X-Coremail-Antispam: 1Uf129KBjvJXoW7tr43tw43CryDXw1DJF1DZFb_yoW8Zw4kpa y7CryY9r1rJr45Xr4UXFs5Za4agFn5WrW8tryrC3sruwnxXrZIqry2qF4aqF9a9FZ7ZF17 Za1aga1UCayqyaDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0pidMabUUUUU= X-CM-SenderInfo: rpryjkyvrrlimvzbiqqrwthudrp/xtbCww8t0Gmy669rLwAA3q Content-Type: text/plain; charset="utf-8" The of_pci_get_max_link_speed() function currently validates the "max-link-speed" DT property to be in the range 1..4 (Gen1..Gen4). This imposes a maintenance burden because each new PCIe generation would require updating this validation. Remove the range check so the function returns the raw property value (or a negative error code if the property is missing or malformed). Callers must now validate the returned speed against the range they support. A subsequent patch adds such validation to the DWC driver, which is the primary user of this function. Removing the validation from this common function allows future PCIe generations to be supported without modifying drivers/pci/of.c. Signed-off-by: Hans Zhang <18255117159@163.com> --- drivers/pci/of.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index 9f8eb5df279e..fbb779a94202 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -875,8 +875,9 @@ EXPORT_SYMBOL_GPL(of_pci_supply_present); * of_pci_get_max_link_speed - Find the maximum link speed of the given de= vice node. * @node: Device tree node with the maximum link speed information. * - * This function will try to find the limitation of link speed by finding - * a property called "max-link-speed" of the given device node. + * This function will try to read the "max-link-speed" property of the giv= en + * device tree node. It does NOT validate the value of the property (e.g., + * range checks for PCIe generations). * * Return: * * > 0 - On success, a maximum link speed. @@ -889,10 +890,11 @@ EXPORT_SYMBOL_GPL(of_pci_supply_present); int of_pci_get_max_link_speed(struct device_node *node) { u32 max_link_speed; + int ret; =20 - if (of_property_read_u32(node, "max-link-speed", &max_link_speed) || - max_link_speed =3D=3D 0 || max_link_speed > 4) - return -EINVAL; + ret =3D of_property_read_u32(node, "max-link-speed", &max_link_speed); + if (ret) + return ret; =20 return max_link_speed; } --=20 2.34.1