diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2014-04-01 13:55:07 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-04-01 16:36:17 -0400 |
commit | aa0b3b5bb8768c1a6a6788869d9c7015eae7e80c (patch) | |
tree | 01508e9667b38101f0eec2cdd87d37122b440812 | |
parent | ae48434c2a13cf4758aaf87da21d828f6d4dbebb (diff) |
drm/i915: don't schedule force_wake_timer at gen6_read
So far force_wake_timer was only used by gen6_gt_force_wake_put. Since
we always had balanced gen6_gt_force_wake_get/put calls, we could
guarantee balanced calls to intel_runtime_pm_get/put.
Commit 8232644ccf099548710843e97360a3fcd6d28e04, "drm/i915: Convert
the forcewake worker into a timer func" started scheduling the
force_wake_timer at gen6_read, which resulted in an unbalanced
runtime_pm refcount.
So this commit just reverts to the old behavior until we can find a
proper way to used delayed force_wake from the register read/write
macros without leaving the runtime_pm refcounts unbalanced and without
runtime suspending the driver while forcewake is active.
Testcase: igt/pm_pc8/rte
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76544
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_uncore.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index c3832d9270a6..c47853bd60be 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c | |||
@@ -550,11 +550,12 @@ gen6_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \ | |||
550 | NEEDS_FORCE_WAKE((dev_priv), (reg))) { \ | 550 | NEEDS_FORCE_WAKE((dev_priv), (reg))) { \ |
551 | dev_priv->uncore.funcs.force_wake_get(dev_priv, \ | 551 | dev_priv->uncore.funcs.force_wake_get(dev_priv, \ |
552 | FORCEWAKE_ALL); \ | 552 | FORCEWAKE_ALL); \ |
553 | dev_priv->uncore.forcewake_count++; \ | 553 | val = __raw_i915_read##x(dev_priv, reg); \ |
554 | mod_timer_pinned(&dev_priv->uncore.force_wake_timer, \ | 554 | dev_priv->uncore.funcs.force_wake_put(dev_priv, \ |
555 | jiffies + 1); \ | 555 | FORCEWAKE_ALL); \ |
556 | } else { \ | ||
557 | val = __raw_i915_read##x(dev_priv, reg); \ | ||
556 | } \ | 558 | } \ |
557 | val = __raw_i915_read##x(dev_priv, reg); \ | ||
558 | REG_READ_FOOTER; \ | 559 | REG_READ_FOOTER; \ |
559 | } | 560 | } |
560 | 561 | ||