]> git.baikalelectronics.ru Git - kernel.git/commit
Revert "drm/i915: Don't save/restore hardware status page address register"
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 23 Mar 2011 17:53:28 +0000 (17:53 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 24 Mar 2011 07:15:01 +0000 (07:15 +0000)
commit32dd4b9ac134da82c3c4d03243bb06badc88be52
tree1a4d4591cf33cc47680a73acf0eb685bd8df5df9
parentfa0212f19a2674be403e4e0424b312de6659738c
Revert "drm/i915: Don't save/restore hardware status page address register"

This reverts commit c02c28f5969f391a0840548d62dc769c6376eee0.

There are two different variations on how Intel hardware addresses the
"Hardware Status Page". One as a location in physical memory and the
other as an offset into the virtual memory of the GPU, used in more
recent chipsets. (The HWS itself is a cacheable region of memory which
the GPU can write to without requiring CPU synchronisation, used for
updating various details of hardware state, such as the position of
the GPU head in the ringbuffer, the last breadcrumb seqno, etc).

These two types of addresses were updated in different locations of code
- one inline with the ringbuffer initialisation, and the other during
device initialisation. (The HWS page is logically associated with
the rings, and there is one HWS page per ring.) During resume, only the
ringbuffers were being re-initialised along with the virtual HWS page,
leaving the older physical address HWS untouched. This then caused a
hang on the older gen3/4 (915GM, 945GM, 965GM) the first time we tried
to synchronise the GPU as the breadcrumbs were never being updated.

Reported-and-tested-by: Linus Torvalds <torvalds@linux-foundation.org>
Reported-by: Jan Niehusmann <jan@gondor.com>
Reported-and-tested-by: Justin P. Mattock <justinmattock@gmail.com>
Reported-and-tested-by: Michael "brot" Groh <brot@minad.de>
Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Acked-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_suspend.c