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.
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(-) -- 2.51.1
