All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH v2 3/7] drm/i915/wm: move functions to call watermark hooks to intel_wm.[ch]
Date: Mon, 13 Feb 2023 22:42:54 +0200	[thread overview]
Message-ID: <Y+qgzkGS2odECXDj@intel.com> (raw)
In-Reply-To: <2c8243c5c81b8cd8e34d51f55f3533373c305d0e.1676317696.git.jani.nikula@intel.com>

On Mon, Feb 13, 2023 at 09:59:58PM +0200, Jani Nikula wrote:
> Move the wrappers to call watermark hooks into intel_wm.[ch]. This
> declutters intel_display.c nicely.
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_display.c |  95 -----------------
>  drivers/gpu/drm/i915/display/intel_wm.c      | 105 +++++++++++++++++++
>  drivers/gpu/drm/i915/display/intel_wm.h      |  14 +++
>  3 files changed, 119 insertions(+), 95 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index f3bf6697896c..82efd96ace87 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -133,101 +133,6 @@ static void hsw_set_transconf(const struct intel_crtc_state *crtc_state);
>  static void bdw_set_pipemisc(const struct intel_crtc_state *crtc_state);
>  static void ilk_pfit_enable(const struct intel_crtc_state *crtc_state);
>  
> -/**
> - * intel_update_watermarks - update FIFO watermark values based on current modes
> - * @dev_priv: i915 device
> - *
> - * Calculate watermark values for the various WM regs based on current mode
> - * and plane configuration.
> - *
> - * There are several cases to deal with here:
> - *   - normal (i.e. non-self-refresh)
> - *   - self-refresh (SR) mode
> - *   - lines are large relative to FIFO size (buffer can hold up to 2)
> - *   - lines are small relative to FIFO size (buffer can hold more than 2
> - *     lines), so need to account for TLB latency
> - *
> - *   The normal calculation is:
> - *     watermark = dotclock * bytes per pixel * latency
> - *   where latency is platform & configuration dependent (we assume pessimal
> - *   values here).
> - *
> - *   The SR calculation is:
> - *     watermark = (trunc(latency/line time)+1) * surface width *
> - *       bytes per pixel
> - *   where
> - *     line time = htotal / dotclock
> - *     surface width = hdisplay for normal plane and 64 for cursor
> - *   and latency is assumed to be high, as above.
> - *
> - * The final value programmed to the register should always be rounded up,
> - * and include an extra 2 entries to account for clock crossings.
> - *
> - * We don't use the sprite, so we can ignore that.  And on Crestline we have
> - * to set the non-SR watermarks to 8.
> - */
> -void intel_update_watermarks(struct drm_i915_private *dev_priv)
> -{
> -	if (dev_priv->display.funcs.wm->update_wm)
> -		dev_priv->display.funcs.wm->update_wm(dev_priv);
> -}
> -
> -static int intel_compute_pipe_wm(struct intel_atomic_state *state,
> -				 struct intel_crtc *crtc)
> -{
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> -	if (dev_priv->display.funcs.wm->compute_pipe_wm)
> -		return dev_priv->display.funcs.wm->compute_pipe_wm(state, crtc);
> -	return 0;
> -}
> -
> -static int intel_compute_intermediate_wm(struct intel_atomic_state *state,
> -					 struct intel_crtc *crtc)
> -{
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> -	if (!dev_priv->display.funcs.wm->compute_intermediate_wm)
> -		return 0;
> -	if (drm_WARN_ON(&dev_priv->drm,
> -			!dev_priv->display.funcs.wm->compute_pipe_wm))
> -		return 0;
> -	return dev_priv->display.funcs.wm->compute_intermediate_wm(state, crtc);
> -}
> -
> -static bool intel_initial_watermarks(struct intel_atomic_state *state,
> -				     struct intel_crtc *crtc)
> -{
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> -	if (dev_priv->display.funcs.wm->initial_watermarks) {
> -		dev_priv->display.funcs.wm->initial_watermarks(state, crtc);
> -		return true;
> -	}
> -	return false;
> -}
> -
> -static void intel_atomic_update_watermarks(struct intel_atomic_state *state,
> -					   struct intel_crtc *crtc)
> -{
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> -	if (dev_priv->display.funcs.wm->atomic_update_watermarks)
> -		dev_priv->display.funcs.wm->atomic_update_watermarks(state, crtc);
> -}
> -
> -static void intel_optimize_watermarks(struct intel_atomic_state *state,
> -				      struct intel_crtc *crtc)
> -{
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> -	if (dev_priv->display.funcs.wm->optimize_watermarks)
> -		dev_priv->display.funcs.wm->optimize_watermarks(state, crtc);
> -}
> -
> -static int intel_compute_global_watermarks(struct intel_atomic_state *state)
> -{
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> -	if (dev_priv->display.funcs.wm->compute_global_watermarks)
> -		return dev_priv->display.funcs.wm->compute_global_watermarks(state);
> -	return 0;
> -}
> -
>  /* returns HPLL frequency in kHz */
>  int vlv_get_hpll_vco(struct drm_i915_private *dev_priv)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_wm.c b/drivers/gpu/drm/i915/display/intel_wm.c
> index 5178b871607f..bb146124a9ca 100644
> --- a/drivers/gpu/drm/i915/display/intel_wm.c
> +++ b/drivers/gpu/drm/i915/display/intel_wm.c
> @@ -9,6 +9,111 @@
>  #include "intel_wm.h"
>  #include "skl_watermark.h"
>  
> +/**
> + * intel_update_watermarks - update FIFO watermark values based on current modes
> + * @dev_priv: i915 device
> + *
> + * Calculate watermark values for the various WM regs based on current mode
> + * and plane configuration.
> + *
> + * There are several cases to deal with here:
> + *   - normal (i.e. non-self-refresh)
> + *   - self-refresh (SR) mode
> + *   - lines are large relative to FIFO size (buffer can hold up to 2)
> + *   - lines are small relative to FIFO size (buffer can hold more than 2
> + *     lines), so need to account for TLB latency
> + *
> + *   The normal calculation is:
> + *     watermark = dotclock * bytes per pixel * latency
> + *   where latency is platform & configuration dependent (we assume pessimal
> + *   values here).
> + *
> + *   The SR calculation is:
> + *     watermark = (trunc(latency/line time)+1) * surface width *
> + *       bytes per pixel
> + *   where
> + *     line time = htotal / dotclock
> + *     surface width = hdisplay for normal plane and 64 for cursor
> + *   and latency is assumed to be high, as above.
> + *
> + * The final value programmed to the register should always be rounded up,
> + * and include an extra 2 entries to account for clock crossings.
> + *
> + * We don't use the sprite, so we can ignore that.  And on Crestline we have
> + * to set the non-SR watermarks to 8.
> + */
> +void intel_update_watermarks(struct drm_i915_private *i915)
> +{
> +	if (i915->display.funcs.wm->update_wm)
> +		i915->display.funcs.wm->update_wm(i915);
> +}
> +
> +int intel_compute_pipe_wm(struct intel_atomic_state *state,
> +			  struct intel_crtc *crtc)
> +{
> +	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +
> +	if (i915->display.funcs.wm->compute_pipe_wm)
> +		return i915->display.funcs.wm->compute_pipe_wm(state, crtc);
> +
> +	return 0;
> +}
> +
> +int intel_compute_intermediate_wm(struct intel_atomic_state *state,
> +				  struct intel_crtc *crtc)
> +{
> +	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +
> +	if (!i915->display.funcs.wm->compute_intermediate_wm)
> +		return 0;
> +
> +	if (drm_WARN_ON(&i915->drm, !i915->display.funcs.wm->compute_pipe_wm))
> +		return 0;
> +
> +	return i915->display.funcs.wm->compute_intermediate_wm(state, crtc);
> +}
> +
> +bool intel_initial_watermarks(struct intel_atomic_state *state,
> +			      struct intel_crtc *crtc)
> +{
> +	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +
> +	if (i915->display.funcs.wm->initial_watermarks) {
> +		i915->display.funcs.wm->initial_watermarks(state, crtc);
> +		return true;
> +	}
> +
> +	return false;
> +}
> +
> +void intel_atomic_update_watermarks(struct intel_atomic_state *state,
> +				    struct intel_crtc *crtc)
> +{
> +	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +
> +	if (i915->display.funcs.wm->atomic_update_watermarks)
> +		i915->display.funcs.wm->atomic_update_watermarks(state, crtc);
> +}
> +
> +void intel_optimize_watermarks(struct intel_atomic_state *state,
> +			       struct intel_crtc *crtc)
> +{
> +	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +
> +	if (i915->display.funcs.wm->optimize_watermarks)
> +		i915->display.funcs.wm->optimize_watermarks(state, crtc);
> +}
> +
> +int intel_compute_global_watermarks(struct intel_atomic_state *state)
> +{
> +	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +
> +	if (i915->display.funcs.wm->compute_global_watermarks)
> +		return i915->display.funcs.wm->compute_global_watermarks(state);
> +
> +	return 0;
> +}
> +
>  bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
>  			    const struct intel_plane_state *plane_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_wm.h b/drivers/gpu/drm/i915/display/intel_wm.h
> index b7d24d5ab9d7..2b62f818099e 100644
> --- a/drivers/gpu/drm/i915/display/intel_wm.h
> +++ b/drivers/gpu/drm/i915/display/intel_wm.h
> @@ -9,9 +9,23 @@
>  #include <linux/types.h>
>  
>  struct drm_i915_private;
> +struct intel_atomic_state;
> +struct intel_crtc;
>  struct intel_crtc_state;
>  struct intel_plane_state;
>  
> +void intel_update_watermarks(struct drm_i915_private *i915);
> +int intel_compute_pipe_wm(struct intel_atomic_state *state,
> +			  struct intel_crtc *crtc);
> +int intel_compute_intermediate_wm(struct intel_atomic_state *state,
> +				  struct intel_crtc *crtc);
> +bool intel_initial_watermarks(struct intel_atomic_state *state,
> +			      struct intel_crtc *crtc);
> +void intel_atomic_update_watermarks(struct intel_atomic_state *state,
> +				    struct intel_crtc *crtc);
> +void intel_optimize_watermarks(struct intel_atomic_state *state,
> +			       struct intel_crtc *crtc);
> +int intel_compute_global_watermarks(struct intel_atomic_state *state);
>  bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
>  			    const struct intel_plane_state *plane_state);
>  void intel_print_wm_latency(struct drm_i915_private *i915,
> -- 
> 2.34.1

-- 
Ville Syrjälä
Intel

  reply	other threads:[~2023-02-13 20:43 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-13 19:59 [Intel-gfx] [PATCH v2 0/7] drm/i915/wm: legacy watermark code shuffling Jani Nikula
2023-02-13 19:59 ` [Intel-gfx] [PATCH v2 1/7] drm/i915: move memory frequency detection to intel_dram.c Jani Nikula
2023-02-13 20:37   ` Ville Syrjälä
2023-02-13 19:59 ` [Intel-gfx] [PATCH v2 2/7] drm/i915/wm: move remaining watermark code out of intel_pm.c Jani Nikula
2023-02-13 20:41   ` Ville Syrjälä
2023-02-13 19:59 ` [Intel-gfx] [PATCH v2 3/7] drm/i915/wm: move functions to call watermark hooks to intel_wm.[ch] Jani Nikula
2023-02-13 20:42   ` Ville Syrjälä [this message]
2023-02-13 19:59 ` [Intel-gfx] [PATCH v2 4/7] drm/i915/wm: add .get_hw_state to watermark funcs Jani Nikula
2023-02-13 20:49   ` Ville Syrjälä
2023-02-15 11:12     ` Jani Nikula
2023-02-13 20:00 ` [Intel-gfx] [PATCH v2 5/7] drm/i915/wm: move watermark sanitization to intel_wm.[ch] Jani Nikula
2023-02-13 20:53   ` Ville Syrjälä
2023-02-15 11:21     ` Jani Nikula
2023-02-15 12:12       ` Ville Syrjälä
2023-02-15 14:20         ` Jani Nikula
2023-02-13 20:00 ` [Intel-gfx] [PATCH v2 6/7] drm/i915/wm: move watermark debugfs to intel_wm.c Jani Nikula
2023-02-13 20:55   ` Ville Syrjälä
2023-02-13 20:00 ` [Intel-gfx] [PATCH v2 7/7] drm/i915: rename intel_pm_types.h -> display/intel_wm_types.h Jani Nikula
2023-02-13 20:56   ` Ville Syrjälä
2023-02-13 20:37 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/wm: legacy watermark code shuffling (rev2) Patchwork
2023-02-13 20:57 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-02-13 23:57 ` [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=Y+qgzkGS2odECXDj@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@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.