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/panfrost/panfrost_drv.c | 1 + > drivers/gpu/drm/panfrost/panfrost_gem.c | 19 +++++++++++++++++++ > drivers/gpu/drm/panfrost/panfrost_gem.h | 2 ++ > 3 files changed, 22 insertions(+) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c > b/drivers/gpu/drm/panfrost/panfrost_drv.c > index 1c3c574cd64a..e3cdc0c95a56 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c > @@ -852,6 +852,7 @@ static const struct drm_driver panfrost_drm_driver = { > > .gem_create_object = panfrost_gem_create_object, > .gem_prime_import_sg_table = panfrost_gem_prime_import_sg_table, > + .gem_prime_get_dma_buf_ops = panfrost_gem_prime_get_dma_buf_ops, > #ifdef CONFIG_DEBUG_FS > .debugfs_init = panfrost_debugfs_init, > #endif > diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c > b/drivers/gpu/drm/panfrost/panfrost_gem.c > index 0528de674a4f..070ea7108af6 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gem.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c > @@ -323,6 +323,25 @@ panfrost_gem_create(struct drm_device *dev, size_t size, > u32 flags) > return bo; > } > > +static const struct dma_buf_ops panfrost_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 * > +panfrost_gem_prime_get_dma_buf_ops(struct drm_device *dev) > +{ > + return &panfrost_dma_buf_ops; > +} > + > struct drm_gem_object * > panfrost_gem_prime_import_sg_table(struct drm_device *dev, > struct dma_buf_attachment *attach, > diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h > b/drivers/gpu/drm/panfrost/panfrost_gem.h > index 8de3e76f2717..c63264464271 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gem.h > +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h > @@ -130,6 +130,8 @@ struct drm_gem_object * > panfrost_gem_prime_import_sg_table(struct drm_device *dev, > struct dma_buf_attachment *attach, > struct sg_table *sgt); > +const struct dma_buf_ops * > +panfrost_gem_prime_get_dma_buf_ops(struct drm_device *dev); > > struct panfrost_gem_object * > panfrost_gem_create(struct drm_device *dev, size_t size, u32 flags);
