From: "Keshavamurthy, Anil S" <anil.s.keshavamurthy@intel.com>
To: akpm@linux-foundation.org, linux-kernel@vger.kernel.org
Cc: ak@suse.de, gregkh@suse.de, muli@il.ibm.com,
suresh.b.siddha@intel.com, arjan@linux.intel.com,
ashok.raj@intel.com, davem@davemloft.net, clameter@sgi.com,
Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
Subject: [Intel IOMMU 09/10] Iommu Gfx workaround
Date: Tue, 19 Jun 2007 14:37:10 -0700 [thread overview]
Message-ID: <20070619213809.033447000@askeshav-devel.jf.intel.com> (raw)
In-Reply-To: <20070619213701.219910000@askeshav-devel.jf.intel.com>
[-- Attachment #1: gfx_wrkaround.patch --]
[-- Type: text/plain, Size: 4925 bytes --]
When we fix all the opensource gfx drivers to use the DMA api's,
at that time we can yank this config options out.
Signed-off-by: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
---
Documentation/Intel-IOMMU.txt | 5 +++++
arch/x86_64/Kconfig | 11 +++++++++++
arch/x86_64/kernel/e820.c | 19 +++++++++++++++++++
drivers/pci/intel-iommu.c | 33 +++++++++++++++++++++++++++++++++
drivers/pci/intel-iommu.h | 7 +++++++
5 files changed, 75 insertions(+)
Index: linux-2.6.22-rc4-mm2/Documentation/Intel-IOMMU.txt
===================================================================
--- linux-2.6.22-rc4-mm2.orig/Documentation/Intel-IOMMU.txt 2007-06-18 15:45:08.000000000 -0700
+++ linux-2.6.22-rc4-mm2/Documentation/Intel-IOMMU.txt 2007-06-18 15:45:08.000000000 -0700
@@ -57,6 +57,11 @@
If you encounter issues with graphics devices, you can try adding
option intel_iommu=igfx_off to turn off the integrated graphics engine.
+If it happens to be a PCI device included in the INCLUDE_ALL Engine,
+then try enabling CONFIG_DMAR_GFX_WA to setup a 1-1 map. We hear
+graphics drivers may be in process of using DMA api's in the near
+future and at that time this option can be yanked out.
+
Some exceptions to IOVA
-----------------------
Interrupt ranges are not address translated, (0xfee00000 - 0xfeefffff).
Index: linux-2.6.22-rc4-mm2/arch/x86_64/Kconfig
===================================================================
--- linux-2.6.22-rc4-mm2.orig/arch/x86_64/Kconfig 2007-06-18 15:45:07.000000000 -0700
+++ linux-2.6.22-rc4-mm2/arch/x86_64/Kconfig 2007-06-18 15:45:08.000000000 -0700
@@ -741,6 +741,17 @@
and includes pci device scope covered by these DMA
remapping device.
+config DMAR_GFX_WA
+ bool "Support for Graphics workaround"
+ depends on DMAR
+ default y
+ help
+ Current Graphics drivers tend to use physical address
+ for DMA and avoid using DMA api's. 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.
+
source "drivers/pci/pcie/Kconfig"
source "drivers/pci/Kconfig"
Index: linux-2.6.22-rc4-mm2/arch/x86_64/kernel/e820.c
===================================================================
--- linux-2.6.22-rc4-mm2.orig/arch/x86_64/kernel/e820.c 2007-06-18 15:44:44.000000000 -0700
+++ linux-2.6.22-rc4-mm2/arch/x86_64/kernel/e820.c 2007-06-18 15:45:08.000000000 -0700
@@ -723,3 +723,22 @@
printk(KERN_INFO "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n",
pci_mem_start, gapstart, gapsize);
}
+
+int __init arch_get_ram_range(int slot, u64 *addr, u64 *size)
+{
+ int i;
+
+ if (slot < 0 || slot >= e820.nr_map)
+ return -1;
+ for (i = slot; i < e820.nr_map; i++) {
+ if (e820.map[i].type != E820_RAM)
+ continue;
+ break;
+ }
+ if (i == e820.nr_map || e820.map[i].addr > (max_pfn << PAGE_SHIFT))
+ return -1;
+ *addr = e820.map[i].addr;
+ *size = min_t(u64, e820.map[i].size + e820.map[i].addr,
+ max_pfn << PAGE_SHIFT) - *addr;
+ return i + 1;
+}
Index: linux-2.6.22-rc4-mm2/drivers/pci/intel-iommu.c
===================================================================
--- linux-2.6.22-rc4-mm2.orig/drivers/pci/intel-iommu.c 2007-06-18 15:45:08.000000000 -0700
+++ linux-2.6.22-rc4-mm2/drivers/pci/intel-iommu.c 2007-06-18 15:45:08.000000000 -0700
@@ -1601,6 +1601,36 @@
rmrr->end_address + 1);
}
+#ifdef CONFIG_DMAR_GFX_WA
+extern int arch_get_ram_range(int slot, u64 *addr, u64 *size);
+static void __init iommu_prepare_gfx_mapping(void)
+{
+ struct pci_dev *pdev = NULL;
+ u64 base, size;
+ int slot;
+ int ret;
+
+ for_each_pci_dev(pdev) {
+ if (pdev->sysdata == DUMMY_DEVICE_DOMAIN_INFO ||
+ !IS_GFX_DEVICE(pdev))
+ continue;
+ printk(KERN_INFO "IOMMU: gfx device %s 1-1 mapping\n",
+ pci_name(pdev));
+ slot = arch_get_ram_range(0, &base, &size);
+ while (slot >= 0) {
+ ret = iommu_prepare_identity_map(pdev,
+ base, base + size);
+ if (ret)
+ goto error;
+ slot = arch_get_ram_range(slot, &base, &size);
+ }
+ continue;
+error:
+ printk(KERN_ERR "IOMMU: mapping reserved region failed\n");
+ }
+}
+#endif
+
int __init init_dmars(void)
{
struct dmar_drhd_unit *drhd;
@@ -1664,6 +1694,8 @@
}
}
+ iommu_prepare_gfx_mapping();
+
/*
* for each drhd
* enable fault log
@@ -2175,3 +2207,4 @@
dma_ops = &intel_dma_ops;
return 0;
}
+
Index: linux-2.6.22-rc4-mm2/drivers/pci/intel-iommu.h
===================================================================
--- linux-2.6.22-rc4-mm2.orig/drivers/pci/intel-iommu.h 2007-06-18 15:45:08.000000000 -0700
+++ linux-2.6.22-rc4-mm2/drivers/pci/intel-iommu.h 2007-06-18 15:45:08.000000000 -0700
@@ -315,4 +315,11 @@
struct sys_device sysdev;
};
+#ifndef CONFIG_DMAR_GFX_WA
+static inline void iommu_prepare_gfx_mapping(void)
+{
+ return;
+}
+#endif /* !CONFIG_DMAR_GFX_WA */
+
#endif
--
next prev parent reply other threads:[~2007-06-19 22:20 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-19 21:37 [Intel IOMMU 00/10] Intel IOMMU support, take #2 Keshavamurthy, Anil S
2007-06-19 21:37 ` [Intel IOMMU 01/10] DMAR detection and parsing logic Keshavamurthy, Anil S
2007-07-04 9:18 ` Peter Zijlstra
2007-07-04 10:04 ` Andrew Morton
2007-07-04 10:14 ` Peter Zijlstra
2007-06-19 21:37 ` [Intel IOMMU 02/10] PCI generic helper function Keshavamurthy, Anil S
2007-06-26 5:49 ` Andrew Morton
2007-06-26 14:44 ` Keshavamurthy, Anil S
2007-06-19 21:37 ` [Intel IOMMU 03/10] clflush_cache_range now takes size param Keshavamurthy, Anil S
2007-06-19 21:37 ` [Intel IOMMU 04/10] IOVA allocation and management routines Keshavamurthy, Anil S
2007-06-26 6:07 ` Andrew Morton
2007-06-26 16:16 ` Keshavamurthy, Anil S
2007-06-19 21:37 ` [Intel IOMMU 05/10] Intel IOMMU driver Keshavamurthy, Anil S
2007-06-19 23:32 ` Christoph Lameter
2007-06-19 23:50 ` Keshavamurthy, Anil S
2007-06-19 23:56 ` Christoph Lameter
2007-06-26 6:32 ` Andrew Morton
2007-06-26 16:29 ` Keshavamurthy, Anil S
2007-06-26 6:25 ` Andrew Morton
2007-06-26 16:33 ` Keshavamurthy, Anil S
2007-06-26 6:30 ` Andrew Morton
2007-06-19 21:37 ` [Intel IOMMU 06/10] Avoid memory allocation failures in dma map api calls Keshavamurthy, Anil S
2007-06-19 23:25 ` Christoph Lameter
2007-06-19 23:27 ` Arjan van de Ven
2007-06-19 23:34 ` Christoph Lameter
2007-06-20 0:02 ` Arjan van de Ven
2007-06-20 8:06 ` Peter Zijlstra
2007-06-20 13:03 ` Arjan van de Ven
2007-06-20 17:30 ` Siddha, Suresh B
2007-06-20 18:05 ` Peter Zijlstra
2007-06-20 19:14 ` Arjan van de Ven
2007-06-20 20:08 ` Peter Zijlstra
2007-06-20 23:03 ` Keshavamurthy, Anil S
2007-06-21 6:10 ` Peter Zijlstra
2007-06-21 6:11 ` Arjan van de Ven
2007-06-21 6:29 ` Peter Zijlstra
2007-06-21 6:37 ` Keshavamurthy, Anil S
2007-06-21 7:13 ` Peter Zijlstra
2007-06-21 19:51 ` Keshavamurthy, Anil S
2007-06-21 6:30 ` Keshavamurthy, Anil S
2007-06-26 5:34 ` Andrew Morton
2007-06-19 21:37 ` [Intel IOMMU 07/10] Intel iommu cmdline option - forcedac Keshavamurthy, Anil S
2007-06-19 21:37 ` [Intel IOMMU 08/10] DMAR fault handling support Keshavamurthy, Anil S
2007-06-19 21:37 ` Keshavamurthy, Anil S [this message]
2007-06-19 21:37 ` [Intel IOMMU 10/10] Iommu floppy workaround Keshavamurthy, Anil S
2007-06-26 6:42 ` Andrew Morton
2007-06-26 10:37 ` Andi Kleen
2007-06-26 19:25 ` Keshavamurthy, Anil S
2007-06-26 16:26 ` Keshavamurthy, Anil S
2007-06-26 6:45 ` [Intel IOMMU 00/10] Intel IOMMU support, take #2 Andrew Morton
2007-06-26 7:12 ` Andi Kleen
2007-06-26 11:13 ` Muli Ben-Yehuda
2007-06-26 15:03 ` Arjan van de Ven
2007-06-26 15:11 ` Muli Ben-Yehuda
2007-06-26 15:48 ` Keshavamurthy, Anil S
2007-06-26 16:00 ` Muli Ben-Yehuda
2007-06-26 15:56 ` Andi Kleen
2007-06-26 15:09 ` Muli Ben-Yehuda
2007-06-26 15:36 ` Andi Kleen
2007-06-26 15:15 ` Arjan van de Ven
2007-06-26 15:33 ` Andi Kleen
2007-06-26 16:25 ` Arjan van de Ven
2007-06-26 17:31 ` Andi Kleen
2007-06-26 20:10 ` Jesse Barnes
2007-06-26 22:35 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070619213809.033447000@askeshav-devel.jf.intel.com \
--to=anil.s.keshavamurthy@intel.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=arjan@linux.intel.com \
--cc=ashok.raj@intel.com \
--cc=clameter@sgi.com \
--cc=davem@davemloft.net \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=muli@il.ibm.com \
--cc=suresh.b.siddha@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome