提交 6b794743 编写于 作者: G Guan Xuetao

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: NGuan Xuetao <gxt@mprc.pku.edu.cn>
Acked-by: NArnd Bergmann <arnd@arndb.de>
上级 28e58cc9
...@@ -23,16 +23,6 @@ ...@@ -23,16 +23,6 @@
#define PKUNITY_SDRAM_BASE 0x00000000 /* 0x00000000 - 0x7FFFFFFF 2GB */ #define PKUNITY_SDRAM_BASE 0x00000000 /* 0x00000000 - 0x7FFFFFFF 2GB */
#define PKUNITY_MMIO_BASE 0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */ #define PKUNITY_MMIO_BASE 0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */
/*
* PKUNITY Memory Map Addresses: 0x0D000000 - 0x0EFFFFFF (32MB)
* 0x0D000000 - 0x0DFFFFFF 16MB: for UVC
* 0x0E000000 - 0x0EFFFFFF 16MB: for UNIGFX
*/
#define PKUNITY_UVC_MMAP_BASE 0x0D000000
#define PKUNITY_UVC_MMAP_SIZE 0x01000000 /* 16MB */
#define PKUNITY_UNIGFX_MMAP_BASE 0x0E000000
#define PKUNITY_UNIGFX_MMAP_SIZE 0x01000000 /* 16MB */
/* /*
* PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB) * PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB)
* 0x80000000 - 0x8000000B 12B PCI Configuration regs * 0x80000000 - 0x8000000B 12B PCI Configuration regs
......
...@@ -50,7 +50,6 @@ void puv3_pci_adjust_zones(unsigned long *size, unsigned long *holes); ...@@ -50,7 +50,6 @@ void puv3_pci_adjust_zones(unsigned long *size, unsigned long *holes);
/* kuser area */ /* kuser area */
#define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000)) #define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000))
#define KUSER_UNIGFX_BASE (PAGE_OFFSET + PKUNITY_UNIGFX_MMAP_BASE)
/* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */ /* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */
#define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \ #define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \
+ (VECTORS_BASE)) + (VECTORS_BASE))
......
...@@ -99,11 +99,6 @@ static struct resource puv3_unigfx_resources[] = { ...@@ -99,11 +99,6 @@ static struct resource puv3_unigfx_resources[] = {
.end = io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff, .end = io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[1] = {
.start = PKUNITY_UNIGFX_MMAP_BASE,
.end = PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE,
.flags = IORESOURCE_MEM,
},
}; };
static struct resource puv3_rtc_resources[] = { static struct resource puv3_rtc_resources[] = {
......
...@@ -63,12 +63,6 @@ static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE; ...@@ -63,12 +63,6 @@ static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
* Standard memory resources * Standard memory resources
*/ */
static struct resource mem_res[] = { static struct resource mem_res[] = {
{
.name = "Video RAM",
.start = 0,
.end = 0,
.flags = IORESOURCE_MEM
},
{ {
.name = "Kernel text", .name = "Kernel text",
.start = 0, .start = 0,
...@@ -83,9 +77,8 @@ static struct resource mem_res[] = { ...@@ -83,9 +77,8 @@ static struct resource mem_res[] = {
} }
}; };
#define video_ram mem_res[0] #define kernel_code mem_res[0]
#define kernel_code mem_res[1] #define kernel_data mem_res[1]
#define kernel_data mem_res[2]
/* /*
* These functions re-use the assembly code in head.S, which * These functions re-use the assembly code in head.S, which
...@@ -224,10 +217,6 @@ request_standard_resources(struct meminfo *mi) ...@@ -224,10 +217,6 @@ request_standard_resources(struct meminfo *mi)
kernel_data.end <= res->end) kernel_data.end <= res->end)
request_resource(res, &kernel_data); request_resource(res, &kernel_data);
} }
video_ram.start = PKUNITY_UNIGFX_MMAP_BASE;
video_ram.end = PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE;
request_resource(&iomem_resource, &video_ram);
} }
static void (*init_machine)(void) __initdata; static void (*init_machine)(void) __initdata;
......
...@@ -338,15 +338,6 @@ void __init uc32_mm_memblock_reserve(void) ...@@ -338,15 +338,6 @@ void __init uc32_mm_memblock_reserve(void)
* and can only be in node 0. * and can only be in node 0.
*/ */
memblock_reserve(__pa(swapper_pg_dir), PTRS_PER_PGD * sizeof(pgd_t)); memblock_reserve(__pa(swapper_pg_dir), PTRS_PER_PGD * sizeof(pgd_t));
#ifdef CONFIG_PUV3_UNIGFX
/*
* These should likewise go elsewhere. They pre-reserve the
* screen/video memory region at the 48M~64M of main system memory.
*/
memblock_reserve(PKUNITY_UNIGFX_MMAP_BASE, PKUNITY_UNIGFX_MMAP_SIZE);
memblock_reserve(PKUNITY_UVC_MMAP_BASE, PKUNITY_UVC_MMAP_SIZE);
#endif
} }
/* /*
...@@ -370,17 +361,6 @@ static void __init devicemaps_init(void) ...@@ -370,17 +361,6 @@ static void __init devicemaps_init(void)
for (addr = VMALLOC_END; addr; addr += PGDIR_SIZE) for (addr = VMALLOC_END; addr; addr += PGDIR_SIZE)
pmd_clear(pmd_off_k(addr)); pmd_clear(pmd_off_k(addr));
/*
* Create a mapping for UniGFX VRAM
*/
#ifdef CONFIG_PUV3_UNIGFX
map.pfn = __phys_to_pfn(PKUNITY_UNIGFX_MMAP_BASE);
map.virtual = KUSER_UNIGFX_BASE;
map.length = PKUNITY_UNIGFX_MMAP_SIZE;
map.type = MT_KUSER;
create_mapping(&map);
#endif
/* /*
* Create a mapping for the machine vectors at the high-vectors * Create a mapping for the machine vectors at the high-vectors
* location (0xffff0000). If we aren't using high-vectors, also * location (0xffff0000). If we aren't using high-vectors, also
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/vmalloc.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/fb.h> #include <linux/fb.h>
...@@ -531,7 +530,7 @@ static int unifb_set_par(struct fb_info *info) ...@@ -531,7 +530,7 @@ static int unifb_set_par(struct fb_info *info)
return -EINVAL; return -EINVAL;
} }
writel(PKUNITY_UNIGFX_MMAP_BASE, UDE_FSA); writel(info->fix.smem_start, UDE_FSA);
writel(info->var.yres, UDE_LS); writel(info->var.yres, UDE_LS);
writel(get_line_length(info->var.xres, writel(get_line_length(info->var.xres,
info->var.bits_per_pixel) >> 3, UDE_PS); info->var.bits_per_pixel) >> 3, UDE_PS);
...@@ -680,13 +679,27 @@ static int unifb_probe(struct platform_device *dev) ...@@ -680,13 +679,27 @@ static int unifb_probe(struct platform_device *dev)
struct fb_info *info; struct fb_info *info;
u32 unifb_regs[UNIFB_REGS_NUM]; u32 unifb_regs[UNIFB_REGS_NUM];
int retval = -ENOMEM; int retval = -ENOMEM;
struct resource *iomem, *mapmem; struct resource *iomem;
void *videomemory;
videomemory = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP,
get_order(UNIFB_MEMSIZE));
if (!videomemory)
goto err;
memset(videomemory, 0, UNIFB_MEMSIZE);
unifb_fix.smem_start = virt_to_phys(videomemory);
unifb_fix.smem_len = UNIFB_MEMSIZE;
iomem = platform_get_resource(dev, IORESOURCE_MEM, 0);
unifb_fix.mmio_start = iomem->start;
info = framebuffer_alloc(sizeof(u32)*256, &dev->dev); info = framebuffer_alloc(sizeof(u32)*256, &dev->dev);
if (!info) if (!info)
goto err; goto err;
info->screen_base = (char __iomem *)KUSER_UNIGFX_BASE; info->screen_base = (char __iomem *)videomemory;
info->fbops = &unifb_ops; info->fbops = &unifb_ops;
retval = fb_find_mode(&info->var, info, NULL, retval = fb_find_mode(&info->var, info, NULL,
...@@ -695,13 +708,6 @@ static int unifb_probe(struct platform_device *dev) ...@@ -695,13 +708,6 @@ static int unifb_probe(struct platform_device *dev)
if (!retval || (retval == 4)) if (!retval || (retval == 4))
info->var = unifb_default; info->var = unifb_default;
iomem = platform_get_resource(dev, IORESOURCE_MEM, 0);
unifb_fix.mmio_start = iomem->start;
mapmem = platform_get_resource(dev, IORESOURCE_MEM, 1);
unifb_fix.smem_start = mapmem->start;
unifb_fix.smem_len = UNIFB_MEMSIZE;
info->fix = unifb_fix; info->fix = unifb_fix;
info->pseudo_palette = info->par; info->pseudo_palette = info->par;
info->par = NULL; info->par = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册