On 30/10/2025 14:05, Boris Brezillon wrote: > Before we introduce cached CPU mappings, we want a dma_buf > implementation satisfying synchronization requests around CPU > accesses coming from a dma_buf exported by our driver. Let's > provide our own implementation relying on the default > gem_shmem_prime helpers designed for that purpose. > > v5: > - New patch > > Signed-off-by: Boris Brezillon <[email protected]>
Reviewed-by: Steven Price <[email protected]> > --- > drivers/gpu/drm/panthor/panthor_drv.c | 1 + > drivers/gpu/drm/panthor/panthor_gem.c | 19 +++++++++++++++++++ > drivers/gpu/drm/panthor/panthor_gem.h | 3 +++ > 3 files changed, 23 insertions(+) > > diff --git a/drivers/gpu/drm/panthor/panthor_drv.c > b/drivers/gpu/drm/panthor/panthor_drv.c > index fb4b293f17f0..99a4534c0074 100644 > --- a/drivers/gpu/drm/panthor/panthor_drv.c > +++ b/drivers/gpu/drm/panthor/panthor_drv.c > @@ -1618,6 +1618,7 @@ static const struct drm_driver panthor_drm_driver = { > > .gem_create_object = panthor_gem_create_object, > .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table, > + .gem_prime_get_dma_buf_ops = panthor_gem_prime_get_dma_buf_ops, > #ifdef CONFIG_DEBUG_FS > .debugfs_init = panthor_debugfs_init, > #endif > diff --git a/drivers/gpu/drm/panthor/panthor_gem.c > b/drivers/gpu/drm/panthor/panthor_gem.c > index 156c7a0b62a2..160692e45f44 100644 > --- a/drivers/gpu/drm/panthor/panthor_gem.c > +++ b/drivers/gpu/drm/panthor/panthor_gem.c > @@ -191,6 +191,25 @@ panthor_kernel_bo_create(struct panthor_device *ptdev, > struct panthor_vm *vm, > return ERR_PTR(ret); > } > > +static const struct dma_buf_ops panthor_dma_buf_ops = { > + .attach = drm_gem_map_attach, > + .detach = drm_gem_map_detach, > + .map_dma_buf = drm_gem_shmem_prime_map_dma_buf, > + .unmap_dma_buf = drm_gem_shmem_prime_unmap_dma_buf, > + .release = drm_gem_dmabuf_release, > + .mmap = drm_gem_dmabuf_mmap, > + .vmap = drm_gem_dmabuf_vmap, > + .vunmap = drm_gem_dmabuf_vunmap, > + .begin_cpu_access = drm_gem_shmem_prime_begin_cpu_access, > + .end_cpu_access = drm_gem_shmem_prime_end_cpu_access, > +}; > + > +const struct dma_buf_ops * > +panthor_gem_prime_get_dma_buf_ops(struct drm_device *dev) > +{ > + return &panthor_dma_buf_ops; > +} > + > static struct dma_buf * > panthor_gem_prime_export(struct drm_gem_object *obj, int flags) > { > diff --git a/drivers/gpu/drm/panthor/panthor_gem.h > b/drivers/gpu/drm/panthor/panthor_gem.h > index 80c6e24112d0..528088839468 100644 > --- a/drivers/gpu/drm/panthor/panthor_gem.h > +++ b/drivers/gpu/drm/panthor/panthor_gem.h > @@ -147,6 +147,9 @@ panthor_gem_create_with_handle(struct drm_file *file, > void panthor_gem_bo_set_label(struct drm_gem_object *obj, const char *label); > void panthor_gem_kernel_bo_set_label(struct panthor_kernel_bo *bo, const > char *label); > > +const struct dma_buf_ops * > +panthor_gem_prime_get_dma_buf_ops(struct drm_device *dev); > + > static inline u64 > panthor_kernel_bo_gpuva(struct panthor_kernel_bo *bo) > {
