| From 8a90bc85114de48f9ac89480394179a6397ff7b4 Mon Sep 17 00:00:00 2001 |
| From: Mika Kuoppala <mika.kuoppala@linux.intel.com> |
| Date: Fri, 23 Aug 2013 16:52:30 +0300 |
| Subject: drm/i915: sanitize forcewake registers on reset |
| |
| In reset we try to restore the forcewake state to |
| pre reset state, using forcewake_count. The reset |
| doesn't seem to clear the forcewake bits so we |
| get warn on forcewake ack register not clearing. |
| |
| Use same mechanism as intel_uncore_sanitize() does |
| when loading driver to reset the forcewake bits, right |
| after the chip has been reset. |
| |
| Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 521198a2e7095c8c7daa8d7d3a76a110c346be6f) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_uncore.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c |
| index 8f5bc869c023..8649f1c36b00 100644 |
| --- a/drivers/gpu/drm/i915/intel_uncore.c |
| +++ b/drivers/gpu/drm/i915/intel_uncore.c |
| @@ -261,7 +261,7 @@ void intel_uncore_init(struct drm_device *dev) |
| } |
| } |
| |
| -void intel_uncore_sanitize(struct drm_device *dev) |
| +static void intel_uncore_forcewake_reset(struct drm_device *dev) |
| { |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| |
| @@ -272,6 +272,11 @@ void intel_uncore_sanitize(struct drm_device *dev) |
| if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) |
| __gen6_gt_force_wake_mt_reset(dev_priv); |
| } |
| +} |
| + |
| +void intel_uncore_sanitize(struct drm_device *dev) |
| +{ |
| + intel_uncore_forcewake_reset(dev); |
| |
| /* BIOS often leaves RC6 enabled, but disable it for hw init */ |
| intel_disable_gt_powersave(dev); |
| @@ -549,6 +554,8 @@ static int gen6_do_reset(struct drm_device *dev) |
| /* Spin waiting for the device to ack the reset request */ |
| ret = wait_for((__raw_i915_read32(dev_priv, GEN6_GDRST) & GEN6_GRDOM_FULL) == 0, 500); |
| |
| + intel_uncore_forcewake_reset(dev); |
| + |
| /* If reset with a user forcewake, try to restore, otherwise turn it off */ |
| if (dev_priv->uncore.forcewake_count) |
| dev_priv->uncore.funcs.force_wake_get(dev_priv); |
| -- |
| 1.8.5.rc3 |
| |