[PATCH v2 0/6] iommu-arm-smmu: Add auxiliary domains and per-instance pagetables

From: Jordan Crouse
Date: Fri Jun 26 2020 - 16:05:16 EST



This is a new refresh of support for auxiliary domains for arm-smmu-v2
and per-instance pagetables for drm/msm. The big change here from past
efforts is that outside of creating a single aux-domain to enable TTBR0
all of the per-instance pagetables are created and managed exclusively
in drm/msm without involving the arm-smmu driver. This fits in with the
suggested model of letting the GPU hardware do what it needs and leave the
arm-smmu driver blissfully unaware.

Almost. In order to set up the io-pgtable properly in drm/msm we need to
query the pagetable configuration from the current active domain and we need to
rely on the iommu API to flush TLBs after a unmap. In the future we can optimize
this in the drm/msm driver to track the state of the TLBs but for now the big
hammer lets us get off the ground.

This series is built on the split pagetable support [1].

[1] https://patchwork.kernel.org/patch/11628543/

v2: Remove unneeded cruft in the a6xx page switch sequence

Jordan Crouse (6):
iommu/arm-smmu: Add auxiliary domain support for arm-smmuv2
iommu/io-pgtable: Allow a pgtable implementation to skip TLB
operations
iommu/arm-smmu: Add a domain attribute to pass the pagetable config
drm/msm: Add support to create a local pagetable
drm/msm: Add support for address space instances
drm/msm/a6xx: Add support for per-instance pagetables

drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 43 +++++
drivers/gpu/drm/msm/msm_drv.c | 15 +-
drivers/gpu/drm/msm/msm_drv.h | 4 +
drivers/gpu/drm/msm/msm_gem_vma.c | 9 +
drivers/gpu/drm/msm/msm_gpu.c | 17 ++
drivers/gpu/drm/msm/msm_gpu.h | 5 +
drivers/gpu/drm/msm/msm_gpummu.c | 2 +-
drivers/gpu/drm/msm/msm_iommu.c | 180 +++++++++++++++++++-
drivers/gpu/drm/msm/msm_mmu.h | 16 +-
drivers/gpu/drm/msm/msm_ringbuffer.h | 1 +
drivers/iommu/arm-smmu.c | 231 ++++++++++++++++++++++++--
drivers/iommu/arm-smmu.h | 1 +
include/linux/io-pgtable.h | 11 +-
include/linux/iommu.h | 1 +
14 files changed, 507 insertions(+), 29 deletions(-)

--
2.17.1