Hi Linus, The tree is a bit more messy this time, mostly because there are many IOMMU core changes included and driver patches which depend on them living in different branches. So some cross-merging between branches was necessary. With that said: The following changes since commit 7c60610d476766e128cc4284bb6349732cbd6606: Linux 5.14-rc6 (2021-08-15 13:40:53 -1000) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git tags/iommu-updates-v5.15 for you to fetch changes up to d8768d7eb9c21ef928adb93402d9348bcc4a6915: Merge branches 'apple/dart', 'arm/smmu', 'iommu/fixes', 'x86/amd', 'x86/vt-d' and 'core' into next (2021-08-20 17:14:35 +0200) ---------------------------------------------------------------- IOMMU Updates for Linux v5.15 Including: - New DART IOMMU driver for Apple Silicon M1 chips. - Optimizations for iommu_[map/unmap] performance - Selective TLB flush support for the AMD IOMMU driver to make it more efficient on emulated IOMMUs. - Rework IOVA setup and default domain type setting to move more code out of IOMMU drivers and to support runtime switching between certain types of default domains. - VT-d Updates from Lu Baolu: - Update the virtual command related registers - Enable Intel IOMMU scalable mode by default - Preset A/D bits for user space DMA usage - Allow devices to have more than 32 outstanding PRs - Various cleanups - ARM SMMU Updates from Will Deacon: - SMMUv3: Minor optimisation to avoid zeroing struct members on CMD submission - SMMUv3: Increased use of batched commands to reduce submission latency - SMMUv3: Refactoring in preparation for ECMDQ support - SMMUv2: Fix races when probing devices with identical StreamIDs - SMMUv2: Optimise walk cache flushing for Qualcomm implementations - SMMUv2: Allow deep sleep states for some Qualcomm SoCs with shared clocks - Various smaller optimizations, cleanups, and fixes ---------------------------------------------------------------- Andy Shevchenko (1): iommu/vt-d: Drop the kernel doc annotation Ashish Mhetre (1): iommu: Fix race condition during default domain allocation Ezequiel Garcia (1): iommu/dma: Fix leak in non-contiguous API Fenghua Yu (1): iommu/vt-d: Fix PASID reference leak Frank Wunderlich (1): iommu: Check if group is NULL before remove device Geert Uytterhoeven (1): iommu/dart: APPLE_DART should depend on ARCH_APPLE Isaac J. Manjarres (12): iommu/io-pgtable: Introduce unmap_pages() as a page table op iommu: Add an unmap_pages() op for IOMMU drivers iommu/io-pgtable: Introduce map_pages() as a page table op iommu: Add a map_pages() op for IOMMU drivers iommu: Add support for the map_pages() callback iommu/io-pgtable-arm: Prepare PTE methods for handling multiple entries iommu/io-pgtable-arm: Implement arm_lpae_unmap_pages() iommu/io-pgtable-arm: Implement arm_lpae_map_pages() iommu/io-pgtable-arm-v7s: Implement arm_v7s_unmap_pages() iommu/io-pgtable-arm-v7s: Implement arm_v7s_map_pages() iommu/arm-smmu: Implement the unmap_pages() IOMMU driver callback iommu/arm-smmu: Implement the map_pages() IOMMU driver callback Joerg Roedel (4): Merge remote-tracking branch 'korg/core' into x86/amd iommu/amd: Remove stale amd_iommu_unmap_flush usage Merge tag 'arm-smmu-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into arm/smmu Merge branches 'apple/dart', 'arm/smmu', 'iommu/fixes', 'x86/amd', 'x86/vt-d' and 'core' into next John Garry (5): iommu: Deprecate Intel and AMD cmdline methods to enable strict mode iommu: Print strict or lazy mode at init time iommu: Remove mode argument from iommu_set_dma_strict() iommu/arm-smmu-v3: Remove some unneeded init in arm_smmu_cmdq_issue_cmdlist() iommu/arm-smmu-v3: Stop pre-zeroing batch commands Krishna Reddy (1): iommu/arm-smmu: Fix race condition during iommu_group creation Lennert Buytenhek (1): iommu/amd: Fix printing of IOMMU events when rate limiting kicks in Liu Yi L (3): iommu/vt-d: Fix incomplete cache flush in intel_pasid_tear_down_entry() iommu/vt-d: Use pasid_pte_is_present() helper function iommu/vt-d: Add present bit check in pasid entry setup helpers Lu Baolu (8): iommu/vt-d: Report real pgsize bitmap to iommu core iommu/vt-d: Implement map/unmap_pages() iommu_ops callback iommu/vt-d: Move clflush'es from iotlb_sync_map() to map_pages() iommu/vt-d: Update the virtual command related registers iommu/vt-d: Refactor Kconfig a bit iommu/vt-d: Enable Intel IOMMU scalable mode by default iommu/vt-d: Preset A/D bits for user space DMA usage iommu/vt-d: Allow devices to have more than 32 outstanding PRs Nadav Amit (6): iommu/amd: Selective flush on unmap iommu/amd: Do not use flush-queue when NpCache is on iommu: Factor iommu_iotlb_gather_is_disjoint() out iommu/amd: Tailored gather logic for AMD iommu/amd: Sync once for scatter-gather operations iommu/amd: Use only natural aligned flushes in a VM Robin Murphy (26): iommu: Streamline iommu_iova_to_phys() iommu: Improve iommu_iotlb_gather helpers iommu: Pull IOVA cookie management into the core iommu/amd: Drop IOVA cookie management iommu/arm-smmu: Drop IOVA cookie management iommu/vt-d: Drop IOVA cookie management iommu/exynos: Drop IOVA cookie management iommu/ipmmu-vmsa: Drop IOVA cookie management iommu/mtk: Drop IOVA cookie management iommu/rockchip: Drop IOVA cookie management iommu/sprd: Drop IOVA cookie management iommu/sun50i: Drop IOVA cookie management iommu/virtio: Drop IOVA cookie management iommu/dma: Remove redundant "!dev" checks iommu: Indicate queued flushes via gather data iommu/io-pgtable: Remove non-strict quirk iommu: Introduce explicit type for non-strict DMA domains iommu/amd: Prepare for multiple DMA domain types iommu/arm-smmu: Prepare for multiple DMA domain types iommu/vt-d: Prepare for multiple DMA domain types iommu: Express DMA strictness via the domain type iommu: Expose DMA domain strictness via sysfs iommu: Only log strictness for DMA domains iommu: Merge strictness and domain type configs iommu: Allow enabling non-strict mode dynamically iommu/io-pgtable: Abstract iommu_iotlb_gather access Sai Prakash Ranjan (2): iommu/arm-smmu: Add clk_bulk_{prepare/unprepare} to system pm callbacks iommu/arm-smmu: Optimize ->tlb_flush_walk() for qcom implementation Sven Peter (3): iommu/io-pgtable: Add DART pagetable format dt-bindings: iommu: add DART iommu bindings iommu/dart: Add DART iommu driver Will Deacon (3): iommu: Use bitmap to calculate page size in iommu_pgsize() iommu: Split 'addr_merge' argument to iommu_pgsize() into separate parts iommu: Hook up '->unmap_pages' driver callback Xiang Chen (2): iommu/arm-smmu-v3: Implement the unmap_pages() IOMMU driver callback iommu/arm-smmu-v3: Implement the map_pages() IOMMU driver callback Xiyu Yang via iommu (1): iommu/amd: Convert from atomic_t to refcount_t on pasid_state->count Yang Yingliang (1): iommu/arm-smmu: Fix missing unlock on error in arm_smmu_device_group() Zhen Lei (8): iommu: Enhance IOMMU default DMA mode build options iommu/vt-d: Add support for IOMMU default DMA mode build options iommu/amd: Add support for IOMMU default DMA mode build options iommu/arm-smmu-v3: Use command queue batching helpers to improve performance iommu/arm-smmu-v3: Add and use static helper function arm_smmu_cmdq_issue_cmd_with_sync() iommu/arm-smmu-v3: Add and use static helper function arm_smmu_get_cmdq() iommu/arm-smmu-v3: Extract reusable function __arm_smmu_cmdq_skip_err() iommu/vt-d: Remove unnecessary oom message .../ABI/testing/sysfs-kernel-iommu_groups | 6 +- Documentation/admin-guide/kernel-parameters.txt | 29 +- .../devicetree/bindings/iommu/apple,dart.yaml | 81 ++ MAINTAINERS | 7 + drivers/iommu/Kconfig | 69 +- drivers/iommu/Makefile | 1 + drivers/iommu/amd/amd_iommu_types.h | 6 - drivers/iommu/amd/init.c | 12 +- drivers/iommu/amd/io_pgtable.c | 3 - drivers/iommu/amd/iommu.c | 151 +++- drivers/iommu/amd/iommu_v2.c | 13 +- drivers/iommu/apple-dart.c | 923 +++++++++++++++++++++ drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 121 +-- drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 11 + drivers/iommu/arm/arm-smmu/arm-smmu.c | 89 +- drivers/iommu/arm/arm-smmu/arm-smmu.h | 1 + drivers/iommu/arm/arm-smmu/qcom_iommu.c | 9 - drivers/iommu/dma-iommu.c | 52 +- drivers/iommu/exynos-iommu.c | 19 +- drivers/iommu/intel/Kconfig | 19 +- drivers/iommu/intel/dmar.c | 2 - drivers/iommu/intel/iommu.c | 197 ++--- drivers/iommu/intel/pasid.c | 28 +- drivers/iommu/intel/pasid.h | 16 +- drivers/iommu/intel/perf.c | 2 +- drivers/iommu/intel/svm.c | 7 +- drivers/iommu/io-pgtable-arm-v7s.c | 62 +- drivers/iommu/io-pgtable-arm.c | 282 +++++-- drivers/iommu/io-pgtable.c | 1 + drivers/iommu/iommu.c | 198 +++-- drivers/iommu/iova.c | 14 +- drivers/iommu/ipmmu-vmsa.c | 28 +- drivers/iommu/mtk_iommu.c | 13 +- drivers/iommu/mtk_iommu_v1.c | 1 - drivers/iommu/rockchip-iommu.c | 12 +- drivers/iommu/sprd-iommu.c | 7 - drivers/iommu/sun50i-iommu.c | 13 +- drivers/iommu/virtio-iommu.c | 8 - include/linux/dma-iommu.h | 6 + include/linux/intel-iommu.h | 6 +- include/linux/intel-svm.h | 5 + include/linux/io-pgtable.h | 20 +- include/linux/iommu.h | 114 ++- 43 files changed, 2054 insertions(+), 610 deletions(-) create mode 100644 Documentation/devicetree/bindings/iommu/apple,dart.yaml create mode 100644 drivers/iommu/apple-dart.c Please pull. Thanks, Joerg