<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>