[Intel-gfx] [PATCH i-g-t] igt/gem_reg_read: update TIMESTAMP register address for gen9+

Andrzej Lawrynowicz andrzej.lawrynowicz at intel.com
Mon Oct 31 13:33:52 UTC 2016


Since gen9 timestamp should be read from BLT ring (TIMESTAMP_BCSUNIT).

On gen9 reading timestamp from RENDER_RING is still working but is deprecated
with no guarantee to be supported in next steppings.

This commit require whitelist TIMESTAMP_BCSUNIT in kernel.

Cc: Chris Wilson <chris at chris-wilson.co.uk>
Signed-off-by: Andrzej Lawrynowicz <andrzej.lawrynowicz at intel.com>
---
 tests/gem_reg_read.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/tests/gem_reg_read.c b/tests/gem_reg_read.c
index 79facc1..6fdbfcb 100644
--- a/tests/gem_reg_read.c
+++ b/tests/gem_reg_read.c
@@ -43,7 +43,10 @@ struct local_drm_i915_reg_read {
 
 #define REG_READ_IOCTL DRM_IOWR(DRM_COMMAND_BASE + 0x31, struct local_drm_i915_reg_read)
 
-#define RENDER_RING_TIMESTAMP 0x2358
+#define RENDER_RING_BASE        0x02000
+#define BLT_RING_BASE           0x22000
+
+#define RING_TIMESTAMP(base)    (base)+0x358
 
 static int read_register(int fd, uint64_t offset, uint64_t * val)
 {
@@ -73,12 +76,20 @@ static bool check_kernel_x86_64(void)
 	return false;
 }
 
+static uint64_t get_timestamp_offset(int fd)
+{
+	if (intel_gen(intel_get_drm_devid(fd)) < 9)
+		return RING_TIMESTAMP(RENDER_RING_BASE);
+	else
+		return RING_TIMESTAMP(BLT_RING_BASE);
+}
+
 static bool check_timestamp(int fd)
 {
 	int ret;
 	uint64_t val;
 
-	ret = read_register(fd, RENDER_RING_TIMESTAMP | 1, &val);
+	ret = read_register(fd, get_timestamp_offset(fd) | 1, &val);
 
 	return ret == 0;
 }
@@ -88,7 +99,7 @@ static int timer_query(int fd, uint64_t * val)
 	uint64_t offset;
 	int ret;
 
-	offset = RENDER_RING_TIMESTAMP;
+	offset = get_timestamp_offset(fd);
 	if (has_proper_timestamp)
 		offset |= 1;
 
-- 
2.10.2



More information about the Intel-gfx mailing list