Revert "drm/i915: Don't save/restore hardware status page address register"

This reverts commit a7a75c8f70d6f6a2f16c9f627f938bbee2d32718.

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>

+7
+1
drivers/gpu/drm/i915/i915_drv.h
··· 383 383 u32 saveDSPACNTR; 384 384 u32 saveDSPBCNTR; 385 385 u32 saveDSPARB; 386 + u32 saveHWS; 386 387 u32 savePIPEACONF; 387 388 u32 savePIPEBCONF; 388 389 u32 savePIPEASRC;
+6
drivers/gpu/drm/i915/i915_suspend.c
··· 796 796 797 797 pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB); 798 798 799 + /* Hardware status page */ 800 + dev_priv->saveHWS = I915_READ(HWS_PGA); 801 + 799 802 i915_save_display(dev); 800 803 801 804 /* Interrupt state */ ··· 844 841 int i; 845 842 846 843 pci_write_config_byte(dev->pdev, LBB, dev_priv->saveLBB); 844 + 845 + /* Hardware status page */ 846 + I915_WRITE(HWS_PGA, dev_priv->saveHWS); 847 847 848 848 i915_restore_display(dev); 849 849