Pali Rohár <pali@xxxxxxxxxx> writes: > Atheros QCA9880 and QCA9890 chips do not behave after a bus reset and also > after retrain link when PCIe bridge is not in GEN1 mode at 2.5 GT/s speed. > The device will throw a Link Down error and config space is not accessible > again. Retrain link can be called only when using GEN1 PCIe bridge or when > PCIe bridge has forced link speed to 2.5 GT/s via PCI_EXP_LNKCTL2 register. > > This issue was reproduced with more Compex WLE900VX cards (QCA9880 based) > on Armada 385 with pci-mvebu.c driver and also on Armada 3720 with > pci-aardvark.c driver. Also this issue was reproduced with some "noname" > card with QCA9890 WiFi chip on Armada 3720. All problematic cards with > these QCA chips have PCI device id 0x003c. > > Tests showed that other WiFi cards based on AR93xx (PCI device id 0x0030) > and AR9287 (PCI device id 0x002e) chips do not have these problems. > > To workaround this issue, this change introduces a new PCI quirk called > PCI_DEV_FLAGS_NO_RETRAIN_LINK_WHEN_NOT_GEN1 for PCI device id 0x003c. > > When this quirk is set then kernel disallows triggering PCI_EXP_LNKCTL_RL > bit in config space of PCIe Bridge in case PCIe Bridge is capable of higher > speed than 2.5 GT/s and higher speed is already allowed. When PCIe Bridge > has accessible LNKCTL2 register then kernel tries to force target link > speed via PCI_EXP_LNKCTL2_TLS* bits to 2.5 GT/s. After this change it is > possible to trigger PCI_EXP_LNKCTL_RL bit without causing issues on > problematic Atheros QCA98xx cards. > > Currently only PCIe ASPM kernel code triggers this PCI_EXP_LNKCTL_RL bit, > so quirk check is added only into pcie/aspm.c file. > > Signed-off-by: Pali Rohár <pali@xxxxxxxxxx> > Reported-by: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> > Tested-by: Marek Behún <kabel@xxxxxxxxxx> > Link: https://lore.kernel.org/linux-pci/87h7l8axqp.fsf@xxxxxxx/ > Cc: stable@xxxxxxxxxxxxxxx # c80851f6ce63a ("PCI: Add > PCI_EXP_LNKCTL2_TLS* macros") Thanks! Tested-by: Toke Høiland-Jørgensen <toke@xxxxxxxxxx>