Commit 0d116a29 authored by Imre Deak's avatar Imre Deak Committed by Daniel Vetter

drm/i915: vlv: init only needed state during early power well enabling

During the initial power well enabling on the driver init/resume path
we can avoid initialzing part of the HW/SW state that will be
initialized anyway by the subsequent init/resume code. For some steps
like HPD initialization this redundancy is not only an overhead but an
actual problem, since they can't be run this early in the overall init
sequence.

Add a flag marking the init phase and skip reinitialzing state that is
not strictly necessary based on that.

This is also needed by the upcoming HPD init restructuring by Thierry
and Daniel.
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent b77f6997
...@@ -928,6 +928,7 @@ struct i915_power_domains { ...@@ -928,6 +928,7 @@ struct i915_power_domains {
* time are on. They are kept on until after the first modeset. * time are on. They are kept on until after the first modeset.
*/ */
bool init_power_on; bool init_power_on;
bool initializing;
int power_well_count; int power_well_count;
struct mutex lock; struct mutex lock;
......
...@@ -5696,11 +5696,13 @@ static void vlv_display_power_well_enable(struct drm_i915_private *dev_priv, ...@@ -5696,11 +5696,13 @@ static void vlv_display_power_well_enable(struct drm_i915_private *dev_priv,
spin_unlock_irq(&dev_priv->irq_lock); spin_unlock_irq(&dev_priv->irq_lock);
/* /*
* During driver initialization we need to defer enabling hotplug * During driver initialization/resume we can avoid restoring the
* processing until fbdev is set up. * part of the HW/SW state that will be inited anyway explicitly.
*/ */
if (dev_priv->enable_hotplug_processing) if (dev_priv->power_domains.initializing)
intel_hpd_init(dev_priv->dev); return;
intel_hpd_init(dev_priv->dev);
i915_redisable_vga_power_on(dev_priv->dev); i915_redisable_vga_power_on(dev_priv->dev);
} }
...@@ -6064,9 +6066,13 @@ static void intel_power_domains_resume(struct drm_i915_private *dev_priv) ...@@ -6064,9 +6066,13 @@ static void intel_power_domains_resume(struct drm_i915_private *dev_priv)
void intel_power_domains_init_hw(struct drm_i915_private *dev_priv) void intel_power_domains_init_hw(struct drm_i915_private *dev_priv)
{ {
struct i915_power_domains *power_domains = &dev_priv->power_domains;
power_domains->initializing = true;
/* For now, we need the power well to be always enabled. */ /* For now, we need the power well to be always enabled. */
intel_display_set_init_power(dev_priv, true); intel_display_set_init_power(dev_priv, true);
intel_power_domains_resume(dev_priv); intel_power_domains_resume(dev_priv);
power_domains->initializing = false;
} }
void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv) void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment