intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] drm/i915: Enable fastboot, v2!
@ 2017-11-17 15:37 Maarten Lankhorst
  2017-11-17 15:37 ` [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled Maarten Lankhorst
                   ` (5 more replies)
  0 siblings, 6 replies; 14+ messages in thread
From: Maarten Lankhorst @ 2017-11-17 15:37 UTC (permalink / raw)
  To: intel-gfx

Small fixes for IPS, and then we flip the switch! :-)

Maarten Lankhorst (3):
  drm/i915: Make ips_enabled a property depending on whether IPS is
    enabled.
  drm/i915: Enable IPS for sprite plane
  drm/i915: Re-enable fastboot by default

 drivers/gpu/drm/i915/i915_params.h    |  2 +-
 drivers/gpu/drm/i915/intel_display.c  | 76 ++++++++++++++++-------------------
 drivers/gpu/drm/i915/intel_pipe_crc.c |  2 -
 3 files changed, 36 insertions(+), 44 deletions(-)

-- 
2.15.0

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled.
  2017-11-17 15:37 [PATCH 0/3] drm/i915: Enable fastboot, v2! Maarten Lankhorst
@ 2017-11-17 15:37 ` Maarten Lankhorst
  2017-11-17 15:52   ` Ville Syrjälä
  2017-11-17 15:37 ` [PATCH 2/3] drm/i915: Enable IPS for sprite plane Maarten Lankhorst
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Maarten Lankhorst @ 2017-11-17 15:37 UTC (permalink / raw)
  To: intel-gfx

ips_enabled was used as a variable of whether IPS can be enabled or not,
but should be used to test whether IPS is actually enabled.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c  | 75 ++++++++++++++++-------------------
 drivers/gpu/drm/i915/intel_pipe_crc.c |  2 -
 2 files changed, 35 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3b3dec1e6640..8283e80597bd 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4870,7 +4870,7 @@ void hsw_enable_ips(const struct intel_crtc_state *crtc_state)
 	struct drm_device *dev = crtc->base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 
-	if (!crtc->config->ips_enabled)
+	if (!crtc_state->ips_enabled)
 		return;
 
 	/*
@@ -4966,14 +4966,6 @@ intel_post_enable_primary(struct drm_crtc *crtc,
 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 	int pipe = intel_crtc->pipe;
 
-	/*
-	 * FIXME IPS should be fine as long as one plane is
-	 * enabled, but in practice it seems to have problems
-	 * when going from primary only to sprite only and vice
-	 * versa.
-	 */
-	hsw_enable_ips(new_crtc_state);
-
 	/*
 	 * Gen2 reports pipe underruns whenever all planes are disabled.
 	 * So don't enable underrun reporting before at least some planes
@@ -4989,10 +4981,9 @@ intel_post_enable_primary(struct drm_crtc *crtc,
 	intel_check_pch_fifo_underruns(dev_priv);
 }
 
-/* FIXME move all this to pre_plane_update() with proper state tracking */
+/* FIXME get rid of this and use pre_plane_update */
 static void
-intel_pre_disable_primary(struct drm_crtc *crtc,
-			  const struct intel_crtc_state *old_crtc_state)
+intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
 {
 	struct drm_device *dev = crtc->dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
@@ -5001,32 +4992,12 @@ intel_pre_disable_primary(struct drm_crtc *crtc,
 
 	/*
 	 * Gen2 reports pipe underruns whenever all planes are disabled.
-	 * So diasble underrun reporting before all the planes get disabled.
-	 * FIXME: Need to fix the logic to work when we turn off all planes
-	 * but leave the pipe running.
+	 * So disable underrun reporting before all the planes get disabled.
 	 */
 	if (IS_GEN2(dev_priv))
 		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
 
-	/*
-	 * FIXME IPS should be fine as long as one plane is
-	 * enabled, but in practice it seems to have problems
-	 * when going from primary only to sprite only and vice
-	 * versa.
-	 */
-	hsw_disable_ips(old_crtc_state);
-}
-
-/* FIXME get rid of this and use pre_plane_update */
-static void
-intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
-{
-	struct drm_device *dev = crtc->dev;
-	struct drm_i915_private *dev_priv = to_i915(dev);
-	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
-	int pipe = intel_crtc->pipe;
-
-	intel_pre_disable_primary(crtc, to_intel_crtc_state(crtc->state));
+	hsw_disable_ips(to_intel_crtc_state(crtc->state));
 
 	/*
 	 * Vblank time updates from the shadow to live plane control register
@@ -5058,6 +5029,11 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
 	if (pipe_config->update_wm_post && pipe_config->base.active)
 		intel_update_watermarks(crtc);
 
+	if (!old_crtc_state->ips_enabled ||
+	    needs_modeset(&old_crtc_state->base) ||
+	    pipe_config->update_pipe)
+		hsw_enable_ips(pipe_config);
+
 	if (old_pri_state) {
 		struct intel_plane_state *primary_state =
 			intel_atomic_get_new_plane_state(to_intel_atomic_state(old_state),
@@ -5088,6 +5064,9 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
 	struct intel_atomic_state *old_intel_state =
 		to_intel_atomic_state(old_state);
 
+	if (needs_modeset(&pipe_config->base) || !pipe_config->ips_enabled)
+		hsw_disable_ips(old_crtc_state);
+
 	if (old_pri_state) {
 		struct intel_plane_state *primary_state =
 			intel_atomic_get_new_plane_state(old_intel_state,
@@ -5096,10 +5075,13 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
 			to_intel_plane_state(old_pri_state);
 
 		intel_fbc_pre_update(crtc, pipe_config, primary_state);
-
-		if (old_primary_state->base.visible &&
+		/*
+		 * Gen2 reports pipe underruns whenever all planes are disabled.
+		 * So disable underrun reporting before all the planes get disabled.
+		 */
+		if (IS_GEN2(dev_priv) && old_primary_state->base.visible &&
 		    (modeset || !primary_state->base.visible))
-			intel_pre_disable_primary(&crtc->base, old_crtc_state);
+			intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, false);
 	}
 
 	/*
@@ -6231,12 +6213,25 @@ static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
 static bool pipe_config_supports_ips(struct drm_i915_private *dev_priv,
 				     struct intel_crtc_state *pipe_config)
 {
+	u8 visible_planes;
+
 	if (pipe_config->ips_force_disable)
 		return false;
 
 	if (pipe_config->pipe_bpp > 24)
 		return false;
 
+	visible_planes = pipe_config->active_planes & ~BIT(PLANE_CURSOR);
+
+	/*
+	 * FIXME IPS should be fine as long as one plane is
+	 * enabled, but in practice it seems to have problems
+	 * when going from primary only to sprite only and vice
+	 * versa.
+	 */
+	if (visible_planes != BIT(PLANE_PRIMARY))
+		return false;
+
 	/* HSW can handle pixel rate up to cdclk? */
 	if (IS_HASWELL(dev_priv))
 		return true;
@@ -6378,9 +6373,6 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
 
 	intel_crtc_compute_pixel_rate(pipe_config);
 
-	if (HAS_IPS(dev_priv))
-		hsw_compute_ips_config(crtc, pipe_config);
-
 	if (pipe_config->has_pch_encoder)
 		return ironlake_fdi_compute_config(crtc, pipe_config);
 
@@ -10488,6 +10480,9 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
 							 pipe_config);
 	}
 
+	if (HAS_IPS(dev_priv))
+		hsw_compute_ips_config(intel_crtc, pipe_config);
+
 	return ret;
 }
 
diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
index 61641d479b93..1f5cd572a7ff 100644
--- a/drivers/gpu/drm/i915/intel_pipe_crc.c
+++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
@@ -541,8 +541,6 @@ static void hsw_pipe_A_crc_wa(struct drm_i915_private *dev_priv,
 		 * completely disable it.
 		 */
 		pipe_config->ips_force_disable = enable;
-		if (pipe_config->ips_enabled == enable)
-			pipe_config->base.connectors_changed = true;
 	}
 
 	if (IS_HASWELL(dev_priv)) {
-- 
2.15.0

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

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/3] drm/i915: Enable IPS for sprite plane
  2017-11-17 15:37 [PATCH 0/3] drm/i915: Enable fastboot, v2! Maarten Lankhorst
  2017-11-17 15:37 ` [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled Maarten Lankhorst
@ 2017-11-17 15:37 ` Maarten Lankhorst
  2017-11-17 15:55   ` Ville Syrjälä
  2017-11-17 15:37 ` [(resend) PATCH 3/3] drm/i915: Re-enable fastboot by default Maarten Lankhorst
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Maarten Lankhorst @ 2017-11-17 15:37 UTC (permalink / raw)
  To: intel-gfx

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 8283e80597bd..38a1cdb3dbb2 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5044,7 +5044,7 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
 		intel_fbc_post_update(crtc);
 
 		if (primary_state->base.visible &&
-		    (needs_modeset(&pipe_config->base) ||
+		    (pipe_config->disable_cxsr ||
 		     !old_primary_state->base.visible))
 			intel_post_enable_primary(&crtc->base, pipe_config);
 	}
@@ -5064,7 +5064,7 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
 	struct intel_atomic_state *old_intel_state =
 		to_intel_atomic_state(old_state);
 
-	if (needs_modeset(&pipe_config->base) || !pipe_config->ips_enabled)
+	if (pipe_config->disable_cxsr || !pipe_config->ips_enabled)
 		hsw_disable_ips(old_crtc_state);
 
 	if (old_pri_state) {
@@ -6224,12 +6224,11 @@ static bool pipe_config_supports_ips(struct drm_i915_private *dev_priv,
 	visible_planes = pipe_config->active_planes & ~BIT(PLANE_CURSOR);
 
 	/*
-	 * FIXME IPS should be fine as long as one plane is
-	 * enabled, but in practice it seems to have problems
-	 * when going from primary only to sprite only and vice
-	 * versa.
+	 * IPS should be fine as long as one plane is enabled, but
+	 * temporarily disable it when when going from primary only
+	 * to sprite only and vice versa.
 	 */
-	if (visible_planes != BIT(PLANE_PRIMARY))
+	if (hweight32(visible_planes) != 1)
 		return false;
 
 	/* HSW can handle pixel rate up to cdclk? */
-- 
2.15.0

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

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [(resend) PATCH 3/3] drm/i915: Re-enable fastboot by default
  2017-11-17 15:37 [PATCH 0/3] drm/i915: Enable fastboot, v2! Maarten Lankhorst
  2017-11-17 15:37 ` [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled Maarten Lankhorst
  2017-11-17 15:37 ` [PATCH 2/3] drm/i915: Enable IPS for sprite plane Maarten Lankhorst
@ 2017-11-17 15:37 ` Maarten Lankhorst
  2017-11-17 16:46 ` ✓ Fi.CI.BAT: success for drm/i915: Enable fastboot, v2! Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 14+ messages in thread
From: Maarten Lankhorst @ 2017-11-17 15:37 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Daniel Vetter

This fix was originally reverted because it left a chromebook pixel
black, and no immediate fix was available. This has been fixed in the
meantime.

Rather than trying to remove the parameter, set it to default to true
for now, so we can always back out if required.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Testcase: kms_panel_fitting
---
 drivers/gpu/drm/i915/i915_params.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index c7292268ed43..b99cb58801e6 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -57,7 +57,7 @@
 	param(bool, alpha_support, IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT)) \
 	param(bool, enable_cmd_parser, true) \
 	param(bool, enable_hangcheck, true) \
-	param(bool, fastboot, false) \
+	param(bool, fastboot, true) \
 	param(bool, prefault_disable, false) \
 	param(bool, load_detect_test, false) \
 	param(bool, force_reset_modeset_test, false) \
-- 
2.15.0

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

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled.
  2017-11-17 15:37 ` [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled Maarten Lankhorst
@ 2017-11-17 15:52   ` Ville Syrjälä
  2017-11-20 10:48     ` Maarten Lankhorst
  0 siblings, 1 reply; 14+ messages in thread
From: Ville Syrjälä @ 2017-11-17 15:52 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx

On Fri, Nov 17, 2017 at 04:37:54PM +0100, Maarten Lankhorst wrote:
> ips_enabled was used as a variable of whether IPS can be enabled or not,
> but should be used to test whether IPS is actually enabled.
> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c  | 75 ++++++++++++++++-------------------
>  drivers/gpu/drm/i915/intel_pipe_crc.c |  2 -
>  2 files changed, 35 insertions(+), 42 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 3b3dec1e6640..8283e80597bd 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -4870,7 +4870,7 @@ void hsw_enable_ips(const struct intel_crtc_state *crtc_state)
>  	struct drm_device *dev = crtc->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
>  
> -	if (!crtc->config->ips_enabled)
> +	if (!crtc_state->ips_enabled)
>  		return;
>  
>  	/*
> @@ -4966,14 +4966,6 @@ intel_post_enable_primary(struct drm_crtc *crtc,
>  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>  	int pipe = intel_crtc->pipe;
>  
> -	/*
> -	 * FIXME IPS should be fine as long as one plane is
> -	 * enabled, but in practice it seems to have problems
> -	 * when going from primary only to sprite only and vice
> -	 * versa.
> -	 */
> -	hsw_enable_ips(new_crtc_state);
> -
>  	/*
>  	 * Gen2 reports pipe underruns whenever all planes are disabled.
>  	 * So don't enable underrun reporting before at least some planes
> @@ -4989,10 +4981,9 @@ intel_post_enable_primary(struct drm_crtc *crtc,
>  	intel_check_pch_fifo_underruns(dev_priv);
>  }
>  
> -/* FIXME move all this to pre_plane_update() with proper state tracking */
> +/* FIXME get rid of this and use pre_plane_update */
>  static void
> -intel_pre_disable_primary(struct drm_crtc *crtc,
> -			  const struct intel_crtc_state *old_crtc_state)
> +intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
>  {
>  	struct drm_device *dev = crtc->dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -5001,32 +4992,12 @@ intel_pre_disable_primary(struct drm_crtc *crtc,
>  
>  	/*
>  	 * Gen2 reports pipe underruns whenever all planes are disabled.
> -	 * So diasble underrun reporting before all the planes get disabled.
> -	 * FIXME: Need to fix the logic to work when we turn off all planes
> -	 * but leave the pipe running.
> +	 * So disable underrun reporting before all the planes get disabled.
>  	 */
>  	if (IS_GEN2(dev_priv))
>  		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
>  
> -	/*
> -	 * FIXME IPS should be fine as long as one plane is
> -	 * enabled, but in practice it seems to have problems
> -	 * when going from primary only to sprite only and vice
> -	 * versa.
> -	 */
> -	hsw_disable_ips(old_crtc_state);
> -}
> -
> -/* FIXME get rid of this and use pre_plane_update */
> -static void
> -intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
> -{
> -	struct drm_device *dev = crtc->dev;
> -	struct drm_i915_private *dev_priv = to_i915(dev);
> -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> -	int pipe = intel_crtc->pipe;
> -
> -	intel_pre_disable_primary(crtc, to_intel_crtc_state(crtc->state));
> +	hsw_disable_ips(to_intel_crtc_state(crtc->state));

BTW thinking about the lack of readout on BDW. In case the BIOS ever
enables IPS, I think we should sanitize ips_enabled to true on BDW.
Or maybe just have the redaout code always set ips_enabled=true on BDW?
That way the first modeset will try to turn it off regardless of whether it
was enabled or not.

>  
>  	/*
>  	 * Vblank time updates from the shadow to live plane control register
> @@ -5058,6 +5029,11 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
>  	if (pipe_config->update_wm_post && pipe_config->base.active)
>  		intel_update_watermarks(crtc);
>  
> +	if (!old_crtc_state->ips_enabled ||
> +	    needs_modeset(&old_crtc_state->base) ||

Shoudldn't that be needs_modeset(new_crtc_state)?

> +	    pipe_config->update_pipe)

Why do we have to check that?

> +		hsw_enable_ips(pipe_config);
> +
>  	if (old_pri_state) {
>  		struct intel_plane_state *primary_state =
>  			intel_atomic_get_new_plane_state(to_intel_atomic_state(old_state),
> @@ -5088,6 +5064,9 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
>  	struct intel_atomic_state *old_intel_state =
>  		to_intel_atomic_state(old_state);
>  
> +	if (needs_modeset(&pipe_config->base) || !pipe_config->ips_enabled)
> +		hsw_disable_ips(old_crtc_state);
> +
>  	if (old_pri_state) {
>  		struct intel_plane_state *primary_state =
>  			intel_atomic_get_new_plane_state(old_intel_state,
> @@ -5096,10 +5075,13 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
>  			to_intel_plane_state(old_pri_state);
>  
>  		intel_fbc_pre_update(crtc, pipe_config, primary_state);
> -
> -		if (old_primary_state->base.visible &&
> +		/*
> +		 * Gen2 reports pipe underruns whenever all planes are disabled.
> +		 * So disable underrun reporting before all the planes get disabled.
> +		 */
> +		if (IS_GEN2(dev_priv) && old_primary_state->base.visible &&
>  		    (modeset || !primary_state->base.visible))
> -			intel_pre_disable_primary(&crtc->base, old_crtc_state);
> +			intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, false);
>  	}
>  
>  	/*
> @@ -6231,12 +6213,25 @@ static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
>  static bool pipe_config_supports_ips(struct drm_i915_private *dev_priv,
>  				     struct intel_crtc_state *pipe_config)
>  {
> +	u8 visible_planes;
> +
>  	if (pipe_config->ips_force_disable)
>  		return false;
>  
>  	if (pipe_config->pipe_bpp > 24)
>  		return false;
>  
> +	visible_planes = pipe_config->active_planes & ~BIT(PLANE_CURSOR);
> +
> +	/*
> +	 * FIXME IPS should be fine as long as one plane is
> +	 * enabled, but in practice it seems to have problems
> +	 * when going from primary only to sprite only and vice
> +	 * versa.
> +	 */
> +	if (visible_planes != BIT(PLANE_PRIMARY))
> +		return false;

I think that should be '(active_planes & PRIMARY) == 0'. As in we don't
care what the other planes are doing, IPS just tracks the primary state
(for the time being).

What's missing from this patch is changing the cdclk vs. ips workaround
to not assume that cdclk can be increased to accomodate ips.

> +
>  	/* HSW can handle pixel rate up to cdclk? */
>  	if (IS_HASWELL(dev_priv))
>  		return true;
> @@ -6378,9 +6373,6 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
>  
>  	intel_crtc_compute_pixel_rate(pipe_config);
>  
> -	if (HAS_IPS(dev_priv))
> -		hsw_compute_ips_config(crtc, pipe_config);
> -
>  	if (pipe_config->has_pch_encoder)
>  		return ironlake_fdi_compute_config(crtc, pipe_config);
>  
> @@ -10488,6 +10480,9 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
>  							 pipe_config);
>  	}
>  
> +	if (HAS_IPS(dev_priv))
> +		hsw_compute_ips_config(intel_crtc, pipe_config);
> +
>  	return ret;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
> index 61641d479b93..1f5cd572a7ff 100644
> --- a/drivers/gpu/drm/i915/intel_pipe_crc.c
> +++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
> @@ -541,8 +541,6 @@ static void hsw_pipe_A_crc_wa(struct drm_i915_private *dev_priv,
>  		 * completely disable it.
>  		 */
>  		pipe_config->ips_force_disable = enable;
> -		if (pipe_config->ips_enabled == enable)
> -			pipe_config->base.connectors_changed = true;
>  	}
>  
>  	if (IS_HASWELL(dev_priv)) {
> -- 
> 2.15.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/3] drm/i915: Enable IPS for sprite plane
  2017-11-17 15:37 ` [PATCH 2/3] drm/i915: Enable IPS for sprite plane Maarten Lankhorst
@ 2017-11-17 15:55   ` Ville Syrjälä
  2017-11-20 11:12     ` Maarten Lankhorst
  0 siblings, 1 reply; 14+ messages in thread
From: Ville Syrjälä @ 2017-11-17 15:55 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx

On Fri, Nov 17, 2017 at 04:37:55PM +0100, Maarten Lankhorst wrote:
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 8283e80597bd..38a1cdb3dbb2 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -5044,7 +5044,7 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
>  		intel_fbc_post_update(crtc);
>  
>  		if (primary_state->base.visible &&
> -		    (needs_modeset(&pipe_config->base) ||
> +		    (pipe_config->disable_cxsr ||
>  		     !old_primary_state->base.visible))
>  			intel_post_enable_primary(&crtc->base, pipe_config);
>  	}
> @@ -5064,7 +5064,7 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
>  	struct intel_atomic_state *old_intel_state =
>  		to_intel_atomic_state(old_state);
>  
> -	if (needs_modeset(&pipe_config->base) || !pipe_config->ips_enabled)
> +	if (pipe_config->disable_cxsr || !pipe_config->ips_enabled)

What does IPS have to do with cxsr?

>  		hsw_disable_ips(old_crtc_state);
>  
>  	if (old_pri_state) {
> @@ -6224,12 +6224,11 @@ static bool pipe_config_supports_ips(struct drm_i915_private *dev_priv,
>  	visible_planes = pipe_config->active_planes & ~BIT(PLANE_CURSOR);
>  
>  	/*
> -	 * FIXME IPS should be fine as long as one plane is
> -	 * enabled, but in practice it seems to have problems
> -	 * when going from primary only to sprite only and vice
> -	 * versa.
> +	 * IPS should be fine as long as one plane is enabled, but
> +	 * temporarily disable it when when going from primary only
> +	 * to sprite only and vice versa.
>  	 */
> -	if (visible_planes != BIT(PLANE_PRIMARY))
> +	if (hweight32(visible_planes) != 1)
>  		return false;

That should just be
if (active_planes == 0)
	return false;

assuming we have no problems with the toggling between
primary only and sprite only.

I can't recall how the cursor affecrs IPS. But I think IPS should 
work as long as any plane (including the cursor) is enabled.

>  
>  	/* HSW can handle pixel rate up to cdclk? */
> -- 
> 2.15.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* ✓ Fi.CI.BAT: success for drm/i915: Enable fastboot, v2!
  2017-11-17 15:37 [PATCH 0/3] drm/i915: Enable fastboot, v2! Maarten Lankhorst
                   ` (2 preceding siblings ...)
  2017-11-17 15:37 ` [(resend) PATCH 3/3] drm/i915: Re-enable fastboot by default Maarten Lankhorst
@ 2017-11-17 16:46 ` Patchwork
  2017-11-17 17:58 ` [PATCH 0/3] " Rodrigo Vivi
  2017-11-17 18:04 ` ✓ Fi.CI.IGT: success for " Patchwork
  5 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2017-11-17 16:46 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Enable fastboot, v2!
URL   : https://patchwork.freedesktop.org/series/34010/
State : success

== Summary ==

Series 34010v1 drm/i915: Enable fastboot, v2!
https://patchwork.freedesktop.org/api/1.0/series/34010/revisions/1/mbox/

Test chamelium:
        Subgroup dp-crc-fast:
                fail       -> PASS       (fi-kbl-7500u) fdo#103163

fdo#103163 https://bugs.freedesktop.org/show_bug.cgi?id=103163

fi-bdw-5557u     total:289  pass:268  dwarn:0   dfail:0   fail:0   skip:21  time:445s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:457s
fi-blb-e6850     total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:390s
fi-bsw-n3050     total:289  pass:243  dwarn:0   dfail:0   fail:0   skip:46  time:539s
fi-bwr-2160      total:289  pass:183  dwarn:0   dfail:0   fail:0   skip:106 time:278s
fi-bxt-dsi       total:289  pass:259  dwarn:0   dfail:0   fail:0   skip:30  time:508s
fi-bxt-j4205     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:511s
fi-byt-j1900     total:289  pass:254  dwarn:0   dfail:0   fail:0   skip:35  time:499s
fi-byt-n2820     total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:490s
fi-elk-e7500     total:289  pass:229  dwarn:0   dfail:0   fail:0   skip:60  time:426s
fi-gdg-551       total:289  pass:178  dwarn:1   dfail:0   fail:1   skip:109 time:271s
fi-glk-1         total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:543s
fi-hsw-4770      total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:431s
fi-hsw-4770r     total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:440s
fi-ilk-650       total:289  pass:228  dwarn:0   dfail:0   fail:0   skip:61  time:424s
fi-ivb-3520m     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:483s
fi-ivb-3770      total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:462s
fi-kbl-7500u     total:289  pass:264  dwarn:1   dfail:0   fail:0   skip:24  time:487s
fi-kbl-7560u     total:289  pass:270  dwarn:0   dfail:0   fail:0   skip:19  time:541s
fi-kbl-7567u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:475s
fi-kbl-r         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:533s
fi-pnv-d510      total:289  pass:222  dwarn:1   dfail:0   fail:0   skip:66  time:578s
fi-skl-6260u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:455s
fi-skl-6600u     total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:541s
fi-skl-6700hq    total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:561s
fi-skl-6700k     total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:521s
fi-skl-6770hq    total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:504s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:458s
fi-snb-2520m     total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:561s
fi-snb-2600      total:289  pass:249  dwarn:0   dfail:0   fail:0   skip:40  time:419s
Blacklisted hosts:
fi-cfl-s2        total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:615s
fi-glk-dsi       total:289  pass:259  dwarn:0   dfail:0   fail:0   skip:30  time:494s

ed17259c4b681ddc178c14368f1a3db512016989 drm-tip: 2017y-11m-17d-12h-03m-24s UTC integration manifest
f8d72017605a drm/i915: Re-enable fastboot by default
d8f81e71499f drm/i915: Enable IPS for sprite plane
faa673850459 drm/i915: Make ips_enabled a property depending on whether IPS is enabled.

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7175/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/3] drm/i915: Enable fastboot, v2!
  2017-11-17 15:37 [PATCH 0/3] drm/i915: Enable fastboot, v2! Maarten Lankhorst
                   ` (3 preceding siblings ...)
  2017-11-17 16:46 ` ✓ Fi.CI.BAT: success for drm/i915: Enable fastboot, v2! Patchwork
