1# SPDX-License-Identifier: GPL-2.0-only
2# Intel IOMMU support
3config DMAR_TABLE
4	bool
5
6config DMAR_PERF
7	bool
8
9config DMAR_DEBUG
10	bool
11
12config INTEL_IOMMU
13	bool "Support for Intel IOMMU using DMA Remapping Devices"
14	depends on PCI_MSI && ACPI && (X86 || IA64)
15	select DMA_OPS
16	select IOMMU_API
17	select IOMMU_IOVA
18	select NEED_DMA_MAP_STATE
19	select DMAR_TABLE
20	select SWIOTLB
21	select PCI_ATS
22	select PCI_PRI
23	select PCI_PASID
24	help
25	  DMA remapping (DMAR) devices support enables independent address
26	  translations for Direct Memory Access (DMA) from devices.
27	  These DMA remapping devices are reported via ACPI tables
28	  and include PCI device scope covered by these DMA
29	  remapping devices.
30
31if INTEL_IOMMU
32
33config INTEL_IOMMU_DEBUGFS
34	bool "Export Intel IOMMU internals in Debugfs"
35	depends on IOMMU_DEBUGFS
36	select DMAR_PERF
37	select DMAR_DEBUG
38	help
39	  !!!WARNING!!!
40
41	  DO NOT ENABLE THIS OPTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!!!
42
43	  Expose Intel IOMMU internals in Debugfs.
44
45	  This option is -NOT- intended for production environments, and should
46	  only be enabled for debugging Intel IOMMU.
47
48config INTEL_IOMMU_SVM
49	bool "Support for Shared Virtual Memory with Intel IOMMU"
50	depends on X86_64
51	select MMU_NOTIFIER
52	select IOMMU_SVA
53	help
54	  Shared Virtual Memory (SVM) provides a facility for devices
55	  to access DMA resources through process address space by
56	  means of a Process Address Space ID (PASID).
57
58config INTEL_IOMMU_DEFAULT_ON
59	bool "Enable Intel DMA Remapping Devices by default"
60	default y
61	help
62	  Selecting this option will enable a DMAR device at boot time if
63	  one is found. If this option is not selected, DMAR support can
64	  be enabled by passing intel_iommu=on to the kernel.
65
66config INTEL_IOMMU_BROKEN_GFX_WA
67	bool "Workaround broken graphics drivers (going away soon)"
68	depends on BROKEN && X86
69	help
70	  Current Graphics drivers tend to use physical address
71	  for DMA and avoid using DMA APIs. Setting this config
72	  option permits the IOMMU driver to set a unity map for
73	  all the OS-visible memory. Hence the driver can continue
74	  to use physical addresses for DMA, at least until this
75	  option is removed in the 2.6.32 kernel.
76
77config INTEL_IOMMU_FLOPPY_WA
78	def_bool y
79	depends on X86
80	help
81	  Floppy disk drivers are known to bypass DMA API calls
82	  thereby failing to work when IOMMU is enabled. This
83	  workaround will setup a 1:1 mapping for the first
84	  16MiB to make floppy (an ISA device) work.
85
86config INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON
87	bool "Enable Intel IOMMU scalable mode by default"
88	default y
89	help
90	  Selecting this option will enable by default the scalable mode if
91	  hardware presents the capability. The scalable mode is defined in
92	  VT-d 3.0. The scalable mode capability could be checked by reading
93	  /sys/devices/virtual/iommu/dmar*/intel-iommu/ecap. If this option
94	  is not selected, scalable mode support could also be enabled by
95	  passing intel_iommu=sm_on to the kernel. If not sure, please use
96	  the default value.
97
98config INTEL_IOMMU_PERF_EVENTS
99	def_bool y
100	bool "Intel IOMMU performance events"
101	depends on INTEL_IOMMU && PERF_EVENTS
102	help
103	  Selecting this option will enable the performance monitoring
104	  infrastructure in the Intel IOMMU. It collects information about
105	  key events occurring during operation of the remapping hardware,
106	  to aid performance tuning and debug. These are available on modern
107	  processors which support Intel VT-d 4.0 and later.
108
109endif # INTEL_IOMMU
110