All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 12/15] drm/i915: State readout and cross-checking for dp_m2_n2
Date: Wed, 6 Aug 2014 10:25:49 +0200	[thread overview]
Message-ID: <20140806082549.GX8727@phenom.ffwll.local> (raw)
In-Reply-To: <1407250286-1801-13-git-send-email-rodrigo.vivi@intel.com>

On Tue, Aug 05, 2014 at 07:51:23AM -0700, Rodrigo Vivi wrote:
> From: Vandana Kannan <vandana.kannan@intel.com>
> 
> Adding relevant read out comparison code, in check_crtc_state, for the new
> member of crtc_config, dp_m2_n2, which was introduced to store link_m_n
> values for a DP downclock mode (if available). Suggested by Daniel.
> 
> v2: Changed patch title.
> Daniel's review comments incorporated.
> Added relevant state readout code for M2_N2. dp_m2_n2 comparison to be done
> only when high RR is not in use (This is because alternate m_n register
> programming will be done only when low RR is being used).
> 
> v3: Modified call to get_m2_n2 which had dp_m_n as param by mistake.
> Compare dp_m_n and dp_m2_n2 for gen 7 and below. compare the structures
> based on DRRS state for gen 8 and above.
> Save and restore M2 N2 registers for gen 7 and below
> 
> v4: For Gen>=8, check M_N registers against dp_m_n and dp_m2_n2 as there is
> only one set of M_N registers
> 
> v5: Removed the chunk which saves and restores M2_N2 registers. Modified
> get_m_n() to get M2_N2 registers as well. Modified the macro which compares
> hw.dp_m_n against sw.dp_m2_n2/sw.dp_m_n for gen > 8.
> 
> v6: Added check to compare dp_m2_n2 only when DRRS is enabled
> 
> v7: Modified drrs check to use has_drrs
> 
> v8: Add has_drrs check before reading M2_N2 registers
> 
> Signed-off-by: Vandana Kannan <vandana.kannan@intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

Both drrs patches pulled in, thanks.
-Daniel

