diff options
author | Jeremy Erickson <jerickso@cs.unc.edu> | 2014-04-18 17:06:00 -0400 |
---|---|---|
committer | Jeremy Erickson <jerickso@cs.unc.edu> | 2014-04-18 17:06:00 -0400 |
commit | a215aa7b9ab3759c047201199fba64d3042d7f13 (patch) | |
tree | bca37493d9b2233450e6d3ffced1261d0e4f71fe /drivers/pci/quirks.c | |
parent | d31199a77ef606f1d06894385f1852181ba6136b (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.c | 23 |
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 | |||
2714 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832); | 2714 | DECLARE_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 | */ | ||
2730 | static 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 | } | ||
2737 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x342e, vtd_mask_spec_errors); | ||
2738 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x3c28, vtd_mask_spec_errors); | ||
2739 | #endif | ||
2717 | 2740 | ||
2718 | static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, | 2741 | static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, |
2719 | struct pci_fixup *end) | 2742 | struct pci_fixup *end) |