kernel: refresh patches
[openwrt/svn-archive/archive.git] / target / linux / brcm2708 / patches-3.14 / 0054-fb-distinguish-physical-and-bus-addresses.patch
1 From 2bdcc63f2648ad4dfa88aaf035e025b2b193a1cc Mon Sep 17 00:00:00 2001
2 From: popcornmix <popcornmix@gmail.com>
3 Date: Fri, 9 May 2014 15:45:13 +0100
4 Subject: [PATCH 54/54] fb: distinguish physical and bus addresses
5
6 ---
7 drivers/video/bcm2708_fb.c | 15 +++++++++------
8 1 file changed, 9 insertions(+), 6 deletions(-)
9
10 --- a/drivers/video/bcm2708_fb.c
11 +++ b/drivers/video/bcm2708_fb.c
12 @@ -89,6 +89,7 @@ struct bcm2708_fb {
13 struct dentry *debugfs_dir;
14 wait_queue_head_t dma_waitq;
15 struct bcm2708_fb_stats stats;
16 + unsigned long fb_bus_address;
17 };
18
19 #define to_bcm2708(info) container_of(info, struct bcm2708_fb, fb)
20 @@ -314,13 +315,15 @@ static int bcm2708_fb_set_par(struct fb_
21 else
22 fb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
23
24 + fb->fb_bus_address = fbinfo->base;
25 + fbinfo->base &= ~0xc0000000;
26 fb->fb.fix.smem_start = fbinfo->base;
27 fb->fb.fix.smem_len = fbinfo->pitch * fbinfo->yres_virtual;
28 fb->fb.screen_size = fbinfo->screen_size;
29 if (fb->fb.screen_base)
30 iounmap(fb->fb.screen_base);
31 fb->fb.screen_base =
32 - (void *)ioremap_wc(fb->fb.fix.smem_start, fb->fb.screen_size);
33 + (void *)ioremap_wc(fbinfo->base, fb->fb.screen_size);
34 if (!fb->fb.screen_base) {
35 /* the console may currently be locked */
36 console_trylock();
37 @@ -331,7 +334,7 @@ static int bcm2708_fb_set_par(struct fb_
38 }
39 print_debug
40 ("BCM2708FB: start = %p,%p width=%d, height=%d, bpp=%d, pitch=%d size=%d success=%d\n",
41 - (void *)fb->fb.screen_base, (void *)fb->fb.fix.smem_start,
42 + (void *)fb->fb.screen_base, (void *)fb->fb_bus_address,
43 fbinfo->xres, fbinfo->yres, fbinfo->bpp,
44 fbinfo->pitch, (int)fb->fb.screen_size, val);
45
46 @@ -457,11 +460,11 @@ static void bcm2708_fb_copyarea(struct f
47
48 for (y = 0; y < region->height; y += scanlines_per_cb) {
49 dma_addr_t src =
50 - fb->fb.fix.smem_start +
51 + fb->fb_bus_address +
52 bytes_per_pixel * region->sx +
53 (region->sy + y) * fb->fb.fix.line_length;
54 dma_addr_t dst =
55 - fb->fb.fix.smem_start +
56 + fb->fb_bus_address +
57 bytes_per_pixel * region->dx +
58 (region->dy + y) * fb->fb.fix.line_length;
59
60 @@ -499,10 +502,10 @@ static void bcm2708_fb_copyarea(struct f
61 stride = -fb->fb.fix.line_length;
62 }
63 set_dma_cb(cb, burst_size,
64 - fb->fb.fix.smem_start + dy * fb->fb.fix.line_length +
65 + fb->fb_bus_address + dy * fb->fb.fix.line_length +
66 bytes_per_pixel * region->dx,
67 stride,
68 - fb->fb.fix.smem_start + sy * fb->fb.fix.line_length +
69 + fb->fb_bus_address + sy * fb->fb.fix.line_length +
70 bytes_per_pixel * region->sx,
71 stride,
72 region->width * bytes_per_pixel,