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 12/13] drm/i915: Introduce intel_panel_{fixed, downclock}_mode()
Date: Thu, 10 Mar 2022 12:09:08 +0200 [thread overview]
Message-ID: <878rtixgor.fsf@intel.com> (raw)
In-Reply-To: <20220310004802.16310-13-ville.syrjala@linux.intel.com>
On Thu, 10 Mar 2022, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Absract away the details on where we store the fixed/downclock modes,
> and also how we select them. Will be useful for static DRRS (aka.
> allowing the user to select the refresh rate for the panel).
>
> Only hooked these up into the DP code for now since that's
> the only one that can do DRRS atm.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Could justify passing the mode parameter to the functions in the commit
message, as they're not needed here.
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp.c | 7 +++++--
> drivers/gpu/drm/i915/display/intel_drrs.c | 11 +++++++----
> drivers/gpu/drm/i915/display/intel_panel.c | 20 ++++++++++++++++++--
> drivers/gpu/drm/i915/display/intel_panel.h | 8 ++++++--
> 4 files changed, 36 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 725c3350c923..af659320c02e 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -918,8 +918,8 @@ intel_dp_mode_valid(struct drm_connector *connector,
> {
> struct intel_dp *intel_dp = intel_attached_dp(to_intel_connector(connector));
> struct intel_connector *intel_connector = to_intel_connector(connector);
> - struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
> struct drm_i915_private *dev_priv = to_i915(connector->dev);
> + const struct drm_display_mode *fixed_mode;
> int target_clock = mode->clock;
> int max_rate, mode_rate, max_lanes, max_link_clock;
> int max_dotclk = dev_priv->max_dotclk_freq;
> @@ -934,6 +934,7 @@ intel_dp_mode_valid(struct drm_connector *connector,
> if (mode->flags & DRM_MODE_FLAG_DBLCLK)
> return MODE_H_ILLEGAL;
>
> + fixed_mode = intel_panel_fixed_mode(intel_connector, mode);
> if (intel_dp_is_edp(intel_dp) && fixed_mode) {
> status = intel_panel_mode_valid(intel_connector, mode);
> if (status != MODE_OK)
> @@ -1797,6 +1798,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
> struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode;
> struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
> + const struct drm_display_mode *fixed_mode;
> enum port port = encoder->port;
> struct intel_connector *intel_connector = intel_dp->attached_connector;
> struct intel_digital_connector_state *intel_conn_state =
> @@ -1823,7 +1825,8 @@ intel_dp_compute_config(struct intel_encoder *encoder,
> else
> pipe_config->has_audio = intel_conn_state->force_audio == HDMI_AUDIO_ON;
>
> - if (intel_dp_is_edp(intel_dp) && intel_connector->panel.fixed_mode) {
> + fixed_mode = intel_panel_fixed_mode(intel_connector, adjusted_mode);
> + if (intel_dp_is_edp(intel_dp) && fixed_mode) {
> ret = intel_panel_compute_config(intel_connector, adjusted_mode);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/i915/display/intel_drrs.c b/drivers/gpu/drm/i915/display/intel_drrs.c
> index dcbbd9c48458..5b2eb55c1340 100644
> --- a/drivers/gpu/drm/i915/display/intel_drrs.c
> +++ b/drivers/gpu/drm/i915/display/intel_drrs.c
> @@ -48,7 +48,8 @@
> */
>
> static bool can_enable_drrs(struct intel_connector *connector,
> - const struct intel_crtc_state *pipe_config)
> + const struct intel_crtc_state *pipe_config,
> + const struct drm_display_mode *downclock_mode)
> {
> const struct drm_i915_private *i915 = to_i915(connector->base.dev);
>
> @@ -64,7 +65,7 @@ static bool can_enable_drrs(struct intel_connector *connector,
> if (pipe_config->has_psr)
> return false;
>
> - return connector->panel.downclock_mode &&
> + return downclock_mode &&
> i915->vbt.drrs_type == DRRS_TYPE_SEAMLESS;
> }
>
> @@ -74,9 +75,11 @@ intel_drrs_compute_config(struct intel_crtc_state *pipe_config,
> int output_bpp, bool constant_n)
> {
> struct drm_i915_private *i915 = to_i915(connector->base.dev);
> + const struct drm_display_mode *downclock_mode =
> + intel_panel_downclock_mode(connector, &pipe_config->hw.adjusted_mode);
> int pixel_clock;
>
> - if (!can_enable_drrs(connector, pipe_config)) {
> + if (!can_enable_drrs(connector, pipe_config, downclock_mode)) {
> if (intel_cpu_transcoder_has_m2_n2(i915, pipe_config->cpu_transcoder))
> intel_zero_m_n(&pipe_config->dp_m2_n2);
> return;
> @@ -87,7 +90,7 @@ intel_drrs_compute_config(struct intel_crtc_state *pipe_config,
>
> pipe_config->has_drrs = true;
>
> - pixel_clock = connector->panel.downclock_mode->clock;
> + pixel_clock = downclock_mode->clock;
> if (pipe_config->splitter.enable)
> pixel_clock /= pipe_config->splitter.link_count;
>
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
> index 6cd6d4fdd5ad..127ad9643360 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.c
> +++ b/drivers/gpu/drm/i915/display/intel_panel.c
> @@ -45,10 +45,25 @@ bool intel_panel_use_ssc(struct drm_i915_private *i915)
> && !(i915->quirks & QUIRK_LVDS_SSC_DISABLE);
> }
>
> +const struct drm_display_mode *
> +intel_panel_fixed_mode(struct intel_connector *connector,
> + const struct drm_display_mode *mode)
> +{
> + return connector->panel.fixed_mode;
> +}
> +
> +const struct drm_display_mode *
> +intel_panel_downclock_mode(struct intel_connector *connector,
> + const struct drm_display_mode *fixed_mode)
> +{
> + return connector->panel.downclock_mode;
> +}
> +
> int intel_panel_compute_config(struct intel_connector *connector,
> struct drm_display_mode *adjusted_mode)
> {
> - const struct drm_display_mode *fixed_mode = connector->panel.fixed_mode;
> + const struct drm_display_mode *fixed_mode =
> + intel_panel_fixed_mode(connector, adjusted_mode);
>
> if (!fixed_mode)
> return 0;
> @@ -508,7 +523,8 @@ enum drm_mode_status
> intel_panel_mode_valid(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 *fixed_mode =
> + intel_panel_fixed_mode(connector, mode);
>
> if (!fixed_mode)
> return MODE_OK;
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.h b/drivers/gpu/drm/i915/display/intel_panel.h
> index d50b3f7e9e58..6d4df0e54ef2 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.h
> +++ b/drivers/gpu/drm/i915/display/intel_panel.h
> @@ -24,8 +24,12 @@ void intel_panel_fini(struct intel_panel *panel);
> enum drm_connector_status
> intel_panel_detect(struct drm_connector *connector, bool force);
> bool intel_panel_use_ssc(struct drm_i915_private *i915);
> -void intel_panel_fixed_mode(const struct drm_display_mode *fixed_mode,
> - struct drm_display_mode *adjusted_mode);
> +const struct drm_display_mode *
> +intel_panel_fixed_mode(struct intel_connector *connector,
> + const struct drm_display_mode *mode);
> +const struct drm_display_mode *
> +intel_panel_downclock_mode(struct intel_connector *connector,
> + const struct drm_display_mode *fixed_mode);
> enum drm_mode_status
> intel_panel_mode_valid(struct intel_connector *connector,
> const struct drm_display_mode *mode);
--
Jani Nikula, Intel Open Source Graphics Center
next prev parent reply other threads:[~2022-03-10 10:09 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-10 0:47 [Intel-gfx] [PATCH 00/13] drm/i915: DRRS fixes/cleanups and start of static DRRS Ville Syrjala
2022-03-10 0:47 ` [Intel-gfx] [PATCH 01/13] drm/i915: Fix up some DRRS type checks Ville Syrjala
2022-03-10 9:25 ` Jani Nikula
2022-03-10 0:47 ` [Intel-gfx] [PATCH 02/13] drm/i915: Constify intel_drrs_init() args Ville Syrjala
2022-03-10 9:25 ` Jani Nikula
2022-03-10 0:47 ` [Intel-gfx] [PATCH 03/13] drm/i915: Pimp DRRS debugs Ville Syrjala
2022-03-10 9:27 ` Jani Nikula
2022-03-10 0:47 ` [Intel-gfx] [PATCH 04/13] drm/i915: Read DRRS MSA timing delay from VBT Ville Syrjala
2022-03-10 9:32 ` Jani Nikula
2022-03-10 0:47 ` [Intel-gfx] [PATCH 05/13] drm/i915: Program MSA timing delay on ilk/snb/ivb Ville Syrjala
2022-03-10 9:37 ` Jani Nikula
2022-03-10 0:47 ` [Intel-gfx] [PATCH 06/13] drm/i915: Polish drrs type enum Ville Syrjala
2022-03-10 9:38 ` Jani Nikula
2022-03-10 0:47 ` [Intel-gfx] [PATCH 07/13] drm/i915: Clean up DRRS refresh rate enum Ville Syrjala
2022-03-10 9:43 ` Jani Nikula
2022-03-10 0:47 ` [Intel-gfx] [PATCH 08/13] drm/i915: Rename PIPECONF refresh select bits Ville Syrjala
2022-03-10 9:44 ` Jani Nikula
2022-03-10 0:47 ` [Intel-gfx] [PATCH 09/13] drm/i915: Stash DRRS state under intel_crtc Ville Syrjala
2022-03-10 10:53 ` Jani Nikula
2022-03-10 11:12 ` Ville Syrjälä
2022-03-10 17:45 ` Souza, Jose
2022-03-10 18:29 ` Ville Syrjälä
2022-03-10 0:47 ` [Intel-gfx] [PATCH 10/13] drm/i915: Move DRRS enable/disable higher up Ville Syrjala
2022-03-10 9:54 ` Jani Nikula
2022-03-10 0:48 ` [Intel-gfx] [PATCH 11/13] drm/i915: Enable eDP DRRS on ilk/snb port A Ville Syrjala
2022-03-10 9:59 ` Jani Nikula
2022-03-10 0:48 ` [Intel-gfx] [PATCH 12/13] drm/i915: Introduce intel_panel_{fixed, downclock}_mode() Ville Syrjala
2022-03-10 10:09 ` Jani Nikula [this message]
2022-03-10 0:48 ` [Intel-gfx] [PATCH 13/13] drm/i915: Implement static DRRS Ville Syrjala
2022-03-10 10:30 ` Jani Nikula
2022-03-10 11:01 ` Ville Syrjälä
2022-03-10 11:26 ` Jani Nikula
2022-03-10 1:28 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: DRRS fixes/cleanups and start of " Patchwork
2022-03-10 1:29 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-03-10 2:06 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-03-10 9:14 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " 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=878rtixgor.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.