Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / iommu / Kconfig
diff --git a/kernel/drivers/iommu/Kconfig b/kernel/drivers/iommu/Kconfig
new file mode 100644 (file)
index 0000000..1ae4e54
--- /dev/null
@@ -0,0 +1,355 @@
+# IOMMU_API always gets selected by whoever wants it.
+config IOMMU_API
+       bool
+
+menuconfig IOMMU_SUPPORT
+       bool "IOMMU Hardware Support"
+       depends on MMU
+       default y
+       ---help---
+         Say Y here if you want to compile device drivers for IO Memory
+         Management Units into the kernel. These devices usually allow to
+         remap DMA requests and/or remap interrupts from other devices on the
+         system.
+
+if IOMMU_SUPPORT
+
+menu "Generic IOMMU Pagetable Support"
+
+# Selected by the actual pagetable implementations
+config IOMMU_IO_PGTABLE
+       bool
+
+config IOMMU_IO_PGTABLE_LPAE
+       bool "ARMv7/v8 Long Descriptor Format"
+       select IOMMU_IO_PGTABLE
+       depends on ARM || ARM64 || COMPILE_TEST
+       help
+         Enable support for the ARM long descriptor pagetable format.
+         This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
+         sizes at both stage-1 and stage-2, as well as address spaces
+         up to 48-bits in size.
+
+config IOMMU_IO_PGTABLE_LPAE_SELFTEST
+       bool "LPAE selftests"
+       depends on IOMMU_IO_PGTABLE_LPAE
+       help
+         Enable self-tests for LPAE page table allocator. This performs
+         a series of page-table consistency checks during boot.
+
+         If unsure, say N here.
+
+endmenu
+
+config IOMMU_IOVA
+       bool
+
+config OF_IOMMU
+       def_bool y
+       depends on OF && IOMMU_API
+
+config FSL_PAMU
+       bool "Freescale IOMMU support"
+       depends on PPC32
+       depends on PPC_E500MC || COMPILE_TEST
+       select IOMMU_API
+       select GENERIC_ALLOCATOR
+       help
+         Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
+         PAMU can authorize memory access, remap the memory address, and remap I/O
+         transaction types.
+
+# MSM IOMMU support
+config MSM_IOMMU
+       bool "MSM IOMMU Support"
+       depends on ARM
+       depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
+       depends on BROKEN
+       select IOMMU_API
+       help
+         Support for the IOMMUs found on certain Qualcomm SOCs.
+         These IOMMUs allow virtualization of the address space used by most
+         cores within the multimedia subsystem.
+
+         If unsure, say N here.
+
+config IOMMU_PGTABLES_L2
+       def_bool y
+       depends on MSM_IOMMU && MMU && SMP && CPU_DCACHE_DISABLE=n
+
+# AMD IOMMU support
+config AMD_IOMMU
+       bool "AMD IOMMU support"
+       select SWIOTLB
+       select PCI_MSI
+       select PCI_ATS
+       select PCI_PRI
+       select PCI_PASID
+       select IOMMU_API
+       depends on X86_64 && PCI && ACPI
+       ---help---
+         With this option you can enable support for AMD IOMMU hardware in
+         your system. An IOMMU is a hardware component which provides
+         remapping of DMA memory accesses from devices. With an AMD IOMMU you
+         can isolate the DMA memory of different devices and protect the
+         system from misbehaving device drivers or hardware.
+
+         You can find out if your system has an AMD IOMMU if you look into
+         your BIOS for an option to enable it or if you have an IVRS ACPI
+         table.
+
+config AMD_IOMMU_STATS
+       bool "Export AMD IOMMU statistics to debugfs"
+       depends on AMD_IOMMU
+       select DEBUG_FS
+       ---help---
+         This option enables code in the AMD IOMMU driver to collect various
+         statistics about whats happening in the driver and exports that
+         information to userspace via debugfs.
+         If unsure, say N.
+
+config AMD_IOMMU_V2
+       tristate "AMD IOMMU Version 2 driver"
+       depends on AMD_IOMMU
+       select MMU_NOTIFIER
+       ---help---
+         This option enables support for the AMD IOMMUv2 features of the IOMMU
+         hardware. Select this option if you want to use devices that support
+         the PCI PRI and PASID interface.
+
+# Intel IOMMU support
+config DMAR_TABLE
+       bool
+
+config INTEL_IOMMU
+       bool "Support for Intel IOMMU using DMA Remapping Devices"
+       depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC)
+       select IOMMU_API
+       select IOMMU_IOVA
+       select DMAR_TABLE
+       help
+         DMA remapping (DMAR) devices support enables independent address
+         translations for Direct Memory Access (DMA) from devices.
+         These DMA remapping devices are reported via ACPI tables
+         and include PCI device scope covered by these DMA
+         remapping devices.
+
+config INTEL_IOMMU_DEFAULT_ON
+       def_bool y
+       prompt "Enable Intel DMA Remapping Devices by default"
+       depends on INTEL_IOMMU
+       help
+         Selecting this option will enable a DMAR device at boot time if
+         one is found. If this option is not selected, DMAR support can
+         be enabled by passing intel_iommu=on to the kernel.
+
+config INTEL_IOMMU_BROKEN_GFX_WA
+       bool "Workaround broken graphics drivers (going away soon)"
+       depends on INTEL_IOMMU && BROKEN && X86
+       ---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 INTEL_IOMMU_FLOPPY_WA
+       def_bool y
+       depends on INTEL_IOMMU && X86
+       ---help---
+         Floppy disk drivers are known to bypass DMA API calls
+         thereby failing to work when IOMMU is enabled. This
+         workaround will setup a 1:1 mapping for the first
+         16MiB to make floppy (an ISA device) work.
+
+config IRQ_REMAP
+       bool "Support for Interrupt Remapping"
+       depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
+       select DMAR_TABLE
+       ---help---
+         Supports Interrupt remapping for IO-APIC and MSI devices.
+         To use x2apic mode in the CPU's which support x2APIC enhancements or
+         to support platforms with CPU's having > 8 bit APIC ID, say Y.
+
+# OMAP IOMMU support
+config OMAP_IOMMU
+       bool "OMAP IOMMU Support"
+       depends on ARM && MMU
+       depends on ARCH_OMAP2PLUS || COMPILE_TEST
+       select IOMMU_API
+
+config OMAP_IOMMU_DEBUG
+       bool "Export OMAP IOMMU internals in DebugFS"
+       depends on OMAP_IOMMU && DEBUG_FS
+       ---help---
+         Select this to see extensive information about
+         the internal state of OMAP IOMMU in debugfs.
+
+         Say N unless you know you need this.
+
+config ROCKCHIP_IOMMU
+       bool "Rockchip IOMMU Support"
+       depends on ARM
+       depends on ARCH_ROCKCHIP || COMPILE_TEST
+       select IOMMU_API
+       select ARM_DMA_USE_IOMMU
+       help
+         Support for IOMMUs found on Rockchip rk32xx SOCs.
+         These IOMMUs allow virtualization of the address space used by most
+         cores within the multimedia subsystem.
+         Say Y here if you are using a Rockchip SoC that includes an IOMMU
+         device.
+
+config TEGRA_IOMMU_GART
+       bool "Tegra GART IOMMU Support"
+       depends on ARCH_TEGRA_2x_SOC
+       select IOMMU_API
+       help
+         Enables support for remapping discontiguous physical memory
+         shared with the operating system into contiguous I/O virtual
+         space through the GART (Graphics Address Relocation Table)
+         hardware included on Tegra SoCs.
+
+config TEGRA_IOMMU_SMMU
+       bool "NVIDIA Tegra SMMU Support"
+       depends on ARCH_TEGRA
+       depends on TEGRA_AHB
+       depends on TEGRA_MC
+       select IOMMU_API
+       help
+         This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
+         SoCs (Tegra30 up to Tegra124).
+
+config EXYNOS_IOMMU
+       bool "Exynos IOMMU Support"
+       depends on ARCH_EXYNOS && ARM && MMU
+       select IOMMU_API
+       select ARM_DMA_USE_IOMMU
+       help
+         Support for the IOMMU (System MMU) of Samsung Exynos application
+         processor family. This enables H/W multimedia accelerators to see
+         non-linear physical memory chunks as linear memory in their
+         address space.
+
+         If unsure, say N here.
+
+config EXYNOS_IOMMU_DEBUG
+       bool "Debugging log for Exynos IOMMU"
+       depends on EXYNOS_IOMMU
+       help
+         Select this to see the detailed log message that shows what
+         happens in the IOMMU driver.
+
+         Say N unless you need kernel log message for IOMMU debugging.
+
+config SHMOBILE_IPMMU
+       bool
+
+config SHMOBILE_IPMMU_TLB
+       bool
+
+config SHMOBILE_IOMMU
+       bool "IOMMU for Renesas IPMMU/IPMMUI"
+       default n
+       depends on ARM && MMU
+       depends on ARCH_SHMOBILE || COMPILE_TEST
+       select IOMMU_API
+       select ARM_DMA_USE_IOMMU
+       select SHMOBILE_IPMMU
+       select SHMOBILE_IPMMU_TLB
+       help
+         Support for Renesas IPMMU/IPMMUI. This option enables
+         remapping of DMA memory accesses from all of the IP blocks
+         on the ICB.
+
+         Warning: Drivers (including userspace drivers of UIO
+         devices) of the IP blocks on the ICB *must* use addresses
+         allocated from the IPMMU (iova) for DMA with this option
+         enabled.
+
+         If unsure, say N.
+
+choice
+       prompt "IPMMU/IPMMUI address space size"
+       default SHMOBILE_IOMMU_ADDRSIZE_2048MB
+       depends on SHMOBILE_IOMMU
+       help
+         This option sets IPMMU/IPMMUI address space size by
+         adjusting the 1st level page table size. The page table size
+         is calculated as follows:
+
+             page table size = number of page table entries * 4 bytes
+             number of page table entries = address space size / 1 MiB
+
+         For example, when the address space size is 2048 MiB, the
+         1st level page table size is 8192 bytes.
+
+       config SHMOBILE_IOMMU_ADDRSIZE_2048MB
+               bool "2 GiB"
+
+       config SHMOBILE_IOMMU_ADDRSIZE_1024MB
+               bool "1 GiB"
+
+       config SHMOBILE_IOMMU_ADDRSIZE_512MB
+               bool "512 MiB"
+
+       config SHMOBILE_IOMMU_ADDRSIZE_256MB
+               bool "256 MiB"
+
+       config SHMOBILE_IOMMU_ADDRSIZE_128MB
+               bool "128 MiB"
+
+       config SHMOBILE_IOMMU_ADDRSIZE_64MB
+               bool "64 MiB"
+
+       config SHMOBILE_IOMMU_ADDRSIZE_32MB
+               bool "32 MiB"
+
+endchoice
+
+config SHMOBILE_IOMMU_L1SIZE
+       int
+       default 8192 if SHMOBILE_IOMMU_ADDRSIZE_2048MB
+       default 4096 if SHMOBILE_IOMMU_ADDRSIZE_1024MB
+       default 2048 if SHMOBILE_IOMMU_ADDRSIZE_512MB
+       default 1024 if SHMOBILE_IOMMU_ADDRSIZE_256MB
+       default 512 if SHMOBILE_IOMMU_ADDRSIZE_128MB
+       default 256 if SHMOBILE_IOMMU_ADDRSIZE_64MB
+       default 128 if SHMOBILE_IOMMU_ADDRSIZE_32MB
+
+config IPMMU_VMSA
+       bool "Renesas VMSA-compatible IPMMU"
+       depends on ARM_LPAE
+       depends on ARCH_SHMOBILE || COMPILE_TEST
+       select IOMMU_API
+       select IOMMU_IO_PGTABLE_LPAE
+       select ARM_DMA_USE_IOMMU
+       help
+         Support for the Renesas VMSA-compatible IPMMU Renesas found in the
+         R-Mobile APE6 and R-Car H2/M2 SoCs.
+
+         If unsure, say N.
+
+config SPAPR_TCE_IOMMU
+       bool "sPAPR TCE IOMMU Support"
+       depends on PPC_POWERNV || PPC_PSERIES
+       select IOMMU_API
+       help
+         Enables bits of IOMMU API required by VFIO. The iommu_ops
+         is not implemented as it is not necessary for VFIO.
+
+config ARM_SMMU
+       bool "ARM Ltd. System MMU (SMMU) Support"
+       depends on (ARM64 || ARM) && MMU
+       select IOMMU_API
+       select IOMMU_IO_PGTABLE_LPAE
+       select ARM_DMA_USE_IOMMU if ARM
+       help
+         Support for implementations of the ARM System MMU architecture
+         versions 1 and 2.
+
+         Say Y here if your SoC includes an IOMMU device implementing
+         the ARM SMMU architecture.
+
+endif # IOMMU_SUPPORT