Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ebdf7d39 authored by Tejun Heo's avatar Tejun Heo Committed by Linus Torvalds
Browse files

pci-quirks: fix MSI disabling on RS400-200 and RS480



Commit c0affe9d doesn't work because
the host controller is being quirked not a PCI bridge.  This patch
reverts the commit, rename quirk_svw_msi() to quirk_disable_all_msi()
and use it instead.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Cc: Matias Alejandro Torres <torresmat@gmail.com>
Cc: Greg K-H <greg@kroah.com>
Cc: Jeff Garzik <jeff@garzik.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c1aee215
Loading
Loading
Loading
Loading
+9 −9
Original line number Original line Diff line number Diff line
@@ -1625,18 +1625,20 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
			quirk_nvidia_ck804_pcie_aer_ext_cap);
			quirk_nvidia_ck804_pcie_aer_ext_cap);


#ifdef CONFIG_PCI_MSI
#ifdef CONFIG_PCI_MSI
/* The Serverworks PCI-X chipset does not support MSI. We cannot easily rely
/* Some chipsets do not support MSI. We cannot easily rely on setting
 * on setting PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
 * PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
 * some other busses controlled by the chipset even if Linux is not aware of it.
 * some other busses controlled by the chipset even if Linux is not
 * Instead of setting the flag on all busses in the machine, simply disable MSI
 * aware of it.  Instead of setting the flag on all busses in the
 * globally.
 * machine, simply disable MSI globally.
 */
 */
static void __init quirk_svw_msi(struct pci_dev *dev)
static void __init quirk_disable_all_msi(struct pci_dev *dev)
{
{
	pci_no_msi();
	pci_no_msi();
	printk(KERN_WARNING "PCI: MSI quirk detected. MSI deactivated.\n");
	printk(KERN_WARNING "PCI: MSI quirk detected. MSI deactivated.\n");
}
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_svw_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi);


/* Disable MSI on chipsets that are known to not support it */
/* Disable MSI on chipsets that are known to not support it */
static void __devinit quirk_disable_msi(struct pci_dev *dev)
static void __devinit quirk_disable_msi(struct pci_dev *dev)
@@ -1649,8 +1651,6 @@ static void __devinit quirk_disable_msi(struct pci_dev *dev)
	}
	}
}
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_msi);


/* Go through the list of Hypertransport capabilities and
/* Go through the list of Hypertransport capabilities and
 * return 1 if a HT MSI capability is found and enabled */
 * return 1 if a HT MSI capability is found and enabled */