diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2014-11-21 14:54:26 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-12-03 03:29:37 -0500 |
commit | ca83b9361bf70d5d4171ba54a598a8c8f981f091 (patch) | |
tree | 8c07457a65c6de2c0ca6f0f6c8f27218eb83cfc8 | |
parent | 73bbf6bd907906dcbdc78f3af38a722c0fe498d8 (diff) |
drm/i915: Restore the display config after a GPU reset on gen4
On pre-ctg GPU reset also resets the display hardware. Force a mode
restore after the GPU reset, and also re-init clock gating.
v2: Use intel_modeset_init_hw() instead of intel_init_clock_gating()
in case more relevant stuff gets added there at some point
Restore interrupts after the reset as well
Tested-by: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 1e9c136a874c..68e42392f59c 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -880,6 +880,24 @@ int i915_reset(struct drm_device *dev) | |||
880 | */ | 880 | */ |
881 | if (INTEL_INFO(dev)->gen > 5) | 881 | if (INTEL_INFO(dev)->gen > 5) |
882 | intel_reset_gt_powersave(dev); | 882 | intel_reset_gt_powersave(dev); |
883 | |||
884 | if (IS_GEN4(dev) && !IS_G4X(dev)) { | ||
885 | intel_runtime_pm_disable_interrupts(dev_priv); | ||
886 | intel_runtime_pm_enable_interrupts(dev_priv); | ||
887 | |||
888 | intel_modeset_init_hw(dev); | ||
889 | |||
890 | spin_lock_irq(&dev_priv->irq_lock); | ||
891 | if (dev_priv->display.hpd_irq_setup) | ||
892 | dev_priv->display.hpd_irq_setup(dev); | ||
893 | spin_unlock_irq(&dev_priv->irq_lock); | ||
894 | |||
895 | drm_modeset_lock_all(dev); | ||
896 | intel_modeset_setup_hw_state(dev, true); | ||
897 | drm_modeset_unlock_all(dev); | ||
898 | |||
899 | intel_hpd_init(dev_priv); | ||
900 | } | ||
883 | } else { | 901 | } else { |
884 | mutex_unlock(&dev->struct_mutex); | 902 | mutex_unlock(&dev->struct_mutex); |
885 | } | 903 | } |