aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/quirks.c
diff options
context:
space:
mode:
authorJeremy Erickson <jerickso@cs.unc.edu>2014-04-18 17:06:00 -0400
committerJeremy Erickson <jerickso@cs.unc.edu>2014-04-18 17:06:00 -0400
commita215aa7b9ab3759c047201199fba64d3042d7f13 (patch)
treebca37493d9b2233450e6d3ffced1261d0e4f71fe /drivers/pci/quirks.c
parentd31199a77ef606f1d06894385f1852181ba6136b (diff)
Update 2.6.36 to 2.6.36.4wip-dissipation2-jerickso
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r--drivers/pci/quirks.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 857ae01734a6..32ae8188c094 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2714,6 +2714,29 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_m
2714DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832); 2714DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
2715#endif /*CONFIG_MMC_RICOH_MMC*/ 2715#endif /*CONFIG_MMC_RICOH_MMC*/
2716 2716
2717#if defined(CONFIG_DMAR) || defined(CONFIG_INTR_REMAP)
2718#define VTUNCERRMSK_REG 0x1ac
2719#define VTD_MSK_SPEC_ERRORS (1 << 31)
2720/*
2721 * This is a quirk for masking vt-d spec defined errors to platform error
2722 * handling logic. With out this, platforms using Intel 7500, 5500 chipsets
2723 * (and the derivative chipsets like X58 etc) seem to generate NMI/SMI (based
2724 * on the RAS config settings of the platform) when a vt-d fault happens.
2725 * The resulting SMI caused the system to hang.
2726 *
2727 * VT-d spec related errors are already handled by the VT-d OS code, so no
2728 * need to report the same error through other channels.
2729 */
2730static void vtd_mask_spec_errors(struct pci_dev *dev)
2731{
2732 u32 word;
2733
2734 pci_read_config_dword(dev, VTUNCERRMSK_REG, &word);
2735 pci_write_config_dword(dev, VTUNCERRMSK_REG, word | VTD_MSK_SPEC_ERRORS);
2736}
2737DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x342e, vtd_mask_spec_errors);
2738DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x3c28, vtd_mask_spec_errors);
2739#endif
2717 2740
2718static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, 2741static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
2719 struct pci_fixup *end) 2742 struct pci_fixup *end)