diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 29 |
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 | ||
