From c5de541e11f3ccf2d2ca4754a9e1eb0547ae1ccc Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E6=9D=9C=E5=9D=A4=E6=98=8E?= Date: Wed, 30 Mar 2011 14:46:26 +0800 Subject: [PATCH] gpu: fix some of suspend/resume bug; remove gpu's misc_deregister; remove GFP_DMA with alloc_pages; --- .../XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 14 ++++++++++ .../hal/kernel/gc_hal_kernel_command.c | 8 ++++++ .../os/linux/kernel/gc_hal_kernel_driver.c | 28 +------------------ .../hal/os/linux/kernel/gc_hal_kernel_os.c | 3 +- 4 files changed, 25 insertions(+), 28 deletions(-) diff --git a/drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c index 5c7461a8b7ce..ab1f0cfba511 100755 --- a/drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c +++ b/drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c @@ -3038,6 +3038,12 @@ gckHARDWARE_SetPowerManagementState( gcmkFOOTER_NO(); return gcvSTATUS_OK; } + else if(gcvPOWER_IDLE==State) // dkm add 110330 + { + /* Bail out on idle broadcast with other process is setting power. */ + gcmkFOOTER_NO(); + return gcvSTATUS_OK; + } else { /* Acquire the power mutex. */ @@ -3063,6 +3069,8 @@ gckHARDWARE_SetPowerManagementState( if ((flag == 0) || (Hardware->settingPowerState)) { /* Release the power mutex. */ + Hardware->powerProcess = 0; + Hardware->powerThread = 0; gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex)); /* No need to do anything. */ @@ -3075,6 +3083,8 @@ gckHARDWARE_SetPowerManagementState( ) { /* Release the power mutex. */ + Hardware->powerProcess = 0; + Hardware->powerThread = 0; gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex)); /* No broadcast while GPU is forced power off. */ @@ -3226,6 +3236,8 @@ gckHARDWARE_SetPowerManagementState( Hardware->settingPowerState = gcvFALSE; /* Release the power mutex. */ + Hardware->powerProcess = 0; + Hardware->powerThread = 0; gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex)); /* Success. */ @@ -3250,6 +3262,8 @@ OnError: { Hardware->settingPowerState = gcvFALSE; + Hardware->powerProcess = 0; + Hardware->powerThread = 0; gcmkVERIFY_OK(gckOS_ReleaseMutex(Hardware->os, Hardware->powerMutex)); } diff --git a/drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_command.c b/drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_command.c index 5a0a97770f53..adbbacf9405a 100755 --- a/drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_command.c +++ b/drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_command.c @@ -836,6 +836,8 @@ gckCOMMAND_Commit( if (powerAcquired) { /* Release the power mutex. */ + hardware->powerProcess = 0; + hardware->powerThread = 0; gcmkONERROR(gckOS_ReleaseMutex(Command->os, hardware->powerMutex)); powerAcquired = gcvFALSE; } @@ -1361,6 +1363,8 @@ OnError: if (powerAcquired) { /* Release the power mutex. */ + hardware->powerProcess = 0; + hardware->powerThread = 0; gcmkONERROR(gckOS_ReleaseMutex(Command->os, hardware->powerMutex)); } @@ -1463,6 +1467,8 @@ gckCOMMAND_Reserve( if (powerAcquired) { /* Release the power mutex. */ + hardware->powerProcess = 0; + hardware->powerThread = 0; gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->kernel->hardware->powerMutex)); powerAcquired = gcvFALSE; @@ -1550,6 +1556,8 @@ OnError: if (powerAcquired) { /* Release the power mutex. */ + hardware->powerProcess = 0; + hardware->powerThread = 0; gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->kernel->hardware->powerMutex)); } diff --git a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c index 5a9dea126e23..8d4aed215b21 100755 --- a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c +++ b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c @@ -691,7 +691,7 @@ static void drv_exit(void) gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_DRIVER, "[galcore] Entering drv_exit\n"); -#if 1 +#if 0 misc_deregister(&miscdev); #else @@ -754,10 +754,6 @@ module_exit(drv_exit); static void gpu_early_suspend(struct early_suspend *h) { gceSTATUS status; - - //printk("Enter %s \n", __func__); - - msleep(50); //Wait for gpu finish status = gckHARDWARE_SetPowerManagementState(galDevice->kernel->hardware, gcvPOWER_OFF); @@ -766,27 +762,19 @@ static void gpu_early_suspend(struct early_suspend *h) printk("%s fail!\n", __func__); return; } - - //printk("Exit %s \n", __func__); } static void gpu_early_resume(struct early_suspend *h) { gceSTATUS status; - //printk("Enter %s \n", __func__); - status = gckHARDWARE_SetPowerManagementState(galDevice->kernel->hardware, gcvPOWER_IDLE); - msleep(50); - if (gcmIS_ERROR(status)) { printk("%s fail!\n", __func__); return; } - - //printk("Exit %s \n", __func__); } struct early_suspend gpu_early_suspend_info = { @@ -856,13 +844,9 @@ static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state { gceSTATUS status; gckGALDEVICE device; - - //printk("Enter %s \n", __func__); device = platform_get_drvdata(dev); - msleep(50); //Wait for gpu finish - status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_OFF); if (gcmIS_ERROR(status)) @@ -871,8 +855,6 @@ static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state return -1; } - //printk("Exit %s \n", __func__); - return 0; } @@ -880,31 +862,23 @@ static int __devinit gpu_resume(struct platform_device *dev) { gceSTATUS status; gckGALDEVICE device; - - //printk("Enter %s \n", __func__); device = platform_get_drvdata(dev); status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_IDLE); - msleep(50); - if (gcmIS_ERROR(status)) { printk("%s fail!\n", __func__); return -1; } - - //printk("Exit %s \n", __func__); return 0; } static void __devinit gpu_shutdown(struct platform_device *dev) { - printk("Enter %s \n", __func__); drv_exit(); - printk("Exit %s \n", __func__); } diff --git a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c index 7d5f731e0f33..70d75240c8aa 100755 --- a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c +++ b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c @@ -1263,7 +1263,8 @@ gckOS_AllocateNonPagedMemory( #else size = mdl->numPages * PAGE_SIZE; order = get_order(size); - page = alloc_pages(GFP_KERNEL | GFP_DMA, order); + //page = alloc_pages(GFP_KERNEL | GFP_DMA, order); + page = alloc_pages(GFP_KERNEL , order); // dkm modify 110330 ½«GFP_DMAÈ¥µô,±ÜÃâ·ÖÅä²»µ½DMAÄÚ´æ if (page == gcvNULL) { -- 2.34.1