Bug 91317 - [hsw] i915_reg_read_ioctl(TIMESTAMP) returns garbage
Summary: [hsw] i915_reg_read_ioctl(TIMESTAMP) returns garbage
Status: CLOSED FIXED
Alias: None
Product: DRI
Classification: Unclassified
Component: DRM/Intel (show other bugs)
Version: unspecified
Hardware: Other All
: medium normal
Assignee: Intel GFX Bugs mailing list
QA Contact: Intel GFX Bugs mailing list
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-07-12 13:57 UTC by Karol Herbst
Modified: 2017-07-24 22:46 UTC (History)
1 user (show)

See Also:
i915 platform:
i915 features:


Attachments
hack to fix the problem (461 bytes, patch)
2015-07-12 14:08 UTC, Karol Herbst
no flags Details | Splinter Review

Description Karol Herbst 2015-07-12 13:57:23 UTC
Sometimes on my hardware GL_ARB_timer_query isn't always detected

Intel HD 4600
kernel-4.1.1
libdrm-2.4.62
mesa-master-8108de4

this causes a fallback to OpenGL 3.2:

$ while true; do glxinfo | grep -e "OpenGL core profile version string" -e GL_ARB_timer_query; done
OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, 
    GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, 
OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, 
    GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, 
    GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, 
    GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, 
    GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, 
OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
Comment 1 Karol Herbst 2015-07-12 14:08:49 UTC
Created attachment 117076 [details] [review]
hack to fix the problem

setting the loop variable to 1000 didn't seem to fix the problem, 10.000 is hight enough for more than 1000 runs.
Comment 2 Chris Wilson 2015-07-12 16:17:26 UTC
Look at the individual values. There is no way we can do 10 round trips through the kernel in less than 80ns, let alone 1000, so it is much more likely that the reads are suspect.
Comment 3 Karol Herbst 2015-07-12 16:58:50 UTC
(In reply to Chris Wilson from comment #2)
> Look at the individual values. There is no way we can do 10 round trips
> through the kernel in less than 80ns, let alone 1000, so it is much more
> likely that the reads are suspect.

i saw that I commented without checking what I wrote: I need 10.000 loops before the value gets stable, 1000 was not. I will try to debug this further.
Comment 4 Karol Herbst 2015-07-12 18:14:47 UTC
just added a printf with the value:

0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l65537ldisplay: :3  screen: 0

that's like the longest I got
Comment 5 Karol Herbst 2015-07-12 18:15:47 UTC
yeah, seems like there are a lot of 0, and then at the end one 65537
Comment 6 Chris Wilson 2015-07-12 18:27:35 UTC
I think it is safe to say: it's broke! :)

Do you have 32bit or 64bit?
Comment 7 Chris Wilson 2015-07-12 18:35:26 UTC
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index 2c47766..d4c57a9 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -1325,7 +1325,8 @@ int i915_reg_read_ioctl(struct drm_device *dev,
 
        switch (entry->size) {
        case 8:
-               reg->val = I915_READ64(reg->offset);
+               /* w/a for broken hw */
+               reg->val = I915_READ64_2x32(reg->offset, reg->offset + 4);
                break;
        case 4:
                reg->val = I915_READ(reg->offset);
Comment 8 Karol Herbst 2015-07-12 19:39:35 UTC
64 bit.

I guess this is for the kernel? Will try it out
Comment 9 Karol Herbst 2015-07-12 19:58:13 UTC
yeah, with the kernel patch I got now:


$ while true; do glxinfo | grep 0l ; done
1181029360ldisplay: :0  screen: 0
1186384440ldisplay: :0  screen: 0
1192627290ldisplay: :0  screen: 0
1195108540ldisplay: :0  screen: 0
1197301060ldisplay: :0  screen: 0
1200431000ldisplay: :0  screen: 0
1201377440ldisplay: :0  screen: 0
1204815930ldisplay: :0  screen: 0
1210804110ldisplay: :0  screen: 0
1213607430ldisplay: :0  screen: 0
1214233940ldisplay: :0  screen: 0
1215281580ldisplay: :0  screen: 0
1225884330ldisplay: :0  screen: 0
1229673860ldisplay: :0  screen: 0
1229981530ldisplay: :0  screen: 0
1230304190ldisplay: :0  screen: 0
1233167030ldisplay: :0  screen: 0
1238769590ldisplay: :0  screen: 0
1240953560ldisplay: :0  screen: 0
Comment 10 Karol Herbst 2015-07-12 19:59:12 UTC
strange is, that I don't think I ever saw it before and just notice this today, after I used this laptop for more than a year.
Comment 11 Chris Wilson 2015-07-30 07:02:43 UTC
kernel commit 648a9bc5308d952f2c80772301b339f73026f013
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Thu Jul 16 12:37:56 2015 +0100

    drm/i915: Use two 32bit reads for select 64bit REG_READ ioctls


mesa commit 013d731a67538a2eb8f508fa54bb86191f0e5491
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Tue Jul 21 11:12:57 2015 +0100

    i965: Use updated kernel interface for accurate TIMESTAMP reads
Comment 12 Karol Herbst 2015-07-30 13:41:41 UTC
seems to work with both patches applied, thanks


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.