diff mbox

[1/2] drm/i915/tv: add ->get_config callback

Message ID 1384761659-4915-1-git-send-email-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Vetter Nov. 18, 2013, 8 a.m. UTC
We need this to properly fill in adjusted_mode.crtc_clock, otherwise
the state checker gets unhappy. This seems to have been forgotten in
the big clock rework in

commit 18442d08786472c63a0a80c27f92b033dffc26de
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Fri Sep 13 16:00:08 2013 +0300

    drm/i915: Fix port_clock and adjusted_mode.clock readout all over

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/i915/intel_tv.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Ville Syrjälä Nov. 18, 2013, 8:14 p.m. UTC | #1
On Mon, Nov 18, 2013 at 09:00:58AM +0100, Daniel Vetter wrote:
> We need this to properly fill in adjusted_mode.crtc_clock, otherwise
> the state checker gets unhappy. This seems to have been forgotten in
> the big clock rework in
> 
> commit 18442d08786472c63a0a80c27f92b033dffc26de
> Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Date:   Fri Sep 13 16:00:08 2013 +0300
> 
>     drm/i915: Fix port_clock and adjusted_mode.clock readout all over
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

For the series:
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Although using adjusted_mode.crtc_clock in intel_tv compute_config and
get_config is a bit wrong I think. That's not really the pixel clock
we're shoveling into it, so we're going to be computing the watermarks
incorrectly.

To do it really right, I think we should stick the tv_mode clock to
port_clock, and then compute the pixel rate based on the input mode
and the refresh rate. Or maybe we just need a TV out specific version
of ilk_pipe_pixel_rate() (just like we'd need one for GMCH panel fitter).
The TV out scaler is essentially just another panel fitter anyway.


> ---
>  drivers/gpu/drm/i915/intel_tv.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> index 18c406246a2d..22cf0f4ba248 100644
> --- a/drivers/gpu/drm/i915/intel_tv.c
> +++ b/drivers/gpu/drm/i915/intel_tv.c
> @@ -902,6 +902,13 @@ intel_tv_mode_valid(struct drm_connector *connector,
>  }
>  
>  
> +static void
> +intel_tv_get_config(struct intel_encoder *encoder,
> +		    struct intel_crtc_config *pipe_config)
> +{
> +	pipe_config->adjusted_mode.crtc_clock = pipe_config->port_clock;
> +}
> +
>  static bool
>  intel_tv_compute_config(struct intel_encoder *encoder,
>  			struct intel_crtc_config *pipe_config)
> @@ -1621,6 +1628,7 @@ intel_tv_init(struct drm_device *dev)
>  			 DRM_MODE_ENCODER_TVDAC);
>  
>  	intel_encoder->compute_config = intel_tv_compute_config;
> +	intel_encoder->get_config = intel_tv_get_config;
>  	intel_encoder->mode_set = intel_tv_mode_set;
>  	intel_encoder->enable = intel_enable_tv;
>  	intel_encoder->disable = intel_disable_tv;
> -- 
> 1.8.4.rc3
Daniel Vetter Nov. 18, 2013, 9:59 p.m. UTC | #2
On Mon, Nov 18, 2013 at 10:14:26PM +0200, Ville Syrjälä wrote:
> On Mon, Nov 18, 2013 at 09:00:58AM +0100, Daniel Vetter wrote:
> > We need this to properly fill in adjusted_mode.crtc_clock, otherwise
> > the state checker gets unhappy. This seems to have been forgotten in
> > the big clock rework in
> > 
> > commit 18442d08786472c63a0a80c27f92b033dffc26de
> > Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Date:   Fri Sep 13 16:00:08 2013 +0300
> > 
> >     drm/i915: Fix port_clock and adjusted_mode.clock readout all over
> > 
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> 
> For the series:
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Thanks for the review, patches merged to -fixes

> Although using adjusted_mode.crtc_clock in intel_tv compute_config and
> get_config is a bit wrong I think. That's not really the pixel clock
> we're shoveling into it, so we're going to be computing the watermarks
> incorrectly.
> 
> To do it really right, I think we should stick the tv_mode clock to
> port_clock, and then compute the pixel rate based on the input mode
> and the refresh rate. Or maybe we just need a TV out specific version
> of ilk_pipe_pixel_rate() (just like we'd need one for GMCH panel fitter).
> The TV out scaler is essentially just another panel fitter anyway.

Yeah, it's just duct-tape over duct-tape at this point. But meh, it's
tv-out. I have a similar series bubbling for sdvo-tv, but that's still
stalled since my g33 decided to be a bit more hang-happy than I'd prefer.
-Daniel
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 18c406246a2d..22cf0f4ba248 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -902,6 +902,13 @@  intel_tv_mode_valid(struct drm_connector *connector,
 }
 
 
+static void
+intel_tv_get_config(struct intel_encoder *encoder,
+		    struct intel_crtc_config *pipe_config)
+{
+	pipe_config->adjusted_mode.crtc_clock = pipe_config->port_clock;
+}
+
 static bool
 intel_tv_compute_config(struct intel_encoder *encoder,
 			struct intel_crtc_config *pipe_config)
@@ -1621,6 +1628,7 @@  intel_tv_init(struct drm_device *dev)
 			 DRM_MODE_ENCODER_TVDAC);
 
 	intel_encoder->compute_config = intel_tv_compute_config;
+	intel_encoder->get_config = intel_tv_get_config;
 	intel_encoder->mode_set = intel_tv_mode_set;
 	intel_encoder->enable = intel_enable_tv;
 	intel_encoder->disable = intel_disable_tv;