From 995dbf1edd809b315a3a4ef8ca514bb53447cd38 Mon Sep 17 00:00:00 2001 From: Lucille Sylvester Date: Thu, 19 Apr 2012 16:32:53 -0600 Subject: [PATCH] msm: kgsl: Improve the notification timing of idle events Use the ringbuffer read and write pointers to determine if the GPU is almost done processing a command sequence. Change-Id: I0d131a7df71aca02d644a5b95b99749ced2f0b0e Signed-off-by: Lucille Sylvester --- drivers/gpu/msm/kgsl_pwrscale_msm.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/msm/kgsl_pwrscale_msm.c b/drivers/gpu/msm/kgsl_pwrscale_msm.c index f77a02bfdbd..61d4b2d1885 100644 --- a/drivers/gpu/msm/kgsl_pwrscale_msm.c +++ b/drivers/gpu/msm/kgsl_pwrscale_msm.c @@ -16,6 +16,7 @@ #include "kgsl.h" #include "kgsl_pwrscale.h" #include "kgsl_device.h" +#include "a2xx_reg.h" struct msm_priv { struct kgsl_device *device; @@ -97,7 +98,11 @@ static void msm_idle(struct kgsl_device *device, struct kgsl_pwrscale *pwrscale) { struct msm_priv *priv = pwrscale->priv; - if (priv->enabled && pwrscale->gpu_busy) + unsigned int rb_rptr, rb_wptr; + kgsl_regread(device, REG_CP_RB_RPTR, &rb_rptr); + kgsl_regread(device, REG_CP_RB_WPTR, &rb_wptr); + + if (priv->enabled && (rb_rptr == rb_wptr)) msm_dcvs_idle(priv->handle, MSM_DCVS_IDLE_ENTER, 0); return;