[PATCH] drm/exynos: Add exynos drm specific fb_mmap function
Inki Dae
inki.dae at samsung.com
Fri Nov 9 05:38:36 PST 2012
sorry for being late.
2012/11/7 Rahul Sharma <rahul.sharma at samsung.com>
> From: Prathyush K <prathyush.k at samsung.com>
>
> This patch adds a exynos drm specific implementation of fb_mmap
> which supports mapping a non-contiguous buffer to user space.
>
> This new function does not assume that the frame buffer is contiguous
> and calls dma_mmap_writecombine for mapping the buffer to user space.
> dma_mmap_writecombine will be able to map a contiguous buffer as well
> as non-contig buffer depending on whether an IOMMU mapping is created
> for drm or not.
>
> Signed-off-by: Prathyush K <prathyush.k at samsung.com>
> Signed-off-by: Rahul Sharma <rahul.sharma at samsung.com>
> ---
> drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 26
> ++++++++++++++++++++++++++
> 1 files changed, 26 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> index 67eb6ba..3939f7f 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> @@ -46,8 +46,34 @@ struct exynos_drm_fbdev {
> struct exynos_drm_gem_obj *exynos_gem_obj;
> };
>
> +static int exynos_drm_fb_mmap(struct fb_info *info,
> + struct vm_area_struct *vma)
> +{
> + DRM_DEBUG_KMS("%s\n", __func__);
> +
> + if (!vma || !info) {
> + DRM_ERROR("invalid arguments vma 0x%x, info 0x%x.\n",
> + (unsigned int)vma, (unsigned int)info);
> + return -EINVAL;
> + }
> +
> + if (!info->screen_base || info->screen_size == 0) {
> + DRM_ERROR("invalid screen information.\n");
> + return -EINVAL;
> + }
> +
> + vma->vm_pgoff = 0;
> + vma->vm_flags |= VM_IO;
> + if (dma_mmap_writecombine(info->device, vma, info->screen_base,
> + info->fix.smem_start, vma->vm_end - vma->vm_start))
>
fix.smem_start should have physical address. Please see the below comment
of framebuffer header,
struct fb_fix_screeninfo {
...
unsigned long smem_start; /* Start of frame
buffer mem */
/*
(physical address) */
For this, I posted fixup patch so smem_start has physical address always.
Thanks,
Inki Dae
> + return -EAGAIN;
> +
> + return 0;
> +}
> +
> static struct fb_ops exynos_drm_fb_ops = {
> .owner = THIS_MODULE,
> + .fb_mmap = exynos_drm_fb_mmap,
> .fb_fillrect = cfb_fillrect,
> .fb_copyarea = cfb_copyarea,
> .fb_imageblit = cfb_imageblit,
> --
> 1.7.0.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20121109/edd38d58/attachment.html>
More information about the dri-devel
mailing list