MGS-3177-4 [#imx-701] fix the suspend/resume hang issue on imx6
authorYuchou Gan <yuchou.gan@nxp.com>
Mon, 11 Sep 2017 14:18:57 +0000 (22:18 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:38:32 +0000 (15:38 -0500)
The imx6q/6qp board have VG core,so that device->kernels[i]->hardware pointer of the VG core will be NULL,
which cause invalid access to device->kernels[i]->hardware->forcePowerOff. This will lead to hang on suspend/resume test.

Date: Sep 07, 2017
Signed-off-by: Yuchou Gan<yuchou.gan@nxp.com>
drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c

index b530b26..42a5a0a 100644 (file)
@@ -1080,21 +1080,23 @@ static int gpu_resume(struct platform_device *dev)
             {
                 return -1;
             }
-
             /* Convert global state to crossponding internal state. */
             switch(device->statesStored[i])
             {
             case gcvPOWER_OFF:
                 statesStored = gcvPOWER_OFF_BROADCAST;
-                device->kernels[i]->hardware->forcePowerOff = gcvTRUE;
+                if(device->kernels[i]->hardware)
+                    device->kernels[i]->hardware->forcePowerOff = gcvTRUE;
                 break;
             case gcvPOWER_IDLE:
                 statesStored = gcvPOWER_IDLE_BROADCAST;
-                device->kernels[i]->hardware->forcePowerOff = gcvTRUE;
+                if(device->kernels[i]->hardware)
+                    device->kernels[i]->hardware->forcePowerOff = gcvTRUE;
                 break;
             case gcvPOWER_SUSPEND:
                 statesStored = gcvPOWER_SUSPEND_BROADCAST;
-                device->kernels[i]->hardware->forcePowerOff = gcvTRUE;
+                if(device->kernels[i]->hardware)
+                    device->kernels[i]->hardware->forcePowerOff = gcvTRUE;
                 break;
             case gcvPOWER_ON:
                 statesStored = gcvPOWER_ON_AUTO;