diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-08-11 14:44:18 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-08-11 14:44:18 -0400 |
commit | 7eb97ba611f5904abb3e0653b005904d9144c81a (patch) | |
tree | 2daa1275e9ee7298a88d53e0913fb363e61b9551 | |
parent | 2bfc37cdef08844c77f801a1beaa1f4efd3215df (diff) | |
parent | dd0c41f8a7e0babdadc61d5201ac8505a79dec05 (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.txt | 6 | ||||
-rw-r--r-- | drivers/video/fbdev/efifb.c | 8 | ||||
-rw-r--r-- | drivers/video/fbdev/imxfb.c | 10 | ||||
-rw-r--r-- | drivers/video/fbdev/omap2/omapfb/dss/core.c | 1 |
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 | ||
30 | Accepted options: | ||
31 | |||
32 | nowc 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 | -- |
31 | Edgar Hucek <gimli@dark-green.com> | 37 | Edgar 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 | ||
19 | static bool request_mem_succeeded = false; | 19 | static bool request_mem_succeeded = false; |
20 | static bool nowc = false; | ||
20 | 21 | ||
21 | static struct fb_var_screeninfo efifb_defined = { | 22 | static 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 | ||
194 | static int __init omap_dss_probe(struct platform_device *pdev) | 194 | static 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; |