]> git.baikalelectronics.ru Git - kernel.git/commit
drm/i915/gt: Sanitize GT first
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 27 Apr 2020 08:40:00 +0000 (09:40 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 27 Apr 2020 10:39:23 +0000 (11:39 +0100)
commit27e10446f8b04821cb201f7bc6ea1515c71a0594
treea7bf1a06c9a52cced8a0206c30e8c94f09e6d459
parent83fbc0255f30ef2c1b046958ebe3f7f84498be76
drm/i915/gt: Sanitize GT first

We see that if the HW doesn't actually sleep, the HW may eat the poison
we set in its write-only HWSP during sanitize:

  intel_gt_resume.part.8: 0000:00:02.0
  __gt_unpark: 0000:00:02.0
  gt_sanitize: 0000:00:02.0 force:yes
  process_csb: 0000:00:02.0 vcs0: cs-irq head=5, tail=90
  process_csb: 0000:00:02.0 vcs0: csb[0]: status=0x5a5a5a5a:0x5a5a5a5a
  assert_pending_valid: Nothing pending for promotion!

The CS TAIL pointer should have been reset by reset_csb_pointers(), so
in this case it is likely that we have read back from the CPU cache and
so we must clflush our control over that page. In doing so, push the
sanitisation to the start of the GT sequence so that our poisoning is
assuredly before we start talking to the HW.

References: https://gitlab.freedesktop.org/drm/intel/-/issues/1794
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200427084000.10999-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/intel_gt_pm.c
drivers/gpu/drm/i915/gt/intel_lrc.c