@ 2017-11-17 17:58 ` Rodrigo Vivi
  2017-11-17 18:04 ` ✓ Fi.CI.IGT: success for " Patchwork
  5 siblings, 0 replies; 14+ messages in thread
From: Rodrigo Vivi @ 2017-11-17 17:58 UTC (permalink / raw)
  To: Maarten Lankhorst, Pandiyan, Dhinakaran; +Cc: intel-gfx

On Fri, Nov 17, 2017 at 03:37:53PM +0000, Maarten Lankhorst wrote:
> Small fixes for IPS, and then we flip the switch! :-)
> 
> Maarten Lankhorst (3):
>   drm/i915: Make ips_enabled a property depending on whether IPS is
>     enabled.
>   drm/i915: Enable IPS for sprite plane
>   drm/i915: Re-enable fastboot by default

Just a heads up to DK that this will for sure impact PSR.

PSR is enabled when we enable DDI. With fast boot that path
is usually not executed any longer so PSR will never get enabled.

Not sure about FBC and DRRS though...

Thanks,
Rodrigo.

> 
>  drivers/gpu/drm/i915/i915_params.h    |  2 +-
>  drivers/gpu/drm/i915/intel_display.c  | 76 ++++++++++++++++-------------------
>  drivers/gpu/drm/i915/intel_pipe_crc.c |  2 -
>  3 files changed, 36 insertions(+), 44 deletions(-)
> 
> -- 
> 2.15.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* ✓ Fi.CI.IGT: success for drm/i915: Enable fastboot, v2!
  2017-11-17 15:37 [PATCH 0/3] drm/i915: Enable fastboot, v2! Maarten Lankhorst
                   ` (4 preceding siblings ...)
  2017-11-17 17:58 ` [PATCH 0/3] " Rodrigo Vivi
