aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-08-11 14:44:18 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-08-11 14:44:18 -0400
commit7eb97ba611f5904abb3e0653b005904d9144c81a (patch)
tree2daa1275e9ee7298a88d53e0913fb363e61b9551
parent2bfc37cdef08844c77f801a1beaa1f4efd3215df (diff)
parentdd0c41f8a7e0babdadc61d5201ac8505a79dec05 (diff)
Merge tag 'fbdev-v4.13-rc5' of git://github.com/bzolnier/linux
Pull fbdev fixes from Bartlomiej Zolnierkiewicz: - allow user to disable write combined mapping in efifb driver (Dave Airlie) - fix use after free bugs on driver removal in imxfb driver (Dan Carpenter) - fix unused variable warning in omapfb driver (Arnd Bergmann) * tag 'fbdev-v4.13-rc5' of git://github.com/bzolnier/linux: efifb: allow user to disable write combined mapping. fbdev: omapfb: remove unused variable video: fbdev: imxfb: use after free in imxfb_remove()
-rw-r--r--Documentation/fb/efifb.txt6
-rw-r--r--drivers/video/fbdev/efifb.c8
-rw-r--r--drivers/video/fbdev/imxfb.c10
-rw-r--r--drivers/video/fbdev/omap2/omapfb/dss/core.c1
4 files changed, 16 insertions, 9 deletions
diff --git a/Documentation/fb/efifb.txt b/Documentation/fb/efifb.txt
index a59916c29b33..1a85c1bdaf38 100644
--- a/Documentation/fb/efifb.txt
+++ b/Documentation/fb/efifb.txt
@@ -27,5 +27,11 @@ You have to add the following kernel parameters in your elilo.conf:
27 Macbook Pro 17", iMac 20" : 27 Macbook Pro 17", iMac 20" :
28 video=efifb:i20 28 video=efifb:i20
29 29
30Accepted options:
31
32nowc Don't map the framebuffer write combined. This can be used
33 to workaround side-effects and slowdowns on other CPU cores
34 when large amounts of console data are written.
35
30-- 36--
31Edgar Hucek <gimli@dark-green.com> 37Edgar Hucek <gimli@dark-green.com>
diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c
index ff01bed7112f..1e784adb89b1 100644
--- a/drivers/video/fbdev/efifb.c
+++ b/drivers/video/fbdev/efifb.c
@@ -17,6 +17,7 @@
17#include <asm/efi.h> 17#include <asm/efi.h>
18 18
19static bool request_mem_succeeded = false; 19static bool request_mem_succeeded = false;
20static bool nowc = false;
20 21
21static struct fb_var_screeninfo efifb_defined = { 22static struct fb_var_screeninfo efifb_defined = {
22 .activate = FB_ACTIVATE_NOW, 23 .activate = FB_ACTIVATE_NOW,
@@ -99,6 +100,8 @@ static int efifb_setup(char *options)
99 screen_info.lfb_height = simple_strtoul(this_opt+7, NULL, 0); 100 screen_info.lfb_height = simple_strtoul(this_opt+7, NULL, 0);
100 else if (!strncmp(this_opt, "width:", 6)) 101 else if (!strncmp(this_opt, "width:", 6))
101 screen_info.lfb_width = simple_strtoul(this_opt+6, NULL, 0); 102 screen_info.lfb_width = simple_strtoul(this_opt+6, NULL, 0);
103 else if (!strcmp(this_opt, "nowc"))
104 nowc = true;
102 } 105 }
103 } 106 }
104 107
@@ -255,7 +258,10 @@ static int efifb_probe(struct platform_device *dev)
255 info->apertures->ranges[0].base = efifb_fix.smem_start; 258 info->apertures->ranges[0].base = efifb_fix.smem_start;
256 info->apertures->ranges[0].size = size_remap; 259 info->apertures->ranges[0].size = size_remap;
257 260
258 info->screen_base = ioremap_wc(efifb_fix.smem_start, efifb_fix.smem_len); 261 if (nowc)
262 info->screen_base = ioremap(efifb_fix.smem_start, efifb_fix.smem_len);
263 else
264 info->screen_base = ioremap_wc(efifb_fix.smem_start, efifb_fix.smem_len);
259 if (!info->screen_base) { 265 if (!info->screen_base) {
260 pr_err("efifb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n", 266 pr_err("efifb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n",
261 efifb_fix.smem_len, efifb_fix.smem_start); 267 efifb_fix.smem_len, efifb_fix.smem_start);
diff --git a/drivers/video/fbdev/imxfb.c b/drivers/video/fbdev/imxfb.c
index c166e0725be5..ba82f97fb42b 100644
--- a/drivers/video/fbdev/imxfb.c
+++ b/drivers/video/fbdev/imxfb.c
@@ -1073,20 +1073,16 @@ static int imxfb_remove(struct platform_device *pdev)
1073 imxfb_disable_controller(fbi); 1073 imxfb_disable_controller(fbi);
1074 1074
1075 unregister_framebuffer(info); 1075 unregister_framebuffer(info);
1076 1076 fb_dealloc_cmap(&info->cmap);
1077 pdata = dev_get_platdata(&pdev->dev); 1077 pdata = dev_get_platdata(&pdev->dev);
1078 if (pdata && pdata->exit) 1078 if (pdata && pdata->exit)
1079 pdata->exit(fbi->pdev); 1079 pdata->exit(fbi->pdev);
1080
1081 fb_dealloc_cmap(&info->cmap);
1082 kfree(info->pseudo_palette);
1083 framebuffer_release(info);
1084
1085 dma_free_wc(&pdev->dev, fbi->map_size, info->screen_base, 1080 dma_free_wc(&pdev->dev, fbi->map_size, info->screen_base,
1086 fbi->map_dma); 1081 fbi->map_dma);
1087
1088 iounmap(fbi->regs); 1082 iounmap(fbi->regs);
1089 release_mem_region(res->start, resource_size(res)); 1083 release_mem_region(res->start, resource_size(res));
1084 kfree(info->pseudo_palette);
1085 framebuffer_release(info);
1090 1086
1091 return 0; 1087 return 0;
1092} 1088}
diff --git a/drivers/video/fbdev/omap2/omapfb/dss/core.c b/drivers/video/fbdev/omap2/omapfb/dss/core.c
index eecf695c16f4..09e5bb013d28 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/core.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/core.c
@@ -193,7 +193,6 @@ static struct notifier_block omap_dss_pm_notif_block = {
193 193
194static int __init omap_dss_probe(struct platform_device *pdev) 194static int __init omap_dss_probe(struct platform_device *pdev)
195{ 195{
196 struct omap_dss_board_info *pdata = pdev->dev.platform_data;
197 int r; 196 int r;
198 197
199 core.pdev = pdev; 198 core.pdev = pdev;