summaryrefslogtreecommitdiff
path: root/recipes-kernel/linux/linux-toradex-mainline-4.14/0011-drm-tegra-fb-Implement-fb_mmap-callback.patch
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-02-08 01:24:07 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-04-03 10:22:39 +0200
commiteb0e42331012533d87d8a7a4bf1b4e5ed31283c3 (patch)
treee91c16b62ae233293c901f7f711271c66da3a3db /recipes-kernel/linux/linux-toradex-mainline-4.14/0011-drm-tegra-fb-Implement-fb_mmap-callback.patch
parent9b8c081249f6b9754bcde2602fa1c3094ae3b2a6 (diff)
linux-toradex-mainline: apalis tk1 mainline, fbdev mmap fix
Integrate Thierry's fbdev mmap fix allowing legacy applications that use the mmap() syscall on the fbdev device to map framebuffer memory without causing a hang. Useful e.g. for Tezi. While at it also update to 4.14.30. Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Acked-by: Max Krummenacher <max.krummenacher@toradex.com> (cherry picked from commit 83d29c9dde04d0c8f2460831a6b22bce6579a72e)
Diffstat (limited to 'recipes-kernel/linux/linux-toradex-mainline-4.14/0011-drm-tegra-fb-Implement-fb_mmap-callback.patch')
-rw-r--r--recipes-kernel/linux/linux-toradex-mainline-4.14/0011-drm-tegra-fb-Implement-fb_mmap-callback.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-toradex-mainline-4.14/0011-drm-tegra-fb-Implement-fb_mmap-callback.patch b/recipes-kernel/linux/linux-toradex-mainline-4.14/0011-drm-tegra-fb-Implement-fb_mmap-callback.patch
new file mode 100644
index 0000000..7aa85ae
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-mainline-4.14/0011-drm-tegra-fb-Implement-fb_mmap-callback.patch
@@ -0,0 +1,56 @@
+From b8f3f500e09c2c457efc2fcbfe8b7f815f2e6a0e Mon Sep 17 00:00:00 2001
+From: Thierry Reding <treding@nvidia.com>
+Date: Wed, 7 Feb 2018 18:45:56 +0100
+Subject: [PATCH] drm/tegra: fb: Implement ->fb_mmap() callback
+
+This fixes hangs with legacy applications that use the mmap() syscall on
+the fbdev device to map framebuffer memory. The fbdev implementation for
+mmap() creates a mapping that conflicts with DRM usage and causes a hang
+when the memory is accessed through the mapping.
+
+Reported-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Signed-off-by: Thierry Reding <treding@nvidia.com>
+Tested-by: Stefan Agner <stefan@agner.ch>
+Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Reported-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Signed-off-by: Thierry Reding <treding@nvidia.com>
+---
+ drivers/gpu/drm/tegra/fb.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c
+index 001cb77e2f59..0786159edef3 100644
+--- a/drivers/gpu/drm/tegra/fb.c
++++ b/drivers/gpu/drm/tegra/fb.c
+@@ -224,12 +224,28 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
+ }
+
+ #ifdef CONFIG_DRM_FBDEV_EMULATION
++static int tegra_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
++{
++ struct drm_fb_helper *helper = info->par;
++ struct tegra_bo *bo;
++ int err;
++
++ bo = tegra_fb_get_plane(helper->fb, 0);
++
++ err = drm_gem_mmap_obj(&bo->gem, bo->gem.size, vma);
++ if (err < 0)
++ return err;
++
++ return __tegra_gem_mmap(&bo->gem, vma);
++}
++
+ static struct fb_ops tegra_fb_ops = {
+ .owner = THIS_MODULE,
+ DRM_FB_HELPER_DEFAULT_OPS,
+ .fb_fillrect = drm_fb_helper_sys_fillrect,
+ .fb_copyarea = drm_fb_helper_sys_copyarea,
+ .fb_imageblit = drm_fb_helper_sys_imageblit,
++ .fb_mmap = tegra_fb_mmap,
+ };
+
+ static int tegra_fbdev_probe(struct drm_fb_helper *helper,
+--
+2.15.1
+