@ 2017-11-17 18:04 ` Patchwork
  5 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2017-11-17 18:04 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Enable fastboot, v2!
URL   : https://patchwork.freedesktop.org/series/34010/
State : success

== Summary ==

Test drv_selftest:
        Subgroup mock_sanitycheck:
                pass       -> DMESG-WARN (shard-hsw) fdo#103719
Test kms_frontbuffer_tracking:
        Subgroup fbc-1p-offscren-pri-shrfb-draw-blt:
                fail       -> PASS       (shard-snb) fdo#101623
        Subgroup fbc-1p-primscrn-pri-shrfb-draw-mmap-gtt:
                skip       -> PASS       (shard-hsw) fdo#103167
Test perf:
        Subgroup polling:
                pass       -> FAIL       (shard-hsw) fdo#102252
Test kms_busy:
        Subgroup extended-modeset-hang-newfb-with-reset-render-a:
                skip       -> PASS       (shard-hsw) fdo#102249
Test kms_atomic_transition:
        Subgroup 1x-modeset-transitions-fencing:
                skip       -> PASS       (shard-hsw)
Test kms_plane:
        Subgroup plane-position-hole-pipe-a-planes:
                skip       -> PASS       (shard-hsw)
Test kms_setmode:
        Subgroup basic:
                fail       -> PASS       (shard-hsw) fdo#99912
Test drv_module_reload:
        Subgroup basic-reload-inject:
                dmesg-warn -> PASS       (shard-hsw) fdo#102707

fdo#103719 https://bugs.freedesktop.org/show_bug.cgi?id=103719
fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
fdo#102249 https://bugs.freedesktop.org/show_bug.cgi?id=102249
fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
fdo#102707 https://bugs.freedesktop.org/show_bug.cgi?id=102707

shard-hsw        total:2585 pass:1473 dwarn:2   dfail:1   fail:10  skip:1099 time:9448s
shard-snb        total:2585 pass:1261 dwarn:1   dfail:1   fail:11  skip:1311 time:8002s
Blacklisted hosts:
shard-apl        total:2563 pass:1600 dwarn:2   dfail:0   fail:23  skip:936 time:12973s
shard-kbl        total:2492 pass:1659 dwarn:9   dfail:1   fail:21  skip:801 time:10337s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7175/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled.
  2017-11-17 15:52   ` Ville Syrjälä
