[PATCH 6/7] drm/exynos: Add exynos drm specific fb_mmap function

2012-07-13 Thread Inki Dae


> -Original Message-
> From: Prathyush K [mailto:prathyush.k at samsung.com]
> Sent: Wednesday, July 11, 2012 6:40 PM
> To: dri-devel at lists.freedesktop.org
> Cc: prathyush at chromium.org; m.szyprowski at samsung.com;
inki.dae at samsung.com;
> subash.ramaswamy at linaro.org
> Subject: [PATCH 6/7] drm/exynos: Add exynos drm specific fb_mmap function
> 
> 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 
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c |   16 
>  1 files changed, 16 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> index d5586cc..b53e638 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> @@ -46,8 +46,24 @@ 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)
> +{
> + if ((vma->vm_end - vma->vm_start) > info->fix.smem_len)
> + return -EINVAL;
> +
> + vma->vm_pgoff = 0;
> + vma->vm_flags |= VM_IO | VM_RESERVED;
> + if (dma_mmap_writecombine(info->device, vma, info->screen_base,
> + info->fix.smem_start, vma->vm_end - vma->vm_start))
> + return -EAGAIN;
> +
> + return 0;
> +}
> +

Ok, it's good feature. actually the physically non-contiguous gem buffer
allocated for console framebuffer has to be mapped with user space.

Thanks.

>  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



RE: [PATCH 6/7] drm/exynos: Add exynos drm specific fb_mmap function

2012-07-13 Thread Inki Dae


> -Original Message-
> From: Prathyush K [mailto:prathyus...@samsung.com]
> Sent: Wednesday, July 11, 2012 6:40 PM
> To: dri-devel@lists.freedesktop.org
> Cc: prathy...@chromium.org; m.szyprow...@samsung.com;
inki@samsung.com;
> subash.ramasw...@linaro.org
> Subject: [PATCH 6/7] drm/exynos: Add exynos drm specific fb_mmap function
> 
> 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 
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c |   16 
>  1 files changed, 16 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> index d5586cc..b53e638 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> @@ -46,8 +46,24 @@ 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)
> +{
> + if ((vma->vm_end - vma->vm_start) > info->fix.smem_len)
> + return -EINVAL;
> +
> + vma->vm_pgoff = 0;
> + vma->vm_flags |= VM_IO | VM_RESERVED;
> + if (dma_mmap_writecombine(info->device, vma, info->screen_base,
> + info->fix.smem_start, vma->vm_end - vma->vm_start))
> + return -EAGAIN;
> +
> + return 0;
> +}
> +

Ok, it's good feature. actually the physically non-contiguous gem buffer
allocated for console framebuffer has to be mapped with user space.

Thanks.

>  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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH 6/7] drm/exynos: Add exynos drm specific fb_mmap function

2012-07-11 Thread Prathyush K
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 
---
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c |   16 
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c 
b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index d5586cc..b53e638 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -46,8 +46,24 @@ 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)
+{
+   if ((vma->vm_end - vma->vm_start) > info->fix.smem_len)
+   return -EINVAL;
+
+   vma->vm_pgoff = 0;
+   vma->vm_flags |= VM_IO | VM_RESERVED;
+   if (dma_mmap_writecombine(info->device, vma, info->screen_base,
+   info->fix.smem_start, vma->vm_end - vma->vm_start))
+   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



[PATCH 6/7] drm/exynos: Add exynos drm specific fb_mmap function

2012-07-11 Thread Prathyush K
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 
---
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c |   16 
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c 
b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index d5586cc..b53e638 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -46,8 +46,24 @@ 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)
+{
+   if ((vma->vm_end - vma->vm_start) > info->fix.smem_len)
+   return -EINVAL;
+
+   vma->vm_pgoff = 0;
+   vma->vm_flags |= VM_IO | VM_RESERVED;
+   if (dma_mmap_writecombine(info->device, vma, info->screen_base,
+   info->fix.smem_start, vma->vm_end - vma->vm_start))
+   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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel