Commit 6b794743b2c5e21825d35b5d5dd57d6fcc388198
1 parent
28e58cc958
Exists in
master
and in
7 other branches
unicore32 framebuffer fix: get videomemory by __get_free_pages() and make it floatable
1. get videomemory by __get_free_pages() in fb-puv3.c 2. remove resource reservation for old fixed UNIGFX_MMAP & UVC_MMAP space 3. remove unused macros: PKUNTIY_UNIGFX_MMAP_BASE, PKUNITY_UNIGFX_MMAP_SIZE, PKUNITY_UVC_MMAP_BASE, PKUNITY_UVC_MMAP_SIZE and KUSER_UNIGFX_BASE 4. remove unused header linux/vmalloc.h in fb-puv3.h Signed-off-by: Guan Xuetao <gxt@mprc.pku.edu.cn> Acked-by: Arnd Bergmann <arnd@arndb.de>
Showing 6 changed files with 19 additions and 60 deletions Side-by-side Diff
arch/unicore32/include/mach/PKUnity.h
... | ... | @@ -24,16 +24,6 @@ |
24 | 24 | #define PKUNITY_MMIO_BASE 0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */ |
25 | 25 | |
26 | 26 | /* |
27 | - * PKUNITY Memory Map Addresses: 0x0D000000 - 0x0EFFFFFF (32MB) | |
28 | - * 0x0D000000 - 0x0DFFFFFF 16MB: for UVC | |
29 | - * 0x0E000000 - 0x0EFFFFFF 16MB: for UNIGFX | |
30 | - */ | |
31 | -#define PKUNITY_UVC_MMAP_BASE 0x0D000000 | |
32 | -#define PKUNITY_UVC_MMAP_SIZE 0x01000000 /* 16MB */ | |
33 | -#define PKUNITY_UNIGFX_MMAP_BASE 0x0E000000 | |
34 | -#define PKUNITY_UNIGFX_MMAP_SIZE 0x01000000 /* 16MB */ | |
35 | - | |
36 | -/* | |
37 | 27 | * PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB) |
38 | 28 | * 0x80000000 - 0x8000000B 12B PCI Configuration regs |
39 | 29 | * 0x80010000 - 0x80010250 592B PCI Bridge Base |
arch/unicore32/include/mach/memory.h
... | ... | @@ -50,7 +50,6 @@ |
50 | 50 | |
51 | 51 | /* kuser area */ |
52 | 52 | #define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000)) |
53 | -#define KUSER_UNIGFX_BASE (PAGE_OFFSET + PKUNITY_UNIGFX_MMAP_BASE) | |
54 | 53 | /* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */ |
55 | 54 | #define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \ |
56 | 55 | + (VECTORS_BASE)) |
arch/unicore32/kernel/puv3-core.c
... | ... | @@ -99,11 +99,6 @@ |
99 | 99 | .end = io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff, |
100 | 100 | .flags = IORESOURCE_MEM, |
101 | 101 | }, |
102 | - [1] = { | |
103 | - .start = PKUNITY_UNIGFX_MMAP_BASE, | |
104 | - .end = PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE, | |
105 | - .flags = IORESOURCE_MEM, | |
106 | - }, | |
107 | 102 | }; |
108 | 103 | |
109 | 104 | static struct resource puv3_rtc_resources[] = { |
arch/unicore32/kernel/setup.c
... | ... | @@ -64,12 +64,6 @@ |
64 | 64 | */ |
65 | 65 | static struct resource mem_res[] = { |
66 | 66 | { |
67 | - .name = "Video RAM", | |
68 | - .start = 0, | |
69 | - .end = 0, | |
70 | - .flags = IORESOURCE_MEM | |
71 | - }, | |
72 | - { | |
73 | 67 | .name = "Kernel text", |
74 | 68 | .start = 0, |
75 | 69 | .end = 0, |
... | ... | @@ -83,9 +77,8 @@ |
83 | 77 | } |
84 | 78 | }; |
85 | 79 | |
86 | -#define video_ram mem_res[0] | |
87 | -#define kernel_code mem_res[1] | |
88 | -#define kernel_data mem_res[2] | |
80 | +#define kernel_code mem_res[0] | |
81 | +#define kernel_data mem_res[1] | |
89 | 82 | |
90 | 83 | /* |
91 | 84 | * These functions re-use the assembly code in head.S, which |
... | ... | @@ -224,10 +217,6 @@ |
224 | 217 | kernel_data.end <= res->end) |
225 | 218 | request_resource(res, &kernel_data); |
226 | 219 | } |
227 | - | |
228 | - video_ram.start = PKUNITY_UNIGFX_MMAP_BASE; | |
229 | - video_ram.end = PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE; | |
230 | - request_resource(&iomem_resource, &video_ram); | |
231 | 220 | } |
232 | 221 | |
233 | 222 | static void (*init_machine)(void) __initdata; |
arch/unicore32/mm/mmu.c
... | ... | @@ -338,15 +338,6 @@ |
338 | 338 | * and can only be in node 0. |
339 | 339 | */ |
340 | 340 | memblock_reserve(__pa(swapper_pg_dir), PTRS_PER_PGD * sizeof(pgd_t)); |
341 | - | |
342 | -#ifdef CONFIG_PUV3_UNIGFX | |
343 | - /* | |
344 | - * These should likewise go elsewhere. They pre-reserve the | |
345 | - * screen/video memory region at the 48M~64M of main system memory. | |
346 | - */ | |
347 | - memblock_reserve(PKUNITY_UNIGFX_MMAP_BASE, PKUNITY_UNIGFX_MMAP_SIZE); | |
348 | - memblock_reserve(PKUNITY_UVC_MMAP_BASE, PKUNITY_UVC_MMAP_SIZE); | |
349 | -#endif | |
350 | 341 | } |
351 | 342 | |
352 | 343 | /* |
... | ... | @@ -369,17 +360,6 @@ |
369 | 360 | |
370 | 361 | for (addr = VMALLOC_END; addr; addr += PGDIR_SIZE) |
371 | 362 | pmd_clear(pmd_off_k(addr)); |
372 | - | |
373 | - /* | |
374 | - * Create a mapping for UniGFX VRAM | |
375 | - */ | |
376 | -#ifdef CONFIG_PUV3_UNIGFX | |
377 | - map.pfn = __phys_to_pfn(PKUNITY_UNIGFX_MMAP_BASE); | |
378 | - map.virtual = KUSER_UNIGFX_BASE; | |
379 | - map.length = PKUNITY_UNIGFX_MMAP_SIZE; | |
380 | - map.type = MT_KUSER; | |
381 | - create_mapping(&map); | |
382 | -#endif | |
383 | 363 | |
384 | 364 | /* |
385 | 365 | * Create a mapping for the machine vectors at the high-vectors |
drivers/video/fb-puv3.c
... | ... | @@ -13,7 +13,6 @@ |
13 | 13 | #include <linux/module.h> |
14 | 14 | #include <linux/kernel.h> |
15 | 15 | #include <linux/errno.h> |
16 | -#include <linux/vmalloc.h> | |
17 | 16 | #include <linux/platform_device.h> |
18 | 17 | #include <linux/clk.h> |
19 | 18 | #include <linux/fb.h> |
... | ... | @@ -531,7 +530,7 @@ |
531 | 530 | return -EINVAL; |
532 | 531 | } |
533 | 532 | |
534 | - writel(PKUNITY_UNIGFX_MMAP_BASE, UDE_FSA); | |
533 | + writel(info->fix.smem_start, UDE_FSA); | |
535 | 534 | writel(info->var.yres, UDE_LS); |
536 | 535 | writel(get_line_length(info->var.xres, |
537 | 536 | info->var.bits_per_pixel) >> 3, UDE_PS); |
538 | 537 | |
539 | 538 | |
... | ... | @@ -680,13 +679,27 @@ |
680 | 679 | struct fb_info *info; |
681 | 680 | u32 unifb_regs[UNIFB_REGS_NUM]; |
682 | 681 | int retval = -ENOMEM; |
683 | - struct resource *iomem, *mapmem; | |
682 | + struct resource *iomem; | |
683 | + void *videomemory; | |
684 | 684 | |
685 | + videomemory = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP, | |
686 | + get_order(UNIFB_MEMSIZE)); | |
687 | + if (!videomemory) | |
688 | + goto err; | |
689 | + | |
690 | + memset(videomemory, 0, UNIFB_MEMSIZE); | |
691 | + | |
692 | + unifb_fix.smem_start = virt_to_phys(videomemory); | |
693 | + unifb_fix.smem_len = UNIFB_MEMSIZE; | |
694 | + | |
695 | + iomem = platform_get_resource(dev, IORESOURCE_MEM, 0); | |
696 | + unifb_fix.mmio_start = iomem->start; | |
697 | + | |
685 | 698 | info = framebuffer_alloc(sizeof(u32)*256, &dev->dev); |
686 | 699 | if (!info) |
687 | 700 | goto err; |
688 | 701 | |
689 | - info->screen_base = (char __iomem *)KUSER_UNIGFX_BASE; | |
702 | + info->screen_base = (char __iomem *)videomemory; | |
690 | 703 | info->fbops = &unifb_ops; |
691 | 704 | |
692 | 705 | retval = fb_find_mode(&info->var, info, NULL, |
... | ... | @@ -694,13 +707,6 @@ |
694 | 707 | |
695 | 708 | if (!retval || (retval == 4)) |
696 | 709 | info->var = unifb_default; |
697 | - | |
698 | - iomem = platform_get_resource(dev, IORESOURCE_MEM, 0); | |
699 | - unifb_fix.mmio_start = iomem->start; | |
700 | - | |
701 | - mapmem = platform_get_resource(dev, IORESOURCE_MEM, 1); | |
702 | - unifb_fix.smem_start = mapmem->start; | |
703 | - unifb_fix.smem_len = UNIFB_MEMSIZE; | |
704 | 710 | |
705 | 711 | info->fix = unifb_fix; |
706 | 712 | info->pseudo_palette = info->par; |