@ 2017-11-20 10:48     ` Maarten Lankhorst
  2017-11-20 10:58       ` Ville Syrjälä
  0 siblings, 1 reply; 14+ messages in thread
From: Maarten Lankhorst @ 2017-11-20 10:48 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

Op 17-11-17 om 16:52 schreef Ville Syrjälä:
> On Fri, Nov 17, 2017 at 04:37:54PM +0100, Maarten Lankhorst wrote:
>> ips_enabled was used as a variable of whether IPS can be enabled or not,
>> but should be used to test whether IPS is actually enabled.
>>
>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>> ---
>>  drivers/gpu/drm/i915/intel_display.c  | 75 ++++++++++++++++-------------------
>>  drivers/gpu/drm/i915/intel_pipe_crc.c |  2 -
>>  2 files changed, 35 insertions(+), 42 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 3b3dec1e6640..8283e80597bd 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -4870,7 +4870,7 @@ void hsw_enable_ips(const struct intel_crtc_state *crtc_state)
>>  	struct drm_device *dev = crtc->base.dev;
>>  	struct drm_i915_private *dev_priv = to_i915(dev);
>>  
>> -	if (!crtc->config->ips_enabled)
>> +	if (!crtc_state->ips_enabled)
>>  		return;
>>  
>>  	/*
>> @@ -4966,14 +4966,6 @@ intel_post_enable_primary(struct drm_crtc *crtc,
>>  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>>  	int pipe = intel_crtc->pipe;
>>  
>> -	/*
>> -	 * FIXME IPS should be fine as long as one plane is
>> -	 * enabled, but in practice it seems to have problems
>> -	 * when going from primary only to sprite only and vice
>> -	 * versa.
>> -	 */
>> -	hsw_enable_ips(new_crtc_state);
>> -
>>  	/*
>>  	 * Gen2 reports pipe underruns whenever all planes are disabled.
>>  	 * So don't enable underrun reporting before at least some planes
>> @@ -4989,10 +4981,9 @@ intel_post_enable_primary(struct drm_crtc *crtc,
>>  	intel_check_pch_fifo_underruns(dev_priv);
>>  }
>>  
>> -/* FIXME move all this to pre_plane_update() with proper state tracking */
>> +/* FIXME get rid of this and use pre_plane_update */
>>  static void
>> -intel_pre_disable_primary(struct drm_crtc *crtc,
>> -			  const struct intel_crtc_state *old_crtc_state)
>> +intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
>>  {
>>  	struct drm_device *dev = crtc->dev;
>>  	struct drm_i915_private *dev_priv = to_i915(dev);
>> @@ -5001,32 +4992,12 @@ intel_pre_disable_primary(struct drm_crtc *crtc,
>>  
>>  	/*
>>  	 * Gen2 reports pipe underruns whenever all planes are disabled.
>> -	 * So diasble underrun reporting before all the planes get disabled.
>> -	 * FIXME: Need to fix the logic to work when we turn off all planes
>> -	 * but leave the pipe running.
>> +	 * So disable underrun reporting before all the planes get disabled.
>>  	 */
>>  	if (IS_GEN2(dev_priv))
>>  		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
>>  
>> -	/*
>> -	 * FIXME IPS should be fine as long as one plane is
>> -	 * enabled, but in practice it seems to have problems
>> -	 * when going from primary only to sprite only and vice
>> -	 * versa.
>> -	 */
>> -	hsw_disable_ips(old_crtc_state);
>> -}
>> -
>> -/* FIXME get rid of this and use pre_plane_update */
>> -static void
>> -intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
>> -{
>> -	struct drm_device *dev = crtc->dev;
>> -	struct drm_i915_private *dev_priv = to_i915(dev);
>> -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>> -	int pipe = intel_crtc->pipe;
>> -
>> -	intel_pre_disable_primary(crtc, to_intel_crtc_state(crtc->state));
>> +	hsw_disable_ips(to_intel_crtc_state(crtc->state));
> BTW thinking about the lack of readout on BDW. In case the BIOS ever
> enables IPS, I think we should sanitize ips_enabled to true on BDW.
> Or maybe just have the redaout code always set ips_enabled=true on BDW?
> That way the first modeset will try to turn it off regardless of whether it
> was enabled or not.
Yes, good idea. :)
>>  
>>  	/*
>>  	 * Vblank time updates from the shadow to live plane control register
>> @@ -5058,6 +5029,11 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
>>  	if (pipe_config->update_wm_post && pipe_config->base.active)
>>  		intel_update_watermarks(crtc);
>>  
>> +	if (!old_crtc_state->ips_enabled ||
>> +	    needs_modeset(&old_crtc_state->base) ||
> Shoudldn't that be needs_modeset(new_crtc_state)?
Yes, oops..
>> +	    pipe_config->update_pipe)
> Why do we have to check that?
In case we take over the hw state from bios..

If we default ips_enabled to true on BDW and read out on HSW again, then this
check will make IPS work, regardless of bios setting..

>> +		hsw_enable_ips(pipe_config);
>> +
>>  	if (old_pri_state) {
>>  		struct intel_plane_state *primary_state =
>>  			intel_atomic_get_new_plane_state(to_intel_atomic_state(old_state),
>> @@ -5088,6 +5064,9 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
>>  	struct intel_atomic_state *old_intel_state =
>>  		to_intel_atomic_state(old_state);
>>  
>> +	if (needs_modeset(&pipe_config->base) || !pipe_config->ips_enabled)
>> +		hsw_disable_ips(old_crtc_state);
>> +
>>  	if (old_pri_state) {
>>  		struct intel_plane_state *primary_state =
>>  			intel_atomic_get_new_plane_state(old_intel_state,
>> @@ -5096,10 +5075,13 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
>>  			to_intel_plane_state(old_pri_state);
>>  
>>  		intel_fbc_pre_update(crtc, pipe_config, primary_state);
>> -
>> -		if (old_primary_state->base.visible &&
>> +		/*
>> +		 * Gen2 reports pipe underruns whenever all planes are disabled.
>> +		 * So disable underrun reporting before all the planes get disabled.
>> +		 */
>> +		if (IS_GEN2(dev_priv) && old_primary_state->base.visible &&
>>  		    (modeset || !primary_state->base.visible))
>> -			intel_pre_disable_primary(&crtc->base, old_crtc_state);
>> +			intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, false);
>>  	}
>>  
>>  	/*
>> @@ -6231,12 +6213,25 @@ static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
>>  static bool pipe_config_supports_ips(struct drm_i915_private *dev_priv,
>>  				     struct intel_crtc_state *pipe_config)
>>  {
>> +	u8 visible_planes;
>> +
>>  	if (pipe_config->ips_force_disable)
>>  		return false;
>>  
>>  	if (pipe_config->pipe_bpp > 24)
>>  		return false;
>>  
>> +	visible_planes = pipe_config->active_planes & ~BIT(PLANE_CURSOR);
>> +
>> +	/*
>> +	 * FIXME IPS should be fine as long as one plane is
>> +	 * enabled, but in practice it seems to have problems
>> +	 * when going from primary only to sprite only and vice
>> +	 * versa.
>> +	 */
>> +	if (visible_planes != BIT(PLANE_PRIMARY))
>> +		return false;
> I think that should be '(active_planes & PRIMARY) == 0'. As in we don't
> care what the other planes are doing, IPS just tracks the primary state
> (for the time being).
Oops, faultily assumed from the comment that IPS only worked with the primary plane
or sprite plane, not both. I'll correct it.
> What's missing from this patch is changing the cdclk vs. ips workaround
> to not assume that cdclk can be increased to accomodate ips.
Hm true, I missed that..

