[Intel-gfx] [PATCH 5/6] drm/i915: Stop hand rolling drm_mode_match()

Chris Wilson chris at chris-wilson.co.uk
Thu Mar 21 17:23:30 UTC 2019


Quoting Ville Syrjala (2019-03-21 13:24:45)
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> Utilize drm_mode_match() instead of hand rolling it when
> looking for the DRRS downclock mode.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_panel.c | 49 +++++++++++++++---------------
>  1 file changed, 24 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index cf111eba1a93..4727e74f7437 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -46,6 +46,16 @@ intel_fixed_panel_mode(const struct drm_display_mode *fixed_mode,
>         drm_mode_set_crtcinfo(adjusted_mode, 0);
>  }
>  
> +static bool is_downclock_mode(const struct drm_display_mode *downclock_mode,
> +                             const struct drm_display_mode *fixed_mode)
> +{
> +       return drm_mode_match(downclock_mode, fixed_mode,
> +                             DRM_MODE_MATCH_TIMINGS |

Adds m1->vscan == m2->vscan

Makes sense.

> +                             DRM_MODE_MATCH_FLAGS |
> +                             DRM_MODE_MATCH_3D_FLAGS) &&

Together adds m1->flags == m2->flags

And also makes sense.

The other available flag is DRM_MODE_MATCH_ASPECT_RATIO, which is
redundant given the timings match.

> +               downclock_mode->clock < fixed_mode->clock;
> +}
> +
>  /**
>   * intel_find_panel_downclock - find the reduced downclock for LVDS in EDID
>   * @dev_priv: i915 device instance
> @@ -60,11 +70,8 @@ intel_find_panel_downclock(struct drm_i915_private *dev_priv,
>                         struct drm_display_mode *fixed_mode,
>                         struct drm_connector *connector)
>  {
> -       struct drm_display_mode *scan, *tmp_mode;
> -       int temp_downclock;
> -
> -       temp_downclock = fixed_mode->clock;
> -       tmp_mode = NULL;
> +       const struct drm_display_mode *scan, *best_mode = NULL;
> +       int best_clock = fixed_mode->clock;
>  
>         list_for_each_entry(scan, &connector->probed_modes, head) {
>                 /*
> @@ -74,29 +81,21 @@ intel_find_panel_downclock(struct drm_i915_private *dev_priv,
>                  * case we can set the different FPx0/1 to dynamically select
>                  * between low and high frequency.
>                  */
> -               if (scan->hdisplay == fixed_mode->hdisplay &&
> -                   scan->hsync_start == fixed_mode->hsync_start &&
> -                   scan->hsync_end == fixed_mode->hsync_end &&
> -                   scan->htotal == fixed_mode->htotal &&
> -                   scan->vdisplay == fixed_mode->vdisplay &&
> -                   scan->vsync_start == fixed_mode->vsync_start &&
> -                   scan->vsync_end == fixed_mode->vsync_end &&
> -                   scan->vtotal == fixed_mode->vtotal) {
> -                       if (scan->clock < temp_downclock) {
> -                               /*
> -                                * The downclock is already found. But we
> -                                * expect to find the lower downclock.
> -                                */
> -                               temp_downclock = scan->clock;
> -                               tmp_mode = scan;
> -                       }
> +               if (is_downclock_mode(scan, fixed_mode) &&
> +                   scan->clock < best_clock) {
> +                       /*
> +                        * The downclock is already found. But we
> +                        * expect to find the lower downclock.
> +                        */
> +                       best_clock = scan->clock;
> +                       best_mode = scan;
>                 }
>         }
>  
> -       if (temp_downclock < fixed_mode->clock)
> -               return drm_mode_duplicate(&dev_priv->drm, tmp_mode);
> -       else
> -               return NULL;
> +       if (best_mode)
> +               return drm_mode_duplicate(&dev_priv->drm, best_mode);
> +
> +       return NULL;
>  }

Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris


More information about the Intel-gfx mailing list