Hello, on my Laptop (Lenovo X201) running Debian Stretch (Linux 4.7.8, x.org 7.7, xserver-xorg-video-intel 2:2.99.917+git20160706-1) the display (external Monitor, but also on internal LVDS) flickers sometimes on key presses (probably related to the update events). I can reproduce this nicely under Gnome with sloppy focus, changing focus between two Terminals with the mouse and pressing repeatedly a key. Will provide a drm.debug=0x1e dmesg once I generated it. (I submit the bug already now to save what I already typed.) Tell me if you need more information. Best regards Uwe
Created attachment 127998 [details] journal This was captured using journalctl after the issue happend a few times already. For example it happened once at "Tue Nov 15 20:52:12 CET 2016". (I.e. on the Enter key press to start "date" in the Terminal.)
Forgot to mention: When the machine crashes, the display gets all black, sometimes with a multicolored line at the left side and no reaction on key presses, not even sysrq. If that helps, I'm ukleinek on freenode/#intel-gfx.
In Icedove (aka thunderbird) and firefox I also see display errors, see the attached picture.
Created attachment 128198 [details] artifacts in firefox borders for input fields are interrupted and put off
Created attachment 128199 [details] xorg.log This isn't the log from the session where I grabbed the journal, I hope it's useful anyhow.
When switching to the intel driver (away from modesetting) the issue is gone.
There is a bug report in the Debian bug tracker by someone else with an X201 and the same symptoms: https://bugs.debian.org/837451
Adding here the video of the problem: https://www.kleine-koenig.org/tmp/20170112T081133.mp4 It also seems like this is all just an underrun problem on GEN5. Uwe, can you attach the lines you see in dmesg?
The fifo underrun messages happen always in pairs: $ journalctl | grep ironlake Jan 12 09:01:51 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun Jan 12 09:01:51 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* PCH transcoder A FIFO underrun Jan 12 09:05:51 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* CPU pipe B FIFO underrun Jan 12 09:05:51 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* PCH transcoder B FIFO underrun Jan 12 09:14:48 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun Jan 12 09:14:48 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* PCH transcoder A FIFO underrun Jan 12 09:46:21 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun Jan 12 09:46:21 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* PCH transcoder A FIFO underrun Jan 12 09:48:15 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun Jan 12 09:48:15 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* PCH transcoder A FIFO underrun Jan 12 09:52:49 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun Jan 12 09:52:49 perseus kernel: [drm:ironlake_irq_handler [i915]] *ERROR* PCH transcoder A FIFO underrun I just cleaned dmesg while switching back to -intel to see easily if I get fifo underruns there, too. I found [ 834.364173] [drm:ironlake_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun [ 834.364215] [drm:ironlake_irq_handler [i915]] *ERROR* PCH transcoder A FIFO underrun in my irc logs which corresponds to the 9:14 entry I think.
Adrinael in #intel-gfx helped me to run IGT, I did that on drm-tip, nothing obvious: igt/core_auth/basic-auth: pass igt/core_prop_blob/basic: pass igt/drv_getparams_basic/basic-eu-total: pass igt/drv_getparams_basic/basic-subslice-total: pass igt/drv_hangman/error-state-basic: pass igt/gem_basic/bad-close: pass igt/gem_basic/create-close: pass igt/gem_basic/create-fd-close: pass igt/gem_busy/basic-busy-default: pass igt/gem_busy/basic-hang-default: pass igt/gem_close_race/basic-process: pass igt/gem_close_race/basic-threads: pass igt/gem_cpu_reloc/basic: pass igt/gem_cs_tlb/basic-default: pass igt/gem_ctx_basic: skip igt/gem_ctx_create/basic: skip igt/gem_ctx_create/basic-files: skip igt/gem_ctx_exec/basic: skip igt/gem_ctx_param/basic: skip igt/gem_ctx_param/basic-default: skip igt/gem_ctx_switch/basic-default: skip igt/gem_ctx_switch/basic-default-heavy: skip igt/gem_exec_basic/basic-blt: skip igt/gem_exec_basic/basic-bsd: pass igt/gem_exec_basic/basic-bsd1: skip igt/gem_exec_basic/basic-bsd2: skip igt/gem_exec_basic/basic-default: pass igt/gem_exec_basic/basic-render: pass igt/gem_exec_basic/basic-vebox: skip igt/gem_exec_basic/gtt-blt: skip igt/gem_exec_basic/gtt-bsd: pass igt/gem_exec_basic/gtt-bsd1: skip igt/gem_exec_basic/gtt-bsd2: skip igt/gem_exec_basic/gtt-default: pass igt/gem_exec_basic/gtt-render: pass igt/gem_exec_basic/gtt-vebox: skip igt/gem_exec_basic/readonly-blt: skip igt/gem_exec_basic/readonly-bsd: pass igt/gem_exec_basic/readonly-bsd1: skip igt/gem_exec_basic/readonly-bsd2: skip igt/gem_exec_basic/readonly-default: pass igt/gem_exec_basic/readonly-render: pass igt/gem_exec_basic/readonly-vebox: skip igt/gem_exec_create/basic: pass igt/gem_exec_flush/basic-batch-kernel-default-cmd: skip igt/gem_exec_flush/basic-batch-kernel-default-uc: pass igt/gem_exec_flush/basic-batch-kernel-default-wb: pass igt/gem_exec_flush/basic-uc-pro-default: pass igt/gem_exec_flush/basic-uc-prw-default: pass igt/gem_exec_flush/basic-uc-ro-default: pass igt/gem_exec_flush/basic-uc-rw-default: pass igt/gem_exec_flush/basic-uc-set-default: pass igt/gem_exec_flush/basic-wb-pro-default: pass igt/gem_exec_flush/basic-wb-prw-default: pass igt/gem_exec_flush/basic-wb-ro-before-default: pass igt/gem_exec_flush/basic-wb-ro-default: pass igt/gem_exec_flush/basic-wb-rw-before-default: pass igt/gem_exec_flush/basic-wb-rw-default: pass igt/gem_exec_flush/basic-wb-set-default: pass igt/gem_exec_gttfill/basic: pass igt/gem_exec_nop/basic-parallel: pass igt/gem_exec_nop/basic-series: pass igt/gem_exec_parallel/basic: pass igt/gem_exec_parse/basic-allowed: skip igt/gem_exec_parse/basic-rejected: skip igt/gem_exec_reloc/basic-cpu: pass igt/gem_exec_reloc/basic-gtt: pass igt/gem_exec_reloc/basic-noreloc: pass igt/gem_exec_reloc/basic-softpin: pass igt/gem_exec_store/basic-all: pass igt/gem_exec_store/basic-blt: skip igt/gem_exec_store/basic-bsd: pass igt/gem_exec_store/basic-bsd1: skip igt/gem_exec_store/basic-bsd2: skip igt/gem_exec_store/basic-default: pass igt/gem_exec_store/basic-render: pass igt/gem_exec_store/basic-vebox: skip igt/gem_exec_suspend/basic: pass igt/gem_exec_suspend/basic-s3: pass igt/gem_exec_suspend/basic-s4-devices: pass igt/gem_flink_basic/bad-flink: pass igt/gem_flink_basic/bad-open: pass igt/gem_flink_basic/basic: pass igt/gem_flink_basic/double-flink: pass igt/gem_flink_basic/flink-lifetime: pass igt/gem_linear_blits/basic: pass igt/gem_mmap/basic: pass igt/gem_mmap/basic-small-bo: pass igt/gem_mmap_gtt/basic: pass igt/gem_mmap_gtt/basic-copy: pass igt/gem_mmap_gtt/basic-read: pass igt/gem_mmap_gtt/basic-read-no-prefault: pass igt/gem_mmap_gtt/basic-read-write: pass igt/gem_mmap_gtt/basic-read-write-distinct: pass igt/gem_mmap_gtt/basic-short: pass igt/gem_mmap_gtt/basic-small-bo: pass igt/gem_mmap_gtt/basic-small-bo-tiledx: pass igt/gem_mmap_gtt/basic-small-bo-tiledy: pass igt/gem_mmap_gtt/basic-small-copy: pass igt/gem_mmap_gtt/basic-small-copy-xy: pass igt/gem_mmap_gtt/basic-wc: pass igt/gem_mmap_gtt/basic-write: pass igt/gem_mmap_gtt/basic-write-cpu-read-gtt: skip igt/gem_mmap_gtt/basic-write-gtt: pass igt/gem_mmap_gtt/basic-write-gtt-no-prefault: pass igt/gem_mmap_gtt/basic-write-no-prefault: pass igt/gem_mmap_gtt/basic-write-read: pass igt/gem_mmap_gtt/basic-write-read-distinct: pass igt/gem_pread/basic: pass igt/gem_pwrite/basic: pass igt/gem_render_linear_blits/basic: skip igt/gem_render_tiled_blits/basic: skip igt/gem_ringfill/basic-default: pass igt/gem_ringfill/basic-default-forked: pass igt/gem_ringfill/basic-default-hang: pass igt/gem_ringfill/basic-default-interruptible: pass igt/gem_sync/basic-all: pass igt/gem_sync/basic-each: pass igt/gem_sync/basic-many-each: pass igt/gem_sync/basic-store-all: pass igt/gem_sync/basic-store-each: pass igt/gem_tiled_blits/basic: pass igt/gem_tiled_fence_blits/basic: pass igt/gem_tiled_pread_basic: pass igt/gem_wait/basic-busy-all: pass igt/gem_wait/basic-wait-all: pass igt/gem_workarounds/basic-read: pass igt/kms_addfb_basic/addfb25-bad-modifier: pass igt/kms_addfb_basic/addfb25-framebuffer-vs-set-tiling: pass igt/kms_addfb_basic/addfb25-modifier-no-flag: pass igt/kms_addfb_basic/addfb25-x-tiled: pass igt/kms_addfb_basic/addfb25-x-tiled-mismatch: pass igt/kms_addfb_basic/addfb25-y-tiled: pass igt/kms_addfb_basic/addfb25-y-tiled-small: skip igt/kms_addfb_basic/addfb25-yf-tiled: pass igt/kms_addfb_basic/bad-pitch-0: pass igt/kms_addfb_basic/bad-pitch-1024: pass igt/kms_addfb_basic/bad-pitch-128: pass igt/kms_addfb_basic/bad-pitch-256: pass igt/kms_addfb_basic/bad-pitch-32: pass igt/kms_addfb_basic/bad-pitch-63: pass igt/kms_addfb_basic/bad-pitch-65536: pass igt/kms_addfb_basic/bad-pitch-999: pass igt/kms_addfb_basic/basic: pass igt/kms_addfb_basic/basic-x-tiled: pass igt/kms_addfb_basic/basic-y-tiled: pass igt/kms_addfb_basic/bo-too-small: pass igt/kms_addfb_basic/bo-too-small-due-to-tiling: pass igt/kms_addfb_basic/clobberred-modifier: pass igt/kms_addfb_basic/framebuffer-vs-set-tiling: pass igt/kms_addfb_basic/invalid-get-prop: pass igt/kms_addfb_basic/invalid-get-prop-any: pass igt/kms_addfb_basic/invalid-set-prop: pass igt/kms_addfb_basic/invalid-set-prop-any: pass igt/kms_addfb_basic/no-handle: pass igt/kms_addfb_basic/size-max: pass igt/kms_addfb_basic/small-bo: pass igt/kms_addfb_basic/tile-pitch-mismatch: pass igt/kms_addfb_basic/too-high: pass igt/kms_addfb_basic/too-wide: pass igt/kms_addfb_basic/unused-handle: pass igt/kms_addfb_basic/unused-modifier: pass igt/kms_addfb_basic/unused-offsets: pass igt/kms_addfb_basic/unused-pitches: pass igt/kms_busy/basic-flip-default-a: pass igt/kms_busy/basic-flip-default-b: pass igt/kms_busy/basic-flip-default-c: skip igt/kms_cursor_legacy/basic-busy-flip-before-cursor-atomic: skip igt/kms_cursor_legacy/basic-busy-flip-before-cursor-legacy: pass igt/kms_cursor_legacy/basic-flip-after-cursor-atomic: skip igt/kms_cursor_legacy/basic-flip-after-cursor-legacy: pass igt/kms_cursor_legacy/basic-flip-after-cursor-varying-size: pass igt/kms_cursor_legacy/basic-flip-before-cursor-atomic: skip igt/kms_cursor_legacy/basic-flip-before-cursor-legacy: pass igt/kms_cursor_legacy/basic-flip-before-cursor-varying-size: pass igt/kms_flip/basic-flip-vs-dpms: pass igt/kms_flip/basic-flip-vs-modeset: pass igt/kms_flip/basic-flip-vs-wf_vblank: pass igt/kms_flip/basic-plain-flip: pass igt/kms_force_connector_basic/force-connector-state: skip igt/kms_force_connector_basic/force-edid: skip igt/kms_force_connector_basic/force-load-detect: skip igt/kms_force_connector_basic/prune-stale-modes: skip igt/kms_frontbuffer_tracking/basic: skip igt/kms_pipe_crc_basic/bad-nb-words-1: pass igt/kms_pipe_crc_basic/bad-nb-words-3: pass igt/kms_pipe_crc_basic/bad-pipe: pass igt/kms_pipe_crc_basic/bad-source: pass igt/kms_pipe_crc_basic/hang-read-crc-pipe-a: pass igt/kms_pipe_crc_basic/hang-read-crc-pipe-b: pass igt/kms_pipe_crc_basic/hang-read-crc-pipe-c: skip igt/kms_pipe_crc_basic/nonblocking-crc-pipe-a: pass igt/kms_pipe_crc_basic/nonblocking-crc-pipe-a-frame-sequence: pass igt/kms_pipe_crc_basic/nonblocking-crc-pipe-b: pass igt/kms_pipe_crc_basic/nonblocking-crc-pipe-b-frame-sequence: pass igt/kms_pipe_crc_basic/nonblocking-crc-pipe-c: skip igt/kms_pipe_crc_basic/nonblocking-crc-pipe-c-frame-sequence: skip igt/kms_pipe_crc_basic/read-crc-pipe-a: pass igt/kms_pipe_crc_basic/read-crc-pipe-a-frame-sequence: pass igt/kms_pipe_crc_basic/read-crc-pipe-b: pass igt/kms_pipe_crc_basic/read-crc-pipe-b-frame-sequence: pass igt/kms_pipe_crc_basic/read-crc-pipe-c: skip igt/kms_pipe_crc_basic/read-crc-pipe-c-frame-sequence: skip igt/kms_pipe_crc_basic/suspend-read-crc-pipe-a: pass igt/kms_pipe_crc_basic/suspend-read-crc-pipe-b: pass igt/kms_pipe_crc_basic/suspend-read-crc-pipe-c: skip igt/kms_setmode/basic-clone-single-crtc: pass igt/kms_sink_crc_basic: skip igt/pm_backlight/basic-brightness: pass igt/pm_rpm/basic-pci-d3-state: skip igt/pm_rpm/basic-rte: skip igt/pm_rps/basic-api: skip igt/prime_busy/basic-after-default: pass igt/prime_busy/basic-before-default: pass igt/prime_busy/basic-wait-after-default: pass igt/prime_busy/basic-wait-before-default: pass igt/prime_self_import/basic-llseek-bad: pass igt/prime_self_import/basic-llseek-size: pass igt/prime_self_import/basic-with_fd_dup: pass igt/prime_self_import/basic-with_one_bo: pass igt/prime_self_import/basic-with_one_bo_two_files: pass igt/prime_self_import/basic-with_two_bos: pass igt/prime_vgem/basic-busy-default: skip igt/prime_vgem/basic-fence-flip: skip igt/prime_vgem/basic-fence-mmap: skip igt/prime_vgem/basic-fence-read: skip igt/prime_vgem/basic-fence-wait-default: skip igt/prime_vgem/basic-gtt: skip igt/prime_vgem/basic-read: skip igt/prime_vgem/basic-sync-default: skip igt/prime_vgem/basic-wait-default: skip igt/prime_vgem/basic-write: skip igt/vgem_basic/create: skip igt/vgem_basic/debugfs: skip igt/vgem_basic/dmabuf-export: skip igt/vgem_basic/dmabuf-fence: skip igt/vgem_basic/dmabuf-fence-before: skip igt/vgem_basic/dmabuf-mmap: skip igt/vgem_basic/mmap: skip igt/vgem_basic/second-client: skip igt/vgem_basic/sysfs: skip igt/vgem_basic/unload: skip summary: name: logs ---- ------ pass: 172 fail: 0 crash: 0 skip: 70 timeout: 0 warn: 0 incomplete: 0 dmesg-warn: 0 dmesg-fail: 0 changes: 0 fixes: 0 regressions: 0 total: 242 probably unrelated: on drm-tip when X is running Ctrl+Alt+F2 failed to show the console. Typing (without feedback): root\n$rootpwd\nsystemctl stop gdm\n killed X however and then the VT was visible and operational. Similar after running IGT the display was stuck in graphics mode, but obviously was finished (pgrep piglit -> void and logs look complete) After the first run where Adrinael and I suspected something broke, I removed igt@gvt_basic@invalid-placeholder-test, igt@drv_module_reload@basic-reload, igt@drv_module_reload@basic-reload-inject, igt@drv_module_reload@basic-reload-final from fast-feedback.testlist on Adrinael's advice, so they are missing above.
With this patch from ickle on #intel-gfx: diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index fd5fbc83c69e..2bcbd386def9 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -16657,8 +16657,8 @@ int intel_modeset_init(struct drm_device *dev) dev->mode_config.cursor_width = GEN2_CURSOR_WIDTH; dev->mode_config.cursor_height = GEN2_CURSOR_HEIGHT; } else { - dev->mode_config.cursor_width = MAX_CURSOR_WIDTH; - dev->mode_config.cursor_height = MAX_CURSOR_HEIGHT; + dev->mode_config.cursor_width = 64; + dev->mode_config.cursor_height = 64; } dev->mode_config.fb_base = ggtt->mappable_base; on top of drm-tip a957dfe613ab (drm-tip: 2017y-01m-13d-18h-49m-04s UTC integration manifest) I cannot reproduce the issue.
(In reply to Uwe Kleine-König from comment #11) > With this patch from ickle on #intel-gfx: > > diff --git a/drivers/gpu/drm/i915/intel_display.c > b/drivers/gpu/drm/i915/intel_display.c > index fd5fbc83c69e..2bcbd386def9 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -16657,8 +16657,8 @@ int intel_modeset_init(struct drm_device *dev) > dev->mode_config.cursor_width = GEN2_CURSOR_WIDTH; > dev->mode_config.cursor_height = GEN2_CURSOR_HEIGHT; > } else { > - dev->mode_config.cursor_width = MAX_CURSOR_WIDTH; > - dev->mode_config.cursor_height = MAX_CURSOR_HEIGHT; > + dev->mode_config.cursor_width = 64; > + dev->mode_config.cursor_height = 64; > } > > dev->mode_config.fb_base = ggtt->mappable_base; > > on top of drm-tip a957dfe613ab (drm-tip: 2017y-01m-13d-18h-49m-04s UTC > integration manifest) I cannot reproduce the issue. Thanks for testing, you really have been an exemplary user here! On my side, I could probably improve -modesetting to reduce the size of the cursor plane to the minimum necessary, but this will only decrease the likeliness of this happening and I am afraid upstream devs may just tell me: Fix your driver or stop pretending you can do more than you actually can. The real fix will come from the kernel, where I do not work all that much for Intel. I will have a look at it though, when I am mostly done with my backlog of tasks for modesetting, if no-one beats me to it.
Alternative patch from Maarten Lankhorst: diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index ae2c0bb4b2e8..13de4c526ca6 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -1838,7 +1838,7 @@ static uint32_t ilk_compute_cur_wm(const struct +intel_crtc_state *cstate, * this is necessary to avoid flickering. */ int cpp = 4; - int width = pstate->base.visible ? pstate->base.crtc_w : 64; + int width = 256; if (!cstate->base.active) return 0; This fixes the problem for me, too.
Unfortunately I cannot reproduce the issue. I guess some update hid the problem again. xserver-xorg-core got updated, but downgrading it doesn't make the problem reappear. The other upgrades are unrelated TTBOMK. (Maybe libx11?)
This problem still affects X201 users on Tails 3.0~beta3, so: (In reply to Martin Peres from comment #12) > (In reply to Uwe Kleine-König from comment #11) > > With this patch from ickle on #intel-gfx: > > […] > > on top of drm-tip a957dfe613ab (drm-tip: 2017y-01m-13d-18h-49m-04s UTC > > integration manifest) I cannot reproduce the issue. > > […] > > The real fix will come from the kernel, where I do not work all that much > for Intel. I will have a look at it though, when I am mostly done with my > backlog of tasks for modesetting, if no-one beats me to it. Any update on this? I see two suggested kernel patches on this bug report. Does one of those seem more likely than the other to be acceptable upstream?
Hi, I also have a thinkpad x201. It looks very similar to the bug 97498 I reported a few months back. commit a5509abda48ecfc133fac6268e83fc1a93dba039 seems to have fixed my issue.
Quite likely fixed with the cursor rework, targeting v4.12 commit a07102f1cce6ebf11f8d880665eb6f6353b16177 Author: Ville Syrjälä <ville.syrjala@linux.intel.com> Date: Fri Mar 3 17:19:27 2017 +0200 drm/i915: Use intel_wm_plane_visible() on VLV/CHV as well commit 93aa2a1c25e562cc0ca69c3175333fe33fdf055b Author: Ville Syrjälä <ville.syrjala@linux.intel.com> Date: Tue Mar 14 17:10:50 2017 +0200 drm/i915: Fix SKL cursor watermarks commit a5509abda48ecfc133fac6268e83fc1a93dba039 Author: Ville Syrjälä <ville.syrjala@linux.intel.com> Date: Fri Feb 17 17:01:59 2017 +0200 drm/i915: Fix legacy cursor vs. watermarks for ILK-BDW
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.