diff mbox series

[v2,08/11] drm/i915: Allow higher refresh rate alternate fixed modes

Message ID 20220331112822.11462-9-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: Finish off static DRRS | expand

Commit Message

Ville Syrjala March 31, 2022, 11:28 a.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

We shouldn't restrict ourselves to just downclock modes with
lower refresh rate than the preferred mode. Laptops these
days can offer higher refresh rate modes as well.

Remove the arbitrary limit and allow all modes that, apart
from the clock, match the preferred mode.

Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/125
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_panel.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

Comments

Jani Nikula March 31, 2022, 1:43 p.m. UTC | #1
On Thu, 31 Mar 2022, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> We shouldn't restrict ourselves to just downclock modes with
> lower refresh rate than the preferred mode. Laptops these
> days can offer higher refresh rate modes as well.
>
> Remove the arbitrary limit and allow all modes that, apart
> from the clock, match the preferred mode.
>
> Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/125
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_panel.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
> index d359c8050fdc..f3e52e7413fe 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.c
> +++ b/drivers/gpu/drm/i915/display/intel_panel.c
> @@ -149,29 +149,29 @@ int intel_panel_compute_config(struct intel_connector *connector,
>  	return 0;
>  }
>  
> -static bool is_downclock_mode(const struct drm_display_mode *downclock_mode,
> -			      const struct drm_display_mode *fixed_mode)
> +static bool is_alt_fixed_mode(const struct drm_display_mode *mode,
> +			      const struct drm_display_mode *preferred_mode)
>  {
> -	return drm_mode_match(downclock_mode, fixed_mode,
> +	return drm_mode_match(mode, preferred_mode,
>  			      DRM_MODE_MATCH_TIMINGS |
>  			      DRM_MODE_MATCH_FLAGS |
>  			      DRM_MODE_MATCH_3D_FLAGS) &&
> -		downclock_mode->clock < fixed_mode->clock;
> +		mode->clock != preferred_mode->clock;
>  }
>  
>  static void intel_panel_add_edid_downclock_modes(struct intel_connector *connector)

Nitpick, I guess this is now ill-named.

>  {
>  	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
> -	const struct drm_display_mode *fixed_mode =
> +	const struct drm_display_mode *preferred_mode =
>  		intel_panel_preferred_fixed_mode(connector);
>  	struct drm_display_mode *mode, *next;
>  
>  	list_for_each_entry_safe(mode, next, &connector->base.probed_modes, head) {
> -		if (!is_downclock_mode(mode, fixed_mode))
> +		if (!is_alt_fixed_mode(mode, preferred_mode))
>  			continue;
>  
>  		drm_dbg_kms(&dev_priv->drm,
> -			    "[CONNECTOR:%d:%s] using EDID downclock mode: " DRM_MODE_FMT "\n",
> +			    "[CONNECTOR:%d:%s] using alternate EDID fixed mode: " DRM_MODE_FMT "\n",
>  			    connector->base.base.id, connector->base.name,
>  			    DRM_MODE_ARG(mode));
>  
> @@ -179,7 +179,7 @@ static void intel_panel_add_edid_downclock_modes(struct intel_connector *connect
>  	}
>  }
>  
> -static void intel_panel_add_edid_fixed_mode(struct intel_connector *connector)
> +static void intel_panel_add_edid_preferred_mode(struct intel_connector *connector)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
>  	struct drm_display_mode *scan, *fixed_mode = NULL;
> @@ -223,7 +223,7 @@ static void intel_panel_destroy_probed_modes(struct intel_connector *connector)
>  
>  void intel_panel_add_edid_fixed_modes(struct intel_connector *connector, bool has_drrs)
>  {
> -	intel_panel_add_edid_fixed_mode(connector);
> +	intel_panel_add_edid_preferred_mode(connector);
>  	if (intel_panel_preferred_fixed_mode(connector) && has_drrs)
>  		intel_panel_add_edid_downclock_modes(connector);

Nitpick, support for multiple fixed modes still depends on drrs
support. I mean this patch is clearly forward progress, but I'm not sure
if this fully closes the referenced issue. In practical terms it might,
considering the machines with high refresh rate panels are probably
fairly new.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>


>  	intel_panel_destroy_probed_modes(connector);
Ville Syrjala March 31, 2022, 4:55 p.m. UTC | #2
On Thu, Mar 31, 2022 at 04:43:46PM +0300, Jani Nikula wrote:
> On Thu, 31 Mar 2022, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > We shouldn't restrict ourselves to just downclock modes with
> > lower refresh rate than the preferred mode. Laptops these
> > days can offer higher refresh rate modes as well.
> >
> > Remove the arbitrary limit and allow all modes that, apart
> > from the clock, match the preferred mode.
> >
> > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/125
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_panel.c | 18 +++++++++---------
> >  1 file changed, 9 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
> > index d359c8050fdc..f3e52e7413fe 100644
> > --- a/drivers/gpu/drm/i915/display/intel_panel.c
> > +++ b/drivers/gpu/drm/i915/display/intel_panel.c
> > @@ -149,29 +149,29 @@ int intel_panel_compute_config(struct intel_connector *connector,
> >  	return 0;
> >  }
> >  
> > -static bool is_downclock_mode(const struct drm_display_mode *downclock_mode,
> > -			      const struct drm_display_mode *fixed_mode)
> > +static bool is_alt_fixed_mode(const struct drm_display_mode *mode,
> > +			      const struct drm_display_mode *preferred_mode)
> >  {
> > -	return drm_mode_match(downclock_mode, fixed_mode,
> > +	return drm_mode_match(mode, preferred_mode,
> >  			      DRM_MODE_MATCH_TIMINGS |
> >  			      DRM_MODE_MATCH_FLAGS |
> >  			      DRM_MODE_MATCH_3D_FLAGS) &&
> > -		downclock_mode->clock < fixed_mode->clock;
> > +		mode->clock != preferred_mode->clock;
> >  }
> >  
> >  static void intel_panel_add_edid_downclock_modes(struct intel_connector *connector)
> 
> Nitpick, I guess this is now ill-named.

Doh. Lost the rename when reordering the patches.

> 
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
> > -	const struct drm_display_mode *fixed_mode =
> > +	const struct drm_display_mode *preferred_mode =
> >  		intel_panel_preferred_fixed_mode(connector);
> >  	struct drm_display_mode *mode, *next;
> >  
> >  	list_for_each_entry_safe(mode, next, &connector->base.probed_modes, head) {
> > -		if (!is_downclock_mode(mode, fixed_mode))
> > +		if (!is_alt_fixed_mode(mode, preferred_mode))
> >  			continue;
> >  
> >  		drm_dbg_kms(&dev_priv->drm,
> > -			    "[CONNECTOR:%d:%s] using EDID downclock mode: " DRM_MODE_FMT "\n",
> > +			    "[CONNECTOR:%d:%s] using alternate EDID fixed mode: " DRM_MODE_FMT "\n",
> >  			    connector->base.base.id, connector->base.name,
> >  			    DRM_MODE_ARG(mode));
> >  
> > @@ -179,7 +179,7 @@ static void intel_panel_add_edid_downclock_modes(struct intel_connector *connect
> >  	}
> >  }
> >  
> > -static void intel_panel_add_edid_fixed_mode(struct intel_connector *connector)
> > +static void intel_panel_add_edid_preferred_mode(struct intel_connector *connector)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
> >  	struct drm_display_mode *scan, *fixed_mode = NULL;
> > @@ -223,7 +223,7 @@ static void intel_panel_destroy_probed_modes(struct intel_connector *connector)
> >  
> >  void intel_panel_add_edid_fixed_modes(struct intel_connector *connector, bool has_drrs)
> >  {
> > -	intel_panel_add_edid_fixed_mode(connector);
> > +	intel_panel_add_edid_preferred_mode(connector);
> >  	if (intel_panel_preferred_fixed_mode(connector) && has_drrs)
> >  		intel_panel_add_edid_downclock_modes(connector);
> 
> Nitpick, support for multiple fixed modes still depends on drrs
> support. I mean this patch is clearly forward progress, but I'm not sure
> if this fully closes the referenced issue. In practical terms it might,
> considering the machines with high refresh rate panels are probably
> fairly new.
> 
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> 
> 
> >  	intel_panel_destroy_probed_modes(connector);
> 
> -- 
> Jani Nikula, Intel Open Source Graphics Center
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
index d359c8050fdc..f3e52e7413fe 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.c
+++ b/drivers/gpu/drm/i915/display/intel_panel.c
@@ -149,29 +149,29 @@  int intel_panel_compute_config(struct intel_connector *connector,
 	return 0;
 }
 
-static bool is_downclock_mode(const struct drm_display_mode *downclock_mode,
-			      const struct drm_display_mode *fixed_mode)
+static bool is_alt_fixed_mode(const struct drm_display_mode *mode,
+			      const struct drm_display_mode *preferred_mode)
 {
-	return drm_mode_match(downclock_mode, fixed_mode,
+	return drm_mode_match(mode, preferred_mode,
 			      DRM_MODE_MATCH_TIMINGS |
 			      DRM_MODE_MATCH_FLAGS |
 			      DRM_MODE_MATCH_3D_FLAGS) &&
-		downclock_mode->clock < fixed_mode->clock;
+		mode->clock != preferred_mode->clock;
 }
 
 static void intel_panel_add_edid_downclock_modes(struct intel_connector *connector)
 {
 	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
-	const struct drm_display_mode *fixed_mode =
+	const struct drm_display_mode *preferred_mode =
 		intel_panel_preferred_fixed_mode(connector);
 	struct drm_display_mode *mode, *next;
 
 	list_for_each_entry_safe(mode, next, &connector->base.probed_modes, head) {
-		if (!is_downclock_mode(mode, fixed_mode))
+		if (!is_alt_fixed_mode(mode, preferred_mode))
 			continue;
 
 		drm_dbg_kms(&dev_priv->drm,
-			    "[CONNECTOR:%d:%s] using EDID downclock mode: " DRM_MODE_FMT "\n",
+			    "[CONNECTOR:%d:%s] using alternate EDID fixed mode: " DRM_MODE_FMT "\n",
 			    connector->base.base.id, connector->base.name,
 			    DRM_MODE_ARG(mode));
 
@@ -179,7 +179,7 @@  static void intel_panel_add_edid_downclock_modes(struct intel_connector *connect
 	}
 }
 
-static void intel_panel_add_edid_fixed_mode(struct intel_connector *connector)
+static void intel_panel_add_edid_preferred_mode(struct intel_connector *connector)
 {
 	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
 	struct drm_display_mode *scan, *fixed_mode = NULL;
@@ -223,7 +223,7 @@  static void intel_panel_destroy_probed_modes(struct intel_connector *connector)
 
 void intel_panel_add_edid_fixed_modes(struct intel_connector *connector, bool has_drrs)
 {
-	intel_panel_add_edid_fixed_mode(connector);
+	intel_panel_add_edid_preferred_mode(connector);
 	if (intel_panel_preferred_fixed_mode(connector) && has_drrs)
 		intel_panel_add_edid_downclock_modes(connector);
 	intel_panel_destroy_probed_modes(connector);