[Bug 104975] New: Delay in skl_disable_plane() causes a system freeze

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Tue Feb 6 20:00:37 UTC 2018


https://bugs.freedesktop.org/show_bug.cgi?id=104975

            Bug ID: 104975
           Summary: Delay in skl_disable_plane() causes a system freeze
           Product: DRI
           Version: DRI git
          Hardware: x86 (IA32)
                OS: other
            Status: NEW
          Severity: major
          Priority: medium
         Component: DRM/Intel
          Assignee: intel-gfx-bugs at lists.freedesktop.org
          Reporter: azhar.shaikh at intel.com
        QA Contact: intel-gfx-bugs at lists.freedesktop.org
                CC: intel-gfx-bugs at lists.freedesktop.org

Created attachment 137193
  --> https://bugs.freedesktop.org/attachment.cgi?id=137193&action=edit
Drm logs with 0x1e log level

When a 50ms delay happens on KBL-Y and KBL-U between these two register writes,
the system hard hangs with a corrupted display (see attachments). 100ms
reproduces even more frequently.

diff --git a/drivers/gpu/drm/i915/intel_sprite.c
b/drivers/gpu/drm/i915/intel_sprite.c
index 4a8a5d918a83..b94eddb04d24 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -311,30 +311,31 @@ void intel_pipe_update_end(struct intel_crtc_state
*new_crtc_state)
        spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
 }

 void
 skl_disable_plane(struct intel_plane *plane, struct intel_crtc *crtc)
 {
        struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
        enum plane_id plane_id = plane->id;
        enum pipe pipe = plane->pipe;
        unsigned long irqflags;

        spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);

        I915_WRITE_FW(PLANE_CTL(pipe, plane_id), 0);

+       mdelay(50);
        I915_WRITE_FW(PLANE_SURF(pipe, plane_id), 0);
        POSTING_READ_FW(PLANE_SURF(pipe, plane_id));

        spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
 }


This has been reproduced on a variety of KBL-Y and KBL-U SKUs, and with both
coreboot firmware and UEFI version KBLSE2R1. R00. X094. P02. 1706220744 on a
KBL-Y RVP.

This was reproduced with chromeos-4.14
https://chromium.googlesource.com/chromiumos/third_party/kernel/+/9325afcd11534271/drivers/gpu/drm/i915/
and linux stable 4.15.1 tag

This is reproduced with maxcpus=1. 
Hardware video decoder is required to reproduce the issue.
Sysrq does not work after system freeze. ITP halt() fails to stop the CPUS.

The first reports came from a ChromeOS autotest which does the following:
1. Login as a test account
2. Play a vp9 or vp8 video for 10secs
3. restart ui (roughly equivalent to “service mydisplaymanager restart”)

Of course this test was initially not run with a mdelay() added in the kernel -
which is why reproduction was extremely rare. It took weeks to narrow down the
issue to that specific delay. 

To reproduce the issue manually (without running autotest) execute the below
steps 
1) Play any video in 1080p from crosvideo.appspot.com
2) Monitor the i915_display_info to make sure the overlay plane is active.
3) Once overlay plane is active move the cursor on top of the overlay plane.
This disables the overlay plane.
4) When the overlay plane is disabled the system freezes.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
You are the assignee for the bug.
You are the QA Contact for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-gfx-bugs/attachments/20180206/e929b57b/attachment.html>


More information about the intel-gfx-bugs mailing list