From: Jani Nikula <jani.nikula@linux.intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH v3 16/16] drm/i915: Convert fixed_mode/downclock_mode into a list
Date: Mon, 14 Mar 2022 12:45:38 +0200 [thread overview]
Message-ID: <87fsnkvmlp.fsf@intel.com> (raw)
In-Reply-To: <20220311202215.20991-1-ville.syrjala@linux.intel.com>
On Fri, 11 Mar 2022, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Store the fixed_mode and downclock_mode as a real list,
> in preparation for exposing other supported modes as well.
>
> v2: Init the list in intel_sdvo_connector_alloc() too
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Even for the two mode case this makes stuff cleaner!
One nitpick below, regardless,
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> .../gpu/drm/i915/display/intel_connector.c | 2 +
> .../drm/i915/display/intel_display_debugfs.c | 9 +-
> .../drm/i915/display/intel_display_types.h | 3 +-
> drivers/gpu/drm/i915/display/intel_panel.c | 82 ++++++++++---------
> drivers/gpu/drm/i915/display/intel_sdvo.c | 2 +
> 5 files changed, 53 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
> index c65f95a9a1ec..a5f5dd55b0cb 100644
> --- a/drivers/gpu/drm/i915/display/intel_connector.c
> +++ b/drivers/gpu/drm/i915/display/intel_connector.c
> @@ -54,6 +54,8 @@ int intel_connector_init(struct intel_connector *connector)
> __drm_atomic_helper_connector_reset(&connector->base,
> &conn_state->base);
>
> + INIT_LIST_HEAD(&connector->panel.fixed_modes);
> +
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index 35c27d67d584..b3d426cc3266 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -548,12 +548,15 @@ static void intel_encoder_info(struct seq_file *m,
> static void intel_panel_info(struct seq_file *m,
> struct intel_connector *connector)
> {
> - const struct drm_display_mode *fixed_mode = connector->panel.fixed_mode;
> + const struct drm_display_mode *fixed_mode;
>
> - if (!fixed_mode)
> + if (list_empty(&connector->panel.fixed_modes))
> return;
>
> - seq_printf(m, "\tfixed mode: " DRM_MODE_FMT "\n", DRM_MODE_ARG(fixed_mode));
> + seq_puts(m, "\tfixed modes:\n");
> +
> + list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head)
> + intel_seq_print_mode(m, 2, fixed_mode);
> }
>
> static void intel_hdcp_info(struct seq_file *m,
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index e34800ab6924..d84e82f3eab9 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -280,8 +280,7 @@ struct intel_panel_bl_funcs {
> };
>
> struct intel_panel {
> - struct drm_display_mode *fixed_mode;
> - struct drm_display_mode *downclock_mode;
> + struct list_head fixed_modes;
>
> /* backlight */
> struct {
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
> index 08a0612edd60..2d5c09b1ab72 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.c
> +++ b/drivers/gpu/drm/i915/display/intel_panel.c
> @@ -48,59 +48,59 @@ bool intel_panel_use_ssc(struct drm_i915_private *i915)
> const struct drm_display_mode *
> intel_panel_preferred_fixed_mode(struct intel_connector *connector)
> {
> - return connector->panel.fixed_mode;
> + const struct drm_display_mode *fixed_mode;
> +
> + list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head)
> + return fixed_mode;
> +
> + return NULL;
Nitpick, a bit verbose but self-documenting alternative:
return list_first_entry_or_null(&connector->panel.fixed_modes, struct drm_display_mode, head);
> }
>
> const struct drm_display_mode *
> intel_panel_fixed_mode(struct intel_connector *connector,
> const struct drm_display_mode *mode)
> {
> - const struct drm_display_mode *fixed_mode = connector->panel.fixed_mode;
> - const struct drm_display_mode *downclock_mode = connector->panel.downclock_mode;
> + const struct drm_display_mode *fixed_mode, *best_mode = NULL;
> + int vrefresh = drm_mode_vrefresh(mode);
>
> - /* pick the one that is closer in terms of vrefresh */
> - /* FIXME make this a a list of modes so we can have more than two */
> - if (fixed_mode && downclock_mode &&
> - abs(drm_mode_vrefresh(downclock_mode) - drm_mode_vrefresh(mode)) <
> - abs(drm_mode_vrefresh(fixed_mode) - drm_mode_vrefresh(mode)))
> - return downclock_mode;
> - else
> - return fixed_mode;
> + /* pick the fixed_mode that is closest in terms of vrefresh */
> + list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) {
> + if (!best_mode ||
> + abs(drm_mode_vrefresh(fixed_mode) - vrefresh) <
> + abs(drm_mode_vrefresh(best_mode) - vrefresh))
> + best_mode = fixed_mode;
> + }
> +
> + return best_mode;
> }
>
> const struct drm_display_mode *
> intel_panel_downclock_mode(struct intel_connector *connector,
> const struct drm_display_mode *adjusted_mode)
> {
> - const struct drm_display_mode *downclock_mode = connector->panel.downclock_mode;
> + const struct drm_display_mode *fixed_mode, *best_mode = NULL;
> + int vrefresh = drm_mode_vrefresh(adjusted_mode);
>
> - if (downclock_mode &&
> - drm_mode_vrefresh(downclock_mode) < drm_mode_vrefresh(adjusted_mode))
> - return downclock_mode;
> - else
> - return NULL;
> + /* pick the fixed_mode with the lowest refresh rate */
> + list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) {
> + if (drm_mode_vrefresh(fixed_mode) < vrefresh) {
> + vrefresh = drm_mode_vrefresh(fixed_mode);
> + best_mode = fixed_mode;
> + }
> + }
> +
> + return best_mode;
> }
>
> int intel_panel_get_modes(struct intel_connector *connector)
> {
> + const struct drm_display_mode *fixed_mode;
> int num_modes = 0;
>
> - if (connector->panel.fixed_mode) {
> + list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) {
> struct drm_display_mode *mode;
>
> - mode = drm_mode_duplicate(connector->base.dev,
> - connector->panel.fixed_mode);
> - if (mode) {
> - drm_mode_probed_add(&connector->base, mode);
> - num_modes++;
> - }
> - }
> -
> - if (connector->panel.downclock_mode) {
> - struct drm_display_mode *mode;
> -
> - mode = drm_mode_duplicate(connector->base.dev,
> - connector->panel.downclock_mode);
> + mode = drm_mode_duplicate(connector->base.dev, fixed_mode);
> if (mode) {
> drm_mode_probed_add(&connector->base, mode);
> num_modes++;
> @@ -114,7 +114,8 @@ enum drrs_type intel_panel_drrs_type(struct intel_connector *connector)
> {
> struct drm_i915_private *i915 = to_i915(connector->base.dev);
>
> - if (!connector->panel.downclock_mode)
> + if (list_empty(&connector->panel.fixed_modes) ||
> + list_is_singular(&connector->panel.fixed_modes))
> return DRRS_TYPE_NONE;
>
> return i915->vbt.drrs_type;
> @@ -608,8 +609,10 @@ int intel_panel_init(struct intel_panel *panel,
> {
> intel_backlight_init_funcs(panel);
>
> - panel->fixed_mode = fixed_mode;
> - panel->downclock_mode = downclock_mode;
> + if (fixed_mode)
> + list_add_tail(&fixed_mode->head, &panel->fixed_modes);
> + if (downclock_mode)
> + list_add_tail(&downclock_mode->head, &panel->fixed_modes);
>
> return 0;
> }
> @@ -618,13 +621,12 @@ void intel_panel_fini(struct intel_panel *panel)
> {
> struct intel_connector *intel_connector =
> container_of(panel, struct intel_connector, panel);
> + struct drm_display_mode *fixed_mode, *next;
>
> intel_backlight_destroy(panel);
>
> - if (panel->fixed_mode)
> - drm_mode_destroy(intel_connector->base.dev, panel->fixed_mode);
> -
> - if (panel->downclock_mode)
> - drm_mode_destroy(intel_connector->base.dev,
> - panel->downclock_mode);
> + list_for_each_entry_safe(fixed_mode, next, &panel->fixed_modes, head) {
> + list_del(&fixed_mode->head);
> + drm_mode_destroy(intel_connector->base.dev, fixed_mode);
> + }
> }
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 6e0a4f48d84d..158e750e5b4d 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2747,6 +2747,8 @@ static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)
> __drm_atomic_helper_connector_reset(&sdvo_connector->base.base,
> &conn_state->base.base);
>
> + INIT_LIST_HEAD(&sdvo_connector->base.panel.fixed_modes);
> +
> return sdvo_connector;
> }
--
Jani Nikula, Intel Open Source Graphics Center
next prev parent reply other threads:[~2022-03-14 10:45 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-11 17:24 [Intel-gfx] [PATCH v2 00/16] drm/i915: DRRS fixes/cleanups and start of static DRRS Ville Syrjala
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 01/16] drm/i915/dsi: Pass fixed_mode to *_dsi_add_properties() Ville Syrjala
2022-03-14 9:41 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 02/16] drm/i915/sdvo: Passt the requesed mode to intel_sdvo_create_preferred_input_timing() Ville Syrjala
2022-03-14 9:44 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 03/16] drm/i915/lvds: Pass fixed_mode to compute_is_dual_link_lvds() Ville Syrjala
2022-03-14 9:44 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 04/16] drm/i915: Simplify intel_panel_info() Ville Syrjala
2022-03-14 9:47 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 05/16] drm/i915: Nuke dev_priv->drrs.type Ville Syrjala
2022-03-14 9:47 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 06/16] drm/i915: Introduce intel_panel_{fixed, downclock}_mode() Ville Syrjala
2022-03-14 10:09 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 07/16] drm/i915: Introduce intel_panel_get_modes() Ville Syrjala
2022-03-14 9:57 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 08/16] drm/i915: Introduce intel_panel_preferred_fixed_mode() Ville Syrjala
2022-03-14 10:11 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 09/16] drm/i915: Introduce intel_panel_drrs_type() Ville Syrjala
2022-03-14 10:00 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 10/16] drm/i915: Introduce intel_drrs_type_str() Ville Syrjala
2022-03-14 10:00 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 11/16] drm/i915: Eliminate the intel_dp dependency from DRRS Ville Syrjala
2022-03-14 10:14 ` Jani Nikula
2022-03-14 10:16 ` Jani Nikula
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 12/16] drm/i915: Stash DRRS state under intel_crtc Ville Syrjala
2022-03-14 10:31 ` Jani Nikula
2022-03-14 15:11 ` Ville Syrjälä
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 13/16] drm/i915: Move DRRS enable/disable higher up Ville Syrjala
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 14/16] drm/i915: Enable eDP DRRS on ilk/snb port A Ville Syrjala
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 15/16] drm/i915: Implement static DRRS Ville Syrjala
2022-03-11 17:24 ` [Intel-gfx] [PATCH v2 16/16] drm/i915: Convert fixed_mode/downclock_mode into a list Ville Syrjala
2022-03-11 20:22 ` [Intel-gfx] [PATCH v3 " Ville Syrjala
2022-03-14 10:45 ` Jani Nikula [this message]
2022-03-14 15:27 ` [Intel-gfx] [PATCH v4 " Ville Syrjala
2022-03-11 19:10 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: DRRS fixes/cleanups and start of static DRRS (rev2) Patchwork
2022-03-11 19:12 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-03-11 19:43 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-03-11 21:55 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: DRRS fixes/cleanups and start of static DRRS (rev3) Patchwork
2022-03-11 21:57 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-03-11 22:27 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-03-12 0:51 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2022-03-14 16:27 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: DRRS fixes/cleanups and start of static DRRS (rev4) Patchwork
2022-03-14 16:29 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-03-14 17:02 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-03-14 19:18 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fsnkvmlp.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.