From 740d8196e83bd7eaccf2f3575019a7bd96444c1d Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 27 May 2009 22:14:11 +0100 Subject: Initial KMS stuff --- drivers/mfd/glamo/glamo-drm-drv.c | 41 ++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) (limited to 'drivers/mfd/glamo/glamo-drm-drv.c') diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c index 2208a8ef5f7..5136263375b 100644 --- a/drivers/mfd/glamo/glamo-drm-drv.c +++ b/drivers/mfd/glamo/glamo-drm-drv.c @@ -31,6 +31,7 @@ #include "glamo-cmdq.h" #include "glamo-buffer.h" #include "glamo-drm-private.h" +#include "glamo-display.h" #define DRIVER_AUTHOR "Openmoko, Inc." #define DRIVER_NAME "glamo-drm" @@ -126,13 +127,43 @@ static void glamodrm_master_destroy(struct drm_device *dev, } +static int glamodrm_load(struct drm_device *dev, unsigned long flags) +{ + struct glamodrm_handle *gdrm; + + gdrm = dev->dev_private; + + glamo_buffer_init(gdrm); + glamo_cmdq_init(gdrm); + glamo_display_init(dev); + + return 0; +} + + +static int glamodrm_unload(struct drm_device *dev) +{ + struct glamodrm_handle *gdrm; + + gdrm = dev->dev_private; + + glamo_engine_disable(gdrm->glamo_core, GLAMO_ENGINE_2D); + glamo_engine_disable(gdrm->glamo_core, GLAMO_ENGINE_3D); + glamo_buffer_final(gdrm); + + return 0; +} + + static struct vm_operations_struct glamodrm_gem_vm_ops = { .fault = glamodrm_gem_fault, }; static struct drm_driver glamodrm_drm_driver = { - .driver_features = DRIVER_IS_PLATFORM | DRIVER_GEM, + .driver_features = DRIVER_IS_PLATFORM | DRIVER_GEM | DRIVER_MODESET, .firstopen = glamodrm_firstopen, + .load = glamodrm_load, + .unload = glamodrm_unload, .open = glamodrm_open, .preclose = glamodrm_preclose, .postclose = glamodrm_postclose, @@ -247,9 +278,6 @@ static int glamodrm_probe(struct platform_device *pdev) /* Initialise DRM */ drm_platform_init(&glamodrm_drm_driver, pdev, (void *)gdrm); - glamo_buffer_init(gdrm); - glamo_cmdq_init(gdrm); - return 0; out_release_cmdq: @@ -272,12 +300,7 @@ out_free: static int glamodrm_remove(struct platform_device *pdev) { struct glamodrm_handle *gdrm = platform_get_drvdata(pdev); - struct glamo_core *glamocore = pdev->dev.platform_data; - - glamo_engine_disable(glamocore, GLAMO_ENGINE_2D); - glamo_engine_disable(glamocore, GLAMO_ENGINE_3D); - glamo_buffer_final(gdrm); drm_exit(&glamodrm_drm_driver); platform_set_drvdata(pdev, NULL); -- cgit v1.2.3 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-drm-drv.c | 52 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 26 deletions(-) (limited to 'drivers/mfd/glamo/glamo-drm-drv.c') 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); -- cgit v1.2.3 From ef859741e8baf985777015207041860cc42a2939 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 15 Jun 2009 01:21:30 +0100 Subject: Just backing up progress (again) Nearly there... Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-drm-drv.c | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) (limited to 'drivers/mfd/glamo/glamo-drm-drv.c') diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c index a2303ce1d7e..dbcb8eb4ab5 100644 --- a/drivers/mfd/glamo/glamo-drm-drv.c +++ b/drivers/mfd/glamo/glamo-drm-drv.c @@ -1,4 +1,4 @@ -/* Smedia Glamo 336x/337x driver +/* Smedia Glamo 336x/337x Graphics Driver * * Copyright (C) 2009 Openmoko, Inc. Jorge Luis Zapata * Copyright (C) 2008-2009 Thomas White @@ -36,7 +36,7 @@ #define DRIVER_AUTHOR "Openmoko, Inc." #define DRIVER_NAME "glamo-drm" #define DRIVER_DESC "SMedia Glamo 3362" -#define DRIVER_DATE "20090426" +#define DRIVER_DATE "20090614" #define RESSIZE(ressource) (((ressource)->end - (ressource)->start)+1) @@ -130,7 +130,6 @@ static void glamodrm_master_destroy(struct drm_device *dev, static int glamodrm_load(struct drm_device *dev, unsigned long flags) { struct glamodrm_handle *gdrm; - gdrm = dev->dev_private; glamo_buffer_init(gdrm); @@ -200,7 +199,7 @@ static int glamodrm_probe(struct platform_device *pdev) int rc; struct glamodrm_handle *gdrm; - printk(KERN_INFO "[glamo-drm] SMedia Glamo Direct Rendering Support\n"); + printk(KERN_CRIT "[glamo-drm] SMedia Glamo Direct Rendering Support\n"); gdrm = kmalloc(sizeof(*gdrm), GFP_KERNEL); if ( !gdrm ) @@ -271,15 +270,41 @@ static int glamodrm_probe(struct platform_device *pdev) goto out_release_vram; } + /* Find the LCD controller */ + gdrm->lcd_regs = platform_get_resource(pdev, IORESOURCE_MEM, 3); + if ( !gdrm->lcd_regs ) { + dev_err(&pdev->dev, "Unable to find LCD registers.\n"); + rc = -ENOENT; + goto out_unmap_cmdq; + } + gdrm->lcd_regs = request_mem_region(gdrm->lcd_regs->start, + RESSIZE(gdrm->lcd_regs), + pdev->name); + if ( !gdrm->lcd_regs ) { + dev_err(&pdev->dev, "failed to request VRAM region\n"); + rc = -ENOENT; + goto out_release_lcd; + } + gdrm->lcd_base = ioremap(gdrm->lcd_regs->start, RESSIZE(gdrm->lcd_regs)); + if ( !gdrm->lcd_base ) { + dev_err(&pdev->dev, "failed to ioremap() VRAM\n"); + rc = -ENOENT; + goto out_release_lcd; + } + gdrm->vram_size = GLAMO_FB_SIZE; printk(KERN_INFO "[glamo-drm] %lli bytes of VRAM\n", - (long long int)gdrm->vram_size); + (long long int)gdrm->vram_size); /* Initialise DRM */ drm_platform_init(&glamodrm_drm_driver, pdev, (void *)gdrm); return 0; +out_release_lcd: + release_mem_region(gdrm->lcd_regs->start, RESSIZE(gdrm->lcd_regs)); +out_unmap_cmdq: + iounmap(gdrm->cmdq_base); out_release_cmdq: release_mem_region(gdrm->cmdq->start, RESSIZE(gdrm->cmdq)); out_unmap_vram: @@ -344,7 +369,7 @@ static struct platform_driver glamodrm_driver = { .suspend = glamodrm_suspend, .resume = glamodrm_resume, .driver = { - .name = "glamo-cmdq", + .name = "glamo-graphics", .owner = THIS_MODULE, }, }; -- cgit v1.2.3 From 9f1ef16f2c739da94261ecb32a8ce96a62a94eac Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 18 Jun 2009 00:00:30 +0100 Subject: More KMS plumbing Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-drm-drv.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'drivers/mfd/glamo/glamo-drm-drv.c') diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c index dbcb8eb4ab5..b389325235c 100644 --- a/drivers/mfd/glamo/glamo-drm-drv.c +++ b/drivers/mfd/glamo/glamo-drm-drv.c @@ -263,12 +263,12 @@ static int glamodrm_probe(struct platform_device *pdev) 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_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; +// } /* Find the LCD controller */ gdrm->lcd_regs = platform_get_resource(pdev, IORESOURCE_MEM, 3); @@ -308,7 +308,7 @@ out_unmap_cmdq: out_release_cmdq: release_mem_region(gdrm->cmdq->start, RESSIZE(gdrm->cmdq)); out_unmap_vram: - iounmap(gdrm->vram_base); +// iounmap(gdrm->vram_base); out_release_vram: release_mem_region(gdrm->vram->start, RESSIZE(gdrm->vram)); out_unmap_regs: @@ -335,7 +335,7 @@ static int glamodrm_remove(struct platform_device *pdev) release_mem_region(gdrm->reg->start, RESSIZE(gdrm->reg)); /* Release VRAM */ - iounmap(gdrm->vram_base); +// iounmap(gdrm->vram_base); release_mem_region(gdrm->vram->start, RESSIZE(gdrm->vram)); /* Release command queue */ -- cgit v1.2.3 From dc0edb9b1067238feb88e0fb95ca7cd6db812381 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 30 Jun 2009 17:59:52 +0100 Subject: Set gdrm->dev This was uninitialised before. Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-drm-drv.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/mfd/glamo/glamo-drm-drv.c') diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c index b389325235c..2421f104035 100644 --- a/drivers/mfd/glamo/glamo-drm-drv.c +++ b/drivers/mfd/glamo/glamo-drm-drv.c @@ -206,6 +206,7 @@ static int glamodrm_probe(struct platform_device *pdev) return -ENOMEM; platform_set_drvdata(pdev, gdrm); gdrm->glamo_core = pdev->dev.platform_data; + gdrm->dev = &pdev->dev; /* Find the command queue registers */ gdrm->reg = platform_get_resource(pdev, IORESOURCE_MEM, 0); -- cgit v1.2.3 From 89815f11b50befdcff19dc8cb862549ea057715e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 1 Jul 2009 19:08:22 +0100 Subject: Compatibility glamo-drm <---> glamo-fb Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-drm-drv.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'drivers/mfd/glamo/glamo-drm-drv.c') diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c index 2421f104035..97d058f57d6 100644 --- a/drivers/mfd/glamo/glamo-drm-drv.c +++ b/drivers/mfd/glamo/glamo-drm-drv.c @@ -26,6 +26,7 @@ #include #include #include +#include #include "glamo-core.h" #include "glamo-cmdq.h" @@ -198,6 +199,7 @@ static int glamodrm_probe(struct platform_device *pdev) { int rc; struct glamodrm_handle *gdrm; + struct glamofb_platform_data *mach_info; printk(KERN_CRIT "[glamo-drm] SMedia Glamo Direct Rendering Support\n"); @@ -205,7 +207,8 @@ static int glamodrm_probe(struct platform_device *pdev) if ( !gdrm ) return -ENOMEM; platform_set_drvdata(pdev, gdrm); - gdrm->glamo_core = pdev->dev.platform_data; + mach_info = pdev->dev.platform_data; + gdrm->glamo_core = mach_info->glamo; gdrm->dev = &pdev->dev; /* Find the command queue registers */ @@ -370,7 +373,7 @@ static struct platform_driver glamodrm_driver = { .suspend = glamodrm_suspend, .resume = glamodrm_resume, .driver = { - .name = "glamo-graphics", + .name = "glamo-fb", .owner = THIS_MODULE, }, }; -- cgit v1.2.3 From 791916962183d648d71f9b45125fa656696084fd Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 2 Jul 2009 23:44:07 +0100 Subject: Initial suspend/resume Doesn't work yet... Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-drm-drv.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'drivers/mfd/glamo/glamo-drm-drv.c') diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c index 97d058f57d6..d71da8850ac 100644 --- a/drivers/mfd/glamo/glamo-drm-drv.c +++ b/drivers/mfd/glamo/glamo-drm-drv.c @@ -33,6 +33,7 @@ #include "glamo-buffer.h" #include "glamo-drm-private.h" #include "glamo-display.h" +#include "glamo-kms-fb.h" #define DRIVER_AUTHOR "Openmoko, Inc." #define DRIVER_NAME "glamo-drm" @@ -354,7 +355,14 @@ static int glamodrm_remove(struct platform_device *pdev) static int glamodrm_suspend(struct platform_device *pdev, pm_message_t state) { + struct glamodrm_handle *gdrm = platform_get_drvdata(pdev); + + glamo_kmsfb_suspend(gdrm); + glamo_display_suspend(gdrm); + glamo_cmdq_suspend(gdrm); + /* glamo_core.c will suspend the engines for us */ + return 0; } @@ -362,7 +370,11 @@ static int glamodrm_suspend(struct platform_device *pdev, pm_message_t state) static int glamodrm_resume(struct platform_device *pdev) { struct glamodrm_handle *gdrm = platform_get_drvdata(pdev); - glamo_cmdq_init(gdrm); + + glamo_cmdq_resume(gdrm); + glamo_display_resume(gdrm); + glamo_kmsfb_resume(gdrm); + return 0; } -- cgit v1.2.3