mirror of https://gitee.com/openkylin/linux.git
drm/i915: Clarify uncore.lock locking
Only one place looked in need of a bit of polish: hsw_restore_lcpll. It's used by the runtime pm code and hence is always called from process context. No irq flag saving required. Another thing I've stumbled over is that we might need to add a raw forcewake_get/put helpers which don't grab a runtime pm reference but just check that the device isn't suspended - we have this duplicated in the execlist code, too. Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
133217869e
commit
d2e40e2741
|
@ -7603,7 +7603,6 @@ static void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
|
||||||
static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
|
static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
unsigned long irqflags;
|
|
||||||
|
|
||||||
val = I915_READ(LCPLL_CTL);
|
val = I915_READ(LCPLL_CTL);
|
||||||
|
|
||||||
|
@ -7623,10 +7622,10 @@ static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
|
||||||
* to call special forcewake code that doesn't touch runtime PM and
|
* to call special forcewake code that doesn't touch runtime PM and
|
||||||
* doesn't enable the forcewake delayed work.
|
* doesn't enable the forcewake delayed work.
|
||||||
*/
|
*/
|
||||||
spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
|
spin_lock_irq(&dev_priv->uncore.lock);
|
||||||
if (dev_priv->uncore.forcewake_count++ == 0)
|
if (dev_priv->uncore.forcewake_count++ == 0)
|
||||||
dev_priv->uncore.funcs.force_wake_get(dev_priv, FORCEWAKE_ALL);
|
dev_priv->uncore.funcs.force_wake_get(dev_priv, FORCEWAKE_ALL);
|
||||||
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
|
spin_unlock_irq(&dev_priv->uncore.lock);
|
||||||
|
|
||||||
if (val & LCPLL_POWER_DOWN_ALLOW) {
|
if (val & LCPLL_POWER_DOWN_ALLOW) {
|
||||||
val &= ~LCPLL_POWER_DOWN_ALLOW;
|
val &= ~LCPLL_POWER_DOWN_ALLOW;
|
||||||
|
@ -7657,10 +7656,10 @@ static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See the big comment above. */
|
/* See the big comment above. */
|
||||||
spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
|
spin_lock_irq(&dev_priv->uncore.lock);
|
||||||
if (--dev_priv->uncore.forcewake_count == 0)
|
if (--dev_priv->uncore.forcewake_count == 0)
|
||||||
dev_priv->uncore.funcs.force_wake_put(dev_priv, FORCEWAKE_ALL);
|
dev_priv->uncore.funcs.force_wake_put(dev_priv, FORCEWAKE_ALL);
|
||||||
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
|
spin_unlock_irq(&dev_priv->uncore.lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue