diff options
author | Sagar Arun Kamble <sagar.a.kamble@intel.com> | 2018-01-24 10:46:56 -0500 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2018-01-24 14:44:02 -0500 |
commit | 1be333d34e22db8fd07dca7efa78b93189eddf6b (patch) | |
tree | 14342086993355e310ce953e604d415125736220 /drivers/gpu/drm/i915/i915_irq.c | |
parent | 16af25faae8ef72b4ff2feeca65f6e864c3ef929 (diff) |
drm/i915/guc: Grab RPM wakelock while disabling GuC interrupts
Disabling GuC interrupts involves access to GuC IRQ control registers
hence ensure device is RPM awake.
v1-v2: old changelog
1: Add comment about need to synchronize flush work and log runtime
destroy
2: Moved patch earlier in the series and removed comment about future
work. (Tvrtko)
v3: Added assert_rpm_wakelock_held() to gen9_*_guc_interrupts. (Chris)
Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/1516808821-3638-1-git-send-email-sagar.a.kamble@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/i915_irq.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 3517c6548e2c..85c46a25265d 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -452,6 +452,8 @@ void gen6_disable_rps_interrupts(struct drm_i915_private *dev_priv) | |||
452 | 452 | ||
453 | void gen9_reset_guc_interrupts(struct drm_i915_private *dev_priv) | 453 | void gen9_reset_guc_interrupts(struct drm_i915_private *dev_priv) |
454 | { | 454 | { |
455 | assert_rpm_wakelock_held(dev_priv); | ||
456 | |||
455 | spin_lock_irq(&dev_priv->irq_lock); | 457 | spin_lock_irq(&dev_priv->irq_lock); |
456 | gen6_reset_pm_iir(dev_priv, dev_priv->pm_guc_events); | 458 | gen6_reset_pm_iir(dev_priv, dev_priv->pm_guc_events); |
457 | spin_unlock_irq(&dev_priv->irq_lock); | 459 | spin_unlock_irq(&dev_priv->irq_lock); |
@@ -459,6 +461,8 @@ void gen9_reset_guc_interrupts(struct drm_i915_private *dev_priv) | |||
459 | 461 | ||
460 | void gen9_enable_guc_interrupts(struct drm_i915_private *dev_priv) | 462 | void gen9_enable_guc_interrupts(struct drm_i915_private *dev_priv) |
461 | { | 463 | { |
464 | assert_rpm_wakelock_held(dev_priv); | ||
465 | |||
462 | spin_lock_irq(&dev_priv->irq_lock); | 466 | spin_lock_irq(&dev_priv->irq_lock); |
463 | if (!dev_priv->guc.interrupts_enabled) { | 467 | if (!dev_priv->guc.interrupts_enabled) { |
464 | WARN_ON_ONCE(I915_READ(gen6_pm_iir(dev_priv)) & | 468 | WARN_ON_ONCE(I915_READ(gen6_pm_iir(dev_priv)) & |
@@ -471,6 +475,8 @@ void gen9_enable_guc_interrupts(struct drm_i915_private *dev_priv) | |||
471 | 475 | ||
472 | void gen9_disable_guc_interrupts(struct drm_i915_private *dev_priv) | 476 | void gen9_disable_guc_interrupts(struct drm_i915_private *dev_priv) |
473 | { | 477 | { |
478 | assert_rpm_wakelock_held(dev_priv); | ||
479 | |||
474 | spin_lock_irq(&dev_priv->irq_lock); | 480 | spin_lock_irq(&dev_priv->irq_lock); |
475 | dev_priv->guc.interrupts_enabled = false; | 481 | dev_priv->guc.interrupts_enabled = false; |
476 | 482 | ||