Commit 6b794743b2c5e21825d35b5d5dd57d6fcc388198

Authored by Guan Xuetao
1 parent 28e58cc958

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;