public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 3/4] drm/i915: Remove the broken DP CRC support for g4x
Date: Thu, 14 Feb 2019 22:43:30 +0200	[thread overview]
Message-ID: <20190214204330.GN20097@intel.com> (raw)
In-Reply-To: <20190214203822.GL31265@intel.com>

On Thu, Feb 14, 2019 at 12:38:22PM -0800, Rodrigo Vivi wrote:
> On Thu, Feb 14, 2019 at 09:22:18PM +0200, Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > DP CRCs don't really work on g4x. If you want any CRCs on DP you must
> > select the CRC source before the port is enabled, otherwise the CRC
> > source select bits simply ignore any writes to them. And once the port
> > is enabled we mustn't change the CRC source select until the port is
> > disabled. That almost works, but not quite :( Eventually the CRC source
> > select bits get permanently stuck one way or the other, and after that
> > a reboot (or possibly a display reset) is needed to get working CRCs
> > on that pipe (not matter which CRC source we try to use).
> > 
> > Additionally the DFT scrambler reset bits we're trying to use don't
> > seem to exist on g4x. There are some potentially relevant looking bits
> > in the pipe registers, but when I tried it I got stable looking CRCs
> > without setting any bits for this.
> > 
> > If there is a way to make DP CRCs work reliably on g4x, I wasn't
> > able to find it. So let's just remove the broken code we have.
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_pipe_crc.c | 80 ++++-----------------------
> >  1 file changed, 11 insertions(+), 69 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
> > index fe0ff89b980b..66bb7b031537 100644
> > --- a/drivers/gpu/drm/i915/intel_pipe_crc.c
> > +++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
> > @@ -191,8 +191,6 @@ static int i9xx_pipe_crc_ctl_reg(struct drm_i915_private *dev_priv,
> >  				 enum intel_pipe_crc_source *source,
> >  				 u32 *val)
> >  {
> > -	bool need_stable_symbols = false;
> > -
> >  	if (*source == INTEL_PIPE_CRC_SOURCE_AUTO) {
> >  		int ret = i9xx_pipe_crc_auto_source(dev_priv, pipe, source);
> >  		if (ret)
> > @@ -208,56 +206,23 @@ static int i9xx_pipe_crc_ctl_reg(struct drm_i915_private *dev_priv,
> >  			return -EINVAL;
> >  		*val = PIPE_CRC_ENABLE | PIPE_CRC_SOURCE_TV_PRE;
> >  		break;
> > -	case INTEL_PIPE_CRC_SOURCE_DP_B:
> > -		if (!IS_G4X(dev_priv))
> > -			return -EINVAL;
> > -		*val = PIPE_CRC_ENABLE | PIPE_CRC_SOURCE_DP_B_G4X;
> > -		need_stable_symbols = true;
> > -		break;
> > -	case INTEL_PIPE_CRC_SOURCE_DP_C:
> > -		if (!IS_G4X(dev_priv))
> > -			return -EINVAL;
> > -		*val = PIPE_CRC_ENABLE | PIPE_CRC_SOURCE_DP_C_G4X;
> > -		need_stable_symbols = true;
> > -		break;
> > -	case INTEL_PIPE_CRC_SOURCE_DP_D:
> > -		if (!IS_G4X(dev_priv))
> > -			return -EINVAL;
> > -		*val = PIPE_CRC_ENABLE | PIPE_CRC_SOURCE_DP_D_G4X;
> > -		need_stable_symbols = true;
> > -		break;
> >  	case INTEL_PIPE_CRC_SOURCE_NONE:
> >  		*val = 0;
> >  		break;
> >  	default:
> > +		/*
> > +		 * The DP CRC source doesn't work on g4x.
> > +		 * It can be made to work to some degree by selecting
> > +		 * the correct CRC source before the port is enabled,
> > +		 * and not touching the CRC source bits again until
> > +		 * the port is disabled. But even then the bits
> > +		 * eventually get stuck and a reboot is needed to get
> > +		 * working CRCs on the pipe again. Let's simply
> > +		 * refuse to use DP CRCs on g4x.
> > +		 */
> >  		return -EINVAL;
> 
> is this the right return now? maybe ENOENT?
> (just brainstorming without looking to igt tests)

We return -EINVAL for all other unsupported sources, so this
seems consistent.

> 
> But I know how terrible unreliable crcs are and this patch
> looks the right way, so:
> 
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> 
> 
> 
> >  	}
> >  
> > -	/*
> > -	 * When the pipe CRC tap point is after the transcoders we need
> > -	 * to tweak symbol-level features to produce a deterministic series of
> > -	 * symbols for a given frame. We need to reset those features only once
> > -	 * a frame (instead of every nth symbol):
> > -	 *   - DC-balance: used to ensure a better clock recovery from the data
> > -	 *     link (SDVO)
> > -	 *   - DisplayPort scrambling: used for EMI reduction
> > -	 */
> > -	if (need_stable_symbols) {
> > -		u32 tmp = I915_READ(PORT_DFT2_G4X);
> > -
> > -		WARN_ON(!IS_G4X(dev_priv));
> > -
> > -		I915_WRITE(PORT_DFT_I9XX,
> > -			   I915_READ(PORT_DFT_I9XX) | DC_BALANCE_RESET);
> > -
> > -		if (pipe == PIPE_A)
> > -			tmp |= PIPE_A_SCRAMBLE_RESET;
> > -		else
> > -			tmp |= PIPE_B_SCRAMBLE_RESET;
> > -
> > -		I915_WRITE(PORT_DFT2_G4X, tmp);
> > -	}
> > -
> >  	return 0;
> >  }
> >  
> > @@ -282,24 +247,6 @@ static void vlv_undo_pipe_scramble_reset(struct drm_i915_private *dev_priv,
> >  	if (!(tmp & PIPE_SCRAMBLE_RESET_MASK))
> >  		tmp &= ~DC_BALANCE_RESET_VLV;
> >  	I915_WRITE(PORT_DFT2_G4X, tmp);
> > -
> > -}
> > -
> > -static void g4x_undo_pipe_scramble_reset(struct drm_i915_private *dev_priv,
> > -					 enum pipe pipe)
> > -{
> > -	u32 tmp = I915_READ(PORT_DFT2_G4X);
> > -
> > -	if (pipe == PIPE_A)
> > -		tmp &= ~PIPE_A_SCRAMBLE_RESET;
> > -	else
> > -		tmp &= ~PIPE_B_SCRAMBLE_RESET;
> > -	I915_WRITE(PORT_DFT2_G4X, tmp);
> > -
> > -	if (!(tmp & PIPE_SCRAMBLE_RESET_MASK)) {
> > -		I915_WRITE(PORT_DFT_I9XX,
> > -			   I915_READ(PORT_DFT_I9XX) & ~DC_BALANCE_RESET);
> > -	}
> >  }
> >  
> >  static int ilk_pipe_crc_ctl_reg(enum intel_pipe_crc_source *source,
> > @@ -485,9 +432,6 @@ static int i9xx_crc_source_valid(struct drm_i915_private *dev_priv,
> >  	switch (source) {
> >  	case INTEL_PIPE_CRC_SOURCE_PIPE:
> >  	case INTEL_PIPE_CRC_SOURCE_TV:
> > -	case INTEL_PIPE_CRC_SOURCE_DP_B:
> > -	case INTEL_PIPE_CRC_SOURCE_DP_C:
> > -	case INTEL_PIPE_CRC_SOURCE_DP_D:
> >  	case INTEL_PIPE_CRC_SOURCE_NONE:
> >  		return 0;
> >  	default:
> > @@ -612,9 +556,7 @@ int intel_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_name)
> >  	POSTING_READ(PIPE_CRC_CTL(crtc->index));
> >  
> >  	if (!source) {
> > -		if (IS_G4X(dev_priv))
> > -			g4x_undo_pipe_scramble_reset(dev_priv, crtc->index);
> > -		else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> > +		if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> >  			vlv_undo_pipe_scramble_reset(dev_priv, crtc->index);
> >  		else if ((IS_HASWELL(dev_priv) ||
> >  			  IS_BROADWELL(dev_priv)) && crtc->index == PIPE_A)
> > -- 
> > 2.19.2
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2019-02-14 20:43 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-14 19:22 [PATCH 1/4] drm/i915: Remove the "pf" crc source Ville Syrjala
2019-02-14 19:22 ` [PATCH 2/4] drm/i915: Use named initializers for the crc source name array Ville Syrjala
2019-02-14 20:33   ` Rodrigo Vivi
2019-02-14 19:22 ` [PATCH 3/4] drm/i915: Remove the broken DP CRC support for g4x Ville Syrjala
2019-02-14 20:38   ` Rodrigo Vivi
2019-02-14 20:43     ` Ville Syrjälä [this message]
2019-02-15  2:26   ` Dhinakaran Pandiyan
2019-02-15 12:47     ` Ville Syrjälä
2019-02-15 21:06       ` Dhinakaran Pandiyan
2019-02-15 21:34         ` Ville Syrjälä
2019-02-15 21:43           ` Pandiyan, Dhinakaran
2019-02-18 17:57             ` Ville Syrjälä
2019-02-20 19:32               ` Dhinakaran Pandiyan
2019-02-14 19:22 ` [PATCH 4/4] drm/i915: Extend skl+ crc sources with more planes Ville Syrjala
2019-02-14 20:47   ` Rodrigo Vivi
2019-02-14 21:29     ` Ville Syrjälä
2019-02-14 22:05       ` Rodrigo Vivi
2019-02-15  2:07   ` Dhinakaran Pandiyan
2019-02-20 20:59     ` Ville Syrjälä
2019-02-14 19:35 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/4] drm/i915: Remove the "pf" crc source Patchwork
2019-02-14 19:37 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-02-14 20:16 ` ✓ Fi.CI.BAT: success " Patchwork
2019-02-14 20:33 ` [PATCH 1/4] " Rodrigo Vivi
2019-02-15  1:32 ` Dhinakaran Pandiyan
2019-02-15  1:45   ` Dhinakaran Pandiyan
2019-02-15 12:50     ` Ville Syrjälä
2019-02-15  4:16 ` ✗ Fi.CI.IGT: failure for series starting with [1/4] " Patchwork
2019-02-18 21:07   ` Ville Syrjälä

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=20190214204330.GN20097@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox