All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Ankit Nautiyal <ankit.k.nautiyal@intel.com>,
	intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Cc: suraj.kandpal@intel.com, ville.syrjala@linux.intel.com
Subject: Re: [PATCH 06/12] drm/i915/vdsc: Move all dss stuff in dss files
Date: Mon, 26 Aug 2024 15:09:17 +0300	[thread overview]
Message-ID: <87seur1o5u.fsf@intel.com> (raw)
In-Reply-To: <20240826111527.1113622-7-ankit.k.nautiyal@intel.com>

On Mon, 26 Aug 2024, Ankit Nautiyal <ankit.k.nautiyal@intel.com> wrote:
> Move helpers to configure dss for compressed and uncompressed joiner to
> intel_dss files. While at it, replace struct drm_i915_private to struct
> intel_display wherever possible.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c |  3 +-
>  drivers/gpu/drm/i915/display/intel_dss.c     | 78 ++++++++++++++++++++
>  drivers/gpu/drm/i915/display/intel_dss.h     |  5 ++
>  drivers/gpu/drm/i915/display/intel_vdsc.c    | 67 ++---------------
>  drivers/gpu/drm/i915/display/intel_vdsc.h    |  2 +-
>  5 files changed, 92 insertions(+), 63 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 8bce46bb7f3f..05ffd28cc16a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -87,6 +87,7 @@
>  #include "intel_drrs.h"
>  #include "intel_dsb.h"
>  #include "intel_dsi.h"
> +#include "intel_dss.h"
>  #include "intel_dss_regs.h"
>  #include "intel_dvo.h"
>  #include "intel_fb.h"
> @@ -1711,7 +1712,7 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
>  		intel_dsc_enable(pipe_crtc_state);
>  
>  		if (DISPLAY_VER(dev_priv) >= 13)
> -			intel_uncompressed_joiner_enable(pipe_crtc_state);
> +			intel_dss_enable_uncompressed_joiner(pipe_crtc_state);
>  
>  		intel_set_pipe_src_size(pipe_crtc_state);
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_dss.c b/drivers/gpu/drm/i915/display/intel_dss.c
> index f44dcac84aa4..8b2841689bfb 100644
> --- a/drivers/gpu/drm/i915/display/intel_dss.c
> +++ b/drivers/gpu/drm/i915/display/intel_dss.c
> @@ -6,10 +6,12 @@
>  #include "i915_drv.h"
>  #include "i915_reg_defs.h"
>  #include "intel_de.h"
> +#include "intel_display_limits.h"
>  #include "intel_display_types.h"
>  #include "intel_dsi.h"
>  #include "intel_dss.h"
>  #include "intel_dss_regs.h"
> +#include "intel_vdsc.h"
>  
>  /*
>   * Splitter enable for eDP MSO is limited to certain pipes, on certain
> @@ -136,3 +138,79 @@ void intel_dss_configure_dsi_dual_link_mode(struct intel_encoder *encoder,
>  
>  	intel_de_write(display, dss_ctl1_reg, dss_ctl1);
>  }
> +
> +static i915_reg_t dss_ctl1_reg(struct intel_crtc *crtc, enum transcoder cpu_transcoder)
> +{
> +	return intel_dsc_is_dsc_pipe(crtc, cpu_transcoder) ?
> +		ICL_PIPE_DSS_CTL1(crtc->pipe) : DSS_CTL1;
> +}
> +
> +static i915_reg_t dss_ctl2_reg(struct intel_crtc *crtc, enum transcoder cpu_transcoder)
> +{
> +	return intel_dsc_is_dsc_pipe(crtc, cpu_transcoder) ?
> +		ICL_PIPE_DSS_CTL2(crtc->pipe) : DSS_CTL2;
> +}
> +
> +void intel_dss_reset(const struct intel_crtc_state *old_crtc_state)
> +{
> +	struct intel_display *display = to_intel_display(old_crtc_state);
> +	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
> +
> +	intel_de_write(display, dss_ctl1_reg(crtc, old_crtc_state->cpu_transcoder), 0);
> +	intel_de_write(display, dss_ctl2_reg(crtc, old_crtc_state->cpu_transcoder), 0);
> +}
> +
> +void intel_dss_enable_uncompressed_joiner(const struct intel_crtc_state *crtc_state)
> +{
> +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> +	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> +	u32 dss_ctl1_val = 0;
> +
> +	if (crtc_state->joiner_pipes && !crtc_state->dsc.compression_enable) {
> +		if (intel_crtc_is_joiner_secondary(crtc_state))
> +			dss_ctl1_val |= UNCOMPRESSED_JOINER_SECONDARY;
> +		else
> +			dss_ctl1_val |= UNCOMPRESSED_JOINER_PRIMARY;
> +
> +		intel_de_write(dev_priv, dss_ctl1_reg(crtc, crtc_state->cpu_transcoder), dss_ctl1_val);
> +	}
> +}
> +
> +void intel_dss_enable_compressed_joiner(const struct intel_crtc_state *crtc_state,
> +					int vdsc_instances_per_pipe)
> +{
> +	struct intel_display *display = to_intel_display(crtc_state);
> +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> +	u32 dss_ctl1_val = 0;
> +	u32 dss_ctl2_val = 0;
> +
> +	dss_ctl2_val |= LEFT_BRANCH_VDSC_ENABLE;
> +	if (vdsc_instances_per_pipe > 1) {
> +		dss_ctl2_val |= RIGHT_BRANCH_VDSC_ENABLE;
> +		dss_ctl1_val |= JOINER_ENABLE;
> +	}
> +	if (crtc_state->joiner_pipes) {
> +		dss_ctl1_val |= BIG_JOINER_ENABLE;
> +		if (!intel_crtc_is_joiner_secondary(crtc_state))
> +			dss_ctl1_val |= PRIMARY_BIG_JOINER_ENABLE;
> +	}
> +	intel_de_write(display, dss_ctl1_reg(crtc, crtc_state->cpu_transcoder), dss_ctl1_val);
> +	intel_de_write(display, dss_ctl2_reg(crtc, crtc_state->cpu_transcoder), dss_ctl2_val);
> +}
> +
> +void intel_dss_get_dsc_config(struct intel_crtc_state *crtc_state)
> +{
> +	struct intel_display *display = to_intel_display(crtc_state);
> +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> +	u32 dss_ctl1, dss_ctl2;
> +
> +	dss_ctl1 = intel_de_read(display, dss_ctl1_reg(crtc, crtc_state->cpu_transcoder));
> +	dss_ctl2 = intel_de_read(display, dss_ctl2_reg(crtc, crtc_state->cpu_transcoder));
> +
> +	crtc_state->dsc.compression_enable = dss_ctl2 & LEFT_BRANCH_VDSC_ENABLE;
> +	if (!crtc_state->dsc.compression_enable)
> +		return;
> +
> +	crtc_state->dsc.dsc_split = (dss_ctl2 & RIGHT_BRANCH_VDSC_ENABLE) &&
> +				    (dss_ctl1 & JOINER_ENABLE);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_dss.h b/drivers/gpu/drm/i915/display/intel_dss.h
> index 0c5d652d46f5..2dadbe76cbf9 100644
> --- a/drivers/gpu/drm/i915/display/intel_dss.h
> +++ b/drivers/gpu/drm/i915/display/intel_dss.h
> @@ -19,6 +19,11 @@ void intel_dss_configure_mso(const struct intel_crtc_state *crtc_state);
>  void intel_dss_configure_dsi_dual_link_mode(struct intel_encoder *encoder,
>  					    const struct intel_crtc_state *pipe_config,
>  					    u8 dual_link, u8 pixel_overlap);
> +void intel_dss_reset(const struct intel_crtc_state *old_crtc_state);
> +void intel_dss_enable_uncompressed_joiner(const struct intel_crtc_state *crtc_state);
> +void intel_dss_enable_compressed_joiner(const struct intel_crtc_state *crtc_state,
> +					int vdsc_instances_per_pipe);
> +void intel_dss_get_dsc_config(struct intel_crtc_state *crtc_state);

Nitpick, intel_dss_dsc_get_config()

>  
>  #endif /* __INTEL_DSS_H__ */
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_vdsc.c b/drivers/gpu/drm/i915/display/intel_vdsc.c
> index 6d60b72a9dfb..c278290dcfb9 100644
> --- a/drivers/gpu/drm/i915/display/intel_vdsc.c
> +++ b/drivers/gpu/drm/i915/display/intel_vdsc.c
> @@ -15,7 +15,7 @@
>  #include "intel_de.h"
>  #include "intel_display_types.h"
>  #include "intel_dsi.h"
> -#include "intel_dss_regs.h"
> +#include "intel_dss.h"
>  #include "intel_qp_tables.h"
>  #include "intel_vdsc.h"
>  #include "intel_vdsc_regs.h"
> @@ -35,7 +35,7 @@ bool intel_dsc_source_support(const struct intel_crtc_state *crtc_state)
>  	return true;
>  }
>  
> -static bool intel_dsc_is_dsc_pipe(struct intel_crtc *crtc, enum transcoder cpu_transcoder)
> +bool intel_dsc_is_dsc_pipe(struct intel_crtc *crtc, enum transcoder cpu_transcoder)
>  {
>  	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
>  
> @@ -724,72 +724,23 @@ void intel_dsc_dp_pps_write(struct intel_encoder *encoder,
>  				  sizeof(dp_dsc_pps_sdp));
>  }
>  
> -static i915_reg_t dss_ctl1_reg(struct intel_crtc *crtc, enum transcoder cpu_transcoder)
> -{
> -	return intel_dsc_is_dsc_pipe(crtc, cpu_transcoder) ?
> -		ICL_PIPE_DSS_CTL1(crtc->pipe) : DSS_CTL1;
> -}
> -
> -static i915_reg_t dss_ctl2_reg(struct intel_crtc *crtc, enum transcoder cpu_transcoder)
> -{
> -	return intel_dsc_is_dsc_pipe(crtc, cpu_transcoder) ?
> -		ICL_PIPE_DSS_CTL2(crtc->pipe) : DSS_CTL2;
> -}
> -
> -void intel_uncompressed_joiner_enable(const struct intel_crtc_state *crtc_state)
> -{
> -	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> -	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> -	u32 dss_ctl1_val = 0;
> -
> -	if (crtc_state->joiner_pipes && !crtc_state->dsc.compression_enable) {
> -		if (intel_crtc_is_joiner_secondary(crtc_state))
> -			dss_ctl1_val |= UNCOMPRESSED_JOINER_SECONDARY;
> -		else
> -			dss_ctl1_val |= UNCOMPRESSED_JOINER_PRIMARY;
> -
> -		intel_de_write(dev_priv, dss_ctl1_reg(crtc, crtc_state->cpu_transcoder), dss_ctl1_val);
> -	}
> -}
> -
>  void intel_dsc_enable(const struct intel_crtc_state *crtc_state)
>  {
> -	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> -	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> -	u32 dss_ctl1_val = 0;
> -	u32 dss_ctl2_val = 0;
>  	int vdsc_instances_per_pipe = intel_dsc_get_vdsc_per_pipe(crtc_state);
>  
>  	if (!crtc_state->dsc.compression_enable)
>  		return;
>  
>  	intel_dsc_pps_configure(crtc_state);
> -
> -	dss_ctl2_val |= LEFT_BRANCH_VDSC_ENABLE;
> -	if (vdsc_instances_per_pipe > 1) {
> -		dss_ctl2_val |= RIGHT_BRANCH_VDSC_ENABLE;
> -		dss_ctl1_val |= JOINER_ENABLE;
> -	}
> -	if (crtc_state->joiner_pipes) {
> -		dss_ctl1_val |= BIG_JOINER_ENABLE;
> -		if (!intel_crtc_is_joiner_secondary(crtc_state))
> -			dss_ctl1_val |= PRIMARY_BIG_JOINER_ENABLE;
> -	}
> -	intel_de_write(dev_priv, dss_ctl1_reg(crtc, crtc_state->cpu_transcoder), dss_ctl1_val);
> -	intel_de_write(dev_priv, dss_ctl2_reg(crtc, crtc_state->cpu_transcoder), dss_ctl2_val);
> +	intel_dss_enable_compressed_joiner(crtc_state, vdsc_instances_per_pipe);
>  }
>  
>  void intel_dsc_disable(const struct intel_crtc_state *old_crtc_state)
>  {
> -	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
> -	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> -
>  	/* Disable only if either of them is enabled */
>  	if (old_crtc_state->dsc.compression_enable ||
> -	    old_crtc_state->joiner_pipes) {
> -		intel_de_write(dev_priv, dss_ctl1_reg(crtc, old_crtc_state->cpu_transcoder), 0);
> -		intel_de_write(dev_priv, dss_ctl2_reg(crtc, old_crtc_state->cpu_transcoder), 0);
> -	}
> +	    old_crtc_state->joiner_pipes)
> +		intel_dss_reset(old_crtc_state);
>  }
>  
>  static u32 intel_dsc_pps_read(struct intel_crtc_state *crtc_state, int pps,
> @@ -946,7 +897,6 @@ void intel_dsc_get_config(struct intel_crtc_state *crtc_state)
>  	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>  	enum intel_display_power_domain power_domain;
>  	intel_wakeref_t wakeref;
> -	u32 dss_ctl1, dss_ctl2;
>  
>  	if (!intel_dsc_source_support(crtc_state))
>  		return;
> @@ -957,16 +907,11 @@ void intel_dsc_get_config(struct intel_crtc_state *crtc_state)
>  	if (!wakeref)
>  		return;
>  
> -	dss_ctl1 = intel_de_read(dev_priv, dss_ctl1_reg(crtc, cpu_transcoder));
> -	dss_ctl2 = intel_de_read(dev_priv, dss_ctl2_reg(crtc, cpu_transcoder));
> +	intel_dss_get_dsc_config(crtc_state);
>  
> -	crtc_state->dsc.compression_enable = dss_ctl2 & LEFT_BRANCH_VDSC_ENABLE;
>  	if (!crtc_state->dsc.compression_enable)
>  		goto out;
>  
> -	crtc_state->dsc.dsc_split = (dss_ctl2 & RIGHT_BRANCH_VDSC_ENABLE) &&
> -		(dss_ctl1 & JOINER_ENABLE);
> -
>  	intel_dsc_get_pps_config(crtc_state);
>  out:
>  	intel_display_power_put(dev_priv, power_domain, wakeref);
> diff --git a/drivers/gpu/drm/i915/display/intel_vdsc.h b/drivers/gpu/drm/i915/display/intel_vdsc.h
> index 290b2e9b3482..345956d0c77e 100644
> --- a/drivers/gpu/drm/i915/display/intel_vdsc.h
> +++ b/drivers/gpu/drm/i915/display/intel_vdsc.h
> @@ -16,7 +16,6 @@ struct intel_crtc_state;
>  struct intel_encoder;
>  
>  bool intel_dsc_source_support(const struct intel_crtc_state *crtc_state);
> -void intel_uncompressed_joiner_enable(const struct intel_crtc_state *crtc_state);
>  void intel_dsc_enable(const struct intel_crtc_state *crtc_state);
>  void intel_dsc_disable(const struct intel_crtc_state *crtc_state);
>  int intel_dsc_compute_params(struct intel_crtc_state *pipe_config);
> @@ -31,5 +30,6 @@ void intel_dsc_dp_pps_write(struct intel_encoder *encoder,
>  			    const struct intel_crtc_state *crtc_state);
>  void intel_vdsc_state_dump(struct drm_printer *p, int indent,
>  			   const struct intel_crtc_state *crtc_state);
> +bool intel_dsc_is_dsc_pipe(struct intel_crtc *crtc, enum transcoder cpu_transcoder);
>  
>  #endif /* __INTEL_VDSC_H__ */

-- 
Jani Nikula, Intel

  reply	other threads:[~2024-08-26 12:09 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-26 11:15 [PATCH 00/12] Consolidation of DSS Control in Separate Files Ankit Nautiyal
2024-08-26 11:15 ` [PATCH 01/12] drm/i915/display: Move all DSS control registers to a new file Ankit Nautiyal
2024-08-26 11:46   ` Jani Nikula
2024-08-26 11:15 ` [PATCH 02/12] drm/i915/ddi: Move all mso related helpers " Ankit Nautiyal
2024-08-26 11:52   ` Jani Nikula
2024-08-26 11:15 ` [PATCH 03/12] drm/i915/dss: Move to struct intel_display Ankit Nautiyal
2024-08-26 11:55   ` Jani Nikula
2024-08-26 11:15 ` [PATCH 04/12] drm/i915/icl_dsi: Move helpers to configure dsi dual link to intel_dss Ankit Nautiyal
2024-08-26 11:58   ` Jani Nikula
2024-08-26 11:15 ` [PATCH 05/12] drm/i915/vdsc: Rename helper to check if the pipe supports dsc Ankit Nautiyal
2024-08-26 12:41   ` Jani Nikula
2024-08-29 14:19     ` Nautiyal, Ankit K
2024-08-26 11:15 ` [PATCH 06/12] drm/i915/vdsc: Move all dss stuff in dss files Ankit Nautiyal
2024-08-26 12:09   ` Jani Nikula [this message]
2024-08-26 11:15 ` [PATCH 07/12] drm/i915/display: Move dss stuff in intel_dss files Ankit Nautiyal
2024-08-26 12:11   ` Jani Nikula
2024-08-26 11:15 ` [PATCH 08/12] drm/i915/display: Move helper to get joined pipe mask to intel_dss Ankit Nautiyal
2024-08-26 12:20   ` Jani Nikula
2024-08-26 11:15 ` [PATCH 09/12] drm/i915/display: Move helpers for primary joiner " Ankit Nautiyal
2024-08-26 11:15 ` [PATCH 10/12] drm/i915/display: Move helper to check for secondary joiner pipe Ankit Nautiyal
2024-08-26 11:15 ` [PATCH 11/12] drm/i915/display: Move helper to get all secondary pipes Ankit Nautiyal
2024-08-26 11:15 ` [PATCH 12/12] drm/i915/display: Move intel_joiner_num_pipes to intel dss Ankit Nautiyal
2024-08-26 11:20 ` ✓ CI.Patch_applied: success for Consolidation of DSS Control in Separate Files Patchwork
2024-08-26 11:21 ` ✗ CI.checkpatch: warning " Patchwork
2024-08-26 11:22 ` ✓ CI.KUnit: success " Patchwork
2024-08-26 11:34 ` ✓ CI.Build: " Patchwork
2024-08-26 11:36 ` ✓ CI.Hooks: " Patchwork
2024-08-26 11:37 ` ✗ CI.checksparse: warning " Patchwork
2024-08-26 11:56 ` ✓ CI.BAT: success " Patchwork
2024-08-26 12:34 ` [PATCH 00/12] " Jani Nikula
2024-08-27 12:20   ` Nautiyal, Ankit K
2024-08-26 15:20 ` ✓ CI.FULL: success for " Patchwork
2024-08-26 16:11 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2024-08-26 16:11 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-08-26 16:19 ` ✓ Fi.CI.BAT: success " Patchwork
2024-08-27 11:00 ` ✗ 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=87seur1o5u.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=ankit.k.nautiyal@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=suraj.kandpal@intel.com \
    --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.