Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62edf5dc authored by David Woodhouse's avatar David Woodhouse
Browse files

intel-iommu: Restore DMAR_BROKEN_GFX_WA option for broken graphics drivers



We need to give people a little more time to fix the broken drivers.
Re-introduce this, but tied in properly with the 'iommu=pt' support this
time. Change the config option name and make it default to 'no' too.

Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 40e4aa34
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1913,6 +1913,18 @@ config DMAR_DEFAULT_ON
	  recommended you say N here while the DMAR code remains
	  experimental.

config DMAR_BROKEN_GFX_WA
	def_bool n
	prompt "Workaround broken graphics drivers (going away soon)"
	depends on DMAR
	---help---
	  Current Graphics drivers tend to use physical address
	  for DMA and avoid using DMA APIs. Setting this config
	  option permits the IOMMU driver to set a unity map for
	  all the OS-visible memory. Hence the driver can continue
	  to use physical addresses for DMA, at least until this
	  option is removed in the 2.6.32 kernel.

config DMAR_FLOPPY_WA
	def_bool y
	depends on DMAR
+19 −10
Original line number Diff line number Diff line
@@ -2127,6 +2127,7 @@ static int iommu_prepare_static_identity_mapping(void)
		return -EFAULT;

	for_each_pci_dev(pdev) {
		if (iommu_identity_mapping == 1 || IS_GFX_DEVICE(pdev)) {
			printk(KERN_INFO "IOMMU: identity mapping for device %s\n",
			       pci_name(pdev));

@@ -2138,6 +2139,7 @@ static int iommu_prepare_static_identity_mapping(void)
			if (ret)
				return ret;
		}
	}

	return 0;
}
@@ -2291,6 +2293,10 @@ int __init init_dmars(void)
	 * identity mapping if iommu_identity_mapping is set.
	 */
	if (!iommu_pass_through) {
#ifdef CONFIG_DMAR_BROKEN_GFX_WA
		if (!iommu_identity_mapping)
			iommu_identity_mapping = 2;
#endif
		if (iommu_identity_mapping)
			iommu_prepare_static_identity_mapping();
		/*
@@ -2444,6 +2450,9 @@ static int iommu_dummy(struct pci_dev *pdev)

static int iommu_should_identity_map(struct pci_dev *pdev)
{
	if (iommu_identity_mapping == 2)
		return IS_GFX_DEVICE(pdev);
	else
		return pdev->dma_mask > DMA_BIT_MASK(32);
}