summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_drv.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2012-04-10 15:50:11 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-04-12 21:14:11 +0200
commitf817586cebf1b946d1f327f9a596048efd6b64e9 (patch)
treefd916237f8d693b053296c3a020570f3f96c7659 /drivers/gpu/drm/i915/i915_drv.c
parentdrm/i915: Allow concurrent read access between CPU and GPU domain (diff)
downloadlinux-f817586cebf1b946d1f327f9a596048efd6b64e9.tar.xz
linux-f817586cebf1b946d1f327f9a596048efd6b64e9.zip
drm/i915: re-init modeset hw state after gpu reset
After a gpu reset we need to re-init some of the hw state we only initialize when modeset is enabled, like rc6, hw contexts or render/GT core clock gating and workaround register settings. Note that this patch has a small change in the resume code: - rc6 on gen6+ is only restored for the modeset case (for more consistency with other callsites). This is no problem because recent kernels refuse to load drm/i915 without kms on gen6+ - rc6/emon on ilk is only restored for the modeset case. This is no problem because rc6 is disabled by default on ilk, and ums on ilk has never really been a supported option outside of horrible rhel backports. v2: Chris Wilson noticed that we not only fail to restore the clock gating settings after gpu reset. v3: Move the call to modeset_init_hw in _reset out of the struct_mutext protected area - other callers don't hold it, too. Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.c')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 96f8efc7a0d0..ccfdc813171d 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -851,9 +851,14 @@ int i915_reset(struct drm_device *dev, u8 flags)
i915_gem_init_ppgtt(dev);
mutex_unlock(&dev->struct_mutex);
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ intel_modeset_init_hw(dev);
+
drm_irq_uninstall(dev);
drm_mode_config_reset(dev);
drm_irq_install(dev);
+
mutex_lock(&dev->struct_mutex);
}