remarkable-linux/drivers/gpu/drm
Chris Wilson 968b503e69 Revert "drm/i915: Don't save/restore hardware status page address register"
This reverts commit a7a75c8f70.

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-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>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-03-23 19:45:06 -07:00
..
i2c drm/i2c/ch7006: Don't use POWER_LEVEL_FULL_POWER_OFF on early chip versions. 2010-08-09 15:16:23 +10:00
i810 drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
i915 Revert "drm/i915: Don't save/restore hardware status page address register" 2011-03-23 19:45:06 -07:00
mga drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
nouveau nouveau: change the backlight parent device to the connector, not the PCI dev 2011-03-22 17:43:59 -07:00
r128 drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
radeon radeon: expose backlight class device for legacy LVDS encoder 2011-03-22 17:43:59 -07:00
savage drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
sis drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
tdfx drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
ttm Revert "ttm: Include the 'struct dev' when using the DMA API." 2011-02-23 14:24:01 +10:00
via drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
vmwgfx Revert "ttm: Include the 'struct dev' when using the DMA API." 2011-02-23 14:24:01 +10:00
ati_pcigart.c drm/radeon: Fix pci_map_page() error checking 2010-08-12 09:38:29 +10:00
drm_agpsupport.c drm: kill drm_agp_chipset_flush 2010-11-23 20:14:44 +00:00
drm_auth.c drivers/gpu/drm: Use kzalloc 2010-05-18 15:57:05 +10:00
drm_buffer.c drm: fix trivial coding errors 2010-09-24 10:10:23 +10:00
drm_bufs.c DRM: Replace kmalloc/memset combos with kzalloc 2010-08-12 09:12:30 +10:00
drm_cache.c
drm_context.c drm: kill context_ctor callback 2010-08-30 09:38:25 +10:00
drm_crtc.c drm: dumb scanout create/mmap for intel/radeon (v3) 2011-02-07 12:16:14 +10:00
drm_crtc_helper.c Merge branch 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6 2011-02-04 10:02:22 -08:00
drm_debugfs.c drm: Move the GTT accounting to i915 2010-10-01 14:45:20 +01:00
drm_dma.c drivers/gpu/drm: Use kzalloc 2010-05-18 15:57:05 +10:00
drm_dp_i2c_helper.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
drm_drv.c drm/core: add ioctl to query device/driver capabilities 2011-03-04 14:47:30 +10:00
drm_edid.c drm: Retry i2c transfer of EDID block after failure 2011-03-16 11:25:13 +10:00
drm_edid_modes.h drm: Mark constant arrays of drm_display_mode const 2011-02-23 11:13:11 +10:00
drm_encoder_slave.c drm/kms: Simplify setup of the initial I2C encoder config. 2010-08-05 09:37:45 +10:00
drm_fb_helper.c Merge commit '5359533801e3dd3abca5b7d3d985b0b33fd9fe8b' into drm-core-next 2011-03-16 11:34:41 +10:00
drm_fops.c drm/switcheroo: track state of switch in drivers. 2011-01-05 13:45:30 +10:00
drm_gem.c drm: Trim the GEM mmap offset hashtab 2011-02-23 11:15:39 +10:00
drm_global.c drm: move ttm global code to core drm 2010-08-04 09:46:06 +10:00
drm_hashtab.c drm: Remove unused members from struct drm_open_hash 2011-02-23 11:16:40 +10:00
drm_info.c Merge remote branch 'intel/drm-intel-next' of ../drm-next into drm-core-next 2011-03-14 14:15:13 +10:00
drm_ioc32.c drm: convert drm_ioctl to unlocked_ioctl 2009-12-18 11:22:31 +10:00
drm_ioctl.c drm: add cap bit to denote if dumb ioctl is available or not. 2011-03-04 15:56:22 +10:00
drm_irq.c Merge remote branch 'intel/drm-intel-next' of ../drm-next into drm-core-next 2011-03-14 14:15:13 +10:00
drm_lock.c drm: readd drm_lock_free in drm_unlock 2010-09-26 13:35:49 +10:00
drm_memory.c drm: kill agp indirection mess 2010-08-30 09:44:40 +10:00
drm_mm.c drm: mm: add helper to unwind scan state 2011-02-23 10:32:57 +10:00
drm_modes.c drm: Mark constant arrays of drm_display_mode const 2011-02-23 11:13:11 +10:00
drm_pci.c drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
drm_platform.c drm: rework PCI/platform driver interface. 2011-02-07 13:09:36 +10:00
drm_proc.c drm: Move the GTT accounting to i915 2010-10-01 14:45:20 +01:00
drm_scatter.c drm: don't export drm_sg_alloc 2010-08-30 09:37:43 +10:00
drm_sman.c GPU DRM: Remove unnecessary casts of void ptr returning alloc function return values 2011-01-19 15:24:49 +01:00
drm_stub.c drm: add usb framework 2011-02-07 13:09:42 +10:00
drm_sysfs.c drm: Hold the mode mutex whilst probing for sysfs status 2011-03-16 11:23:04 +10:00
drm_trace.h drm: add per-event vblank event trace points 2010-07-02 14:03:24 +10:00
drm_trace_points.c drm: add vblank event trace point 2010-07-02 14:02:44 +10:00
drm_usb.c drm: add usb framework 2011-02-07 13:09:42 +10:00
drm_vm.c Merge remote branch 'korg/drm-fixes' into drm-vmware-next 2010-10-06 11:10:48 +10:00
Kconfig drm/i810: remove the BKL 2011-02-07 12:15:04 +10:00
Makefile drm: add usb framework 2011-02-07 13:09:42 +10:00
README.drm

************************************************************
* For the very latest on DRI development, please see:      *
*     http://dri.freedesktop.org/                          *
************************************************************

The Direct Rendering Manager (drm) is a device-independent kernel-level
device driver that provides support for the XFree86 Direct Rendering
Infrastructure (DRI).

The DRM supports the Direct Rendering Infrastructure (DRI) in four major
ways:

    1. The DRM provides synchronized access to the graphics hardware via
       the use of an optimized two-tiered lock.

    2. The DRM enforces the DRI security policy for access to the graphics
       hardware by only allowing authenticated X11 clients access to
       restricted regions of memory.

    3. The DRM provides a generic DMA engine, complete with multiple
       queues and the ability to detect the need for an OpenGL context
       switch.

    4. The DRM is extensible via the use of small device-specific modules
       that rely extensively on the API exported by the DRM module.


Documentation on the DRI is available from:
    http://dri.freedesktop.org/wiki/Documentation
    http://sourceforge.net/project/showfiles.php?group_id=387
    http://dri.sourceforge.net/doc/

For specific information about kernel-level support, see:

    The Direct Rendering Manager, Kernel Support for the Direct Rendering
    Infrastructure
    http://dri.sourceforge.net/doc/drm_low_level.html

    Hardware Locking for the Direct Rendering Infrastructure
    http://dri.sourceforge.net/doc/hardware_locking_low_level.html

    A Security Analysis of the Direct Rendering Infrastructure
    http://dri.sourceforge.net/doc/security_low_level.html