Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PCI: Add quirk for known incorrect MPSS

Using legacy interrupts and TLPs > 256 bytes on the SFC4000 (all
revisions) may cause interrupt messages to be replayed. In some
systems this results in a non-recoverable MCE. Early boards using the
SFC4000 set the maximum payload size supported (MPSS) to 1024 bytes
and we should override that.

There are probably other devices with similar issues, so give this
quirk a generic name.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>

authored by

Ben Hutchings and committed by
Jesse Barnes
a94d072b 937383a5

+14
+14
drivers/pci/quirks.c
··· 2822 2822 } 2823 2823 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_TI, 0xb800, fixup_ti816x_class); 2824 2824 2825 + /* Some PCIe devices do not work reliably with the claimed maximum 2826 + * payload size supported. 2827 + */ 2828 + static void __devinit fixup_mpss_256(struct pci_dev *dev) 2829 + { 2830 + dev->pcie_mpss = 1; /* 256 bytes */ 2831 + } 2832 + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE, 2833 + PCI_DEVICE_ID_SOLARFLARE_SFC4000A_0, fixup_mpss_256); 2834 + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE, 2835 + PCI_DEVICE_ID_SOLARFLARE_SFC4000A_1, fixup_mpss_256); 2836 + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE, 2837 + PCI_DEVICE_ID_SOLARFLARE_SFC4000B, fixup_mpss_256); 2838 + 2825 2839 static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, 2826 2840 struct pci_fixup *end) 2827 2841 {