mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
PCI: Bail out early for 2.5GT/s devices in PCIe failed link retraining
There's no point in retraining a failed 2.5GT/s device at 2.5GT/s, so just don't and return early. While such devices might be unlikely to implement Link Active reporting, we need to retrieve the maximum link speed and use it in a conditional later on anyway, so the early check comes for free. 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.2512080356070.49654@angie.orcam.me.uk
This commit is contained in:
parent
30a3613080
commit
64d63fd281
|
|
@ -102,6 +102,10 @@ int pcie_failed_link_retrain(struct pci_dev *dev)
|
|||
!pcie_cap_has_lnkctl2(dev) || !dev->link_active_reporting)
|
||||
return ret;
|
||||
|
||||
speed_cap = pcie_get_speed_cap(dev);
|
||||
if (speed_cap <= PCIE_SPEED_2_5GT)
|
||||
return ret;
|
||||
|
||||
pcie_capability_read_word(dev, PCI_EXP_LNKSTA, &lnksta);
|
||||
pcie_capability_read_word(dev, PCI_EXP_LNKCTL2, &oldlnkctl2);
|
||||
if (!(lnksta & PCI_EXP_LNKSTA_DLLLA) && pcie_lbms_seen(dev, lnksta)) {
|
||||
|
|
@ -111,10 +115,8 @@ 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);
|
||||
if ((lnkctl2 & PCI_EXP_LNKCTL2_TLS) == PCI_EXP_LNKCTL2_TLS_2_5GT &&
|
||||
speed_cap > PCIE_SPEED_2_5GT) {
|
||||
if ((lnkctl2 & PCI_EXP_LNKCTL2_TLS) == PCI_EXP_LNKCTL2_TLS_2_5GT) {
|
||||
pci_info(dev, "removing 2.5GT/s downstream link speed restriction\n");
|
||||
ret = pcie_set_target_speed(dev, speed_cap, false);
|
||||
if (ret)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user