123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- # 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
- ---help---
- The OMAP3 media platform drivers depend on iommu support,
- if you need them say Y here.
- 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 Tegra132).
- 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.
- # ARM IOMMU support
- 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.
- config ARM_SMMU_V3
- bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
- depends on ARM64 && PCI
- select IOMMU_API
- select IOMMU_IO_PGTABLE_LPAE
- help
- Support for implementations of the ARM System MMU architecture
- version 3 providing translation support to a PCIe root complex.
- Say Y here if your system includes an IOMMU device implementing
- the ARM SMMUv3 architecture.
- endif # IOMMU_SUPPORT
|