History

drm/msm: Add hint to DRM_IOCTL_MSM_GEM_INFO to return an object IOVA

Modify the 'pad' member of struct drm_msm_gem_info to 'flags'. If the user sets 'flags' to non-zero it means that they want a IOVA for the GEM object instead of a mmap() offset. Return the iova in the 'offset' member.

Jordan Crouse committed 9 years ago

Commit 49fd08b1 parent e895c7b2 files · +27 −4Browse files

Unified · Split

2 files
  1. drivers/gpu/drm/msm/msm_drv.c +21 −2
  2. include/uapi/drm/msm_drm.h +6 −2
drivers/gpu/drm/msm/msm_drv.c+21−2
@@ -699,6 +699,17 @@ static int msm_ioctl_gem_cpu_fini(struct drm_device *dev, void *data, · 698 unmodified lines
699 return ret;699 return ret;
700}700}
701 701
702static int msm_ioctl_gem_info_iova(struct drm_device *dev,
703 struct drm_gem_object *obj, uint64_t *iova)
704{
705 struct msm_drm_private *priv = dev->dev_private;
706
707 if (!priv->gpu)
708 return -EINVAL;
709
710 return msm_gem_get_iova(obj, priv->gpu->id, iova);
711}
712
702static int msm_ioctl_gem_info(struct drm_device *dev, void *data,713static int msm_ioctl_gem_info(struct drm_device *dev, void *data,
703 struct drm_file *file)714 struct drm_file *file)
704{715{
@@ -706,14 +717,22 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void *data, · 1 unmodified line
706 struct drm_gem_object *obj;717 struct drm_gem_object *obj;
707 int ret = 0;718 int ret = 0;
708 719
709 if (args->pad)720 if (args->flags & ~MSM_INFO_FLAGS)
710 return -EINVAL;721 return -EINVAL;
711 722
712 obj = drm_gem_object_lookup(file, args->handle);723 obj = drm_gem_object_lookup(file, args->handle);
713 if (!obj)724 if (!obj)
714 return -ENOENT;725 return -ENOENT;
715 726
716 args->offset = msm_gem_mmap_offset(obj);727 if (args->flags & MSM_INFO_IOVA) {
728 uint64_t iova;
729
730 ret = msm_ioctl_gem_info_iova(dev, obj, &iova);
731 if (!ret)
732 args->offset = iova;
733 } else {
734 args->offset = msm_gem_mmap_offset(obj);
735 }
717 736
718 drm_gem_object_unreference_unlocked(obj);737 drm_gem_object_unreference_unlocked(obj);
719 738
include/uapi/drm/msm_drm.h+6−2
@@ -104,10 +104,14 @@ struct drm_msm_gem_new { · 103 unmodified lines
104 __u32 handle; /* out */104 __u32 handle; /* out */
105};105};
106 106
107#define MSM_INFO_IOVA 0x01
108
109#define MSM_INFO_FLAGS (MSM_INFO_IOVA)
110
107struct drm_msm_gem_info {111struct drm_msm_gem_info {
108 __u32 handle; /* in */112 __u32 handle; /* in */
109 __u32 pad;113 __u32 flags; /* in - combination of MSM_INFO_* flags */
110 __u64 offset; /* out, offset to pass to mmap() */114 __u64 offset; /* out, mmap() offset or iova */
111};115};
112 116
113#define MSM_PREP_READ 0x01117#define MSM_PREP_READ 0x01

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t