summaryrefslogtreecommitdiff
path: root/drivers/gpu/msm/kgsl_pwrctrl.c
diff options
context:
space:
mode:
authorPrakash Kamliya <pkamliya@codeaurora.org>2016-12-20 17:45:41 +0530
committerPrakash Kamliya <pkamliya@codeaurora.org>2016-12-22 20:55:12 +0530
commita088541fb552653e0417472c7463fc1856e6e565 (patch)
tree70ef47345cc711d80bba22ad0fc12d0c89040d7c /drivers/gpu/msm/kgsl_pwrctrl.c
parente379f786aa82c6c94b95cbb06befba802731019a (diff)
msm: kgsl: Do a midframe sampling of power stats if enabled
Currently we sample power stats at the expiry of cmdbatch. In cases where cmdbatch takes a long time to finish the job, it delays power stats sampling, in effect it delays DCVS decision for changing the frequency. Do a midframe power stats sampling and feed it to DCVS if it is enabled. Change-Id: I547d792b38649aa1d60525b0dc335791b37989fd Signed-off-by: Prakash Kamliya <pkamliya@codeaurora.org>
Diffstat (limited to 'drivers/gpu/msm/kgsl_pwrctrl.c')
-rw-r--r--drivers/gpu/msm/kgsl_pwrctrl.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/msm/kgsl_pwrctrl.c b/drivers/gpu/msm/kgsl_pwrctrl.c
index 172de7406c26..cd9a82a9bf4a 100644
--- a/drivers/gpu/msm/kgsl_pwrctrl.c
+++ b/drivers/gpu/msm/kgsl_pwrctrl.c
@@ -2355,6 +2355,7 @@ static int _init(struct kgsl_device *device)
case KGSL_STATE_ACTIVE:
kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_OFF);
del_timer_sync(&device->idle_timer);
+ kgsl_pwrscale_midframe_timer_cancel(device);
device->ftbl->stop(device);
/* fall through */
case KGSL_STATE_AWARE:
@@ -2462,6 +2463,7 @@ _aware(struct kgsl_device *device)
case KGSL_STATE_ACTIVE:
kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_OFF);
del_timer_sync(&device->idle_timer);
+ kgsl_pwrscale_midframe_timer_cancel(device);
break;
case KGSL_STATE_SLUMBER:
status = kgsl_pwrctrl_enable(device);
@@ -2486,6 +2488,8 @@ _nap(struct kgsl_device *device)
return -EBUSY;
}
+ kgsl_pwrscale_midframe_timer_cancel(device);
+
/*
* Read HW busy counters before going to NAP state.
* The data might be used by power scale governors
@@ -2522,6 +2526,7 @@ _slumber(struct kgsl_device *device)
/* fall through */
case KGSL_STATE_NAP:
del_timer_sync(&device->idle_timer);
+ kgsl_pwrscale_midframe_timer_cancel(device);
if (device->pwrctrl.thermal_cycle == CYCLE_ACTIVE) {
device->pwrctrl.thermal_cycle = CYCLE_ENABLE;
del_timer_sync(&device->pwrctrl.thermal_timer);