aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2015-04-15 18:34:51 -0400
committerDave Airlie <airlied@redhat.com>2015-04-15 18:34:51 -0400
commitaa219a0dd7774e2454a5687e7d38e947a131cdee (patch)
treefd9d8f167944a47aaa6bbdea188a5ca802200c3e
parent4a11248856933f33ca061ed55470ea7e1783b40b (diff)
parent37ef01ab5d24d1d520dc79f6a98099d451c2a901 (diff)
Merge tag 'drm-intel-next-fixes-2015-04-15' of git://anongit.freedesktop.org/drm-intel into drm-next
Misc i915 fixes. * tag 'drm-intel-next-fixes-2015-04-15' of git://anongit.freedesktop.org/drm-intel: drm/i915: Dont enable CS_PARSER_ERROR interrupts at all drm/i915: Move drm_framebuffer_unreference out of struct_mutex for takeover drm/i915: Allocate connector state together with the connectors drm/i915/chv: Remove DPIO force latency causing interpair skew issue drm/i915: Don't cancel DRRS worker synchronously for flush/invalidate drm/i915: Fix locking in DRRS flush/invalidate hooks
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c8
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c2
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c4
-rw-r--r--drivers/gpu/drm/i915/intel_display.c76
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c33
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c2
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
-rw-r--r--drivers/gpu/drm/i915/intel_dsi.c2
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c2
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c7
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c6
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c22
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c2
13 files changed, 91 insertions, 77 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 14ecb4d13a1a..6d494432b19f 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -3598,14 +3598,12 @@ static int i8xx_irq_postinstall(struct drm_device *dev)
3598 ~(I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | 3598 ~(I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3599 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | 3599 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
3600 I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | 3600 I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
3601 I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT | 3601 I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT);
3602 I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT);
3603 I915_WRITE16(IMR, dev_priv->irq_mask); 3602 I915_WRITE16(IMR, dev_priv->irq_mask);
3604 3603
3605 I915_WRITE16(IER, 3604 I915_WRITE16(IER,
3606 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | 3605 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3607 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | 3606 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
3608 I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT |
3609 I915_USER_INTERRUPT); 3607 I915_USER_INTERRUPT);
3610 POSTING_READ16(IER); 3608 POSTING_READ16(IER);
3611 3609
@@ -3767,14 +3765,12 @@ static int i915_irq_postinstall(struct drm_device *dev)
3767 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | 3765 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3768 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | 3766 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
3769 I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | 3767 I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
3770 I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT | 3768 I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT);
3771 I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT);
3772 3769
3773 enable_mask = 3770 enable_mask =
3774 I915_ASLE_INTERRUPT | 3771 I915_ASLE_INTERRUPT |
3775 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | 3772 I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3776 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | 3773 I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
3777 I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT |
3778 I915_USER_INTERRUPT; 3774 I915_USER_INTERRUPT;
3779 3775
3780 if (I915_HAS_HOTPLUG(dev)) { 3776 if (I915_HAS_HOTPLUG(dev)) {
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 6095a998bdac..515d7123785d 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -851,7 +851,7 @@ void intel_crt_init(struct drm_device *dev)
851 if (!crt) 851 if (!crt)
852 return; 852 return;
853 853
854 intel_connector = kzalloc(sizeof(*intel_connector), GFP_KERNEL); 854 intel_connector = intel_connector_alloc();
855 if (!intel_connector) { 855 if (!intel_connector) {
856 kfree(crt); 856 kfree(crt);
857 return; 857 return;
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 47b9307da24b..3eb0efc2dd0d 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2200,7 +2200,7 @@ intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port)
2200 struct intel_connector *connector; 2200 struct intel_connector *connector;
2201 enum port port = intel_dig_port->port; 2201 enum port port = intel_dig_port->port;
2202 2202
2203 connector = kzalloc(sizeof(*connector), GFP_KERNEL); 2203 connector = intel_connector_alloc();
2204 if (!connector) 2204 if (!connector)
2205 return NULL; 2205 return NULL;
2206 2206
@@ -2219,7 +2219,7 @@ intel_ddi_init_hdmi_connector(struct intel_digital_port *intel_dig_port)
2219 struct intel_connector *connector; 2219 struct intel_connector *connector;
2220 enum port port = intel_dig_port->port; 2220 enum port port = intel_dig_port->port;
2221 2221
2222 connector = kzalloc(sizeof(*connector), GFP_KERNEL); 2222 connector = intel_connector_alloc();
2223 if (!connector) 2223 if (!connector)
2224 return NULL; 2224 return NULL;
2225 2225
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 75955fee6d24..d547d9c8dda2 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5636,6 +5636,34 @@ static void intel_connector_check_state(struct intel_connector *connector)
5636 } 5636 }
5637} 5637}
5638 5638
5639int intel_connector_init(struct intel_connector *connector)
5640{
5641 struct drm_connector_state *connector_state;
5642
5643 connector_state = kzalloc(sizeof *connector_state, GFP_KERNEL);
5644 if (!connector_state)
5645 return -ENOMEM;
5646
5647 connector->base.state = connector_state;
5648 return 0;
5649}
5650
5651struct intel_connector *intel_connector_alloc(void)
5652{
5653 struct intel_connector *connector;
5654
5655 connector = kzalloc(sizeof *connector, GFP_KERNEL);
5656 if (!connector)
5657 return NULL;
5658
5659 if (intel_connector_init(connector) < 0) {
5660 kfree(connector);
5661 return NULL;
5662 }
5663
5664 return connector;
5665}
5666
5639/* Even simpler default implementation, if there's really no special case to 5667/* Even simpler default implementation, if there's really no special case to
5640 * consider. */ 5668 * consider. */
5641void intel_connector_dpms(struct drm_connector *connector, int mode) 5669void intel_connector_dpms(struct drm_connector *connector, int mode)
@@ -13003,7 +13031,6 @@ static void intel_setup_outputs(struct drm_device *dev)
13003{ 13031{
13004 struct drm_i915_private *dev_priv = dev->dev_private; 13032 struct drm_i915_private *dev_priv = dev->dev_private;
13005 struct intel_encoder *encoder; 13033 struct intel_encoder *encoder;
13006 struct drm_connector *connector;
13007 bool dpd_is_edp = false; 13034 bool dpd_is_edp = false;
13008 13035
13009 intel_lvds_init(dev); 13036 intel_lvds_init(dev);
@@ -13139,39 +13166,6 @@ static void intel_setup_outputs(struct drm_device *dev)
13139 if (SUPPORTS_TV(dev)) 13166 if (SUPPORTS_TV(dev))
13140 intel_tv_init(dev); 13167 intel_tv_init(dev);
13141 13168
13142 /*
13143 * FIXME: We don't have full atomic support yet, but we want to be
13144 * able to enable/test plane updates via the atomic interface in the
13145 * meantime. However as soon as we flip DRIVER_ATOMIC on, the DRM core
13146 * will take some atomic codepaths to lookup properties during
13147 * drmModeGetConnector() that unconditionally dereference
13148 * connector->state.
13149 *
13150 * We create a dummy connector state here for each connector to ensure
13151 * the DRM core doesn't try to dereference a NULL connector->state.
13152 * The actual connector properties will never be updated or contain
13153 * useful information, but since we're doing this specifically for
13154 * testing/debug of the plane operations (and only when a specific
13155 * kernel module option is given), that shouldn't really matter.
13156 *
13157 * We are also relying on these states to convert the legacy mode set
13158 * to use a drm_atomic_state struct. The states are kept consistent
13159 * with actual state, so that it is safe to rely on that instead of
13160 * the staged config.
13161 *
13162 * Once atomic support for crtc's + connectors lands, this loop should
13163 * be removed since we'll be setting up real connector state, which
13164 * will contain Intel-specific properties.
13165 */
13166 list_for_each_entry(connector,
13167 &dev->mode_config.connector_list,
13168 head) {
13169 if (!WARN_ON(connector->state)) {
13170 connector->state = kzalloc(sizeof(*connector->state),
13171 GFP_KERNEL);
13172 }
13173 }
13174
13175 intel_psr_init(dev); 13169 intel_psr_init(dev);
13176 13170
13177 for_each_intel_encoder(dev, encoder) { 13171 for_each_intel_encoder(dev, encoder) {
@@ -14265,6 +14259,7 @@ void intel_modeset_gem_init(struct drm_device *dev)
14265 struct drm_i915_private *dev_priv = dev->dev_private; 14259 struct drm_i915_private *dev_priv = dev->dev_private;
14266 struct drm_crtc *c; 14260 struct drm_crtc *c;
14267 struct drm_i915_gem_object *obj; 14261 struct drm_i915_gem_object *obj;
14262 int ret;
14268 14263
14269 mutex_lock(&dev->struct_mutex); 14264 mutex_lock(&dev->struct_mutex);
14270 intel_init_gt_powersave(dev); 14265 intel_init_gt_powersave(dev);
@@ -14289,16 +14284,18 @@ void intel_modeset_gem_init(struct drm_device *dev)
14289 * pinned & fenced. When we do the allocation it's too early 14284 * pinned & fenced. When we do the allocation it's too early
14290 * for this. 14285 * for this.
14291 */ 14286 */
14292 mutex_lock(&dev->struct_mutex);
14293 for_each_crtc(dev, c) { 14287 for_each_crtc(dev, c) {
14294 obj = intel_fb_obj(c->primary->fb); 14288 obj = intel_fb_obj(c->primary->fb);
14295 if (obj == NULL) 14289 if (obj == NULL)
14296 continue; 14290 continue;
14297 14291
14298 if (intel_pin_and_fence_fb_obj(c->primary, 14292 mutex_lock(&dev->struct_mutex);
14299 c->primary->fb, 14293 ret = intel_pin_and_fence_fb_obj(c->primary,
14300 c->primary->state, 14294 c->primary->fb,
14301 NULL)) { 14295 c->primary->state,
14296 NULL);
14297 mutex_unlock(&dev->struct_mutex);
14298 if (ret) {
14302 DRM_ERROR("failed to pin boot fb on pipe %d\n", 14299 DRM_ERROR("failed to pin boot fb on pipe %d\n",
14303 to_intel_crtc(c)->pipe); 14300 to_intel_crtc(c)->pipe);
14304 drm_framebuffer_unreference(c->primary->fb); 14301 drm_framebuffer_unreference(c->primary->fb);
@@ -14306,7 +14303,6 @@ void intel_modeset_gem_init(struct drm_device *dev)
14306 update_state_fb(c->primary); 14303 update_state_fb(c->primary);
14307 } 14304 }
14308 } 14305 }
14309 mutex_unlock(&dev->struct_mutex);
14310 14306
14311 intel_backlight_register(dev); 14307 intel_backlight_register(dev);
14312} 14308}
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index b70e635ccaf4..d0237102c27e 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2742,11 +2742,6 @@ static void chv_pre_enable_dp(struct intel_encoder *encoder)
2742 2742
2743 /* Program Tx lane latency optimal setting*/ 2743 /* Program Tx lane latency optimal setting*/
2744 for (i = 0; i < 4; i++) { 2744 for (i = 0; i < 4; i++) {
2745 /* Set the latency optimal bit */
2746 data = (i == 1) ? 0x0 : 0x6;
2747 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW11(ch, i),
2748 data << DPIO_FRC_LATENCY_SHFIT);
2749
2750 /* Set the upar bit */ 2745 /* Set the upar bit */
2751 data = (i == 1) ? 0x0 : 0x1; 2746 data = (i == 1) ? 0x0 : 0x1;
2752 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW14(ch, i), 2747 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW14(ch, i),
@@ -5157,7 +5152,6 @@ static void intel_edp_drrs_downclock_work(struct work_struct *work)
5157 downclock_mode->vrefresh); 5152 downclock_mode->vrefresh);
5158 5153
5159unlock: 5154unlock:
5160
5161 mutex_unlock(&dev_priv->drrs.mutex); 5155 mutex_unlock(&dev_priv->drrs.mutex);
5162} 5156}
5163 5157
@@ -5179,12 +5173,17 @@ void intel_edp_drrs_invalidate(struct drm_device *dev,
5179 struct drm_crtc *crtc; 5173 struct drm_crtc *crtc;
5180 enum pipe pipe; 5174 enum pipe pipe;
5181 5175
5182 if (!dev_priv->drrs.dp) 5176 if (dev_priv->drrs.type == DRRS_NOT_SUPPORTED)
5183 return; 5177 return;
5184 5178
5185 cancel_delayed_work_sync(&dev_priv->drrs.work); 5179 cancel_delayed_work(&dev_priv->drrs.work);
5186 5180
5187 mutex_lock(&dev_priv->drrs.mutex); 5181 mutex_lock(&dev_priv->drrs.mutex);
5182 if (!dev_priv->drrs.dp) {
5183 mutex_unlock(&dev_priv->drrs.mutex);
5184 return;
5185 }
5186
5188 crtc = dp_to_dig_port(dev_priv->drrs.dp)->base.base.crtc; 5187 crtc = dp_to_dig_port(dev_priv->drrs.dp)->base.base.crtc;
5189 pipe = to_intel_crtc(crtc)->pipe; 5188 pipe = to_intel_crtc(crtc)->pipe;
5190 5189
@@ -5218,12 +5217,17 @@ void intel_edp_drrs_flush(struct drm_device *dev,
5218 struct drm_crtc *crtc; 5217 struct drm_crtc *crtc;
5219 enum pipe pipe; 5218 enum pipe pipe;
5220 5219
5221 if (!dev_priv->drrs.dp) 5220 if (dev_priv->drrs.type == DRRS_NOT_SUPPORTED)
5222 return; 5221 return;
5223 5222
5224 cancel_delayed_work_sync(&dev_priv->drrs.work); 5223 cancel_delayed_work(&dev_priv->drrs.work);
5225 5224
5226 mutex_lock(&dev_priv->drrs.mutex); 5225 mutex_lock(&dev_priv->drrs.mutex);
5226 if (!dev_priv->drrs.dp) {
5227 mutex_unlock(&dev_priv->drrs.mutex);
5228 return;
5229 }
5230
5227 crtc = dp_to_dig_port(dev_priv->drrs.dp)->base.base.crtc; 5231 crtc = dp_to_dig_port(dev_priv->drrs.dp)->base.base.crtc;
5228 pipe = to_intel_crtc(crtc)->pipe; 5232 pipe = to_intel_crtc(crtc)->pipe;
5229 dev_priv->drrs.busy_frontbuffer_bits &= ~frontbuffer_bits; 5233 dev_priv->drrs.busy_frontbuffer_bits &= ~frontbuffer_bits;
@@ -5294,6 +5298,9 @@ intel_dp_drrs_init(struct intel_connector *intel_connector,
5294 struct drm_i915_private *dev_priv = dev->dev_private; 5298 struct drm_i915_private *dev_priv = dev->dev_private;
5295 struct drm_display_mode *downclock_mode = NULL; 5299 struct drm_display_mode *downclock_mode = NULL;
5296 5300
5301 INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work);
5302 mutex_init(&dev_priv->drrs.mutex);
5303
5297 if (INTEL_INFO(dev)->gen <= 6) { 5304 if (INTEL_INFO(dev)->gen <= 6) {
5298 DRM_DEBUG_KMS("DRRS supported for Gen7 and above\n"); 5305 DRM_DEBUG_KMS("DRRS supported for Gen7 and above\n");
5299 return NULL; 5306 return NULL;
@@ -5312,10 +5319,6 @@ intel_dp_drrs_init(struct intel_connector *intel_connector,
5312 return NULL; 5319 return NULL;
5313 } 5320 }
5314 5321
5315 INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work);
5316
5317 mutex_init(&dev_priv->drrs.mutex);
5318
5319 dev_priv->drrs.type = dev_priv->vbt.drrs_type; 5322 dev_priv->drrs.type = dev_priv->vbt.drrs_type;
5320 5323
5321 dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR; 5324 dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR;
@@ -5587,7 +5590,7 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port)
5587 if (!intel_dig_port) 5590 if (!intel_dig_port)
5588 return; 5591 return;
5589 5592
5590 intel_connector = kzalloc(sizeof(*intel_connector), GFP_KERNEL); 5593 intel_connector = intel_connector_alloc();
5591 if (!intel_connector) { 5594 if (!intel_connector) {
5592 kfree(intel_dig_port); 5595 kfree(intel_dig_port);
5593 return; 5596 return;
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 5329c855acce..5cb47482d29f 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -415,7 +415,7 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
415 struct drm_connector *connector; 415 struct drm_connector *connector;
416 int i; 416 int i;
417 417
418 intel_connector = kzalloc(sizeof(*intel_connector), GFP_KERNEL); 418 intel_connector = intel_connector_alloc();
419 if (!intel_connector) 419 if (!intel_connector)
420 return NULL; 420 return NULL;
421 421
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 6036e3b73b7b..744db4d0c68f 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -930,6 +930,8 @@ void intel_crtc_restore_mode(struct drm_crtc *crtc);
930void intel_crtc_control(struct drm_crtc *crtc, bool enable); 930void intel_crtc_control(struct drm_crtc *crtc, bool enable);
931void intel_crtc_update_dpms(struct drm_crtc *crtc); 931void intel_crtc_update_dpms(struct drm_crtc *crtc);
932void intel_encoder_destroy(struct drm_encoder *encoder); 932void intel_encoder_destroy(struct drm_encoder *encoder);
933int intel_connector_init(struct intel_connector *);
934struct intel_connector *intel_connector_alloc(void);
933void intel_connector_dpms(struct drm_connector *, int mode); 935void intel_connector_dpms(struct drm_connector *, int mode);
934bool intel_connector_get_hw_state(struct intel_connector *connector); 936bool intel_connector_get_hw_state(struct intel_connector *connector);
935void intel_modeset_check_state(struct drm_device *dev); 937void intel_modeset_check_state(struct drm_device *dev);
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index 572251e9810b..51966426addf 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -1007,7 +1007,7 @@ void intel_dsi_init(struct drm_device *dev)
1007 if (!intel_dsi) 1007 if (!intel_dsi)
1008 return; 1008 return;
1009 1009
1010 intel_connector = kzalloc(sizeof(*intel_connector), GFP_KERNEL); 1010 intel_connector = intel_connector_alloc();
1011 if (!intel_connector) { 1011 if (!intel_connector) {
1012 kfree(intel_dsi); 1012 kfree(intel_dsi);
1013 return; 1013 return;
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 4ccd6c3f133d..770040ff486e 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -469,7 +469,7 @@ void intel_dvo_init(struct drm_device *dev)
469 if (!intel_dvo) 469 if (!intel_dvo)
470 return; 470 return;
471 471
472 intel_connector = kzalloc(sizeof(*intel_connector), GFP_KERNEL); 472 intel_connector = intel_connector_alloc();
473 if (!intel_connector) { 473 if (!intel_connector) {
474 kfree(intel_dvo); 474 kfree(intel_dvo);
475 return; 475 return;
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index cacbafdad3ab..bfbe07b6ddce 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1515,11 +1515,6 @@ static void chv_hdmi_pre_enable(struct intel_encoder *encoder)
1515 1515
1516 /* Program Tx latency optimal setting */ 1516 /* Program Tx latency optimal setting */
1517 for (i = 0; i < 4; i++) { 1517 for (i = 0; i < 4; i++) {
1518 /* Set the latency optimal bit */
1519 data = (i == 1) ? 0x0 : 0x6;
1520 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW11(ch, i),
1521 data << DPIO_FRC_LATENCY_SHFIT);
1522
1523 /* Set the upar bit */ 1518 /* Set the upar bit */
1524 data = (i == 1) ? 0x0 : 0x1; 1519 data = (i == 1) ? 0x0 : 0x1;
1525 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW14(ch, i), 1520 vlv_dpio_write(dev_priv, pipe, CHV_TX_DW14(ch, i),
@@ -1755,7 +1750,7 @@ void intel_hdmi_init(struct drm_device *dev, int hdmi_reg, enum port port)
1755 if (!intel_dig_port) 1750 if (!intel_dig_port)
1756 return; 1751 return;
1757 1752
1758 intel_connector = kzalloc(sizeof(*intel_connector), GFP_KERNEL); 1753 intel_connector = intel_connector_alloc();
1759 if (!intel_connector) { 1754 if (!intel_connector) {
1760 kfree(intel_dig_port); 1755 kfree(intel_dig_port);
1761 return; 1756 return;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 06d2da336f7c..5abda1d2c018 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -946,6 +946,12 @@ void intel_lvds_init(struct drm_device *dev)
946 return; 946 return;
947 } 947 }
948 948
949 if (intel_connector_init(&lvds_connector->base) < 0) {
950 kfree(lvds_connector);
951 kfree(lvds_encoder);
952 return;
953 }
954
949 lvds_encoder->attached_connector = lvds_connector; 955 lvds_encoder->attached_connector = lvds_connector;
950 956
951 intel_encoder = &lvds_encoder->base; 957 intel_encoder = &lvds_encoder->base;
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index f5b7e1e7c5e0..e87d2f418de4 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2426,6 +2426,22 @@ intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo,
2426 } 2426 }
2427} 2427}
2428 2428
2429static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)
2430{
2431 struct intel_sdvo_connector *sdvo_connector;
2432
2433 sdvo_connector = kzalloc(sizeof(*sdvo_connector), GFP_KERNEL);
2434 if (!sdvo_connector)
2435 return NULL;
2436
2437 if (intel_connector_init(&sdvo_connector->base) < 0) {
2438 kfree(sdvo_connector);
2439 return NULL;
2440 }
2441
2442 return sdvo_connector;
2443}
2444
2429static bool 2445static bool
2430intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device) 2446intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
2431{ 2447{
@@ -2437,7 +2453,7 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
2437 2453
2438 DRM_DEBUG_KMS("initialising DVI device %d\n", device); 2454 DRM_DEBUG_KMS("initialising DVI device %d\n", device);
2439 2455
2440 intel_sdvo_connector = kzalloc(sizeof(*intel_sdvo_connector), GFP_KERNEL); 2456 intel_sdvo_connector = intel_sdvo_connector_alloc();
2441 if (!intel_sdvo_connector) 2457 if (!intel_sdvo_connector)
2442 return false; 2458 return false;
2443 2459
@@ -2491,7 +2507,7 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
2491 2507
2492 DRM_DEBUG_KMS("initialising TV type %d\n", type); 2508 DRM_DEBUG_KMS("initialising TV type %d\n", type);
2493 2509
2494 intel_sdvo_connector = kzalloc(sizeof(*intel_sdvo_connector), GFP_KERNEL); 2510 intel_sdvo_connector = intel_sdvo_connector_alloc();
2495 if (!intel_sdvo_connector) 2511 if (!intel_sdvo_connector)
2496 return false; 2512 return false;
2497 2513
@@ -2570,7 +2586,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
2570 2586
2571 DRM_DEBUG_KMS("initialising LVDS device %d\n", device); 2587 DRM_DEBUG_KMS("initialising LVDS device %d\n", device);
2572 2588
2573 intel_sdvo_connector = kzalloc(sizeof(*intel_sdvo_connector), GFP_KERNEL); 2589 intel_sdvo_connector = intel_sdvo_connector_alloc();
2574 if (!intel_sdvo_connector) 2590 if (!intel_sdvo_connector)
2575 return false; 2591 return false;
2576 2592
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index bc1d9d740904..8b9d325bda3c 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1621,7 +1621,7 @@ intel_tv_init(struct drm_device *dev)
1621 return; 1621 return;
1622 } 1622 }
1623 1623
1624 intel_connector = kzalloc(sizeof(*intel_connector), GFP_KERNEL); 1624 intel_connector = intel_connector_alloc();
1625 if (!intel_connector) { 1625 if (!intel_connector) {
1626 kfree(intel_tv); 1626 kfree(intel_tv);
1627 return; 1627 return;