Message ID | 1431354318-11995-31-git-send-email-maarten.lankhorst@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, May 11, 2015 at 04:25:06PM +0200, Maarten Lankhorst wrote: > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > --- > drivers/gpu/drm/i915/intel_hdmi.c | 58 +++++++++++++++++++++++---------------- > 1 file changed, 35 insertions(+), 23 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c > index 76994dc033a3..9efc3dd62a00 100644 > --- a/drivers/gpu/drm/i915/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/intel_hdmi.c > @@ -345,14 +345,15 @@ static void hsw_write_infoframe(struct drm_encoder *encoder, > const uint32_t *data = frame; > struct drm_device *dev = encoder->dev; > struct drm_i915_private *dev_priv = dev->dev_private; > - struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); > - u32 ctl_reg = HSW_TVIDEO_DIP_CTL(intel_crtc->config->cpu_transcoder); > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(encoder->crtc->state); > + u32 ctl_reg = HSW_TVIDEO_DIP_CTL(pipe_config->cpu_transcoder); > u32 data_reg; > int i; > u32 val = I915_READ(ctl_reg); > > data_reg = hsw_infoframe_data_reg(type, > - intel_crtc->config->cpu_transcoder, > + pipe_config->cpu_transcoder, > dev_priv); > if (data_reg == 0) > return; > @@ -380,7 +381,9 @@ static bool hsw_infoframe_enabled(struct drm_encoder *encoder) infoframe_enabled functions are called from get_config, which has a passed-in pipe_config. You need to pass this one down. That's a good example for why I think the commit message should summarize why each change was ok and in what calling context it's done (since they all require different conversions). And perhaps also split up patches not along source-files only but also along stages and calling contexts. Yep even more patches but this stuff is really tricky imo. -Daniel > struct drm_device *dev = encoder->dev; > struct drm_i915_private *dev_priv = dev->dev_private; > struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); > - u32 ctl_reg = HSW_TVIDEO_DIP_CTL(intel_crtc->config->cpu_transcoder); > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(intel_crtc->base.state); > + u32 ctl_reg = HSW_TVIDEO_DIP_CTL(pipe_config->cpu_transcoder); > u32 val = I915_READ(ctl_reg); > > return val & (VIDEO_DIP_ENABLE_AVI_HSW | VIDEO_DIP_ENABLE_SPD_HSW | > @@ -430,7 +433,8 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder, > struct drm_display_mode *adjusted_mode) > { > struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); > - struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(encoder->crtc->state); > union hdmi_infoframe frame; > int ret; > > @@ -445,7 +449,7 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder, > } > > if (intel_hdmi->rgb_quant_range_selectable) { > - if (intel_crtc->config->limited_color_range) > + if (pipe_config->limited_color_range) > frame.avi.quantization_range = > HDMI_QUANTIZATION_RANGE_LIMITED; > else > @@ -679,9 +683,10 @@ static void hsw_set_infoframes(struct drm_encoder *encoder, > struct drm_display_mode *adjusted_mode) > { > struct drm_i915_private *dev_priv = encoder->dev->dev_private; > - struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(encoder->crtc->state); > struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); > - u32 reg = HSW_TVIDEO_DIP_CTL(intel_crtc->config->cpu_transcoder); > + u32 reg = HSW_TVIDEO_DIP_CTL(pipe_config->cpu_transcoder); > u32 val = I915_READ(reg); > > assert_hdmi_port_disabled(intel_hdmi); > @@ -709,7 +714,9 @@ static void intel_hdmi_prepare(struct intel_encoder *encoder) > struct drm_i915_private *dev_priv = dev->dev_private; > struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); > struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); > - struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode; > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(crtc->base.state); > + struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; > u32 hdmi_val; > > hdmi_val = SDVO_ENCODING_HDMI; > @@ -720,12 +727,12 @@ static void intel_hdmi_prepare(struct intel_encoder *encoder) > if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) > hdmi_val |= SDVO_HSYNC_ACTIVE_HIGH; > > - if (crtc->config->pipe_bpp > 24) > + if (pipe_config->pipe_bpp > 24) > hdmi_val |= HDMI_COLOR_FORMAT_12bpc; > else > hdmi_val |= SDVO_COLOR_FORMAT_8bpc; > > - if (crtc->config->has_hdmi_sink) > + if (pipe_config->has_hdmi_sink) > hdmi_val |= HDMI_MODE_SELECT_HDMI; > > if (HAS_PCH_CPT(dev)) > @@ -819,11 +826,13 @@ static void intel_enable_hdmi(struct intel_encoder *encoder) > struct drm_device *dev = encoder->base.dev; > struct drm_i915_private *dev_priv = dev->dev_private; > struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(intel_crtc->base.state); > struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); > u32 temp; > u32 enable_bits = SDVO_ENABLE; > > - if (intel_crtc->config->has_audio) > + if (pipe_config->has_audio) > enable_bits |= SDVO_AUDIO_ENABLE; > > temp = I915_READ(intel_hdmi->hdmi_reg); > @@ -854,8 +863,8 @@ static void intel_enable_hdmi(struct intel_encoder *encoder) > POSTING_READ(intel_hdmi->hdmi_reg); > } > > - if (intel_crtc->config->has_audio) { > - WARN_ON(!intel_crtc->config->has_hdmi_sink); > + if (pipe_config->has_audio) { > + WARN_ON(!pipe_config->has_hdmi_sink); > DRM_DEBUG_DRIVER("Enabling HDMI audio on pipe %c\n", > pipe_name(intel_crtc->pipe)); > intel_audio_codec_enable(encoder); > @@ -1267,14 +1276,15 @@ done: > static void intel_hdmi_pre_enable(struct intel_encoder *encoder) > { > struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); > - struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(encoder->base.crtc->state); > struct drm_display_mode *adjusted_mode = > - &intel_crtc->config->base.adjusted_mode; > + &pipe_config->base.adjusted_mode; > > intel_hdmi_prepare(encoder); > > intel_hdmi->set_infoframes(&encoder->base, > - intel_crtc->config->has_hdmi_sink, > + pipe_config->has_hdmi_sink, > adjusted_mode); > } > > @@ -1286,8 +1296,10 @@ static void vlv_hdmi_pre_enable(struct intel_encoder *encoder) > struct drm_i915_private *dev_priv = dev->dev_private; > struct intel_crtc *intel_crtc = > to_intel_crtc(encoder->base.crtc); > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(intel_crtc->base.state); > struct drm_display_mode *adjusted_mode = > - &intel_crtc->config->base.adjusted_mode; > + &pipe_config->base.adjusted_mode; > enum dpio_channel port = vlv_dport_to_channel(dport); > int pipe = intel_crtc->pipe; > u32 val; > @@ -1319,7 +1331,7 @@ static void vlv_hdmi_pre_enable(struct intel_encoder *encoder) > mutex_unlock(&dev_priv->dpio_lock); > > intel_hdmi->set_infoframes(&encoder->base, > - intel_crtc->config->has_hdmi_sink, > + pipe_config->has_hdmi_sink, > adjusted_mode); > > intel_enable_hdmi(encoder); > @@ -1531,13 +1543,13 @@ static void chv_hdmi_pre_enable(struct intel_encoder *encoder) > } > > /* Data lane stagger programming */ > - if (intel_crtc->config->port_clock > 270000) > + if (pipe_config->port_clock > 270000) > stagger = 0x18; > - else if (intel_crtc->config->port_clock > 135000) > + else if (pipe_config->port_clock > 135000) > stagger = 0xd; > - else if (intel_crtc->config->port_clock > 67500) > + else if (pipe_config->port_clock > 67500) > stagger = 0x7; > - else if (intel_crtc->config->port_clock > 33750) > + else if (pipe_config->port_clock > 33750) > stagger = 0x4; > else > stagger = 0x2; > -- > 2.1.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 76994dc033a3..9efc3dd62a00 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -345,14 +345,15 @@ static void hsw_write_infoframe(struct drm_encoder *encoder, const uint32_t *data = frame; struct drm_device *dev = encoder->dev; struct drm_i915_private *dev_priv = dev->dev_private; - struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); - u32 ctl_reg = HSW_TVIDEO_DIP_CTL(intel_crtc->config->cpu_transcoder); + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(encoder->crtc->state); + u32 ctl_reg = HSW_TVIDEO_DIP_CTL(pipe_config->cpu_transcoder); u32 data_reg; int i; u32 val = I915_READ(ctl_reg); data_reg = hsw_infoframe_data_reg(type, - intel_crtc->config->cpu_transcoder, + pipe_config->cpu_transcoder, dev_priv); if (data_reg == 0) return; @@ -380,7 +381,9 @@ static bool hsw_infoframe_enabled(struct drm_encoder *encoder) struct drm_device *dev = encoder->dev; struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); - u32 ctl_reg = HSW_TVIDEO_DIP_CTL(intel_crtc->config->cpu_transcoder); + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(intel_crtc->base.state); + u32 ctl_reg = HSW_TVIDEO_DIP_CTL(pipe_config->cpu_transcoder); u32 val = I915_READ(ctl_reg); return val & (VIDEO_DIP_ENABLE_AVI_HSW | VIDEO_DIP_ENABLE_SPD_HSW | @@ -430,7 +433,8 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder, struct drm_display_mode *adjusted_mode) { struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); - struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(encoder->crtc->state); union hdmi_infoframe frame; int ret; @@ -445,7 +449,7 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder, } if (intel_hdmi->rgb_quant_range_selectable) { - if (intel_crtc->config->limited_color_range) + if (pipe_config->limited_color_range) frame.avi.quantization_range = HDMI_QUANTIZATION_RANGE_LIMITED; else @@ -679,9 +683,10 @@ static void hsw_set_infoframes(struct drm_encoder *encoder, struct drm_display_mode *adjusted_mode) { struct drm_i915_private *dev_priv = encoder->dev->dev_private; - struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(encoder->crtc->state); struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); - u32 reg = HSW_TVIDEO_DIP_CTL(intel_crtc->config->cpu_transcoder); + u32 reg = HSW_TVIDEO_DIP_CTL(pipe_config->cpu_transcoder); u32 val = I915_READ(reg); assert_hdmi_port_disabled(intel_hdmi); @@ -709,7 +714,9 @@ static void intel_hdmi_prepare(struct intel_encoder *encoder) struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); - struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode; + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(crtc->base.state); + struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; u32 hdmi_val; hdmi_val = SDVO_ENCODING_HDMI; @@ -720,12 +727,12 @@ static void intel_hdmi_prepare(struct intel_encoder *encoder) if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) hdmi_val |= SDVO_HSYNC_ACTIVE_HIGH; - if (crtc->config->pipe_bpp > 24) + if (pipe_config->pipe_bpp > 24) hdmi_val |= HDMI_COLOR_FORMAT_12bpc; else hdmi_val |= SDVO_COLOR_FORMAT_8bpc; - if (crtc->config->has_hdmi_sink) + if (pipe_config->has_hdmi_sink) hdmi_val |= HDMI_MODE_SELECT_HDMI; if (HAS_PCH_CPT(dev)) @@ -819,11 +826,13 @@ static void intel_enable_hdmi(struct intel_encoder *encoder) struct drm_device *dev = encoder->base.dev; struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(intel_crtc->base.state); struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); u32 temp; u32 enable_bits = SDVO_ENABLE; - if (intel_crtc->config->has_audio) + if (pipe_config->has_audio) enable_bits |= SDVO_AUDIO_ENABLE; temp = I915_READ(intel_hdmi->hdmi_reg); @@ -854,8 +863,8 @@ static void intel_enable_hdmi(struct intel_encoder *encoder) POSTING_READ(intel_hdmi->hdmi_reg); } - if (intel_crtc->config->has_audio) { - WARN_ON(!intel_crtc->config->has_hdmi_sink); + if (pipe_config->has_audio) { + WARN_ON(!pipe_config->has_hdmi_sink); DRM_DEBUG_DRIVER("Enabling HDMI audio on pipe %c\n", pipe_name(intel_crtc->pipe)); intel_audio_codec_enable(encoder); @@ -1267,14 +1276,15 @@ done: static void intel_hdmi_pre_enable(struct intel_encoder *encoder) { struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); - struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(encoder->base.crtc->state); struct drm_display_mode *adjusted_mode = - &intel_crtc->config->base.adjusted_mode; + &pipe_config->base.adjusted_mode; intel_hdmi_prepare(encoder); intel_hdmi->set_infoframes(&encoder->base, - intel_crtc->config->has_hdmi_sink, + pipe_config->has_hdmi_sink, adjusted_mode); } @@ -1286,8 +1296,10 @@ static void vlv_hdmi_pre_enable(struct intel_encoder *encoder) struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(intel_crtc->base.state); struct drm_display_mode *adjusted_mode = - &intel_crtc->config->base.adjusted_mode; + &pipe_config->base.adjusted_mode; enum dpio_channel port = vlv_dport_to_channel(dport); int pipe = intel_crtc->pipe; u32 val; @@ -1319,7 +1331,7 @@ static void vlv_hdmi_pre_enable(struct intel_encoder *encoder) mutex_unlock(&dev_priv->dpio_lock); intel_hdmi->set_infoframes(&encoder->base, - intel_crtc->config->has_hdmi_sink, + pipe_config->has_hdmi_sink, adjusted_mode); intel_enable_hdmi(encoder); @@ -1531,13 +1543,13 @@ static void chv_hdmi_pre_enable(struct intel_encoder *encoder) } /* Data lane stagger programming */ - if (intel_crtc->config->port_clock > 270000) + if (pipe_config->port_clock > 270000) stagger = 0x18; - else if (intel_crtc->config->port_clock > 135000) + else if (pipe_config->port_clock > 135000) stagger = 0xd; - else if (intel_crtc->config->port_clock > 67500) + else if (pipe_config->port_clock > 67500) stagger = 0x7; - else if (intel_crtc->config->port_clock > 33750) + else if (pipe_config->port_clock > 33750) stagger = 0x4; else stagger = 0x2;
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> --- drivers/gpu/drm/i915/intel_hdmi.c | 58 +++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 23 deletions(-)