<br><br><div class="gmail_quote">2012/11/19 Kyungmin Park <span dir="ltr"><<a href="mailto:kmpark@infradead.org" target="_blank">kmpark@infradead.org</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<div><div class="h5"><br>
On 11/19/12, Prathyush K <<a href="mailto:prathyush.k@samsung.com">prathyush.k@samsung.com</a>> wrote:<br>
> Changelog v3:<br>
><br>
> Passing the actual buffer size instead of vm_size to dma_mmap_attrs.<br>
><br>
> Changelog v2:<br>
><br>
> Extracting the private data from fb_info structure to obtain the exynos<br>
> gem buffer structure. Now, dma address is obtained from the exynos gem<br>
> buffer structure and not from smem_start. Also calling dma_mmap_attrs<br>
> (instead of dma_mmap_writecombine) with the same attributes used<br>
> during allocation.<br>
><br>
> Changelog v1:<br>
><br>
> This patch adds a exynos drm specific implementation of fb_mmap<br>
> which supports mapping a non-contiguous buffer to user space.<br>
><br>
> This new function does not assume that the frame buffer is contiguous<br>
> and calls dma_mmap_writecombine for mapping the buffer to user space.<br>
> dma_mmap_writecombine will be able to map a contiguous buffer as well<br>
> as non-contig buffer depending on whether an IOMMU mapping is created<br>
> for drm or not.<br>
><br>
> Signed-off-by: Prathyush K <<a href="mailto:prathyush.k@samsung.com">prathyush.k@samsung.com</a>><br>
> ---<br>
> drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 30<br>
> +++++++++++++++++++++++++++++<br>
> 1 files changed, 30 insertions(+), 0 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c<br>
> b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c<br>
> index 67eb6ba..a6f8cc2 100644<br>
> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c<br>
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c<br>
> @@ -46,8 +46,38 @@ struct exynos_drm_fbdev {<br>
> struct exynos_drm_gem_obj *exynos_gem_obj;<br>
> };<br>
><br>
> +static int exynos_drm_fb_mmap(struct fb_info *info,<br>
> + struct vm_area_struct *vma)<br>
> +{<br>
> + struct drm_fb_helper *helper = info->par;<br>
> + struct exynos_drm_fbdev *exynos_fbd = to_exynos_fbdev(helper);<br>
> + struct exynos_drm_gem_obj *exynos_gem_obj = exynos_fbd->exynos_gem_obj;<br>
> + struct exynos_drm_gem_buf *buffer = exynos_gem_obj->buffer;<br>
> + unsigned long vm_size;<br>
> + int ret;<br>
> +<br>
> + DRM_DEBUG_KMS("%s\n", __func__);<br>
> +<br>
> + vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;<br>
</div></div>How do you sure VM_MIXEDMAP is not required?<br></blockquote><div><br>With iommu, VM_MIXEDMAP flag would be set internally.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">> +<br>
> + vm_size = vma->vm_end - vma->vm_start;<br>
> +<br>
> + if (vm_size > buffer->size)<br>
> + return -EINVAL;<br>
</div>does it really happended?<br>
<br></blockquote><div><br>vm_size is decided by user-mmap request so size to the vma area should be checked.<br><br>Applied.<br><br>Thanks,<br>Inki Dae<br><br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thank you,<br>
Kyungmin Park<br>
<div class="HOEnZb"><div class="h5">> +<br>
> + ret = dma_mmap_attrs(helper->dev->dev, vma, buffer->kvaddr,<br>
> + buffer->dma_addr, buffer->size, &buffer->dma_attrs);<br>
> + if (ret < 0) {<br>
> + DRM_ERROR("failed to mmap.\n");<br>
> + return ret;<br>
> + }<br>
> +<br>
> + return 0;<br>
> +}<br>
> +<br>
> static struct fb_ops exynos_drm_fb_ops = {<br>
> .owner = THIS_MODULE,<br>
> + .fb_mmap = exynos_drm_fb_mmap,<br>
> .fb_fillrect = cfb_fillrect,<br>
> .fb_copyarea = cfb_copyarea,<br>
> .fb_imageblit = cfb_imageblit,<br>
> --<br>
> 1.7.0.4<br>
><br>
> _______________________________________________<br>
> dri-devel mailing list<br>
> <a href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/dri-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/dri-devel</a><br>
><br>
_______________________________________________<br>
dri-devel mailing list<br>
<a href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/dri-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/dri-devel</a><br>
</div></div></blockquote></div><br>