Skip to content

Commit e51d2f7

Browse files
AydenMengMingcongBai
authored andcommitted
PCI: Override PCIe bridge supported speeds for older Loongson 3C6000
series steppings Older steppings of the Loongson 3C6000 series incorrectly report the supported link speeds on their PCIe bridges (device IDs 3c19, 3c29) as only 2.5 GT/s, despite the upstream bus supporting speeds from 2.5 GT/s up to 16 GT/s. As a result, certain PCIe devices would be incorrectly probed as a Gen1- only, even if higher link speeds are supported, harming performance and prevents dynamic link speed functionality from being enabled in drivers such as amdgpu. Manually override the `supported_speeds` field for affected PCIe bridges with those found on the upstream bus to correctly reflect the supported link speeds. Tested-by: Lain "Fearyncess" Yang <[email protected]> Reviewed-by: Mingcong Bai <[email protected]> Signed-off-by: Ayden Meng <[email protected]>
1 parent 146561e commit e51d2f7

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

drivers/pci/quirks.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,6 +1988,30 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quir
19881988

19891989
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_HUAWEI, 0x1610, PCI_CLASS_BRIDGE_PCI, 8, quirk_pcie_mch);
19901990

1991+
/*
1992+
* Older steppings of the Loongson 3C6000 series incorrectly report the
1993+
* supported link speeds on their PCIe bridges (device IDs 3c19, 3c29) as
1994+
* only 2.5 GT/s, despite the upstream bus supporting speeds from 2.5 GT/s
1995+
* up to 16 GT/s.
1996+
*/
1997+
static void quirk_loongson_pci_bridge_supported_speeds(struct pci_dev *pdev)
1998+
{
1999+
switch (pdev->bus->max_bus_speed) {
2000+
case PCIE_SPEED_16_0GT:
2001+
pdev->supported_speeds |= PCI_EXP_LNKCAP2_SLS_16_0GB;
2002+
case PCIE_SPEED_8_0GT:
2003+
pdev->supported_speeds |= PCI_EXP_LNKCAP2_SLS_8_0GB;
2004+
case PCIE_SPEED_5_0GT:
2005+
pdev->supported_speeds |= PCI_EXP_LNKCAP2_SLS_5_0GB;
2006+
case PCIE_SPEED_2_5GT:
2007+
pdev->supported_speeds |= PCI_EXP_LNKCAP2_SLS_2_5GB;
2008+
default:
2009+
break;
2010+
}
2011+
}
2012+
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_LOONGSON, 0x3c19, quirk_loongson_secondary_bridge_supported_speeds);
2013+
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_LOONGSON, 0x3c29, quirk_loongson_secondary_bridge_supported_speeds);
2014+
19912015
/*
19922016
* HiSilicon KunPeng920 and KunPeng930 have devices appear as PCI but are
19932017
* actually on the AMBA bus. These fake PCI devices can support SVA via

0 commit comments

Comments
 (0)