• Chris Wilson's avatar
    drm/i915: Workaround hang with BSD and forcewake on SandyBridge · bcf9dcc1
    Chris Wilson authored
    For reasons that are not apparent to anybody, 990bbdad (drm/i915:
    Group the GT routines together in both code and vtable) breaks the use
    of the BitStream Decoder ring on SandyBridge. The active ingredient of
    that patch is the conversion from a udelay(10) to a udelay(1) in the
    busy-wait loop of waiting for the forcewake acknowledge. If we restore
    that udelay(10) or insert another udelay(1) afterwards (or any wait
    longer than 250ns) everything works again. An alternative is also to
    remove any delay from the busy-wait loop.
    
    Given that in the atomic sections we want to complete the wait as quick
    as possible to avoid blocking the CPU for too long, it makes sense to
    remove the delay altogether and simply spin on the exit condition until
    it completes. So we replace the udelay(1) with cpu_relax().
    
    Papers over regression from
    
    commit 990bbdad
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Mon Jul 2 11:51:02 2012 -0300
    
        drm/i915: Group the GT routines together in both code and vtable
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=51738Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    bcf9dcc1
intel_drv.h 17.2 KB