diff options
Diffstat (limited to 'drivers/iommu/intel-iommu.c')
| -rw-r--r-- | drivers/iommu/intel-iommu.c | 27 | 
1 files changed, 19 insertions, 8 deletions
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index c2c07a4a7f2..43d5c8b8e7a 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -46,6 +46,8 @@  #include <asm/cacheflush.h>  #include <asm/iommu.h> +#include "irq_remapping.h" +  #define ROOT_SIZE		VTD_PAGE_SIZE  #define CONTEXT_SIZE		VTD_PAGE_SIZE @@ -4234,7 +4236,22 @@ static struct iommu_ops intel_iommu_ops = {  	.pgsize_bitmap	= INTEL_IOMMU_PGSIZES,  }; -static void __devinit quirk_iommu_rwbf(struct pci_dev *dev) +static void quirk_iommu_g4x_gfx(struct pci_dev *dev) +{ +	/* G4x/GM45 integrated gfx dmar support is totally busted. */ +	printk(KERN_INFO "DMAR: Disabling IOMMU for graphics on this chipset\n"); +	dmar_map_gfx = 0; +} + +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_g4x_gfx); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_g4x_gfx); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e10, quirk_iommu_g4x_gfx); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e20, quirk_iommu_g4x_gfx); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_g4x_gfx); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e40, quirk_iommu_g4x_gfx); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e90, quirk_iommu_g4x_gfx); + +static void quirk_iommu_rwbf(struct pci_dev *dev)  {  	/*  	 * Mobile 4 Series Chipset neglects to set RWBF capability, @@ -4242,12 +4259,6 @@ static void __devinit quirk_iommu_rwbf(struct pci_dev *dev)  	 */  	printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n");  	rwbf_quirk = 1; - -	/* https://bugzilla.redhat.com/show_bug.cgi?id=538163 */ -	if (dev->revision == 0x07) { -		printk(KERN_INFO "DMAR: Disabling IOMMU for graphics on this chipset\n"); -		dmar_map_gfx = 0; -	}  }  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf); @@ -4262,7 +4273,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf);  #define GGC_MEMORY_SIZE_3M_VT	(0xa << 8)  #define GGC_MEMORY_SIZE_4M_VT	(0xb << 8) -static void __devinit quirk_calpella_no_shadow_gtt(struct pci_dev *dev) +static void quirk_calpella_no_shadow_gtt(struct pci_dev *dev)  {  	unsigned short ggc;  |