Will send a new version in a bit.
>> +
>>  	/* HSW can handle pixel rate up to cdclk? */
>>  	if (IS_HASWELL(dev_priv))
>>  		return true;
>> @@ -6378,9 +6373,6 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
>>  
>>  	intel_crtc_compute_pixel_rate(pipe_config);
>>  
>> -	if (HAS_IPS(dev_priv))
>> -		hsw_compute_ips_config(crtc, pipe_config);
>> -
>>  	if (pipe_config->has_pch_encoder)
>>  		return ironlake_fdi_compute_config(crtc, pipe_config);
>>  
>> @@ -10488,6 +10480,9 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
>>  							 pipe_config);
>>  	}
>>  
>> +	if (HAS_IPS(dev_priv))
>> +		hsw_compute_ips_config(intel_crtc, pipe_config);
>> +
>>  	return ret;
>>  }
>>  
>> diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
>> index 61641d479b93..1f5cd572a7ff 100644
>> --- a/drivers/gpu/drm/i915/intel_pipe_crc.c
>> +++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
>> @@ -541,8 +541,6 @@ static void hsw_pipe_A_crc_wa(struct drm_i915_private *dev_priv,
>>  		 * completely disable it.
>>  		 */
>>  		pipe_config->ips_force_disable = enable;
>> -		if (pipe_config->ips_enabled == enable)
>> -			pipe_config->base.connectors_changed = true;
>>  	}
>>  
>>  	if (IS_HASWELL(dev_priv)) {
>> -- 
>> 2.15.0
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled.
  2017-11-20 10:48     ` Maarten Lankhorst
@ 2017-11-20 10:58       ` Ville Syrjälä
  2017-11-20 12:09         ` Maarten Lankhorst
  0 siblings, 1 reply; 14+ messages in thread
From: Ville Syrjälä @ 2017-11-20 10:58 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx

On Mon, Nov 20, 2017 at 11:48:22AM +0100, Maarten Lankhorst wrote:
> Op 17-11-17 om 16:52 schreef Ville Syrjälä:
> > On Fri, Nov 17, 2017 at 04:37:54PM +0100, Maarten Lankhorst wrote:
> >> ips_enabled was used as a variable of whether IPS can be enabled or not,
> >> but should be used to test whether IPS is actually enabled.
> >>
> >> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >> ---
> >>  drivers/gpu/drm/i915/intel_display.c  | 75 ++++++++++++++++-------------------
> >>  drivers/gpu/drm/i915/intel_pipe_crc.c |  2 -
> >>  2 files changed, 35 insertions(+), 42 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> >> index 3b3dec1e6640..8283e80597bd 100644
> >> --- a/drivers/gpu/drm/i915/intel_display.c
> >> +++ b/drivers/gpu/drm/i915/intel_display.c
> >> @@ -4870,7 +4870,7 @@ void hsw_enable_ips(const struct intel_crtc_state *crtc_state)
> >>  	struct drm_device *dev = crtc->base.dev;
> >>  	struct drm_i915_private *dev_priv = to_i915(dev);
> >>  
> >> -	if (!crtc->config->ips_enabled)
> >> +	if (!crtc_state->ips_enabled)
> >>  		return;
> >>  
> >>  	/*
> >> @@ -4966,14 +4966,6 @@ intel_post_enable_primary(struct drm_crtc *crtc,
> >>  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> >>  	int pipe = intel_crtc->pipe;
> >>  
> >> -	/*
> >> -	 * FIXME IPS should be fine as long as one plane is
> >> -	 * enabled, but in practice it seems to have problems
> >> -	 * when going from primary only to sprite only and vice
> >> -	 * versa.
> >> -	 */
> >> -	hsw_enable_ips(new_crtc_state);
> >> -
> >>  	/*
> >>  	 * Gen2 reports pipe underruns whenever all planes are disabled.
> >>  	 * So don't enable underrun reporting before at least some planes
> >> @@ -4989,10 +4981,9 @@ intel_post_enable_primary(struct drm_crtc *crtc,
> >>  	intel_check_pch_fifo_underruns(dev_priv);
> >>  }
> >>  
> >> -/* FIXME move all this to pre_plane_update() with proper state tracking */
> >> +/* FIXME get rid of this and use pre_plane_update */
> >>  static void
> >> -intel_pre_disable_primary(struct drm_crtc *crtc,
> >> -			  const struct intel_crtc_state *old_crtc_state)
> >> +intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
> >>  {
> >>  	struct drm_device *dev = crtc->dev;
> >>  	struct drm_i915_private *dev_priv = to_i915(dev);
> >> @@ -5001,32 +4992,12 @@ intel_pre_disable_primary(struct drm_crtc *crtc,
> >>  
> >>  	/*
> >>  	 * Gen2 reports pipe underruns whenever all planes are disabled.
> >> -	 * So diasble underrun reporting before all the planes get disabled.
> >> -	 * FIXME: Need to fix the logic to work when we turn off all planes
> >> -	 * but leave the pipe running.
> >> +	 * So disable underrun reporting before all the planes get disabled.
> >>  	 */
> >>  	if (IS_GEN2(dev_priv))
> >>  		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
> >>  
> >> -	/*
> >> -	 * FIXME IPS should be fine as long as one plane is
> >> -	 * enabled, but in practice it seems to have problems
> >> -	 * when going from primary only to sprite only and vice
> >> -	 * versa.
> >> -	 */
> >> -	hsw_disable_ips(old_crtc_state);
> >> -}
> >> -
> >> -/* FIXME get rid of this and use pre_plane_update */
> >> -static void
> >> -intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
> >> -{
> >> -	struct drm_device *dev = crtc->dev;
> >> -	struct drm_i915_private *dev_priv = to_i915(dev);
> >> -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> >> -	int pipe = intel_crtc->pipe;
> >> -
> >> -	intel_pre_disable_primary(crtc, to_intel_crtc_state(crtc->state));
> >> +	hsw_disable_ips(to_intel_crtc_state(crtc->state));
> > BTW thinking about the lack of readout on BDW. In case the BIOS ever
> > enables IPS, I think we should sanitize ips_enabled to true on BDW.
> > Or maybe just have the redaout code always set ips_enabled=true on BDW?
> > That way the first modeset will try to turn it off regardless of whether it
> > was enabled or not.
> Yes, good idea. :)
> >>  
> >>  	/*
> >>  	 * Vblank time updates from the shadow to live plane control register
> >> @@ -5058,6 +5029,11 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
> >>  	if (pipe_config->update_wm_post && pipe_config->base.active)
> >>  		intel_update_watermarks(crtc);
> >>  
> >> +	if (!old_crtc_state->ips_enabled ||
> >> +	    needs_modeset(&old_crtc_state->base) ||
> > Shoudldn't that be needs_modeset(new_crtc_state)?
> Yes, oops..
> >> +	    pipe_config->update_pipe)
> > Why do we have to check that?
> In case we take over the hw state from bios..
> 
> If we default ips_enabled to true on BDW and read out on HSW again, then this
> check will make IPS work, regardless of bios setting..

Why aren't we just checking something like
if ((!old_state->ips_enabled || needs_modeset()) && new_state->ips_enabled) ?

IPS state may have to change whenever plane visibility changes, so I don't
see any reson to involve ->update_pipe in these decision.


> 
> >> +		hsw_enable_ips(pipe_config);
> >> +
> >>  	if (old_pri_state) {
> >>  		struct intel_plane_state *primary_state =
> >>  			intel_atomic_get_new_plane_state(to_intel_atomic_state(old_state),
> >> @@ -5088,6 +5064,9 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
> >>  	struct intel_atomic_state *old_intel_state =
> >>  		to_intel_atomic_state(old_state);
> >>  
> >> +	if (needs_modeset(&pipe_config->base) || !pipe_config->ips_enabled)
> >> +		hsw_disable_ips(old_crtc_state);
> >> +
> >>  	if (old_pri_state) {
> >>  		struct intel_plane_state *primary_state =
> >>  			intel_atomic_get_new_plane_state(old_intel_state,
> >> @@ -5096,10 +5075,13 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
> >>  			to_intel_plane_state(old_pri_state);
> >>  
> >>  		intel_fbc_pre_update(crtc, pipe_config, primary_state);
> >> -
> >> -		if (old_primary_state->base.visible &&
> >> +		/*
> >> +		 * Gen2 reports pipe underruns whenever all planes are disabled.
> >> +		 * So disable underrun reporting before all the planes get disabled.
> >> +		 */
> >> +		if (IS_GEN2(dev_priv) && old_primary_state->base.visible &&
> >>  		    (modeset || !primary_state->base.visible))
> >> -			intel_pre_disable_primary(&crtc->base, old_crtc_state);
> >> +			intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, false);
> >>  	}
> >>  
> >>  	/*
> >> @@ -6231,12 +6213,25 @@ static int ironlake_fdi_compute_config(struct intel_crtc *intel_crtc,
> >>  static bool pipe_config_supports_ips(struct drm_i915_private *dev_priv,
> >>  				     struct intel_crtc_state *pipe_config)
> >>  {
> >> +	u8 visible_planes;
> >> +
> >>  	if (pipe_config->ips_force_disable)
> >>  		return false;
> >>  
> >>  	if (pipe_config->pipe_bpp > 24)
> >>  		return false;
> >>  
> >> +	visible_planes = pipe_config->active_planes & ~BIT(PLANE_CURSOR);
> >> +
> >> +	/*
> >> +	 * FIXME IPS should be fine as long as one plane is
> >> +	 * enabled, but in practice it seems to have problems
> >> +	 * when going from primary only to sprite only and vice
> >> +	 * versa.
> >> +	 */
> >> +	if (visible_planes != BIT(PLANE_PRIMARY))
> >> +		return false;
> > I think that should be '(active_planes & PRIMARY) == 0'. As in we don't
> > care what the other planes are doing, IPS just tracks the primary state
> > (for the time being).
> Oops, faultily assumed from the comment that IPS only worked with the primary plane
> or sprite plane, not both. I'll correct it.
> > What's missing from this patch is changing the cdclk vs. ips workaround
> > to not assume that cdclk can be increased to accomodate ips.
> Hm true, I missed that..
> 
> Will send a new version in a bit.
> >> +
> >>  	/* HSW can handle pixel rate up to cdclk? */
> >>  	if (IS_HASWELL(dev_priv))
> >>  		return true;
> >> @@ -6378,9 +6373,6 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
> >>  
> >>  	intel_crtc_compute_pixel_rate(pipe_config);
> >>  
> >> -	if (HAS_IPS(dev_priv))
> >> -		hsw_compute_ips_config(crtc, pipe_config);
> >> -
> >>  	if (pipe_config->has_pch_encoder)
> >>  		return ironlake_fdi_compute_config(crtc, pipe_config);
> >>  
> >> @@ -10488,6 +10480,9 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc,
> >>  							 pipe_config);
> >>  	}
> >>  
> >> +	if (HAS_IPS(dev_priv))
> >> +		hsw_compute_ips_config(intel_crtc, pipe_config);
> >> +
> >>  	return ret;
> >>  }
> >>  
> >> diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
> >> index 61641d479b93..1f5cd572a7ff 100644
> >> --- a/drivers/gpu/drm/i915/intel_pipe_crc.c
> >> +++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
> >> @@ -541,8 +541,6 @@ static void hsw_pipe_A_crc_wa(struct drm_i915_private *dev_priv,
> >>  		 * completely disable it.
> >>  		 */
> >>  		pipe_config->ips_force_disable = enable;
> >> -		if (pipe_config->ips_enabled == enable)
> >> -			pipe_config->base.connectors_changed = true;
> >>  	}
> >>  
> >>  	if (IS_HASWELL(dev_priv)) {
> >> -- 
> >> 2.15.0
> >>
> >> _______________________________________________
> >> Intel-gfx mailing list
> >> Intel-gfx@lists.freedesktop.org
> >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/3] drm/i915: Enable IPS for sprite plane
  2017-11-17 15:55   ` Ville Syrjälä
@ 2017-11-20 11:12     ` Maarten Lankhorst
  2017-11-20 11:25       ` Ville Syrjälä
  0 siblings, 1 reply; 14+ messages in thread
From: Maarten Lankhorst @ 2017-11-20 11:12 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

Op 17-11-17 om 16:55 schreef Ville Syrjälä:
> On Fri, Nov 17, 2017 at 04:37:55PM +0100, Maarten Lankhorst wrote:
>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>> ---
>>  drivers/gpu/drm/i915/intel_display.c | 13 ++++++-------
>>  1 file changed, 6 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 8283e80597bd..38a1cdb3dbb2 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -5044,7 +5044,7 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
>>  		intel_fbc_post_update(crtc);
>>  
>>  		if (primary_state->base.visible &&
>> -		    (needs_modeset(&pipe_config->base) ||
>> +		    (pipe_config->disable_cxsr ||
>>  		     !old_primary_state->base.visible))
>>  			intel_post_enable_primary(&crtc->base, pipe_config);
>>  	}
>> @@ -5064,7 +5064,7 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
>>  	struct intel_atomic_state *old_intel_state =
>>  		to_intel_atomic_state(old_state);
>>  
>> -	if (needs_modeset(&pipe_config->base) || !pipe_config->ips_enabled)
>> +	if (pipe_config->disable_cxsr || !pipe_config->ips_enabled)
> What does IPS have to do with cxsr?
Nothing, laziness. disable cxsr is set when planes get disabled.
>>  		hsw_disable_ips(old_crtc_state);
>>  
>>  	if (old_pri_state) {
>> @@ -6224,12 +6224,11 @@ static bool pipe_config_supports_ips(struct drm_i915_private *dev_priv,
>>  	visible_planes = pipe_config->active_planes & ~BIT(PLANE_CURSOR);
>>  
>>  	/*
>> -	 * FIXME IPS should be fine as long as one plane is
>> -	 * enabled, but in practice it seems to have problems
>> -	 * when going from primary only to sprite only and vice
>> -	 * versa.
>> +	 * IPS should be fine as long as one plane is enabled, but
>> +	 * temporarily disable it when when going from primary only
>> +	 * to sprite only and vice versa.
>>  	 */
>> -	if (visible_planes != BIT(PLANE_PRIMARY))
>> +	if (hweight32(visible_planes) != 1)
>>  		return false;
> That should just be
> if (active_planes == 0)
> 	return false;
>
> assuming we have no problems with the toggling between
> primary only and sprite only.
>
> I can't recall how the cursor affecrs IPS. But I think IPS should 
> work as long as any plane (including the cursor) is enabled.
But cursor visibility can change without the full atomic commit, so it's too unreliable to take into
account with the calculations.

What happens when it doesn't work well? Would it be caught by any tests?

~Maarten
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/3] drm/i915: Enable IPS for sprite plane
  2017-11-20 11:12     ` Maarten Lankhorst
@ 2017-11-20 11:25       ` Ville Syrjälä
  0 siblings, 0 replies; 14+ messages in thread
From: Ville Syrjälä @ 2017-11-20 11:25 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx

On Mon, Nov 20, 2017 at 12:12:40PM +0100, Maarten Lankhorst wrote:
> Op 17-11-17 om 16:55 schreef Ville Syrjälä:
> > On Fri, Nov 17, 2017 at 04:37:55PM +0100, Maarten Lankhorst wrote:
> >> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >> ---
> >>  drivers/gpu/drm/i915/intel_display.c | 13 ++++++-------
> >>  1 file changed, 6 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> >> index 8283e80597bd..38a1cdb3dbb2 100644
> >> --- a/drivers/gpu/drm/i915/intel_display.c
> >> +++ b/drivers/gpu/drm/i915/intel_display.c
> >> @@ -5044,7 +5044,7 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
> >>  		intel_fbc_post_update(crtc);
> >>  
> >>  		if (primary_state->base.visible &&
> >> -		    (needs_modeset(&pipe_config->base) ||
> >> +		    (pipe_config->disable_cxsr ||
> >>  		     !old_primary_state->base.visible))
> >>  			intel_post_enable_primary(&crtc->base, pipe_config);
> >>  	}
> >> @@ -5064,7 +5064,7 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state,
> >>  	struct intel_atomic_state *old_intel_state =
> >>  		to_intel_atomic_state(old_state);
> >>  
> >> -	if (needs_modeset(&pipe_config->base) || !pipe_config->ips_enabled)
> >> +	if (pipe_config->disable_cxsr || !pipe_config->ips_enabled)
> > What does IPS have to do with cxsr?
> Nothing, laziness. disable cxsr is set when planes get disabled.
> >>  		hsw_disable_ips(old_crtc_state);
> >>  
> >>  	if (old_pri_state) {
> >> @@ -6224,12 +6224,11 @@ static bool pipe_config_supports_ips(struct drm_i915_private *dev_priv,
> >>  	visible_planes = pipe_config->active_planes & ~BIT(PLANE_CURSOR);
> >>  
> >>  	/*
> >> -	 * FIXME IPS should be fine as long as one plane is
> >> -	 * enabled, but in practice it seems to have problems
> >> -	 * when going from primary only to sprite only and vice
> >> -	 * versa.
> >> +	 * IPS should be fine as long as one plane is enabled, but
> >> +	 * temporarily disable it when when going from primary only
> >> +	 * to sprite only and vice versa.
> >>  	 */
> >> -	if (visible_planes != BIT(PLANE_PRIMARY))
> >> +	if (hweight32(visible_planes) != 1)
> >>  		return false;
> > That should just be
> > if (active_planes == 0)
> > 	return false;
> >
> > assuming we have no problems with the toggling between
> > primary only and sprite only.
> >
> > I can't recall how the cursor affecrs IPS. But I think IPS should 
> > work as long as any plane (including the cursor) is enabled.
> But cursor visibility can change without the full atomic commit, so it's too unreliable to take into
> account with the calculations.

Hmm. I guess we can ignore the cursor then. It's generally pretty
small, so probably no huge benefit from using IPS with cursor only
anyway.

> 
> What happens when it doesn't work well? Would it be caught by any tests?

I think it should be caught by CRCs, if we have any that capture
CRCs across plane enable/disable.

Except, there is a problem on ilk-ivb at least, maybe it went all
the way to bdw. IIRC when I last tried a test like that the CRC for
a black primary plane didn't match the CRC for no planes. And I think I
tried to eliminate gamma/csc as the source of the discrepancy without
success. Also IIRC there was always a single frame with an even stranger
CRC just after turning off the last plane.

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled.
  2017-11-20 10:58       ` Ville Syrjälä
@ 2017-11-20 12:09         ` Maarten Lankhorst
  0 siblings, 0 replies; 14+ messages in thread
From: Maarten Lankhorst @ 2017-11-20 12:09 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

Op 20-11-17 om 11:58 schreef Ville Syrjälä:
> On Mon, Nov 20, 2017 at 11:48:22AM +0100, Maarten Lankhorst wrote:
>> Op 17-11-17 om 16:52 schreef Ville Syrjälä:
>>> On Fri, Nov 17, 2017 at 04:37:54PM +0100, Maarten Lankhorst wrote:
>>>> ips_enabled was used as a variable of whether IPS can be enabled or not,
>>>> but should be used to test whether IPS is actually enabled.
>>>>
>>>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>>>> ---
>>>>  drivers/gpu/drm/i915/intel_display.c  | 75 ++++++++++++++++-------------------
>>>>  drivers/gpu/drm/i915/intel_pipe_crc.c |  2 -
>>>>  2 files changed, 35 insertions(+), 42 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>>>> index 3b3dec1e6640..8283e80597bd 100644
>>>> --- a/drivers/gpu/drm/i915/intel_display.c
>>>> +++ b/drivers/gpu/drm/i915/intel_display.c
>>>> @@ -4870,7 +4870,7 @@ void hsw_enable_ips(const struct intel_crtc_state *crtc_state)
>>>>  	struct drm_device *dev = crtc->base.dev;
>>>>  	struct drm_i915_private *dev_priv = to_i915(dev);
>>>>  
>>>> -	if (!crtc->config->ips_enabled)
>>>> +	if (!crtc_state->ips_enabled)
>>>>  		return;
>>>>  
>>>>  	/*
>>>> @@ -4966,14 +4966,6 @@ intel_post_enable_primary(struct drm_crtc *crtc,
>>>>  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>>>>  	int pipe = intel_crtc->pipe;
>>>>  
>>>> -	/*
>>>> -	 * FIXME IPS should be fine as long as one plane is
>>>> -	 * enabled, but in practice it seems to have problems
>>>> -	 * when going from primary only to sprite only and vice
>>>> -	 * versa.
>>>> -	 */
>>>> -	hsw_enable_ips(new_crtc_state);
>>>> -
>>>>  	/*
>>>>  	 * Gen2 reports pipe underruns whenever all planes are disabled.
>>>>  	 * So don't enable underrun reporting before at least some planes
>>>> @@ -4989,10 +4981,9 @@ intel_post_enable_primary(struct drm_crtc *crtc,
>>>>  	intel_check_pch_fifo_underruns(dev_priv);
>>>>  }
>>>>  
>>>> -/* FIXME move all this to pre_plane_update() with proper state tracking */
>>>> +/* FIXME get rid of this and use pre_plane_update */
>>>>  static void
>>>> -intel_pre_disable_primary(struct drm_crtc *crtc,
>>>> -			  const struct intel_crtc_state *old_crtc_state)
>>>> +intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
>>>>  {
>>>>  	struct drm_device *dev = crtc->dev;
>>>>  	struct drm_i915_private *dev_priv = to_i915(dev);
>>>> @@ -5001,32 +4992,12 @@ intel_pre_disable_primary(struct drm_crtc *crtc,
>>>>  
>>>>  	/*
>>>>  	 * Gen2 reports pipe underruns whenever all planes are disabled.
>>>> -	 * So diasble underrun reporting before all the planes get disabled.
>>>> -	 * FIXME: Need to fix the logic to work when we turn off all planes
>>>> -	 * but leave the pipe running.
>>>> +	 * So disable underrun reporting before all the planes get disabled.
>>>>  	 */
>>>>  	if (IS_GEN2(dev_priv))
>>>>  		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
>>>>  
>>>> -	/*
>>>> -	 * FIXME IPS should be fine as long as one plane is
>>>> -	 * enabled, but in practice it seems to have problems
>>>> -	 * when going from primary only to sprite only and vice
>>>> -	 * versa.
>>>> -	 */
>>>> -	hsw_disable_ips(old_crtc_state);
>>>> -}
>>>> -
>>>> -/* FIXME get rid of this and use pre_plane_update */
>>>> -static void
>>>> -intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
>>>> -{
>>>> -	struct drm_device *dev = crtc->dev;
>>>> -	struct drm_i915_private *dev_priv = to_i915(dev);
>>>> -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>>>> -	int pipe = intel_crtc->pipe;
>>>> -
>>>> -	intel_pre_disable_primary(crtc, to_intel_crtc_state(crtc->state));
>>>> +	hsw_disable_ips(to_intel_crtc_state(crtc->state));
>>> BTW thinking about the lack of readout on BDW. In case the BIOS ever
>>> enables IPS, I think we should sanitize ips_enabled to true on BDW.
>>> Or maybe just have the redaout code always set ips_enabled=true on BDW?
>>> That way the first modeset will try to turn it off regardless of whether it
>>> was enabled or not.
>> Yes, good idea. :)
>>>>  
>>>>  	/*
>>>>  	 * Vblank time updates from the shadow to live plane control register
>>>> @@ -5058,6 +5029,11 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
>>>>  	if (pipe_config->update_wm_post && pipe_config->base.active)
>>>>  		intel_update_watermarks(crtc);
>>>>  
>>>> +	if (!old_crtc_state->ips_enabled ||
>>>> +	    needs_modeset(&old_crtc_state->base) ||
>>> Shoudldn't that be needs_modeset(new_crtc_state)?
>> Yes, oops..
>>>> +	    pipe_config->update_pipe)
>>> Why do we have to check that?
>> In case we take over the hw state from bios..
>>
>> If we default ips_enabled to true on BDW and read out on HSW again, then this
>> check will make IPS work, regardless of bios setting..
> Why aren't we just checking something like
> if ((!old_state->ips_enabled || needs_modeset()) && new_state->ips_enabled) ?
>
> IPS state may have to change whenever plane visibility changes, so I don't
> see any reson to involve ->update_pipe in these decision.
This is what we do, except the new_state->ips_enabled check is in hsw_enable_ips. We also allow update_pipe for broadwell, in which case we don't know the hw state.

~Maarten
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2017-11-20 12:10 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-17 15:37 [PATCH 0/3] drm/i915: Enable fastboot, v2! Maarten Lankhorst
2017-11-17 15:37 ` [PATCH 1/3] drm/i915: Make ips_enabled a property depending on whether IPS is enabled Maarten Lankhorst
2017-11-17 15:52   ` Ville Syrjälä
2017-11-20 10:48     ` Maarten Lankhorst
2017-11-20 10:58       ` Ville Syrjälä
2017-11-20 12:09         ` Maarten Lankhorst
2017-11-17 15:37 ` [PATCH 2/3] drm/i915: Enable IPS for sprite plane Maarten Lankhorst
2017-11-17 15:55   ` Ville Syrjälä
2017-11-20 11:12     ` Maarten Lankhorst
2017-11-20 11:25       ` Ville Syrjälä
2017-11-17 15:37 ` [(resend) PATCH 3/3] drm/i915: Re-enable fastboot by default Maarten Lankhorst
2017-11-17 16:46 ` ✓ Fi.CI.BAT: success for drm/i915: Enable fastboot, v2! Patchwork
2017-11-17 17:58 ` [PATCH 0/3] " Rodrigo Vivi
2017-11-17 18:04 ` ✓ Fi.CI.IGT: success for " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).