aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_drv.h
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-08-26 08:46:09 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-10-01 01:45:13 -0400
commitaec347ab197ec064d1e98b52717d968521a62929 (patch)
tree3eeb62348f932e634a9d9f855121f72af1a6c65d /drivers/gpu/drm/i915/i915_drv.h
parent45f80d53b1fe2f68c6c5b2b4518b67278bcde805 (diff)
drm/i915: Delay the release of the forcewake by a jiffie
Obtaining the forcwake requires expensive and time consuming serialisation. And we often try to obtain the forcewake multiple times in very quick succession. We can reduce the overhead of these sequences by delaying the forcewake release, and so not hammer the hw quite so hard. I was hoping this would help with the spurious [drm:__gen6_gt_force_wake_mt_get] *ERROR* Timed out waiting for forcewake old ack to clear. found on Haswell. Alas not. v2: Fix teardown ordering - unmap the regs after turning off forcewake, and make sure we do turn off forcewake - both found by Ville. v3: As we introduce intel_uncore_fini(), use it to make sure everything is disabled before we hand back to the BIOS. Note: I have no claims for improved performance, stablity or power comsumption for this patch. We should not be hitting the registers often enough for this to improve benchmarks, but given the nature of our hw it is likely to improve long term stability. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.h')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index bbe889dfc0ff..662c0ff0b049 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -408,6 +408,8 @@ struct intel_uncore {
408 408
409 unsigned fifo_count; 409 unsigned fifo_count;
410 unsigned forcewake_count; 410 unsigned forcewake_count;
411
412 struct delayed_work force_wake_work;
411}; 413};
412 414
413#define DEV_INFO_FOR_EACH_FLAG(func, sep) \ 415#define DEV_INFO_FOR_EACH_FLAG(func, sep) \
@@ -1801,6 +1803,7 @@ extern void intel_uncore_early_sanitize(struct drm_device *dev);
1801extern void intel_uncore_init(struct drm_device *dev); 1803extern void intel_uncore_init(struct drm_device *dev);
1802extern void intel_uncore_clear_errors(struct drm_device *dev); 1804extern void intel_uncore_clear_errors(struct drm_device *dev);
1803extern void intel_uncore_check_errors(struct drm_device *dev); 1805extern void intel_uncore_check_errors(struct drm_device *dev);
1806extern void intel_uncore_fini(struct drm_device *dev);
1804 1807
1805void 1808void
1806i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask); 1809i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);