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)