• C
    Revert "drm/i915: Don't save/restore hardware status page address register" · f0c86024
    Chris Wilson 提交于
    This reverts commit a7a75c8f.
    
    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: NLinus Torvalds <torvalds@linux-foundation.org>
    Reported-by: NJan Niehusmann <jan@gondor.com>
    Reported-and-tested-by: NJustin P. Mattock <justinmattock@gmail.com>
    Reported-and-tested-by: NMichael "brot" Groh <brot@minad.de>
    Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
    Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    Acked-by: NZhenyu Wang <zhenyuw@linux.intel.com>
    f0c86024
i915_suspend.c 28.3 KB