Mesa (master): i965: read CS timestamp frequency from the kernel on Gen10+

Lionel Landwerlin llandwerlin at kemper.freedesktop.org
Mon Dec 4 18:05:56 UTC 2017


Module: Mesa
Branch: master
Commit: b66e4b51bfc82621e590e6be8972a30958c0a08a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b66e4b51bfc82621e590e6be8972a30958c0a08a

Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date:   Mon Nov  6 11:11:42 2017 +0000

i965: read CS timestamp frequency from the kernel on Gen10+

We cannot figure this value out of the PCI-id anymore. Let's read it
from the kernel (which computes this from a few registers).

When running on a (upcoming) 4.16-rc1+ kernel, this will fixes piglit
tests on CNL :

    spec at arb_timer_query@query gl_timestamp
    spec at arb_timer_query@timestamp-get
    spec at ext_timer_query@time-elapsed

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Rafael Antognolli <rafael.antognolli at intel.com>

---

 src/mesa/drivers/dri/i965/intel_screen.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index db1552c188..0c17b4050c 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -1686,6 +1686,27 @@ intelDestroyBuffer(__DRIdrawable * driDrawPriv)
 }
 
 static void
+intel_cs_timestamp_frequency(struct intel_screen *screen)
+{
+   /* We shouldn't need to update gen_device_info.timestamp_frequency prior to
+    * gen10, PCI-id is enough to figure it out.
+    */
+   assert(screen->devinfo.gen >= 10);
+
+   int ret, freq;
+
+   ret = intel_get_param(screen, I915_PARAM_CS_TIMESTAMP_FREQUENCY,
+                         &freq);
+   if (ret < 0) {
+      _mesa_warning(NULL,
+                    "Kernel 4.15 required to read the CS timestamp frequency.\n");
+      return;
+   }
+
+   screen->devinfo.timestamp_frequency = freq;
+}
+
+static void
 intel_detect_sseu(struct intel_screen *screen)
 {
    assert(screen->devinfo.gen >= 8);
@@ -2405,6 +2426,9 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen)
    isl_device_init(&screen->isl_dev, &screen->devinfo,
                    screen->hw_has_swizzling);
 
+   if (devinfo->gen >= 10)
+      intel_cs_timestamp_frequency(screen);
+
    /* GENs prior to 8 do not support EU/Subslice info */
    if (devinfo->gen >= 8) {
       intel_detect_sseu(screen);




More information about the mesa-commit mailing list