cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

Kconfig (15080B)


      1# SPDX-License-Identifier: GPL-2.0-only
      2# The IOVA library may also be used by non-IOMMU_API users
      3config IOMMU_IOVA
      4	tristate
      5
      6# The IOASID library may also be used by non-IOMMU_API users
      7config IOASID
      8	tristate
      9
     10# IOMMU_API always gets selected by whoever wants it.
     11config IOMMU_API
     12	bool
     13
     14menuconfig IOMMU_SUPPORT
     15	bool "IOMMU Hardware Support"
     16	depends on MMU
     17	default y
     18	help
     19	  Say Y here if you want to compile device drivers for IO Memory
     20	  Management Units into the kernel. These devices usually allow to
     21	  remap DMA requests and/or remap interrupts from other devices on the
     22	  system.
     23
     24if IOMMU_SUPPORT
     25
     26menu "Generic IOMMU Pagetable Support"
     27
     28# Selected by the actual pagetable implementations
     29config IOMMU_IO_PGTABLE
     30	bool
     31
     32config IOMMU_IO_PGTABLE_LPAE
     33	bool "ARMv7/v8 Long Descriptor Format"
     34	select IOMMU_IO_PGTABLE
     35	depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
     36	help
     37	  Enable support for the ARM long descriptor pagetable format.
     38	  This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
     39	  sizes at both stage-1 and stage-2, as well as address spaces
     40	  up to 48-bits in size.
     41
     42config IOMMU_IO_PGTABLE_LPAE_SELFTEST
     43	bool "LPAE selftests"
     44	depends on IOMMU_IO_PGTABLE_LPAE
     45	help
     46	  Enable self-tests for LPAE page table allocator. This performs
     47	  a series of page-table consistency checks during boot.
     48
     49	  If unsure, say N here.
     50
     51config IOMMU_IO_PGTABLE_ARMV7S
     52	bool "ARMv7/v8 Short Descriptor Format"
     53	select IOMMU_IO_PGTABLE
     54	depends on ARM || ARM64 || COMPILE_TEST
     55	help
     56	  Enable support for the ARM Short-descriptor pagetable format.
     57	  This supports 32-bit virtual and physical addresses mapped using
     58	  2-level tables with 4KB pages/1MB sections, and contiguous entries
     59	  for 64KB pages/16MB supersections if indicated by the IOMMU driver.
     60
     61config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
     62	bool "ARMv7s selftests"
     63	depends on IOMMU_IO_PGTABLE_ARMV7S
     64	help
     65	  Enable self-tests for ARMv7s page table allocator. This performs
     66	  a series of page-table consistency checks during boot.
     67
     68	  If unsure, say N here.
     69
     70endmenu
     71
     72config IOMMU_DEBUGFS
     73	bool "Export IOMMU internals in DebugFS"
     74	depends on DEBUG_FS
     75	help
     76	  Allows exposure of IOMMU device internals. This option enables
     77	  the use of debugfs by IOMMU drivers as required. Devices can,
     78	  at initialization time, cause the IOMMU code to create a top-level
     79	  debug/iommu directory, and then populate a subdirectory with
     80	  entries as required.
     81
     82choice
     83	prompt "IOMMU default domain type"
     84	depends on IOMMU_API
     85	default IOMMU_DEFAULT_DMA_LAZY if X86 || IA64
     86	default IOMMU_DEFAULT_DMA_STRICT
     87	help
     88	  Choose the type of IOMMU domain used to manage DMA API usage by
     89	  device drivers. The options here typically represent different
     90	  levels of tradeoff between robustness/security and performance,
     91	  depending on the IOMMU driver. Not all IOMMUs support all options.
     92	  This choice can be overridden at boot via the command line, and for
     93	  some devices also at runtime via sysfs.
     94
     95	  If unsure, keep the default.
     96
     97config IOMMU_DEFAULT_DMA_STRICT
     98	bool "Translated - Strict"
     99	help
    100	  Trusted devices use translation to restrict their access to only
    101	  DMA-mapped pages, with strict TLB invalidation on unmap. Equivalent
    102	  to passing "iommu.passthrough=0 iommu.strict=1" on the command line.
    103
    104	  Untrusted devices always use this mode, with an additional layer of
    105	  bounce-buffering such that they cannot gain access to any unrelated
    106	  data within a mapped page.
    107
    108config IOMMU_DEFAULT_DMA_LAZY
    109	bool "Translated - Lazy"
    110	help
    111	  Trusted devices use translation to restrict their access to only
    112	  DMA-mapped pages, but with "lazy" batched TLB invalidation. This
    113	  mode allows higher performance with some IOMMUs due to reduced TLB
    114	  flushing, but at the cost of reduced isolation since devices may be
    115	  able to access memory for some time after it has been unmapped.
    116	  Equivalent to passing "iommu.passthrough=0 iommu.strict=0" on the
    117	  command line.
    118
    119	  If this mode is not supported by the IOMMU driver, the effective
    120	  runtime default will fall back to IOMMU_DEFAULT_DMA_STRICT.
    121
    122config IOMMU_DEFAULT_PASSTHROUGH
    123	bool "Passthrough"
    124	help
    125	  Trusted devices are identity-mapped, giving them unrestricted access
    126	  to memory with minimal performance overhead. Equivalent to passing
    127	  "iommu.passthrough=1" (historically "iommu=pt") on the command line.
    128
    129	  If this mode is not supported by the IOMMU driver, the effective
    130	  runtime default will fall back to IOMMU_DEFAULT_DMA_STRICT.
    131
    132endchoice
    133
    134config OF_IOMMU
    135	def_bool y
    136	depends on OF && IOMMU_API
    137
    138# IOMMU-agnostic DMA-mapping layer
    139config IOMMU_DMA
    140	bool
    141	select DMA_OPS
    142	select IOMMU_API
    143	select IOMMU_IOVA
    144	select IRQ_MSI_IOMMU
    145	select NEED_SG_DMA_LENGTH
    146
    147# Shared Virtual Addressing
    148config IOMMU_SVA
    149	bool
    150	select IOASID
    151
    152config FSL_PAMU
    153	bool "Freescale IOMMU support"
    154	depends on PCI
    155	depends on PHYS_64BIT
    156	depends on PPC_E500MC || (COMPILE_TEST && PPC)
    157	select IOMMU_API
    158	select GENERIC_ALLOCATOR
    159	help
    160	  Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
    161	  PAMU can authorize memory access, remap the memory address, and remap I/O
    162	  transaction types.
    163
    164# MSM IOMMU support
    165config MSM_IOMMU
    166	bool "MSM IOMMU Support"
    167	depends on ARM
    168	depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
    169	select IOMMU_API
    170	select IOMMU_IO_PGTABLE_ARMV7S
    171	help
    172	  Support for the IOMMUs found on certain Qualcomm SOCs.
    173	  These IOMMUs allow virtualization of the address space used by most
    174	  cores within the multimedia subsystem.
    175
    176	  If unsure, say N here.
    177
    178source "drivers/iommu/amd/Kconfig"
    179source "drivers/iommu/intel/Kconfig"
    180
    181config IRQ_REMAP
    182	bool "Support for Interrupt Remapping"
    183	depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
    184	select DMAR_TABLE
    185	help
    186	  Supports Interrupt remapping for IO-APIC and MSI devices.
    187	  To use x2apic mode in the CPU's which support x2APIC enhancements or
    188	  to support platforms with CPU's having > 8 bit APIC ID, say Y.
    189
    190# OMAP IOMMU support
    191config OMAP_IOMMU
    192	bool "OMAP IOMMU Support"
    193	depends on ARCH_OMAP2PLUS || COMPILE_TEST
    194	select IOMMU_API
    195	help
    196	  The OMAP3 media platform drivers depend on iommu support,
    197	  if you need them say Y here.
    198
    199config OMAP_IOMMU_DEBUG
    200	bool "Export OMAP IOMMU internals in DebugFS"
    201	depends on OMAP_IOMMU && DEBUG_FS
    202	help
    203	  Select this to see extensive information about
    204	  the internal state of OMAP IOMMU in debugfs.
    205
    206	  Say N unless you know you need this.
    207
    208config ROCKCHIP_IOMMU
    209	bool "Rockchip IOMMU Support"
    210	depends on ARCH_ROCKCHIP || COMPILE_TEST
    211	select IOMMU_API
    212	select ARM_DMA_USE_IOMMU
    213	help
    214	  Support for IOMMUs found on Rockchip rk32xx SOCs.
    215	  These IOMMUs allow virtualization of the address space used by most
    216	  cores within the multimedia subsystem.
    217	  Say Y here if you are using a Rockchip SoC that includes an IOMMU
    218	  device.
    219
    220config SUN50I_IOMMU
    221	bool "Allwinner H6 IOMMU Support"
    222	depends on HAS_DMA
    223	depends on ARCH_SUNXI || COMPILE_TEST
    224	select ARM_DMA_USE_IOMMU
    225	select IOMMU_API
    226	help
    227	  Support for the IOMMU introduced in the Allwinner H6 SoCs.
    228
    229config TEGRA_IOMMU_GART
    230	bool "Tegra GART IOMMU Support"
    231	depends on ARCH_TEGRA_2x_SOC
    232	depends on TEGRA_MC
    233	select IOMMU_API
    234	help
    235	  Enables support for remapping discontiguous physical memory
    236	  shared with the operating system into contiguous I/O virtual
    237	  space through the GART (Graphics Address Relocation Table)
    238	  hardware included on Tegra SoCs.
    239
    240config TEGRA_IOMMU_SMMU
    241	bool "NVIDIA Tegra SMMU Support"
    242	depends on ARCH_TEGRA
    243	depends on TEGRA_AHB
    244	depends on TEGRA_MC
    245	select IOMMU_API
    246	help
    247	  This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
    248	  SoCs (Tegra30 up to Tegra210).
    249
    250config EXYNOS_IOMMU
    251	bool "Exynos IOMMU Support"
    252	depends on ARCH_EXYNOS || COMPILE_TEST
    253	depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes
    254	select IOMMU_API
    255	select ARM_DMA_USE_IOMMU
    256	help
    257	  Support for the IOMMU (System MMU) of Samsung Exynos application
    258	  processor family. This enables H/W multimedia accelerators to see
    259	  non-linear physical memory chunks as linear memory in their
    260	  address space.
    261
    262	  If unsure, say N here.
    263
    264config EXYNOS_IOMMU_DEBUG
    265	bool "Debugging log for Exynos IOMMU"
    266	depends on EXYNOS_IOMMU
    267	help
    268	  Select this to see the detailed log message that shows what
    269	  happens in the IOMMU driver.
    270
    271	  Say N unless you need kernel log message for IOMMU debugging.
    272
    273config IPMMU_VMSA
    274	bool "Renesas VMSA-compatible IPMMU"
    275	depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64)
    276	select IOMMU_API
    277	select IOMMU_IO_PGTABLE_LPAE
    278	select ARM_DMA_USE_IOMMU
    279	help
    280	  Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile
    281	  APE6, R-Car Gen{2,3} and RZ/G{1,2} SoCs.
    282
    283	  If unsure, say N.
    284
    285config SPAPR_TCE_IOMMU
    286	bool "sPAPR TCE IOMMU Support"
    287	depends on PPC_POWERNV || PPC_PSERIES
    288	select IOMMU_API
    289	help
    290	  Enables bits of IOMMU API required by VFIO. The iommu_ops
    291	  is not implemented as it is not necessary for VFIO.
    292
    293config APPLE_DART
    294	tristate "Apple DART IOMMU Support"
    295	depends on ARCH_APPLE || (COMPILE_TEST && !GENERIC_ATOMIC64)
    296	select IOMMU_API
    297	select IOMMU_IO_PGTABLE_LPAE
    298	default ARCH_APPLE
    299	help
    300	  Support for Apple DART (Device Address Resolution Table) IOMMUs
    301	  found in Apple ARM SoCs like the M1.
    302	  This IOMMU is required for most peripherals using DMA to access
    303	  the main memory.
    304
    305	  Say Y here if you are using an Apple SoC.
    306
    307# ARM IOMMU support
    308config ARM_SMMU
    309	tristate "ARM Ltd. System MMU (SMMU) Support"
    310	depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64)
    311	select IOMMU_API
    312	select IOMMU_IO_PGTABLE_LPAE
    313	select ARM_DMA_USE_IOMMU if ARM
    314	help
    315	  Support for implementations of the ARM System MMU architecture
    316	  versions 1 and 2.
    317
    318	  Say Y here if your SoC includes an IOMMU device implementing
    319	  the ARM SMMU architecture.
    320
    321config ARM_SMMU_LEGACY_DT_BINDINGS
    322	bool "Support the legacy \"mmu-masters\" devicetree bindings"
    323	depends on ARM_SMMU=y && OF
    324	help
    325	  Support for the badly designed and deprecated "mmu-masters"
    326	  devicetree bindings. This allows some DMA masters to attach
    327	  to the SMMU but does not provide any support via the DMA API.
    328	  If you're lucky, you might be able to get VFIO up and running.
    329
    330	  If you say Y here then you'll make me very sad. Instead, say N
    331	  and move your firmware to the utopian future that was 2016.
    332
    333config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
    334	bool "Default to disabling bypass on ARM SMMU v1 and v2"
    335	depends on ARM_SMMU
    336	default y
    337	help
    338	  Say Y here to (by default) disable bypass streams such that
    339	  incoming transactions from devices that are not attached to
    340	  an iommu domain will report an abort back to the device and
    341	  will not be allowed to pass through the SMMU.
    342
    343	  Any old kernels that existed before this KConfig was
    344	  introduced would default to _allowing_ bypass (AKA the
    345	  equivalent of NO for this config).  However the default for
    346	  this option is YES because the old behavior is insecure.
    347
    348	  There are few reasons to allow unmatched stream bypass, and
    349	  even fewer good ones.  If saying YES here breaks your board
    350	  you should work on fixing your board.  This KConfig option
    351	  is expected to be removed in the future and we'll simply
    352	  hardcode the bypass disable in the code.
    353
    354	  NOTE: the kernel command line parameter
    355	  'arm-smmu.disable_bypass' will continue to override this
    356	  config.
    357
    358config ARM_SMMU_QCOM
    359	def_tristate y
    360	depends on ARM_SMMU && ARCH_QCOM
    361	select QCOM_SCM
    362	help
    363	  When running on a Qualcomm platform that has the custom variant
    364	  of the ARM SMMU, this needs to be built into the SMMU driver.
    365
    366config ARM_SMMU_V3
    367	tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
    368	depends on ARM64
    369	select IOMMU_API
    370	select IOMMU_IO_PGTABLE_LPAE
    371	select GENERIC_MSI_IRQ_DOMAIN
    372	help
    373	  Support for implementations of the ARM System MMU architecture
    374	  version 3 providing translation support to a PCIe root complex.
    375
    376	  Say Y here if your system includes an IOMMU device implementing
    377	  the ARM SMMUv3 architecture.
    378
    379config ARM_SMMU_V3_SVA
    380	bool "Shared Virtual Addressing support for the ARM SMMUv3"
    381	depends on ARM_SMMU_V3
    382	select IOMMU_SVA
    383	select MMU_NOTIFIER
    384	help
    385	  Support for sharing process address spaces with devices using the
    386	  SMMUv3.
    387
    388	  Say Y here if your system supports SVA extensions such as PCIe PASID
    389	  and PRI.
    390
    391config S390_IOMMU
    392	def_bool y if S390 && PCI
    393	depends on S390 && PCI
    394	select IOMMU_API
    395	help
    396	  Support for the IOMMU API for s390 PCI devices.
    397
    398config S390_CCW_IOMMU
    399	bool "S390 CCW IOMMU Support"
    400	depends on S390 && CCW || COMPILE_TEST
    401	select IOMMU_API
    402	help
    403	  Enables bits of IOMMU API required by VFIO. The iommu_ops
    404	  is not implemented as it is not necessary for VFIO.
    405
    406config S390_AP_IOMMU
    407	bool "S390 AP IOMMU Support"
    408	depends on S390 && ZCRYPT || COMPILE_TEST
    409	select IOMMU_API
    410	help
    411	  Enables bits of IOMMU API required by VFIO. The iommu_ops
    412	  is not implemented as it is not necessary for VFIO.
    413
    414config MTK_IOMMU
    415	tristate "MediaTek IOMMU Support"
    416	depends on ARCH_MEDIATEK || COMPILE_TEST
    417	select ARM_DMA_USE_IOMMU
    418	select IOMMU_API
    419	select IOMMU_IO_PGTABLE_ARMV7S
    420	select MEMORY
    421	select MTK_SMI
    422	help
    423	  Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
    424	  Memory Management Unit. This option enables remapping of DMA memory
    425	  accesses for the multimedia subsystem.
    426
    427	  If unsure, say N here.
    428
    429config MTK_IOMMU_V1
    430	tristate "MediaTek IOMMU Version 1 (M4U gen1) Support"
    431	depends on ARM
    432	depends on ARCH_MEDIATEK || COMPILE_TEST
    433	select ARM_DMA_USE_IOMMU
    434	select IOMMU_API
    435	select MEMORY
    436	select MTK_SMI
    437	help
    438	  Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
    439	  Multimedia Memory Managememt Unit. This option enables remapping of
    440	  DMA memory accesses for the multimedia subsystem.
    441
    442	  if unsure, say N here.
    443
    444config QCOM_IOMMU
    445	# Note: iommu drivers cannot (yet?) be built as modules
    446	bool "Qualcomm IOMMU Support"
    447	depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
    448	select QCOM_SCM
    449	select IOMMU_API
    450	select IOMMU_IO_PGTABLE_LPAE
    451	select ARM_DMA_USE_IOMMU
    452	help
    453	  Support for IOMMU on certain Qualcomm SoCs.
    454
    455config HYPERV_IOMMU
    456	bool "Hyper-V x2APIC IRQ Handling"
    457	depends on HYPERV && X86
    458	select IOMMU_API
    459	default HYPERV
    460	help
    461	  Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux
    462	  guests to run with x2APIC mode enabled.
    463
    464config VIRTIO_IOMMU
    465	tristate "Virtio IOMMU driver"
    466	depends on VIRTIO
    467	depends on (ARM64 || X86)
    468	select IOMMU_API
    469	select IOMMU_DMA
    470	select INTERVAL_TREE
    471	select ACPI_VIOT if ACPI
    472	help
    473	  Para-virtualised IOMMU driver with virtio.
    474
    475	  Say Y here if you intend to run this kernel as a guest.
    476
    477config SPRD_IOMMU
    478	tristate "Unisoc IOMMU Support"
    479	depends on ARCH_SPRD || COMPILE_TEST
    480	select IOMMU_API
    481	help
    482	  Support for IOMMU on Unisoc's SoCs, this IOMMU can be used by
    483	  Unisoc's multimedia devices, such as display, Image codec(jpeg)
    484	  and a few signal processors, including VSP(video), GSP(graphic),
    485	  ISP(image), and CPP(camera pixel processor), etc.
    486
    487	  Say Y here if you want to use the multimedia devices listed above.
    488
    489endif # IOMMU_SUPPORT