iommu/arm-smmu: Add initial driver support for ARM SMMUv3 devices
Version three of the ARM SMMU architecture introduces significant changes and improvements over previous versions of the specification, necessitating a new driver in the Linux kernel. The main change to the programming interface is that the majority of the configuration data has been moved from MMIO registers to in-memory data structures, with communication between the CPU and the SMMU being mediated via in-memory circular queues. This patch adds an initial driver for SMMUv3 to Linux. We currently support pinned stage-1 (DMA) and stage-2 (KVM VFIO) mappings using the generic IO-pgtable code. Cc: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
a73e528ab1
commit
48ec83bcbc
|
@ -1634,11 +1634,12 @@ F: drivers/i2c/busses/i2c-cadence.c
|
||||||
F: drivers/mmc/host/sdhci-of-arasan.c
|
F: drivers/mmc/host/sdhci-of-arasan.c
|
||||||
F: drivers/edac/synopsys_edac.c
|
F: drivers/edac/synopsys_edac.c
|
||||||
|
|
||||||
ARM SMMU DRIVER
|
ARM SMMU DRIVERS
|
||||||
M: Will Deacon <will.deacon@arm.com>
|
M: Will Deacon <will.deacon@arm.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/iommu/arm-smmu.c
|
F: drivers/iommu/arm-smmu.c
|
||||||
|
F: drivers/iommu/arm-smmu-v3.c
|
||||||
F: drivers/iommu/io-pgtable-arm.c
|
F: drivers/iommu/io-pgtable-arm.c
|
||||||
|
|
||||||
ARM64 PORT (AARCH64 ARCHITECTURE)
|
ARM64 PORT (AARCH64 ARCHITECTURE)
|
||||||
|
|
|
@ -339,6 +339,7 @@ config SPAPR_TCE_IOMMU
|
||||||
Enables bits of IOMMU API required by VFIO. The iommu_ops
|
Enables bits of IOMMU API required by VFIO. The iommu_ops
|
||||||
is not implemented as it is not necessary for VFIO.
|
is not implemented as it is not necessary for VFIO.
|
||||||
|
|
||||||
|
# ARM IOMMU support
|
||||||
config ARM_SMMU
|
config ARM_SMMU
|
||||||
bool "ARM Ltd. System MMU (SMMU) Support"
|
bool "ARM Ltd. System MMU (SMMU) Support"
|
||||||
depends on (ARM64 || ARM) && MMU
|
depends on (ARM64 || ARM) && MMU
|
||||||
|
@ -352,4 +353,16 @@ config ARM_SMMU
|
||||||
Say Y here if your SoC includes an IOMMU device implementing
|
Say Y here if your SoC includes an IOMMU device implementing
|
||||||
the ARM SMMU architecture.
|
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
|
endif # IOMMU_SUPPORT
|
||||||
|
|
|
@ -9,6 +9,7 @@ obj-$(CONFIG_MSM_IOMMU) += msm_iommu.o msm_iommu_dev.o
|
||||||
obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o
|
obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o
|
||||||
obj-$(CONFIG_AMD_IOMMU_V2) += amd_iommu_v2.o
|
obj-$(CONFIG_AMD_IOMMU_V2) += amd_iommu_v2.o
|
||||||
obj-$(CONFIG_ARM_SMMU) += arm-smmu.o
|
obj-$(CONFIG_ARM_SMMU) += arm-smmu.o
|
||||||
|
obj-$(CONFIG_ARM_SMMU_V3) += arm-smmu-v3.o
|
||||||
obj-$(CONFIG_DMAR_TABLE) += dmar.o
|
obj-$(CONFIG_DMAR_TABLE) += dmar.o
|
||||||
obj-$(CONFIG_INTEL_IOMMU) += intel-iommu.o
|
obj-$(CONFIG_INTEL_IOMMU) += intel-iommu.o
|
||||||
obj-$(CONFIG_IPMMU_VMSA) += ipmmu-vmsa.o
|
obj-$(CONFIG_IPMMU_VMSA) += ipmmu-vmsa.o
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue