gpu: fix some of suspend/resume bug; remove gpu's misc_deregister; remove GFP_DMA...
author杜坤明 <dkm@rockchip.com>
Wed, 30 Mar 2011 06:46:26 +0000 (14:46 +0800)
committer杜坤明 <dkm@rockchip.com>
Wed, 30 Mar 2011 06:46:26 +0000 (14:46 +0800)
drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel_command.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c

index 5c7461a8b7ce72db7b53d9361eb5ad8c080f04f6..ab1f0cfba511b5a69bcfd7b17cfac826a4f6c58c 100755 (executable)
@@ -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));
     }
 
index 5a0a97770f53d792ccfd94df9ddc23951fc3b6ca..adbbacf9405af2baeb2b770c5f39f7316d3a7b8b 100755 (executable)
@@ -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));
     }
index 5a9dea126e23b7b215a92a678495fdf59887d86c..8d4aed215b2138f256e68d82bc05c30588aeabc9 100755 (executable)
@@ -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__);
 }
 
 
index 7d5f731e0f3369259a78cd006138ffaab786a45d..70d75240c8aac962fd0ffc58b3cd7eba3043e316 100755 (executable)
@@ -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)
     {