diff options
| author | Luis R. Rodriguez <mcgrof@suse.com> | 2015-05-28 20:30:33 -0400 |
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2015-05-29 01:45:28 -0400 |
| commit | 5944d733f34a9b2a5ce7ab2eb17f41ebfaf90a65 (patch) | |
| tree | f70f8d8b0c9a5823e196946aa8418791eda75345 | |
| parent | 5e200b5352ccc40f39b64df5216772780ef03e7f (diff) | |
video: fbdev: gbefb: add missing mtrr_del() calls
This driver never removed the MTRRs. Fix that.
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Juergen Gross <jgross@suse.com>
Cc: Jingoo Han <jg1.han@samsung.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Masanari Iida <standby24x7@gmail.com>
Cc: Suresh Siddha <sbsiddha@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Antonino Daplas <adaplas@gmail.com>
Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: linux-fbdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
| -rw-r--r-- | drivers/video/fbdev/gbefb.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/video/fbdev/gbefb.c b/drivers/video/fbdev/gbefb.c index 6d9ef39810c8..4e54faa066dc 100644 --- a/drivers/video/fbdev/gbefb.c +++ b/drivers/video/fbdev/gbefb.c | |||
| @@ -38,6 +38,7 @@ static struct sgi_gbe *gbe; | |||
| 38 | struct gbefb_par { | 38 | struct gbefb_par { |
| 39 | struct fb_var_screeninfo var; | 39 | struct fb_var_screeninfo var; |
| 40 | struct gbe_timing_info timing; | 40 | struct gbe_timing_info timing; |
| 41 | int wc_cookie; | ||
| 41 | int valid; | 42 | int valid; |
| 42 | }; | 43 | }; |
| 43 | 44 | ||
| @@ -1198,8 +1199,10 @@ static int gbefb_probe(struct platform_device *p_dev) | |||
| 1198 | gbe_mem_phys = (unsigned long) gbe_dma_addr; | 1199 | gbe_mem_phys = (unsigned long) gbe_dma_addr; |
| 1199 | } | 1200 | } |
| 1200 | 1201 | ||
| 1202 | par = info->par; | ||
| 1201 | #ifdef CONFIG_X86 | 1203 | #ifdef CONFIG_X86 |
| 1202 | mtrr_add(gbe_mem_phys, gbe_mem_size, MTRR_TYPE_WRCOMB, 1); | 1204 | par->wc_cookie = mtrr_add(gbe_mem_phys, gbe_mem_size, |
| 1205 | MTRR_TYPE_WRCOMB, 1); | ||
| 1203 | #endif | 1206 | #endif |
| 1204 | 1207 | ||
| 1205 | /* map framebuffer memory into tiles table */ | 1208 | /* map framebuffer memory into tiles table */ |
| @@ -1215,7 +1218,6 @@ static int gbefb_probe(struct platform_device *p_dev) | |||
| 1215 | /* reset GBE */ | 1218 | /* reset GBE */ |
| 1216 | gbe_reset(); | 1219 | gbe_reset(); |
| 1217 | 1220 | ||
| 1218 | par = info->par; | ||
| 1219 | /* turn on default video mode */ | 1221 | /* turn on default video mode */ |
| 1220 | if (fb_find_mode(&par->var, info, mode_option, NULL, 0, | 1222 | if (fb_find_mode(&par->var, info, mode_option, NULL, 0, |
| 1221 | default_mode, 8) == 0) | 1223 | default_mode, 8) == 0) |
| @@ -1240,6 +1242,10 @@ static int gbefb_probe(struct platform_device *p_dev) | |||
| 1240 | return 0; | 1242 | return 0; |
| 1241 | 1243 | ||
| 1242 | out_gbe_unmap: | 1244 | out_gbe_unmap: |
| 1245 | #ifdef CONFIG_MTRR | ||
| 1246 | if (par->wc_cookie >= 0) | ||
| 1247 | mtrr_del(par->wc_cookie, 0, 0); | ||
| 1248 | #endif | ||
| 1243 | if (gbe_dma_addr) | 1249 | if (gbe_dma_addr) |
| 1244 | dma_free_coherent(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys); | 1250 | dma_free_coherent(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys); |
| 1245 | out_tiles_free: | 1251 | out_tiles_free: |
| @@ -1256,9 +1262,14 @@ out_release_framebuffer: | |||
| 1256 | static int gbefb_remove(struct platform_device* p_dev) | 1262 | static int gbefb_remove(struct platform_device* p_dev) |
| 1257 | { | 1263 | { |
| 1258 | struct fb_info *info = platform_get_drvdata(p_dev); | 1264 | struct fb_info *info = platform_get_drvdata(p_dev); |
| 1265 | struct gbefb_par *par = info->par; | ||
| 1259 | 1266 | ||
| 1260 | unregister_framebuffer(info); | 1267 | unregister_framebuffer(info); |
| 1261 | gbe_turn_off(); | 1268 | gbe_turn_off(); |
| 1269 | #ifdef CONFIG_MTRR | ||
| 1270 | if (par->wc_cookie >= 0) | ||
| 1271 | mtrr_del(par->wc_cookie, 0, 0); | ||
| 1272 | #endif | ||
| 1262 | if (gbe_dma_addr) | 1273 | if (gbe_dma_addr) |
| 1263 | dma_free_coherent(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys); | 1274 | dma_free_coherent(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys); |
| 1264 | dma_free_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t), | 1275 | dma_free_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t), |