> ---
>  drivers/gpu/drm/i915/intel_display.c | 75 ++++++++++++++++++++++++++++++++----
>  1 file changed, 67 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index e798acd..b758826 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -7145,7 +7145,8 @@ static void intel_pch_transcoder_get_m_n(struct intel_crtc *crtc,
>  
>  static void intel_cpu_transcoder_get_m_n(struct intel_crtc *crtc,
>  					 enum transcoder transcoder,
> -					 struct intel_link_m_n *m_n)
> +					 struct intel_link_m_n *m_n,
> +					 struct intel_link_m_n *m2_n2)
>  {
>  	struct drm_device *dev = crtc->base.dev;
>  	struct drm_i915_private *dev_priv = dev->dev_private;
> @@ -7159,6 +7160,20 @@ static void intel_cpu_transcoder_get_m_n(struct intel_crtc *crtc,
>  		m_n->gmch_n = I915_READ(PIPE_DATA_N1(transcoder));
>  		m_n->tu = ((I915_READ(PIPE_DATA_M1(transcoder))
>  			    & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
> +		/* Read M2_N2 registers only for gen < 8 (M2_N2 available for
> +		 * gen < 8) and if DRRS is supported (to make sure the
> +		 * registers are not unnecessarily read).
> +		 */
> +		if (m2_n2 && INTEL_INFO(dev)->gen < 8 &&
> +			crtc->config.has_drrs) {
> +			m2_n2->link_m = I915_READ(PIPE_LINK_M2(transcoder));
> +			m2_n2->link_n =	I915_READ(PIPE_LINK_N2(transcoder));
> +			m2_n2->gmch_m =	I915_READ(PIPE_DATA_M2(transcoder))
> +					& ~TU_SIZE_MASK;
> +			m2_n2->gmch_n =	I915_READ(PIPE_DATA_N2(transcoder));
> +			m2_n2->tu = ((I915_READ(PIPE_DATA_M2(transcoder))
> +					& TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
> +		}
>  	} else {
>  		m_n->link_m = I915_READ(PIPE_LINK_M_G4X(pipe));
>  		m_n->link_n = I915_READ(PIPE_LINK_N_G4X(pipe));
> @@ -7177,14 +7192,15 @@ void intel_dp_get_m_n(struct intel_crtc *crtc,
>  		intel_pch_transcoder_get_m_n(crtc, &pipe_config->dp_m_n);
>  	else
>  		intel_cpu_transcoder_get_m_n(crtc, pipe_config->cpu_transcoder,
> -					     &pipe_config->dp_m_n);
> +					     &pipe_config->dp_m_n,
> +					     &pipe_config->dp_m2_n2);
>  }
>  
>  static void ironlake_get_fdi_m_n_config(struct intel_crtc *crtc,
>  					struct intel_crtc_config *pipe_config)
>  {
>  	intel_cpu_transcoder_get_m_n(crtc, pipe_config->cpu_transcoder,
> -				     &pipe_config->fdi_m_n);
> +				     &pipe_config->fdi_m_n, NULL);
>  }
>  
>  static void ironlake_get_pfit_config(struct intel_crtc *crtc,
> @@ -10001,6 +10017,15 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
>  		      pipe_config->dp_m_n.gmch_m, pipe_config->dp_m_n.gmch_n,
>  		      pipe_config->dp_m_n.link_m, pipe_config->dp_m_n.link_n,
>  		      pipe_config->dp_m_n.tu);
> +
> +	DRM_DEBUG_KMS("dp: %i, gmch_m2: %u, gmch_n2: %u, link_m2: %u, link_n2: %u, tu2: %u\n",
> +		      pipe_config->has_dp_encoder,
> +		      pipe_config->dp_m2_n2.gmch_m,
> +		      pipe_config->dp_m2_n2.gmch_n,
> +		      pipe_config->dp_m2_n2.link_m,
> +		      pipe_config->dp_m2_n2.link_n,
> +		      pipe_config->dp_m2_n2.tu);
> +
>  	DRM_DEBUG_KMS("requested mode:\n");
>  	drm_mode_debug_printmodeline(&pipe_config->requested_mode);
>  	DRM_DEBUG_KMS("adjusted mode:\n");
> @@ -10381,6 +10406,22 @@ intel_pipe_config_compare(struct drm_device *dev,
>  		return false; \
>  	}
>  
> +/* This is required for BDW+ where there is only one set of registers for
> + * switching between high and low RR.
> + * This macro can be used whenever a comparison has to be made between one
> + * hw state and multiple sw state variables.
> + */
> +#define PIPE_CONF_CHECK_I_ALT(name, alt_name) \
> +	if ((current_config->name != pipe_config->name) && \
> +		(current_config->alt_name != pipe_config->name)) { \
> +			DRM_ERROR("mismatch in " #name " " \
> +				  "(expected %i or %i, found %i)\n", \
> +				  current_config->name, \
> +				  current_config->alt_name, \
> +				  pipe_config->name); \
> +			return false; \
> +	}
> +
>  #define PIPE_CONF_CHECK_FLAGS(name, mask)	\
>  	if ((current_config->name ^ pipe_config->name) & (mask)) { \
>  		DRM_ERROR("mismatch in " #name "(" #mask ") "	   \
> @@ -10413,11 +10454,28 @@ intel_pipe_config_compare(struct drm_device *dev,
>  	PIPE_CONF_CHECK_I(fdi_m_n.tu);
>  
>  	PIPE_CONF_CHECK_I(has_dp_encoder);
> -	PIPE_CONF_CHECK_I(dp_m_n.gmch_m);
> -	PIPE_CONF_CHECK_I(dp_m_n.gmch_n);
> -	PIPE_CONF_CHECK_I(dp_m_n.link_m);
> -	PIPE_CONF_CHECK_I(dp_m_n.link_n);
> -	PIPE_CONF_CHECK_I(dp_m_n.tu);
> +
> +	if (INTEL_INFO(dev)->gen < 8) {
> +		PIPE_CONF_CHECK_I(dp_m_n.gmch_m);
> +		PIPE_CONF_CHECK_I(dp_m_n.gmch_n);
> +		PIPE_CONF_CHECK_I(dp_m_n.link_m);
> +		PIPE_CONF_CHECK_I(dp_m_n.link_n);
> +		PIPE_CONF_CHECK_I(dp_m_n.tu);
> +
> +		if (current_config->has_drrs) {
> +			PIPE_CONF_CHECK_I(dp_m2_n2.gmch_m);
> +			PIPE_CONF_CHECK_I(dp_m2_n2.gmch_n);
> +			PIPE_CONF_CHECK_I(dp_m2_n2.link_m);
> +			PIPE_CONF_CHECK_I(dp_m2_n2.link_n);
> +			PIPE_CONF_CHECK_I(dp_m2_n2.tu);
> +		}
> +	} else {
> +		PIPE_CONF_CHECK_I_ALT(dp_m_n.gmch_m, dp_m2_n2.gmch_m);
> +		PIPE_CONF_CHECK_I_ALT(dp_m_n.gmch_n, dp_m2_n2.gmch_n);
> +		PIPE_CONF_CHECK_I_ALT(dp_m_n.link_m, dp_m2_n2.link_m);
> +		PIPE_CONF_CHECK_I_ALT(dp_m_n.link_n, dp_m2_n2.link_n);
> +		PIPE_CONF_CHECK_I_ALT(dp_m_n.tu, dp_m2_n2.tu);
> +	}
>  
>  	PIPE_CONF_CHECK_I(adjusted_mode.crtc_hdisplay);
>  	PIPE_CONF_CHECK_I(adjusted_mode.crtc_htotal);
> @@ -10503,6 +10561,7 @@ intel_pipe_config_compare(struct drm_device *dev,
>  
>  #undef PIPE_CONF_CHECK_X
>  #undef PIPE_CONF_CHECK_I
> +#undef PIPE_CONF_CHECK_I_ALT
>  #undef PIPE_CONF_CHECK_FLAGS
>  #undef PIPE_CONF_CHECK_CLOCK_FUZZY
>  #undef PIPE_CONF_QUIRK
> -- 
> 1.9.3
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

  reply	other threads:[~2014-08-06  8:25 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-05 14:51 [PATCH 00/15] drm-intel-collector - update Rodrigo Vivi
2014-08-05 14:51 ` [PATCH 01/15] drm/i915: Bring UP Power Wells before disabling RC6 Rodrigo Vivi
2014-08-05 14:51 ` [PATCH 02/15] drm/i915: Don't save/restore RS when not used Rodrigo Vivi
2014-08-05 14:51 ` [PATCH 03/15] drm/i915: Upgrade execbuffer fail after resume failure to EIO Rodrigo Vivi
2014-08-06  7:56   ` Daniel Vetter
2014-08-06  8:12     ` Chris Wilson
2014-08-06  8:39       ` Daniel Vetter
2014-08-08  9:17         ` Chris Wilson
2014-08-08  9:46           ` Daniel Vetter
2014-08-08  9:52             ` Chris Wilson
2014-08-05 14:51 ` [PATCH 04/15] drm/i915: honour forced connector modes Rodrigo Vivi
2014-08-06  8:15   ` Daniel Vetter
2014-08-06 15:00   ` Jesse Barnes
2014-08-05 14:51 ` [PATCH 05/15] drm/i915: Don't promote UC to WT automagically Rodrigo Vivi
2014-08-06  7:57   ` Daniel Vetter
2014-08-05 14:51 ` [PATCH 06/15] drm/i915: Refactor the physical and virtual page hws setup Rodrigo Vivi
2014-08-06  8:17   ` Daniel Vetter
2014-08-05 14:51 ` [PATCH 07/15] drm/i915: clean up PPGTT checking logic Rodrigo Vivi
2014-08-06  8:21   ` Daniel Vetter
2014-08-05 14:51 ` [PATCH 08/15] drm/i915: re-order ppgtt sanitize logic v2 Rodrigo Vivi
2014-08-06  8:22   ` Daniel Vetter
2014-08-05 14:51 ` [PATCH 09/15] drm/i915: Bring GPU Freq to min while suspending Rodrigo Vivi
2014-08-06  8:23   ` Daniel Vetter
2014-08-05 14:51 ` [PATCH 10/15] drm/i915/bdw: Map unused PDPs to a scratch page Rodrigo Vivi
2014-08-05 14:51 ` [PATCH 11/15] drm/i915: Set M2_N2 registers during mode set Rodrigo Vivi
2014-08-05 21:55   ` Jesse Barnes
2014-08-05 14:51 ` [PATCH 12/15] drm/i915: State readout and cross-checking for dp_m2_n2 Rodrigo Vivi
2014-08-06  8:25   ` Daniel Vetter [this message]
2014-08-05 14:51 ` [PATCH 13/15] drm/i915: HDMI detection based on HPD pin live status Rodrigo Vivi
2014-08-06  3:32   ` Sharma, Shashank
2014-08-06  6:44   ` Dave Airlie
2014-08-05 14:51 ` [PATCH 14/15] drm/i915: capture_reg_state interrupt registers for Gen8 Rodrigo Vivi
2014-08-06  8:27   ` Daniel Vetter
2014-08-06  8:56     ` Thierry, Michel
2014-08-05 14:51 ` [PATCH 15/15] drm/i915/chv: Use timeout mode for RC6 on chv Rodrigo Vivi
2014-08-06  0:51   ` O'Rourke, Tom

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=20140806082549.GX8727@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=daniel.vetter@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=rodrigo.vivi@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.