Hi

Am 26.11.25 um 13:44 schrieb Boris Brezillon:
This series implements cached maps and explicit flushing for both panfrost
and panthor. To avoid code/bug duplication, the tricky guts of the cache
flushing ioctl which walk the sg list are broken into a new common shmem
helper which can be used by any driver.

Gem-shmem is getting more and more complicated. I think gem-shmem would be better off to be a simple implementation for all the drivers that use shadow buffering and software rendering. There are plenty of them. And drivers like the ones in sysfb/ are our failure-mode fallback. They should have non-complicated memory management wherever possible.

Therefore, could we first duplicate the existing gem-shmem code into gem-uma as we discussed recently on IRC? The changes are simple:

- copy the existing gem-shmem to gem-uma (plus renames)
- convert panthor and panfrost to the new interfaces

And on top of that, further improvements, such as the series at hand, could be done. Later we'd convert other drivers to gem-uma where it fits, such as lima.

Best regards
Thomas


The PanVK MR to use this lives here:

https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36385

The questions about the DMA-API based CPU-cache-flush mechanism used
in this patchset have been dropped. After briefly discussing it with
Sima and Robin, it seems there's a consensus on the fact we should
probably expose CPU cache maintenance without going through the DMA
API (extending drm_cache? providing MM helpers for CPU cache
flush/invalidation? It's not clear yet how, but this will be discussed
in a separate thread). In the meantime, we can rely on dma_sync because
that's good enough for our usecase.

Changes in v2:
- Expose the coherency so userspace can know when it should skip cache
   maintenance
- Hook things up at drm_gem_object_funcs level to dma-buf cpu_prep hooks
   can be implemented generically
- Revisit the semantics of the flags passed to gem_sync()
- Add BO_QUERY_INFO ioctls to query BO flags on imported objects and
   let the UMD know when cache maintenance is needed on those

Changes in v3:
- New patch to fix panthor_gpu_coherency_set()
- No other major changes, check each patch changelog for more details

Changes in v4:
- Two trivial fixes, check each patch changelog for more details

Changes in v5:
- Add a way to overload dma_buf_ops while still relying on the drm_prime
   boilerplate
- Add default shmem implementation for
   dma_buf_ops::{begin,end}_cpu_access()
- Provide custom dma_buf_ops to deal with CPU cache flushes around CPU
   accesses when the BO is CPU-cacheable
- Go back to a version of drm_gem_shmem_sync() that only deals with
   cache maintenance, and adjust the semantics to make it clear this is
   the only thing it cares about
- Adjust the BO_SYNC ioctls according to the new drm_gem_shmem_sync()
   semantics

Changes in v6:
- No major changes, check the changelog in each patch for more details

Boris Brezillon (10):
   drm/prime: Simplify life of drivers needing custom dma_buf_ops
   drm/shmem: Provide a generic {begin,end}_cpu_access() implementation
   drm/panthor: Provide a custom dma_buf implementation
   drm/panthor: Fix panthor_gpu_coherency_set()
   drm/panthor: Expose the selected coherency protocol to the UMD
   drm/panthor: Add a PANTHOR_BO_SYNC ioctl
   drm/panthor: Add an ioctl to query BO flags
   drm/panfrost: Provide a custom dma_buf implementation
   drm/panfrost: Expose the selected coherency protocol to the UMD
   drm/panfrost: Add an ioctl to query BO flags

Faith Ekstrand (5):
   drm/shmem: Add a drm_gem_shmem_sync() helper
   drm/panthor: Bump the driver version to 1.6
   drm/panfrost: Add a PANFROST_SYNC_BO ioctl
   drm/panfrost: Add flag to map GEM object Write-Back Cacheable
   drm/panfrost: Bump the driver version to 1.6

Loïc Molinari (1):
   drm/panthor: Add flag to map GEM object Write-Back Cacheable

  drivers/gpu/drm/drm_gem_shmem_helper.c     | 207 +++++++++++++++++++++
  drivers/gpu/drm/drm_prime.c                |  10 +-
  drivers/gpu/drm/panfrost/panfrost_device.h |   1 +
  drivers/gpu/drm/panfrost/panfrost_drv.c    | 101 +++++++++-
  drivers/gpu/drm/panfrost/panfrost_gem.c    |  67 +++++++
  drivers/gpu/drm/panfrost/panfrost_gem.h    |   9 +
  drivers/gpu/drm/panfrost/panfrost_gpu.c    |  26 ++-
  drivers/gpu/drm/panfrost/panfrost_regs.h   |  10 +-
  drivers/gpu/drm/panthor/panthor_device.c   |  10 +-
  drivers/gpu/drm/panthor/panthor_drv.c      |  79 +++++++-
  drivers/gpu/drm/panthor/panthor_gem.c      |  71 ++++++-
  drivers/gpu/drm/panthor/panthor_gem.h      |   4 +
  drivers/gpu/drm/panthor/panthor_gpu.c      |   2 +-
  drivers/gpu/drm/panthor/panthor_sched.c    |  18 +-
  include/drm/drm_drv.h                      |   8 +
  include/drm/drm_gem_shmem_helper.h         |  24 +++
  include/uapi/drm/panfrost_drm.h            |  76 +++++++-
  include/uapi/drm/panthor_drm.h             | 157 +++++++++++++++-
  18 files changed, 857 insertions(+), 23 deletions(-)


--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)


Reply via email to