| From 26792526cc3e29e3ccbc15c996beb61fa64be5af Mon Sep 17 00:00:00 2001 |
| From: Lyude <cpaul@redhat.com> |
| Date: Tue, 3 May 2016 11:01:32 -0400 |
| Subject: Revert "drm/i915: start adding dp mst audio" |
| |
| From: Lyude <cpaul@redhat.com> |
| |
| commit 26792526cc3e29e3ccbc15c996beb61fa64be5af upstream. |
| |
| Right now MST audio is causing too many kernel panics to really keep |
| around in the kernel. On top of that, even after fixing said panics it's |
| still basically non-functional (at least on all the setups I've tested |
| it on). Revert until we have a proper solution for this. |
| |
| This reverts commit 3d52ccf52f2c51f613e42e65be0f06e4e6788093. |
| |
| Signed-off-by: Lyude <cpaul@redhat.com> |
| Fixes: 3d52ccf52f2c ("drm/i915: start adding dp mst audio") |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Link: http://patchwork.freedesktop.org/patch/msgid/1462287692-28570-1-git-send-email-cpaul@redhat.com |
| (cherry picked from commit 5a8f97ea04c98201deeb973c3f711c3c156115e9) |
| Signed-off-by: Jani Nikula <jani.nikula@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i915/i915_debugfs.c | 16 ---------------- |
| drivers/gpu/drm/i915/intel_audio.c | 9 +++------ |
| drivers/gpu/drm/i915/intel_ddi.c | 24 +++++------------------- |
| drivers/gpu/drm/i915/intel_dp_mst.c | 22 ---------------------- |
| drivers/gpu/drm/i915/intel_drv.h | 2 -- |
| 5 files changed, 8 insertions(+), 65 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/i915_debugfs.c |
| +++ b/drivers/gpu/drm/i915/i915_debugfs.c |
| @@ -2860,20 +2860,6 @@ static void intel_dp_info(struct seq_fil |
| intel_panel_info(m, &intel_connector->panel); |
| } |
| |
| -static void intel_dp_mst_info(struct seq_file *m, |
| - struct intel_connector *intel_connector) |
| -{ |
| - struct intel_encoder *intel_encoder = intel_connector->encoder; |
| - struct intel_dp_mst_encoder *intel_mst = |
| - enc_to_mst(&intel_encoder->base); |
| - struct intel_digital_port *intel_dig_port = intel_mst->primary; |
| - struct intel_dp *intel_dp = &intel_dig_port->dp; |
| - bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, |
| - intel_connector->port); |
| - |
| - seq_printf(m, "\taudio support: %s\n", yesno(has_audio)); |
| -} |
| - |
| static void intel_hdmi_info(struct seq_file *m, |
| struct intel_connector *intel_connector) |
| { |
| @@ -2917,8 +2903,6 @@ static void intel_connector_info(struct |
| intel_hdmi_info(m, intel_connector); |
| else if (intel_encoder->type == INTEL_OUTPUT_LVDS) |
| intel_lvds_info(m, intel_connector); |
| - else if (intel_encoder->type == INTEL_OUTPUT_DP_MST) |
| - intel_dp_mst_info(m, intel_connector); |
| } |
| |
| seq_printf(m, "\tmodes:\n"); |
| --- a/drivers/gpu/drm/i915/intel_audio.c |
| +++ b/drivers/gpu/drm/i915/intel_audio.c |
| @@ -262,8 +262,7 @@ static void hsw_audio_codec_disable(stru |
| tmp |= AUD_CONFIG_N_PROG_ENABLE; |
| tmp &= ~AUD_CONFIG_UPPER_N_MASK; |
| tmp &= ~AUD_CONFIG_LOWER_N_MASK; |
| - if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) || |
| - intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST)) |
| + if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT)) |
| tmp |= AUD_CONFIG_N_VALUE_INDEX; |
| I915_WRITE(HSW_AUD_CFG(pipe), tmp); |
| |
| @@ -476,8 +475,7 @@ static void ilk_audio_codec_enable(struc |
| tmp &= ~AUD_CONFIG_N_VALUE_INDEX; |
| tmp &= ~AUD_CONFIG_N_PROG_ENABLE; |
| tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK; |
| - if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) || |
| - intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST)) |
| + if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT)) |
| tmp |= AUD_CONFIG_N_VALUE_INDEX; |
| else |
| tmp |= audio_config_hdmi_pixel_clock(adjusted_mode); |
| @@ -515,8 +513,7 @@ void intel_audio_codec_enable(struct int |
| |
| /* ELD Conn_Type */ |
| connector->eld[5] &= ~(3 << 2); |
| - if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) || |
| - intel_pipe_has_type(crtc, INTEL_OUTPUT_DP_MST)) |
| + if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) |
| connector->eld[5] |= (1 << 2); |
| |
| connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2; |
| --- a/drivers/gpu/drm/i915/intel_ddi.c |
| +++ b/drivers/gpu/drm/i915/intel_ddi.c |
| @@ -3165,23 +3165,6 @@ void intel_ddi_fdi_disable(struct drm_cr |
| I915_WRITE(FDI_RX_CTL(PIPE_A), val); |
| } |
| |
| -bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv, |
| - struct intel_crtc *intel_crtc) |
| -{ |
| - u32 temp; |
| - |
| - if (intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_AUDIO)) { |
| - temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD); |
| - |
| - intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO); |
| - |
| - if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe)) |
| - return true; |
| - } |
| - |
| - return false; |
| -} |
| - |
| void intel_ddi_get_config(struct intel_encoder *encoder, |
| struct intel_crtc_state *pipe_config) |
| { |
| @@ -3242,8 +3225,11 @@ void intel_ddi_get_config(struct intel_e |
| break; |
| } |
| |
| - pipe_config->has_audio = |
| - intel_ddi_is_audio_enabled(dev_priv, intel_crtc); |
| + if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) { |
| + temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD); |
| + if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe)) |
| + pipe_config->has_audio = true; |
| + } |
| |
| if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp_bpp && |
| pipe_config->pipe_bpp > dev_priv->vbt.edp_bpp) { |
| --- a/drivers/gpu/drm/i915/intel_dp_mst.c |
| +++ b/drivers/gpu/drm/i915/intel_dp_mst.c |
| @@ -78,8 +78,6 @@ static bool intel_dp_mst_compute_config( |
| return false; |
| } |
| |
| - if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found->port)) |
| - pipe_config->has_audio = true; |
| mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp); |
| |
| pipe_config->pbn = mst_pbn; |
| @@ -104,11 +102,6 @@ static void intel_mst_disable_dp(struct |
| struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base); |
| struct intel_digital_port *intel_dig_port = intel_mst->primary; |
| struct intel_dp *intel_dp = &intel_dig_port->dp; |
| - struct drm_device *dev = encoder->base.dev; |
| - struct drm_i915_private *dev_priv = dev->dev_private; |
| - struct drm_crtc *crtc = encoder->base.crtc; |
| - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| - |
| int ret; |
| |
| DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links); |
| @@ -119,10 +112,6 @@ static void intel_mst_disable_dp(struct |
| if (ret) { |
| DRM_ERROR("failed to update payload %d\n", ret); |
| } |
| - if (intel_crtc->config->has_audio) { |
| - intel_audio_codec_disable(encoder); |
| - intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO); |
| - } |
| } |
| |
| static void intel_mst_post_disable_dp(struct intel_encoder *encoder) |
| @@ -219,7 +208,6 @@ static void intel_mst_enable_dp(struct i |
| struct intel_dp *intel_dp = &intel_dig_port->dp; |
| struct drm_device *dev = intel_dig_port->base.base.dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| - struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); |
| enum port port = intel_dig_port->port; |
| int ret; |
| |
| @@ -232,13 +220,6 @@ static void intel_mst_enable_dp(struct i |
| ret = drm_dp_check_act_status(&intel_dp->mst_mgr); |
| |
| ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr); |
| - |
| - if (crtc->config->has_audio) { |
| - DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n", |
| - pipe_name(crtc->pipe)); |
| - intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO); |
| - intel_audio_codec_enable(encoder); |
| - } |
| } |
| |
| static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder, |
| @@ -264,9 +245,6 @@ static void intel_dp_mst_enc_get_config( |
| |
| pipe_config->has_dp_encoder = true; |
| |
| - pipe_config->has_audio = |
| - intel_ddi_is_audio_enabled(dev_priv, crtc); |
| - |
| temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder)); |
| if (temp & TRANS_DDI_PHSYNC) |
| flags |= DRM_MODE_FLAG_PHSYNC; |
| --- a/drivers/gpu/drm/i915/intel_drv.h |
| +++ b/drivers/gpu/drm/i915/intel_drv.h |
| @@ -1013,8 +1013,6 @@ void intel_ddi_set_pipe_settings(struct |
| void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp); |
| bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector); |
| void intel_ddi_fdi_disable(struct drm_crtc *crtc); |
| -bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv, |
| - struct intel_crtc *intel_crtc); |
| void intel_ddi_get_config(struct intel_encoder *encoder, |
| struct intel_crtc_state *pipe_config); |
| struct intel_encoder * |