Skip to content

Commit ef86c32

Browse files
committed
Merge pull request #120 from endlessm/shell/6274
drm/meson: Implent gem_prime_mmap
2 parents b5fa203 + b8b624b commit ef86c32

3 files changed

Lines changed: 25 additions & 0 deletions

File tree

drivers/gpu/drm/meson/meson_drv.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,6 +1288,7 @@ static struct drm_driver meson_driver = {
12881288
.gem_prime_export = drm_gem_prime_export,
12891289
.gem_prime_get_sg_table = meson_drm_gem_get_sg_table,
12901290
.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
1291+
.gem_prime_mmap = meson_drm_gem_prime_mmap,
12911292
.dumb_create = meson_drm_gem_dumb_create,
12921293
.dumb_map_offset = meson_drm_gem_dumb_map_offset,
12931294
.dumb_destroy = drm_gem_dumb_destroy,

drivers/gpu/drm/meson/meson_gem.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,28 @@ int meson_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
386386
return meson_drm_gem_scattered_mmap_obj(meson_gem_obj, vma);
387387
}
388388

389+
int meson_drm_gem_prime_mmap(struct drm_gem_object *obj,
390+
struct vm_area_struct *vma)
391+
{
392+
struct meson_drm_gem_object *meson_gem_obj;
393+
struct drm_device *dev = obj->dev;
394+
int ret;
395+
396+
mutex_lock(&dev->struct_mutex);
397+
ret = drm_gem_mmap_obj(obj, obj->size, vma);
398+
mutex_unlock(&dev->struct_mutex);
399+
if (ret < 0)
400+
return ret;
401+
402+
meson_gem_obj = to_meson_drm_gem_obj(obj);
403+
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
404+
405+
if (!meson_gem_obj->is_scattered)
406+
return meson_drm_gem_cma_mmap_obj(meson_gem_obj, vma);
407+
408+
return meson_drm_gem_scattered_mmap_obj(meson_gem_obj, vma);
409+
}
410+
389411
int meson_drm_gem_dumb_create(struct drm_file *file_priv,
390412
struct drm_device *dev,
391413
struct drm_mode_create_dumb *args)

drivers/gpu/drm/meson/meson_gem.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ void meson_drm_gem_free_object(struct drm_gem_object *gem_obj);
5757
int meson_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
5858
struct sg_table *meson_drm_gem_get_sg_table(struct drm_gem_object *obj);
5959
int meson_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
60+
int meson_drm_gem_prime_mmap(struct drm_gem_object *obj,
61+
struct vm_area_struct *vma);
6062
struct meson_drm_gem_object *meson_drm_gem_create_obj(struct drm_device *dev,
6163
unsigned int size);
6264
int meson_drm_gem_dumb_create(struct drm_file *file_priv,

0 commit comments

Comments
 (0)