aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2014-04-25 06:19:05 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-05-05 04:56:51 -0400
commit0d116a29a8f80260380f608c033dba42240e26a8 (patch)
tree6925fcc1ef08dffbd6ecdb2acebf427a8c3df414
parentb77f69978cc954fb3f0944d26a217a78b964b85f (diff)
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: Imre Deak <imre.deak@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h1
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c14
2 files changed, 11 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 50dfc3a1a9d1..3fc2e3d71136 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -928,6 +928,7 @@ struct i915_power_domains {
928 * time are on. They are kept on until after the first modeset. 928 * time are on. They are kept on until after the first modeset.
929 */ 929 */
930 bool init_power_on; 930 bool init_power_on;
931 bool initializing;
931 int power_well_count; 932 int power_well_count;
932 933
933 struct mutex lock; 934 struct mutex lock;
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 0c33953cd270..eae82c70dcc1 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -5696,11 +5696,13 @@ static void vlv_display_power_well_enable(struct drm_i915_private *dev_priv,
5696 spin_unlock_irq(&dev_priv->irq_lock); 5696 spin_unlock_irq(&dev_priv->irq_lock);
5697 5697
5698 /* 5698 /*
5699 * During driver initialization we need to defer enabling hotplug 5699 * During driver initialization/resume we can avoid restoring the
5700 * processing until fbdev is set up. 5700 * part of the HW/SW state that will be inited anyway explicitly.
5701 */ 5701 */
5702 if (dev_priv->enable_hotplug_processing) 5702 if (dev_priv->power_domains.initializing)
5703 intel_hpd_init(dev_priv->dev); 5703 return;
5704
5705 intel_hpd_init(dev_priv->dev);
5704 5706
5705 i915_redisable_vga_power_on(dev_priv->dev); 5707 i915_redisable_vga_power_on(dev_priv->dev);
5706} 5708}
@@ -6064,9 +6066,13 @@ static void intel_power_domains_resume(struct drm_i915_private *dev_priv)
6064 6066
6065void intel_power_domains_init_hw(struct drm_i915_private *dev_priv) 6067void intel_power_domains_init_hw(struct drm_i915_private *dev_priv)
6066{ 6068{
6069 struct i915_power_domains *power_domains = &dev_priv->power_domains;
6070
6071 power_domains->initializing = true;
6067 /* For now, we need the power well to be always enabled. */ 6072 /* For now, we need the power well to be always enabled. */
6068 intel_display_set_init_power(dev_priv, true); 6073 intel_display_set_init_power(dev_priv, true);
6069 intel_power_domains_resume(dev_priv); 6074 intel_power_domains_resume(dev_priv);
6075 power_domains->initializing = false;
6070} 6076}
6071 6077
6072void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv) 6078void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv)