]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PCI: Use pcie_get_speed_cap() in PCIe failed link retraining
authorMaciej W. Rozycki <macro@orcam.me.uk>
Mon, 8 Dec 2025 19:24:34 +0000 (19:24 +0000)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 6 May 2026 22:21:24 +0000 (17:21 -0500)
Rewrite a check for the maximum link speed in the Link Capabilities
register in terms of pcie_get_speed_cap().  No functional change.

Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Alok Tiwari <alok.a.tiwari@oracle.com>
Link: https://patch.msgid.link/alpine.DEB.2.21.2512080348310.49654@angie.orcam.me.uk
drivers/pci/quirks.c

index dd0025d3914e60070d993e68334b97847ce07cdf..81ee3f69b9188ff50f571103ddabab5103174e58 100644 (file)
@@ -95,8 +95,8 @@ static bool pcie_lbms_seen(struct pci_dev *dev, u16 lnksta)
 int pcie_failed_link_retrain(struct pci_dev *dev)
 {
        u16 lnksta, lnkctl2, oldlnkctl2;
+       enum pci_bus_speed speed_cap;
        int ret = -ENOTTY;
-       u32 lnkcap;
 
        if (!pci_is_pcie(dev) || !pcie_downstream_port(dev) ||
            !pcie_cap_has_lnkctl2(dev) || !dev->link_active_reporting)
@@ -111,12 +111,12 @@ int pcie_failed_link_retrain(struct pci_dev *dev)
                        goto err;
        }
 
+       speed_cap = pcie_get_speed_cap(dev);
        pcie_capability_read_word(dev, PCI_EXP_LNKCTL2, &lnkctl2);
-       pcie_capability_read_dword(dev, PCI_EXP_LNKCAP, &lnkcap);
        if ((lnkctl2 & PCI_EXP_LNKCTL2_TLS) == PCI_EXP_LNKCTL2_TLS_2_5GT &&
-           (lnkcap & PCI_EXP_LNKCAP_SLS) != PCI_EXP_LNKCAP_SLS_2_5GB) {
+           speed_cap > PCIE_SPEED_2_5GT) {
                pci_info(dev, "removing 2.5GT/s downstream link speed restriction\n");
-               ret = pcie_set_target_speed(dev, PCIE_LNKCAP_SLS2SPEED(lnkcap), false);
+               ret = pcie_set_target_speed(dev, speed_cap, false);
                if (ret)
                        goto err;
        }