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 <lsylvest@codeaurora.org>
This commit is contained in:
Lucille Sylvester
2012-04-19 16:32:53 -06:00
parent da04ab049d
commit 995dbf1edd

View File

@@ -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;