Skip to content
  • Daniel Vetter's avatar
    drm/i915: paper over missed irq issues with force wake voodoo · 4cd53c0c
    Daniel Vetter authored
    
    
    Two things seem to do the trick on my ivb machine here:
    - prevent the gt from powering down while waiting for seqno
      notification interrupts by grabbing the force_wake in get_irq (and
      dropping it in put_irq again).
    - ordering writes from the ring's CS by reading a CS register, ACTHD
      seems to work.
    
    Only the blt&bsd ring on ivb seem to be massively affected by this,
    but for paranoia do this dance also on the render ring and on snb
    (i.e. all gpus with forcewake).
    
    Tested with Eric's glCopyPixels loop which without this patch scores a
    missed irq every few seconds.
    
    This patch needs my forcewake rework to use a spinlock instead of
    dev->struct_mutex.
    
    After crawling through docs a lot I've found the following nugget:
    
    Internal doc "SNB GT PM Programming Guide", Section 4.3.1:
    
    "GT does not generate interrupts while in RC6 (by design)"
    
    So it looks like rc6 and irq generation are indeed related.
    
    v2: Improve the comment per Eugeni Dodonov's suggestion.
    
    v3: Add the documentation snipped. Also restrict the w/a to ivb only
    for -fixes, as suggested by Keith Packard.
    
    Cc: stable@kernel.org
    Cc: Eric Anholt <eric@anholt.net>
    Cc: Kenneth Graunke <kenneth@whitecape.org>
    Cc: Eugeni Dodonov <eugeni.dodonov@intel.com>
    Tested-by: default avatarEugeni Dodonov <eugeni.dodonov@intel.com>
    Reviewed-by: default avatarEugeni Dodonov <eugeni.dodonov@intel.com>
    Signed-Off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
    4cd53c0c