]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00140050 GPU: workaround hang with heavy bus loading
authorZhou, Jie <b30303@freescale.com>
Wed, 2 Mar 2011 17:02:40 +0000 (01:02 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:32:48 +0000 (08:32 +0200)
The GPU hang when run two cubes together with one video playback.
According to the suggestion from AMD, we'd better not read register
when GPU active, especially for CP block.

Signed-off-by: Zhou, Jie <b30303@freescale.com>
drivers/mxc/amd-gpu/common/gsl_intrmgr.c
drivers/mxc/amd-gpu/common/gsl_ringbuffer.c

index 2c8b278dfe7ada29696f2a4e5311643d4466d572..cba9fc32ab8cf3d2e40694ea8316c719a86b4758 100644 (file)
@@ -58,7 +58,12 @@ kgsl_intr_decode(gsl_device_t *device, gsl_intrblock_t block_id)
     unsigned int               status;
 
     // read the block's interrupt status bits
-    device->ftbl.device_regread(device, block->status_reg, &status);
+    /* exclude CP block here to avoid hang in heavy loading with VPU+GPU */
+    if (block_id == GSL_INTR_BLOCK_YDX_CP) {
+       status = 0x80000000;
+    } else {
+       device->ftbl.device_regread(device, block->status_reg, &status);
+    }
 
     // mask off any interrupts which are disabled
     status &= device->intr.enabled[block->id];
index 76c6c701f126a2a6b5a9afd6c4a35c9e9a23b563..fb05ff3cbe1495a71b2878fe69573666ceef64bc 100644 (file)
@@ -356,12 +356,6 @@ kgsl_ringbuffer_submit(gsl_ringbuffer_t *rb)
     // send the wptr to the hw
     rb->device->ftbl.device_regwrite(rb->device, mmCP_RB_WPTR, rb->wptr);
 
-    // force wptr register to be updated
-    do
-    {
-        rb->device->ftbl.device_regread(rb->device, mmCP_RB_WPTR, &value);
-    } while (value != rb->wptr);
-
     rb->flags |= GSL_FLAGS_ACTIVE;
 
     kgsl_log_write( KGSL_LOG_GROUP_COMMAND | KGSL_LOG_LEVEL_TRACE, "<-- kgsl_ringbuffer_submit.\n" );