From 31f56d4cb19c8ba73bd2b5fba91ce7d626dc642e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 2 Jun 2009 22:06:50 +0100 Subject: Reorganise memory map (again) This reuinites the "framebuffer" and "work" VRAM areas. With KMS, both roles will be done by one pool of memory. Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-cmdq.c | 2 +- drivers/mfd/glamo/glamo-core.c | 20 ++++++--------- drivers/mfd/glamo/glamo-core.h | 13 +++++----- drivers/mfd/glamo/glamo-drm-drv.c | 52 +++++++++++++++++++-------------------- drivers/mfd/glamo/glamo-fb.c | 10 -------- 5 files changed, 40 insertions(+), 57 deletions(-) (limited to 'drivers/mfd') diff --git a/drivers/mfd/glamo/glamo-cmdq.c b/drivers/mfd/glamo/glamo-cmdq.c index 199cb6cc170..f24d6814849 100644 --- a/drivers/mfd/glamo/glamo-cmdq.c +++ b/drivers/mfd/glamo/glamo-cmdq.c @@ -281,7 +281,7 @@ static int glamo_do_relocation(struct glamodrm_handle *gdrm, goto fail; } - addr = GLAMO_OFFSET_WORK + gobj->block->start; + addr = GLAMO_OFFSET_FB + gobj->block->start; addr_low = addr & 0xffff; addr_high = (addr >> 16) & 0x7f; printk(KERN_INFO "Addr low 0x%x, high 0x%x\n", diff --git a/drivers/mfd/glamo/glamo-core.c b/drivers/mfd/glamo/glamo-core.c index a485e34f748..075b9a05a0e 100644 --- a/drivers/mfd/glamo/glamo-core.c +++ b/drivers/mfd/glamo/glamo-core.c @@ -181,18 +181,18 @@ static struct resource glamo_cmdq_resources[] = { .start = GLAMO_REGOFS_CMDQUEUE, .end = GLAMO_REGOFS_RISC - 1, .flags = IORESOURCE_MEM, - }, { - .name = "glamo-work-mem", - .start = GLAMO_MEM_BASE + GLAMO_OFFSET_WORK, - .end = GLAMO_MEM_BASE + GLAMO_OFFSET_WORK + - GLAMO_WORK_SIZE - 1, - .flags = IORESOURCE_MEM, }, { .name = "glamo-command-queue", .start = GLAMO_MEM_BASE + GLAMO_OFFSET_CMDQ, .end = GLAMO_MEM_BASE + GLAMO_OFFSET_CMDQ + GLAMO_CMDQ_SIZE - 1, .flags = IORESOURCE_MEM, + }, { + .name = "glamo-fb-mem", + .start = GLAMO_MEM_BASE + GLAMO_OFFSET_FB, + .end = GLAMO_MEM_BASE + GLAMO_OFFSET_FB + + GLAMO_FB_SIZE - 1, + .flags = IORESOURCE_MEM, }, }; @@ -213,13 +213,7 @@ static struct resource glamo_fb_resources[] = { .start = GLAMO_REGOFS_LCD, .end = GLAMO_REGOFS_MMC - 1, .flags = IORESOURCE_MEM, - }, { - .name = "glamo-fb-mem", - .start = GLAMO_MEM_BASE + GLAMO_OFFSET_FB, - .end = GLAMO_MEM_BASE + GLAMO_OFFSET_FB + - GLAMO_FB_SIZE - 1, - .flags = IORESOURCE_MEM, - }, + } }; static struct platform_device glamo_fb_dev = { diff --git a/drivers/mfd/glamo/glamo-core.h b/drivers/mfd/glamo/glamo-core.h index 63390492141..4808ad72bb4 100644 --- a/drivers/mfd/glamo/glamo-core.h +++ b/drivers/mfd/glamo/glamo-core.h @@ -7,18 +7,19 @@ * sure we have sufficient memory for other functions of the chip */ /* FIXME: this should be autodetected */ #define GLAMO_INTERNAL_RAM_SIZE 0x800000 -/* A 640x480, 16bpp, double-buffered framebuffer */ -#define GLAMO_FB_SIZE (640 * 480 * 4) /* == 0x12c000 */ /* Arbitrarily determined amount for the hardware cursor */ #define GLAMO_CURSOR_SIZE (4096) #define GLAMO_MMC_BUFFER_SIZE (64 * 1024) /* 64k MMC buffer */ #define GLAMO_CMDQ_SIZE (128 * 1024) /* 128k ring buffer */ /* Remaining memory will be used for 2D and 3D graphics */ -#define GLAMO_WORK_SIZE (GLAMO_INTERNAL_RAM_SIZE \ - - GLAMO_FB_SIZE \ +#define GLAMO_FB_SIZE (GLAMO_INTERNAL_RAM_SIZE \ - GLAMO_CURSOR_SIZE \ - GLAMO_MMC_BUFFER_SIZE \ - GLAMO_CMDQ_SIZE) +/* A 640x480, 16bpp, double-buffered framebuffer */ +#if (GLAMO_FB_SIZE < (640 * 480 * 4)) /* == 0x12c000 */ +#error Not enough Glamo VRAM for framebuffer! +#endif /* for the time being, we put the on-screen framebuffer into the lowest * VRAM space. This should make the code easily compatible with the various @@ -26,12 +27,10 @@ * glamo-fb.c assumes FB comes first, followed by cursor, so DON'T MOVE THEM * (see glamo_regs[] in glamo-fb.c for more information) */ #define GLAMO_MEM_BASE (0x800000) -#define GLAMO_OFFSET_VRAM (0x000000) -#define GLAMO_OFFSET_FB (GLAMO_OFFSET_VRAM) +#define GLAMO_OFFSET_FB (0x000000) #define GLAMO_OFFSET_CURSOR (GLAMO_OFFSET_FB + GLAMO_FB_SIZE) #define GLAMO_OFFSET_MMC (GLAMO_OFFSET_CURSOR + GLAMO_CURSOR_SIZE) #define GLAMO_OFFSET_CMDQ (GLAMO_OFFSET_MMC + GLAMO_MMC_BUFFER_SIZE) -#define GLAMO_OFFSET_WORK (GLAMO_OFFSET_CMDQ + GLAMO_CMDQ_SIZE) struct glamo_core { int irq; diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c index 5136263375b..a2303ce1d7e 100644 --- a/drivers/mfd/glamo/glamo-drm-drv.c +++ b/drivers/mfd/glamo/glamo-drm-drv.c @@ -229,33 +229,8 @@ static int glamodrm_probe(struct platform_device *pdev) goto out_release_regs; } - /* Find the working VRAM */ - gdrm->vram = platform_get_resource(pdev, IORESOURCE_MEM, 1); - if ( !gdrm->vram ) { - dev_err(&pdev->dev, "Unable to find work VRAM.\n"); - rc = -ENOENT; - goto out_unmap_regs; - } - gdrm->vram = request_mem_region(gdrm->vram->start, - RESSIZE(gdrm->vram), pdev->name); - if ( !gdrm->vram ) { - dev_err(&pdev->dev, "failed to request VRAM region\n"); - rc = -ENOENT; - goto out_unmap_regs; - } - gdrm->vram_base = ioremap(gdrm->vram->start, RESSIZE(gdrm->vram)); - if ( !gdrm->vram_base ) { - dev_err(&pdev->dev, "failed to ioremap() VRAM\n"); - rc = -ENOENT; - goto out_release_vram; - } - - gdrm->vram_size = GLAMO_WORK_SIZE; - printk(KERN_INFO "[glamo-drm] %lli bytes of Glamo RAM to work with\n", - (long long int)gdrm->vram_size); - /* Find the command queue itself */ - gdrm->cmdq = platform_get_resource(pdev, IORESOURCE_MEM, 2); + gdrm->cmdq = platform_get_resource(pdev, IORESOURCE_MEM, 1); if ( !gdrm->cmdq ) { dev_err(&pdev->dev, "Unable to find command queue.\n"); rc = -ENOENT; @@ -275,6 +250,31 @@ static int glamodrm_probe(struct platform_device *pdev) goto out_release_cmdq; } + /* Find the VRAM */ + gdrm->vram = platform_get_resource(pdev, IORESOURCE_MEM, 2); + if ( !gdrm->vram ) { + dev_err(&pdev->dev, "Unable to find VRAM.\n"); + rc = -ENOENT; + goto out_unmap_regs; + } + gdrm->vram = request_mem_region(gdrm->vram->start, + RESSIZE(gdrm->vram), pdev->name); + if ( !gdrm->vram ) { + dev_err(&pdev->dev, "failed to request VRAM region\n"); + rc = -ENOENT; + goto out_unmap_regs; + } + gdrm->vram_base = ioremap(gdrm->vram->start, RESSIZE(gdrm->vram)); + if ( !gdrm->vram_base ) { + dev_err(&pdev->dev, "failed to ioremap() VRAM\n"); + rc = -ENOENT; + goto out_release_vram; + } + + gdrm->vram_size = GLAMO_FB_SIZE; + printk(KERN_INFO "[glamo-drm] %lli bytes of VRAM\n", + (long long int)gdrm->vram_size); + /* Initialise DRM */ drm_platform_init(&glamodrm_drm_driver, pdev, (void *)gdrm); diff --git a/drivers/mfd/glamo/glamo-fb.c b/drivers/mfd/glamo/glamo-fb.c index 589b924b6bf..d9a610eeda4 100644 --- a/drivers/mfd/glamo/glamo-fb.c +++ b/drivers/mfd/glamo/glamo-fb.c @@ -995,16 +995,6 @@ static int __init glamofb_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to request mmio region\n"); goto out_free; } - if (mach_info->fb_mem_size != RESSIZE(glamofb->fb_res)) - dev_warn(&pdev->dev, "different vram sizes\n"); - - glamofb->fb_res = request_mem_region(glamofb->fb_res->start, - mach_info->fb_mem_size, - pdev->name); - if (!glamofb->fb_res) { - dev_err(&pdev->dev, "failed to request vram region\n"); - goto out_release_reg; - } /* we want to remap only the registers required for this core * driver. */ -- cgit v1.2.3