msm: kgsl: Add per context timestamp
Add new ioctls for per context timestamps.
Timestamp functions (read/write/wait) will now be context
specific rather than only using the global timestamp.
Per context timestamps is a requirement for priority
based queueing.
Change-Id: I5fdfb816480241b9552ecf90ed1bb22db3a652b5
Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
diff --git a/drivers/gpu/msm/z180.c b/drivers/gpu/msm/z180.c
index 41f4435..bc5c960 100644
--- a/drivers/gpu/msm/z180.c
+++ b/drivers/gpu/msm/z180.c
@@ -101,6 +101,7 @@
static int z180_start(struct kgsl_device *device, unsigned int init_ram);
static int z180_stop(struct kgsl_device *device);
static int z180_wait(struct kgsl_device *device,
+ struct kgsl_context *context,
unsigned int timestamp,
unsigned int msecs);
static void z180_regread(struct kgsl_device *device,
@@ -385,8 +386,8 @@
if (timestamp_cmp(z180_dev->current_timestamp,
z180_dev->timestamp) > 0)
- status = z180_wait(device, z180_dev->current_timestamp,
- timeout);
+ status = z180_wait(device, NULL,
+ z180_dev->current_timestamp, timeout);
if (status)
KGSL_DRV_ERR(device, "z180_waittimestamp() timed out\n");
@@ -821,14 +822,16 @@
}
static unsigned int z180_readtimestamp(struct kgsl_device *device,
- enum kgsl_timestamp_type type)
+ struct kgsl_context *context, enum kgsl_timestamp_type type)
{
struct z180_device *z180_dev = Z180_DEVICE(device);
+ (void)context;
/* get current EOP timestamp */
return z180_dev->timestamp;
}
static int z180_waittimestamp(struct kgsl_device *device,
+ struct kgsl_context *context,
unsigned int timestamp,
unsigned int msecs)
{
@@ -839,13 +842,14 @@
msecs = 10 * MSEC_PER_SEC;
mutex_unlock(&device->mutex);
- status = z180_wait(device, timestamp, msecs);
+ status = z180_wait(device, context, timestamp, msecs);
mutex_lock(&device->mutex);
return status;
}
static int z180_wait(struct kgsl_device *device,
+ struct kgsl_context *context,
unsigned int timestamp,
unsigned int msecs)
{
@@ -854,7 +858,7 @@
timeout = wait_io_event_interruptible_timeout(
device->wait_queue,
- kgsl_check_timestamp(device, timestamp),
+ kgsl_check_timestamp(device, context, timestamp),
msecs_to_jiffies(msecs));
if (timeout > 0)