From: 杜坤明 <dkm@rockchip.com>
Date: Wed, 30 Mar 2011 06:46:26 +0000 (+0800)
Subject: gpu: fix some of suspend/resume bug; remove gpu's misc_deregister; remove GFP_DMA... 
X-Git-Tag: firefly_0821_release~10597
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c5de541e11f3ccf2d2ca4754a9e1eb0547ae1ccc;p=firefly-linux-kernel-4.4.55.git

gpu: fix some of suspend/resume bug; remove gpu's misc_deregister; remove GFP_DMA with alloc_pages;
---

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)
     {