aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/intel_lrc.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index bd1b28d99920..bafd38b5703e 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -300,8 +300,18 @@ static void execlists_elsp_write(struct intel_engine_cs *ring,
300 * Instead, we do the runtime_pm_get/put when creating/destroying requests. 300 * Instead, we do the runtime_pm_get/put when creating/destroying requests.
301 */ 301 */
302 spin_lock_irqsave(&dev_priv->uncore.lock, flags); 302 spin_lock_irqsave(&dev_priv->uncore.lock, flags);
303 if (dev_priv->uncore.forcewake_count++ == 0) 303 if (IS_CHERRYVIEW(dev_priv->dev)) {
304 dev_priv->uncore.funcs.force_wake_get(dev_priv, FORCEWAKE_ALL); 304 if (dev_priv->uncore.fw_rendercount++ == 0)
305 dev_priv->uncore.funcs.force_wake_get(dev_priv,
306 FORCEWAKE_RENDER);
307 if (dev_priv->uncore.fw_mediacount++ == 0)
308 dev_priv->uncore.funcs.force_wake_get(dev_priv,
309 FORCEWAKE_MEDIA);
310 } else {
311 if (dev_priv->uncore.forcewake_count++ == 0)
312 dev_priv->uncore.funcs.force_wake_get(dev_priv,
313 FORCEWAKE_ALL);
314 }
305 spin_unlock_irqrestore(&dev_priv->uncore.lock, flags); 315 spin_unlock_irqrestore(&dev_priv->uncore.lock, flags);
306 316
307 I915_WRITE(RING_ELSP(ring), desc[1]); 317 I915_WRITE(RING_ELSP(ring), desc[1]);
@@ -315,8 +325,19 @@ static void execlists_elsp_write(struct intel_engine_cs *ring,
315 325
316 /* Release Force Wakeup (see the big comment above). */ 326 /* Release Force Wakeup (see the big comment above). */
317 spin_lock_irqsave(&dev_priv->uncore.lock, flags); 327 spin_lock_irqsave(&dev_priv->uncore.lock, flags);
318 if (--dev_priv->uncore.forcewake_count == 0) 328 if (IS_CHERRYVIEW(dev_priv->dev)) {
319 dev_priv->uncore.funcs.force_wake_put(dev_priv, FORCEWAKE_ALL); 329 if (--dev_priv->uncore.fw_rendercount == 0)
330 dev_priv->uncore.funcs.force_wake_put(dev_priv,
331 FORCEWAKE_RENDER);
332 if (--dev_priv->uncore.fw_mediacount == 0)
333 dev_priv->uncore.funcs.force_wake_put(dev_priv,
334 FORCEWAKE_MEDIA);
335 } else {
336 if (--dev_priv->uncore.forcewake_count == 0)
337 dev_priv->uncore.funcs.force_wake_put(dev_priv,
338 FORCEWAKE_ALL);
339 }
340
320 spin_unlock_irqrestore(&dev_priv->uncore.lock, flags); 341 spin_unlock_irqrestore(&dev_priv->uncore.lock, flags);
321} 342}
322 343