diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-02-22 14:05:19 -0500 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-02-22 14:05:19 -0500 | 
| commit | fc6fc7f1b1095b92d4834e69b385b91e412a7ce5 (patch) | |
| tree | 2ad451d5dac4d460830536944cef1de93be36b2a /drivers/pci/intel-iommu.c | |
| parent | ef1f87aa7ba6224bef1b750b3272ba281d8f43ed (diff) | |
| parent | 770824bdc421ff58a64db608294323571c949f4c (diff) | |
Merge branch 'linus' into x86/apic
Conflicts:
	arch/x86/mach-default/setup.c
Semantic conflict resolution:
	arch/x86/kernel/setup.c
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/pci/intel-iommu.c')
| -rw-r--r-- | drivers/pci/intel-iommu.c | 16 | 
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index f4b7c79023ff..f3f686581a90 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c  | |||
| @@ -61,6 +61,8 @@ | |||
| 61 | /* global iommu list, set NULL for ignored DMAR units */ | 61 | /* global iommu list, set NULL for ignored DMAR units */ | 
| 62 | static struct intel_iommu **g_iommus; | 62 | static struct intel_iommu **g_iommus; | 
| 63 | 63 | ||
| 64 | static int rwbf_quirk; | ||
| 65 | |||
| 64 | /* | 66 | /* | 
| 65 | * 0: Present | 67 | * 0: Present | 
| 66 | * 1-11: Reserved | 68 | * 1-11: Reserved | 
| @@ -785,7 +787,7 @@ static void iommu_flush_write_buffer(struct intel_iommu *iommu) | |||
| 785 | u32 val; | 787 | u32 val; | 
| 786 | unsigned long flag; | 788 | unsigned long flag; | 
| 787 | 789 | ||
| 788 | if (!cap_rwbf(iommu->cap)) | 790 | if (!rwbf_quirk && !cap_rwbf(iommu->cap)) | 
| 789 | return; | 791 | return; | 
| 790 | val = iommu->gcmd | DMA_GCMD_WBF; | 792 | val = iommu->gcmd | DMA_GCMD_WBF; | 
| 791 | 793 | ||
| @@ -3137,3 +3139,15 @@ static struct iommu_ops intel_iommu_ops = { | |||
| 3137 | .unmap = intel_iommu_unmap_range, | 3139 | .unmap = intel_iommu_unmap_range, | 
| 3138 | .iova_to_phys = intel_iommu_iova_to_phys, | 3140 | .iova_to_phys = intel_iommu_iova_to_phys, | 
| 3139 | }; | 3141 | }; | 
| 3142 | |||
| 3143 | static void __devinit quirk_iommu_rwbf(struct pci_dev *dev) | ||
| 3144 | { | ||
| 3145 | /* | ||
| 3146 | * Mobile 4 Series Chipset neglects to set RWBF capability, | ||
| 3147 | * but needs it: | ||
| 3148 | */ | ||
| 3149 | printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n"); | ||
| 3150 | rwbf_quirk = 1; | ||
| 3151 | } | ||
| 3152 | |||
| 3153 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf); | ||
