msm: kgsl: Add idle_stats based pwrscale policy

Add a pwrscale policy to transmit idle statistics
to userspace via the MSM idle_stats_device core.

Signed-off-by: Lucille Sylvester <lsylvest@codeaurora.org>
diff --git a/drivers/gpu/msm/z180.c b/drivers/gpu/msm/z180.c
index 27004af..a8aff37 100644
--- a/drivers/gpu/msm/z180.c
+++ b/drivers/gpu/msm/z180.c
@@ -522,6 +522,8 @@
 	if (status)
 		goto error_close_ringbuffer;
 
+	kgsl_pwrscale_init(device);
+
 	return status;
 
 error_close_ringbuffer:
@@ -537,6 +539,7 @@
 
 	device = (struct kgsl_device *)pdev->id_entry->driver_data;
 
+	kgsl_pwrscale_close(device);
 	kgsl_device_platform_remove(device);
 
 	z180_ringbuffer_close(device);
@@ -861,8 +864,19 @@
 static void z180_power_stats(struct kgsl_device *device,
 			    struct kgsl_power_stats *stats)
 {
-	stats->total_time = 0;
-	stats->busy_time = 0;
+	struct kgsl_pwrctrl *pwr = &device->pwrctrl;
+
+	if (pwr->time == 0) {
+		pwr->time = ktime_to_us(ktime_get());
+		stats->total_time = 0;
+		stats->busy_time = 0;
+	} else {
+		s64 tmp;
+		tmp = ktime_to_us(ktime_get());
+		stats->total_time = tmp - pwr->time;
+		stats->busy_time = tmp - pwr->time;
+		pwr->time = tmp;
+	}
 }
 
 static void z180_irqctrl(struct kgsl_device *device, int state)