diff options
author | David Woodhouse <David.Woodhouse@intel.com> | 2010-06-15 05:57:57 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2010-06-15 05:57:57 -0400 |
commit | 2d9e667efdfb4e986074d98e7d9a424003c7c43b (patch) | |
tree | a3436795620225e16c676882caf6822e219b98b6 /drivers/pci | |
parent | 00dfff77e7184140dc45724c7232e99302f6bf97 (diff) |
intel-iommu: Force-disable IOMMU for iGFX on broken Cantiga revisions.
Certain revisions of this chipset appear to be broken. There is a shadow
GTT which mirrors the real GTT but contains pre-translated physical
addresses, for performance reasons. When a GTT update happens, the
translations are done once and the resulting physical addresses written
back to the shadow GTT.
Except sometimes, the physical address is actually written back to the
_real_ GTT, not the shadow GTT. Thus we start to see faults when that
physical address is fed through translation again.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/intel-iommu.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index bf8fd913d064..c9171be74564 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c | |||
@@ -340,7 +340,7 @@ int dmar_disabled = 0; | |||
340 | int dmar_disabled = 1; | 340 | int dmar_disabled = 1; |
341 | #endif /*CONFIG_DMAR_DEFAULT_ON*/ | 341 | #endif /*CONFIG_DMAR_DEFAULT_ON*/ |
342 | 342 | ||
343 | static int __initdata dmar_map_gfx = 1; | 343 | static int dmar_map_gfx = 1; |
344 | static int dmar_forcedac; | 344 | static int dmar_forcedac; |
345 | static int intel_iommu_strict; | 345 | static int intel_iommu_strict; |
346 | 346 | ||
@@ -3721,6 +3721,12 @@ static void __devinit quirk_iommu_rwbf(struct pci_dev *dev) | |||
3721 | */ | 3721 | */ |
3722 | printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n"); | 3722 | printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n"); |
3723 | rwbf_quirk = 1; | 3723 | rwbf_quirk = 1; |
3724 | |||
3725 | /* https://bugzilla.redhat.com/show_bug.cgi?id=538163 */ | ||
3726 | if (dev->revision == 0x07) { | ||
3727 | printk(KERN_INFO "DMAR: Disabling IOMMU for graphics on this chipset\n"); | ||
3728 | dmar_map_gfx = 0; | ||
3729 | } | ||
3724 | } | 3730 | } |
3725 | 3731 | ||
3726 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf); | 3732 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf); |