[PATCH 6/7] drm/exynos: Add exynos drm specific fb_mmap function
> -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
> -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
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
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