[Intel-gfx] [PATCH 13/13] drm/i915: clean up crtc timings computation

Rodrigo Vivi rodrigo.vivi at gmail.com
Fri Jul 26 20:40:52 CEST 2013


On Sun, Jul 21, 2013 at 4:37 PM, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> In the old days of the crtc helpers we've only had the encoder and
> crtc ->mode_fixup callbacks. So when the lvds connector wanted to
> adjust the crtc timings it had to set a driver-private mode flag to
> tell the crtc mode fixup code to not overwrite them with the generic
> ones.
>
> When converting things to the new infrastructure I've kept the entire
> logic and only moved the flag to pipe_config->timings_set. But this
> logic is pretty tricky and already caused regressions:
>
> commit 21d8a4756af5fdf4a42e79a77cf3b6f52678d443
> Author: Daniel Vetter <daniel.vetter at ffwll.ch>
> Date:   Fri Jul 12 08:07:30 2013 +0200
>
>     drm/i915: fix pfit regression for non-autoscaled resolutions
>
> So take advantage of the flexibility our own modeset infrastructure
> affords us and prefill default crtc timings. This allows us to rip out
> ->timings_set. Note that we overwrite things again when retrying the
> pipe config computation due to bandwidth constraints to avoid bogus
> crtc timings if the encoder only does relative adjustments (which is
> how the pfit code works). Only a theoretical concern though since
> platforms where we retry (pch-split platforms) do not need
> adjustements (since only the old gmch pfit needs that). But let's
> better be safe than sorry.
>
> Cc: Jesse Barnes <jbarnes at virtuousgeek.org>
> Cc: Mika Kuoppala <mika.kuoppala at intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 9 +++------
>  drivers/gpu/drm/i915/intel_drv.h     | 4 ----
>  drivers/gpu/drm/i915/intel_panel.c   | 3 ---
>  3 files changed, 3 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index b07f891e..aebdadc 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -4108,12 +4108,6 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
>                         return -EINVAL;
>         }
>
> -       /* All interlaced capable intel hw wants timings in frames. Note though
> -        * that intel_lvds_compute_config does some funny tricks with the crtc
> -        * timings, so we need to be careful not to clobber these.*/
> -       if (!pipe_config->timings_set)
> -               drm_mode_set_crtcinfo(adjusted_mode, 0);
> -
>         /* Cantiga+ cannot handle modes with a hsync front porch of 0.
>          * WaPruneModeWithIncorrectHsyncOffset:ctg,elk,ilk,snb,ivb,vlv,hsw.
>          */
> @@ -7882,6 +7876,9 @@ encoder_retry:
>         pipe_config->port_clock = 0;
>         pipe_config->pixel_multiplier = 1;
>
> +       /* Fill in default crtc timings, allow encoders to overwrite them. */
> +       drm_mode_set_crtcinfo(&pipe_config->adjusted_mode, 0);
> +
>         /* Pass our mode to the connectors and the CRTC to give them a chance to
>          * adjust it according to limitations or connector properties, and also
>          * a chance to reject the mode entirely.
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 31087ff..a9eca0e 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -208,10 +208,6 @@ struct intel_crtc_config {
>
>         struct drm_display_mode requested_mode;
>         struct drm_display_mode adjusted_mode;
> -       /* This flag must be set by the encoder's compute_config callback if it
> -        * changes the crtc timings in the mode to prevent the crtc fixup from
> -        * overwriting them.  Currently only lvds needs that. */
> -       bool timings_set;
>         /* Whether to set up the PCH/FDI. Note that we never allow sharing
>          * between pch encoders and cpu encoders. */
>         bool has_pch_encoder;
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index 67e2c1f..01b5a51 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -194,9 +194,6 @@ void intel_gmch_panel_fitting(struct intel_crtc *intel_crtc,
>             adjusted_mode->vdisplay == mode->vdisplay)
>                 goto out;
>
> -       drm_mode_set_crtcinfo(adjusted_mode, 0);

I didn't get why this set here isn't needed anymore..

> -       pipe_config->timings_set = true;
> -
>         switch (fitting_mode) {
>         case DRM_MODE_SCALE_CENTER:
>                 /*
> --
> 1.8.1.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Rodrigo Vivi
Blog: http://blog.vivi.eng.br



More information about the Intel-gfx mailing list