From d760b2ccd200368a6b1954ea7ca2cbe605a9b0ac Mon Sep 17 00:00:00 2001 From: Zhoulu Luo Date: Thu, 21 Jun 2012 15:21:52 -0700 Subject: [PATCH] Revert "msm: kgsl: Fix conditional GPU interrupts to fire only for waiting context" This reverts commit 609467077ae6b794af47613e05949e8b2fb3a842. Change-Id: I457634982603c957788b749198219d0974bd1de5 Signed-off-by: Zhoulu Luo --- drivers/gpu/msm/adreno.c | 2 +- drivers/gpu/msm/adreno.h | 4 +-- drivers/gpu/msm/adreno_drawctxt.c | 8 ----- drivers/gpu/msm/adreno_ringbuffer.c | 47 ++++++++--------------------- drivers/gpu/msm/adreno_ringbuffer.h | 5 --- 5 files changed, 15 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c index 615c7ad4886..3de3af91897 100644 --- a/drivers/gpu/msm/adreno.c +++ b/drivers/gpu/msm/adreno.c @@ -1354,7 +1354,7 @@ static int kgsl_check_interrupt_timestamp(struct kgsl_device *device, * get an interrupt */ cmds[0] = cp_type3_packet(CP_NOP, 1); cmds[1] = 0; - adreno_ringbuffer_issuecmds_intr(device, context, + adreno_ringbuffer_issuecmds(device, KGSL_CMD_FLAGS_NONE, &cmds[0], 2); } } diff --git a/drivers/gpu/msm/adreno.h b/drivers/gpu/msm/adreno.h index df5f0f9fe35..feaa36fb644 100644 --- a/drivers/gpu/msm/adreno.h +++ b/drivers/gpu/msm/adreno.h @@ -27,8 +27,8 @@ /* Flags to control command packet settings */ #define KGSL_CMD_FLAGS_NONE 0x00000000 #define KGSL_CMD_FLAGS_PMODE 0x00000001 -#define KGSL_CMD_FLAGS_NOT_KERNEL_CMD 0x00000002 -#define KGSL_CMD_FLAGS_DUMMY_INTR_CMD 0x00000004 +#define KGSL_CMD_FLAGS_NO_TS_CMP 0x00000002 +#define KGSL_CMD_FLAGS_NOT_KERNEL_CMD 0x00000004 /* Command identifiers */ #define KGSL_CONTEXT_TO_MEM_IDENTIFIER 0x2EADBEEF diff --git a/drivers/gpu/msm/adreno_drawctxt.c b/drivers/gpu/msm/adreno_drawctxt.c index 76122ae555a..49d035fcf22 100644 --- a/drivers/gpu/msm/adreno_drawctxt.c +++ b/drivers/gpu/msm/adreno_drawctxt.c @@ -147,7 +147,6 @@ int adreno_drawctxt_create(struct kgsl_device *device, { struct adreno_context *drawctxt; struct adreno_device *adreno_dev = ADRENO_DEVICE(device); - struct adreno_ringbuffer *rb = &adreno_dev->ringbuffer; int ret; drawctxt = kzalloc(sizeof(struct adreno_context), GFP_KERNEL); @@ -158,7 +157,6 @@ int adreno_drawctxt_create(struct kgsl_device *device, drawctxt->pagetable = pagetable; drawctxt->bin_base_offset = 0; drawctxt->id = context->id; - rb->timestamp[context->id] = 0; if (flags & KGSL_CONTEXT_PREAMBLE) drawctxt->flags |= CTXT_FLAGS_PREAMBLE; @@ -176,12 +174,6 @@ int adreno_drawctxt_create(struct kgsl_device *device, kgsl_sharedmem_writel(&device->memstore, KGSL_MEMSTORE_OFFSET(drawctxt->id, ref_wait_ts), KGSL_INIT_REFTIMESTAMP); - kgsl_sharedmem_writel(&device->memstore, - KGSL_MEMSTORE_OFFSET(drawctxt->id, ts_cmp_enable), 0); - kgsl_sharedmem_writel(&device->memstore, - KGSL_MEMSTORE_OFFSET(drawctxt->id, soptimestamp), 0); - kgsl_sharedmem_writel(&device->memstore, - KGSL_MEMSTORE_OFFSET(drawctxt->id, eoptimestamp), 0); context->devctxt = drawctxt; return 0; diff --git a/drivers/gpu/msm/adreno_ringbuffer.c b/drivers/gpu/msm/adreno_ringbuffer.c index 8bc933a184d..3d462212a6d 100644 --- a/drivers/gpu/msm/adreno_ringbuffer.c +++ b/drivers/gpu/msm/adreno_ringbuffer.c @@ -453,7 +453,7 @@ adreno_ringbuffer_addcmds(struct adreno_ringbuffer *rb, * error checking if needed */ total_sizedwords += flags & KGSL_CMD_FLAGS_PMODE ? 4 : 0; - total_sizedwords += context ? 7 : 0; + total_sizedwords += !(flags & KGSL_CMD_FLAGS_NO_TS_CMP) ? 7 : 0; total_sizedwords += !(flags & KGSL_CMD_FLAGS_NOT_KERNEL_CMD) ? 2 : 0; if (adreno_is_a3xx(adreno_dev)) @@ -498,10 +498,9 @@ adreno_ringbuffer_addcmds(struct adreno_ringbuffer *rb, /* always increment the global timestamp. once. */ rb->timestamp[KGSL_MEMSTORE_GLOBAL]++; - - if (context && !(flags & KGSL_CMD_FLAGS_DUMMY_INTR_CMD)) { + if (context) { if (context_id == KGSL_MEMSTORE_GLOBAL) - rb->timestamp[context->id] = + rb->timestamp[context_id] = rb->timestamp[KGSL_MEMSTORE_GLOBAL]; else rb->timestamp[context_id]++; @@ -531,7 +530,7 @@ adreno_ringbuffer_addcmds(struct adreno_ringbuffer *rb, GSL_RB_WRITE(ringcmds, rcmd_gpu, cp_type3_packet(CP_MEM_WRITE, 2)); GSL_RB_WRITE(ringcmds, rcmd_gpu, (gpuaddr + - KGSL_MEMSTORE_OFFSET(context_id, soptimestamp))); + KGSL_MEMSTORE_OFFSET(context->id, soptimestamp))); GSL_RB_WRITE(ringcmds, rcmd_gpu, timestamp); /* end-of-pipeline timestamp */ @@ -539,14 +538,14 @@ adreno_ringbuffer_addcmds(struct adreno_ringbuffer *rb, cp_type3_packet(CP_EVENT_WRITE, 3)); GSL_RB_WRITE(ringcmds, rcmd_gpu, CACHE_FLUSH_TS); GSL_RB_WRITE(ringcmds, rcmd_gpu, (gpuaddr + - KGSL_MEMSTORE_OFFSET(context_id, eoptimestamp))); + KGSL_MEMSTORE_OFFSET(context->id, eoptimestamp))); GSL_RB_WRITE(ringcmds, rcmd_gpu, timestamp); GSL_RB_WRITE(ringcmds, rcmd_gpu, cp_type3_packet(CP_MEM_WRITE, 2)); GSL_RB_WRITE(ringcmds, rcmd_gpu, (gpuaddr + - KGSL_MEMSTORE_OFFSET(KGSL_MEMSTORE_GLOBAL, - eoptimestamp))); + KGSL_MEMSTORE_OFFSET(KGSL_MEMSTORE_GLOBAL, + eoptimestamp))); GSL_RB_WRITE(ringcmds, rcmd_gpu, rb->timestamp[KGSL_MEMSTORE_GLOBAL]); } else { @@ -554,11 +553,13 @@ adreno_ringbuffer_addcmds(struct adreno_ringbuffer *rb, cp_type3_packet(CP_EVENT_WRITE, 3)); GSL_RB_WRITE(ringcmds, rcmd_gpu, CACHE_FLUSH_TS); GSL_RB_WRITE(ringcmds, rcmd_gpu, (gpuaddr + - KGSL_MEMSTORE_OFFSET(context_id, eoptimestamp))); - GSL_RB_WRITE(ringcmds, rcmd_gpu, rb->timestamp[context_id]); + KGSL_MEMSTORE_OFFSET(KGSL_MEMSTORE_GLOBAL, + eoptimestamp))); + GSL_RB_WRITE(ringcmds, rcmd_gpu, + rb->timestamp[KGSL_MEMSTORE_GLOBAL]); } - if (context) { + if (!(flags & KGSL_CMD_FLAGS_NO_TS_CMP)) { /* Conditional execution based on memory values */ GSL_RB_WRITE(ringcmds, rcmd_gpu, cp_type3_packet(CP_COND_EXEC, 4)); @@ -590,30 +591,6 @@ adreno_ringbuffer_addcmds(struct adreno_ringbuffer *rb, return timestamp; } -void -adreno_ringbuffer_issuecmds_intr(struct kgsl_device *device, - struct kgsl_context *k_ctxt, - unsigned int *cmds, - int sizedwords) -{ - struct adreno_device *adreno_dev = ADRENO_DEVICE(device); - struct adreno_ringbuffer *rb = &adreno_dev->ringbuffer; - struct adreno_context *a_ctxt = NULL; - - if (!k_ctxt) - return; - - a_ctxt = k_ctxt->devctxt; - - if (k_ctxt->id == KGSL_CONTEXT_INVALID || - a_ctxt == NULL || - device->state & KGSL_STATE_HUNG) - return; - - adreno_ringbuffer_addcmds(rb, a_ctxt, KGSL_CMD_FLAGS_DUMMY_INTR_CMD, - cmds, sizedwords); -} - void adreno_ringbuffer_issuecmds(struct kgsl_device *device, unsigned int flags, diff --git a/drivers/gpu/msm/adreno_ringbuffer.h b/drivers/gpu/msm/adreno_ringbuffer.h index 6ad85ad5719..ae2e4c79e0b 100644 --- a/drivers/gpu/msm/adreno_ringbuffer.h +++ b/drivers/gpu/msm/adreno_ringbuffer.h @@ -108,11 +108,6 @@ void adreno_ringbuffer_issuecmds(struct kgsl_device *device, unsigned int *cmdaddr, int sizedwords); -void adreno_ringbuffer_issuecmds_intr(struct kgsl_device *device, - struct kgsl_context *k_ctxt, - unsigned int *cmdaddr, - int sizedwords); - void adreno_ringbuffer_submit(struct adreno_ringbuffer *rb); void kgsl_cp_intrcallback(struct kgsl_device *device);