[Freedreno] [RFC v2 00/16] Private PASID and per-instance pagetables

Jordan Crouse jcrouse at codeaurora.org
Fri May 18 21:34:44 UTC 2018


This is v2 of a patchset of changes to implmeent private PASID support
for arm-smmu-v2 targets and implement per-instance pagetables for
MSM GPUs.

Per-instance pagetables allow the target GPU driver to create and manage
an individual pagetable for each file descriptor instance and switch
between them asynchronously using the GPU to reprogram the pagetable
registers on the fly.

This is done by expanding the shared PASID support from Jean Phillipe [1]
to create a "private" version of a PASID that enables a IOMMU driver
(arm-smmu-v2) to allocate a new pagetable and associate it with a PASID
identifier. That identifier could then be passed to a set of iommu
map/unmap functions to map entries into the new pagetable. Using a
set of sideband functions the GPU driver can get the TTBR0 and 
other information for each PASID and use that information to
reporgram the pagetables.

The first three patches implement split pagetables for arm-smmu-v2
targets. This allows the GPU to take advantage of split pagetables
to map global buffers that won't be affected by the pagetable switch.

The next 3 patches implement private PASID support by adding a few
new API hooks and piggybacking on existing functions from the shared
PASID effort.

The next 8 patches hook up the MSM-GPU driver to implement and use
per-instance pagetables if available.

And finally the last 2 patches are a re-post of changes I provided
a few weeks ago to get the GPU driver to "opt out" of the DMA domain
and thus keeps the context bank free for the GPU domain (which is
important because the per-instance mechanism only knows how to work
on context bank 0).

All of this is based on top of Jean Phillipe's latest tree available
from.
	git://linux-arm.org/linux-jpb.git sva/v2

[changes from v1]:
 * Switch the domain attribute to SPLIT_TABLES (Robin Murphy)
 * Reuse existing mm hooks as much as possible (Jean Phillipe Brucker)
 * Consolidate iommu map/unmap code (Jean Phillipe Brucker)

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

Jordan Crouse (16):
  iommu: Add DOMAIN_ATTR_SPLIT_TABLES
  iommu/arm-smmu: Add split pagetable support for arm-smmu-v2
  iommu/io-pgtable-arm: Remove ttbr[1] from io_pgtbl_cfg
  iommu: sva: Add support for private PASIDs
  iommu: arm-smmu: Add support for private PASIDs
  iommu: arm-smmu: Add side-band function for specific PASID callbacks
  drm/msm: Enable 64 bit mode by default
  drm/msm: Pass the MMU domain index in struct msm_file_private
  drm/msm/gpu: Support using split page tables for kernel buffer objects
  drm/msm: Add msm_mmu features
  drm/msm: Add support for iommu-sva PASIDs
  drm/msm: Add support for per-instance address spaces
  drm/msm/a5xx: Support per-instance pagetables
  drm/msm: Support per-instance address spaces
  iommu: Gracefully allow drivers to not attach to a default domain
  iommu/arm-smmu: Add list of devices to opt out of DMA domains

 drivers/gpu/drm/msm/Kconfig               |   1 +
 drivers/gpu/drm/msm/adreno/a5xx_gpu.c     |  69 ++++
 drivers/gpu/drm/msm/adreno/a5xx_gpu.h     |  17 +
 drivers/gpu/drm/msm/adreno/a5xx_preempt.c |  74 ++++-
 drivers/gpu/drm/msm/adreno/adreno_gpu.c   |  11 +
 drivers/gpu/drm/msm/adreno/adreno_gpu.h   |   5 +
 drivers/gpu/drm/msm/msm_drv.c             |  45 ++-
 drivers/gpu/drm/msm/msm_drv.h             |   4 +
 drivers/gpu/drm/msm/msm_gem.h             |   1 +
 drivers/gpu/drm/msm/msm_gem_submit.c      |  11 +-
 drivers/gpu/drm/msm/msm_gem_vma.c         |  37 ++-
 drivers/gpu/drm/msm/msm_gpu.c             |  24 +-
 drivers/gpu/drm/msm/msm_gpu.h             |   4 +-
 drivers/gpu/drm/msm/msm_iommu.c           | 192 ++++++++++-
 drivers/gpu/drm/msm/msm_mmu.h             |  19 ++
 drivers/gpu/drm/msm/msm_ringbuffer.h      |   1 +
 drivers/iommu/arm-smmu-regs.h             |  18 ++
 drivers/iommu/arm-smmu-v3-context.c       |   2 +-
 drivers/iommu/arm-smmu.c                  | 370 ++++++++++++++++++++--
 drivers/iommu/io-pgtable-arm-v7s.c        |   3 +-
 drivers/iommu/io-pgtable-arm.c            |   8 +-
 drivers/iommu/io-pgtable.h                |  14 +-
 drivers/iommu/iommu-sva.c                 | 139 +++++++-
 drivers/iommu/iommu.c                     |  83 +++--
 drivers/iommu/ipmmu-vmsa.c                |   2 +-
 drivers/iommu/msm_iommu.c                 |   4 +-
 drivers/iommu/mtk_iommu.c                 |   4 +-
 drivers/iommu/qcom_iommu.c                |   3 +-
 include/linux/arm-smmu.h                  |  18 ++
 include/linux/iommu.h                     |  75 ++++-
 30 files changed, 1137 insertions(+), 121 deletions(-)
 create mode 100644 include/linux/arm-smmu.h

-- 
2.17.0



More information about the Freedreno mailing list