From: Zhou, Jie Date: Wed, 2 Mar 2011 17:02:40 +0000 (+0800) Subject: ENGR00140050 GPU: workaround hang with heavy bus loading X-Git-Tag: v3.0.35-fsl~2386 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=7ba9b22661ae7850f6aaba9bf121e670ee17e945;p=karo-tx-linux.git ENGR00140050 GPU: workaround hang with heavy bus loading 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 --- diff --git a/drivers/mxc/amd-gpu/common/gsl_intrmgr.c b/drivers/mxc/amd-gpu/common/gsl_intrmgr.c index 2c8b278dfe7a..cba9fc32ab8c 100644 --- a/drivers/mxc/amd-gpu/common/gsl_intrmgr.c +++ b/drivers/mxc/amd-gpu/common/gsl_intrmgr.c @@ -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]; diff --git a/drivers/mxc/amd-gpu/common/gsl_ringbuffer.c b/drivers/mxc/amd-gpu/common/gsl_ringbuffer.c index 76c6c701f126..fb05ff3cbe14 100644 --- a/drivers/mxc/amd-gpu/common/gsl_ringbuffer.c +++ b/drivers/mxc/amd-gpu/common/gsl_ringbuffer.c @@ -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" );