diff mbox series

drm/i915/display: Use initial_fastset_check() to compute and apply the initial PSR state

Message ID 20201102221048.104294-1-jose.souza@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915/display: Use initial_fastset_check() to compute and apply the initial PSR state | expand

Commit Message

Souza, Jose Nov. 2, 2020, 10:10 p.m. UTC
Replace the previous approach to force compute the initial PSR state
after i915 take over from firmware by the better and recently added
initial_fastset_check() hook.

Cc: Imre Deak <imre.deak@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 drivers/gpu/drm/i915/display/intel_atomic.c  |  1 -
 drivers/gpu/drm/i915/display/intel_display.c |  2 -
 drivers/gpu/drm/i915/display/intel_dp.c      |  6 +++
 drivers/gpu/drm/i915/display/intel_psr.c     | 41 --------------------
 drivers/gpu/drm/i915/display/intel_psr.h     |  4 --
 drivers/gpu/drm/i915/i915_drv.h              |  1 -
 6 files changed, 6 insertions(+), 49 deletions(-)

Comments

Imre Deak Nov. 3, 2020, 8 p.m. UTC | #1
On Mon, Nov 02, 2020 at 02:10:48PM -0800, José Roberto de Souza wrote:
> Replace the previous approach to force compute the initial PSR state
> after i915 take over from firmware by the better and recently added
> initial_fastset_check() hook.
> 
> Cc: Imre Deak <imre.deak@intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>

Looks ok to me:
Reviewed-by: Imre Deak <imre.deak@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_atomic.c  |  1 -
>  drivers/gpu/drm/i915/display/intel_display.c |  2 -
>  drivers/gpu/drm/i915/display/intel_dp.c      |  6 +++
>  drivers/gpu/drm/i915/display/intel_psr.c     | 41 --------------------
>  drivers/gpu/drm/i915/display/intel_psr.h     |  4 --
>  drivers/gpu/drm/i915/i915_drv.h              |  1 -
>  6 files changed, 6 insertions(+), 49 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_atomic.c b/drivers/gpu/drm/i915/display/intel_atomic.c
> index 86be032bcf96..63d8d6840655 100644
> --- a/drivers/gpu/drm/i915/display/intel_atomic.c
> +++ b/drivers/gpu/drm/i915/display/intel_atomic.c
> @@ -133,7 +133,6 @@ int intel_digital_connector_atomic_check(struct drm_connector *conn,
>  	struct drm_crtc_state *crtc_state;
>  
>  	intel_hdcp_atomic_check(conn, old_state, new_state);
> -	intel_psr_atomic_check(conn, old_state, new_state);
>  
>  	if (!new_state->crtc)
>  		return 0;
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index cddbda5303ff..3c3adaee7b49 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -18373,8 +18373,6 @@ int intel_modeset_init(struct drm_i915_private *i915)
>  
>  	intel_init_ipc(i915);
>  
> -	intel_psr_set_force_mode_changed(i915->psr.dp);
> -
>  	return 0;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index cf09aca7607b..3b0dbda5919a 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -3778,6 +3778,12 @@ bool intel_dp_initial_fastset_check(struct intel_encoder *encoder,
>  		return false;
>  	}
>  
> +	if (CAN_PSR(i915) && intel_dp_is_edp(intel_dp)) {
> +		drm_dbg_kms(&i915->drm, "Forcing full modeset to compute PSR state\n");
> +		crtc_state->uapi.mode_changed = true;
> +		return false;
> +	}
> +
>  	return true;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 1576c3722d0b..b3631b722de3 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1024,8 +1024,6 @@ void intel_psr_enable(struct intel_dp *intel_dp,
>  	if (!CAN_PSR(dev_priv) || dev_priv->psr.dp != intel_dp)
>  		return;
>  
> -	dev_priv->psr.force_mode_changed = false;
> -
>  	if (!crtc_state->has_psr)
>  		return;
>  
> @@ -1334,8 +1332,6 @@ void intel_psr_update(struct intel_dp *intel_dp,
>  	if (!CAN_PSR(dev_priv) || READ_ONCE(psr->dp) != intel_dp)
>  		return;
>  
> -	dev_priv->psr.force_mode_changed = false;
> -
>  	mutex_lock(&dev_priv->psr.lock);
>  
>  	enable = crtc_state->has_psr;
> @@ -1869,40 +1865,3 @@ bool intel_psr_enabled(struct intel_dp *intel_dp)
>  
>  	return ret;
>  }
> -
> -void intel_psr_atomic_check(struct drm_connector *connector,
> -			    struct drm_connector_state *old_state,
> -			    struct drm_connector_state *new_state)
> -{
> -	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> -	struct intel_connector *intel_connector;
> -	struct intel_digital_port *dig_port;
> -	struct drm_crtc_state *crtc_state;
> -
> -	if (!CAN_PSR(dev_priv) || !new_state->crtc ||
> -	    !dev_priv->psr.force_mode_changed)
> -		return;
> -
> -	intel_connector = to_intel_connector(connector);
> -	dig_port = enc_to_dig_port(to_intel_encoder(new_state->best_encoder));
> -	if (dev_priv->psr.dp != &dig_port->dp)
> -		return;
> -
> -	crtc_state = drm_atomic_get_new_crtc_state(new_state->state,
> -						   new_state->crtc);
> -	crtc_state->mode_changed = true;
> -}
> -
> -void intel_psr_set_force_mode_changed(struct intel_dp *intel_dp)
> -{
> -	struct drm_i915_private *dev_priv;
> -
> -	if (!intel_dp)
> -		return;
> -
> -	dev_priv = dp_to_i915(intel_dp);
> -	if (!CAN_PSR(dev_priv) || intel_dp != dev_priv->psr.dp)
> -		return;
> -
> -	dev_priv->psr.force_mode_changed = true;
> -}
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.h b/drivers/gpu/drm/i915/display/intel_psr.h
> index 3eca9dcec3c0..0a517978e8af 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.h
> +++ b/drivers/gpu/drm/i915/display/intel_psr.h
> @@ -43,10 +43,6 @@ void intel_psr_short_pulse(struct intel_dp *intel_dp);
>  int intel_psr_wait_for_idle(const struct intel_crtc_state *new_crtc_state,
>  			    u32 *out_value);
>  bool intel_psr_enabled(struct intel_dp *intel_dp);
> -void intel_psr_atomic_check(struct drm_connector *connector,
> -			    struct drm_connector_state *old_state,
> -			    struct drm_connector_state *new_state);
> -void intel_psr_set_force_mode_changed(struct intel_dp *intel_dp);
>  int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>  				struct intel_crtc *crtc);
>  void intel_psr2_program_trans_man_trk_ctl(const struct intel_crtc_state *crtc_state);
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index bcd8650603d8..8e4a5468b1d0 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -508,7 +508,6 @@ struct i915_psr {
>  	bool dc3co_enabled;
>  	u32 dc3co_exit_delay;
>  	struct delayed_work dc3co_work;
> -	bool force_mode_changed;
>  	struct drm_dp_vsc_sdp vsc;
>  };
>  
> -- 
> 2.29.2
>
Souza, Jose Nov. 5, 2020, 1:46 p.m. UTC | #2
On Tue, 2020-11-03 at 07:07 +0000, Patchwork wrote:
> Patch Details
> Series: drm/i915/display: Use initial_fastset_check() to compute and apply the initial PSR state URL:
> https://patchwork.freedesktop.org/series/83375/ State: success Details: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_18831/index.html 
> CI Bug Log - changes from CI_DRM_9247_full -> Patchwork_18831_fullSummarySUCCESS
> No regressions found.

Thanks for the review Imre, pushed to dinq.

> New testsNew tests have been introduced between CI_DRM_9247_full and Patchwork_18831_full:
> New CI tests (1) * boot:Statuses : 175 pass(s)Exec time: [0.0] s
> Known issuesHere are the changes found in Patchwork_18831_full that come from known issues:
> IGT changesIssues hit * igt@kms_cursor_crc@pipe-a-cursor-suspend:shard-skl: PASS -> INCOMPLETE (i915#300)
>  * igt@kms_cursor_crc@pipe-b-cursor-64x21-offscreen:shard-skl: PASS -> FAIL (i915#54) +1 similar issue
>  * igt@kms_cursor_edge_walk@pipe-c-256x256-right-edge:shard-glk: PASS -> DMESG-WARN (i915#1982)
>  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:shard-glk: PASS -> FAIL (i915#72)
>  * igt@kms_cursor_legacy@cursor-vs-flip-atomic-transitions-varying-size:shard-skl: PASS -> DMESG-WARN (i915#1982) +7 similar issues
>  * igt@kms_draw_crc@draw-method-xrgb2101010-mmap-gtt-untiled:shard-apl: PASS -> DMESG-WARN (i915#1635 / i915#1982)
>  * igt@kms_draw_crc@draw-method-xrgb8888-mmap-wc-untiled:shard-kbl: PASS -> DMESG-WARN (i915#1982) +2 similar issues
>  * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp1:shard-apl: PASS -> FAIL (i915#1635 / i915#79)
>  * igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-render:shard-snb: PASS -> FAIL (i915#2546)
>  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc:shard-tglb: PASS -> DMESG-WARN (i915#1982)
>  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:shard-kbl: PASS -> DMESG-WARN (i915#180)
>  * igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:shard-skl: PASS -> FAIL (fdo#108145 / i915#265)
>  * igt@kms_psr@psr2_primary_mmap_cpu:shard-iclb: PASS -> SKIP (fdo#109441) +1 similar issue
> Possible fixes * igt@core_hotunplug@unbind-rebind:shard-skl: DMESG-WARN (i915#1982) -> PASS +1 similar issue
>  * igt@gem_exec_schedule@deep@vecs0:shard-skl: INCOMPLETE -> PASS
>  * igt@gem_partial_pwrite_pread@writes-after-reads-uncached:shard-snb: FAIL -> PASS
>  * igt@gem_pipe_control_store_loop@fresh-buffer:shard-tglb: INCOMPLETE -> PASS
>  * {igt@kms_async_flips@async-flip-with-page-flip-events}:shard-kbl: FAIL (i915#2521) -> PASSshard-tglb: FAIL (i915#2521) -> PASS
>  * igt@kms_atomic_transition@plane-use-after-nonblocking-unbind-fencing@hdmi-a-1-pipe-a:shard-glk: DMESG-WARN (i915#1982) -> PASS +1 similar issue
>  * igt@kms_cursor_crc@pipe-b-cursor-128x128-random:shard-skl: FAIL (i915#54) -> PASS +5 similar issues
>  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:shard-skl: FAIL (i915#2346) -> PASS
>  * igt@kms_draw_crc@draw-method-rgb565-mmap-gtt-untiled:shard-skl: FAIL (i915#52 / i915#54) -> PASS
>  * igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a1-hdmi-a2:shard-glk: FAIL (i915#79) -> PASS
>  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@bc-hdmi-a1-hdmi-a2:shard-glk: FAIL (i915#2122) -> PASS
>  * igt@kms_flip@dpms-vs-vblank-race@b-dp1:shard-kbl: INCOMPLETE -> PASS
>  * igt@kms_flip@flip-vs-expired-vblank@c-edp1:shard-skl: FAIL (i915#79) -> PASS
>  * igt@kms_flip_tiling@flip-to-yf-tiled:shard-kbl: DMESG-WARN (i915#1982) -> PASS
>  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc:shard-iclb: DMESG-WARN (i915#1982) -> PASS
>  * igt@kms_frontbuffer_tracking@psr-rgb565-draw-pwrite:shard-tglb: DMESG-WARN (i915#1982) -> PASS +1 similar issue
>  * igt@kms_hdr@bpc-switch-suspend:shard-skl: FAIL (i915#1188) -> PASS
>  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes:shard-iclb: INCOMPLETE (i915#1185 / i915#250) -> PASS
>  * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min:shard-skl: FAIL (fdo#108145 / i915#265) -> PASS
>  * igt@kms_psr@psr2_sprite_mmap_gtt:shard-iclb: SKIP (fdo#109441) -> PASS +1 similar issue
>  * igt@kms_sequence@queue-idle:shard-skl: FAIL (i915#2441) -> PASS
>  * igt@kms_vblank@pipe-b-wait-forked-busy-hang:shard-apl: DMESG-WARN (i915#1635 / i915#1982) -> PASS +2 similar issues
>  * igt@sysfs_heartbeat_interval@mixed@bcs0:shard-skl: FAIL (i915#1731) -> PASS
> Warnings * igt@kms_color@pipe-a-ctm-red-to-blue:shard-skl: DMESG-FAIL (i915#1982) -> DMESG-WARN (i915#1982)
>  * igt@kms_flip@flip-vs-suspend-interruptible@a-edp1:shard-tglb: DMESG-WARN (i915#2411) -> INCOMPLETE (i915#1436 / i915#456)
>  * igt@kms_flip_tiling@flip-x-tiled:shard-skl: DMESG-FAIL (fdo#108145 / i915#1982) -> DMESG-WARN (i915#1982)
>  * igt@runner@aborted:shard-tglb: (FAIL, FAIL) (i915#2439) -> (FAIL, FAIL) (i915#2248 / i915#2439)
> {name}: This element is suppressed. This means it is ignored when computing
>  the status of the difference (SUCCESS, WARNING, or FAILURE).
> Participating hosts (11 -> 11)No changes in participating hosts
> Build changes * Linux: CI_DRM_9247 -> Patchwork_18831
> CI-20190529: 20190529
>  CI_DRM_9247: 009a99e9be393d32ed57bcac34d6b1fb37c28cdf @ git://anongit.freedesktop.org/gfx-ci/linux
>  IGT_5830: 12d370cb57e0cfcb781c87ad9e15e68b17a1f41f @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
>  Patchwork_18831: 073dde9f1009e72e545696f72578ac82a834f9cc @ git://anongit.freedesktop.org/gfx-ci/linux
>  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_atomic.c b/drivers/gpu/drm/i915/display/intel_atomic.c
index 86be032bcf96..63d8d6840655 100644
--- a/drivers/gpu/drm/i915/display/intel_atomic.c
+++ b/drivers/gpu/drm/i915/display/intel_atomic.c
@@ -133,7 +133,6 @@  int intel_digital_connector_atomic_check(struct drm_connector *conn,
 	struct drm_crtc_state *crtc_state;
 
 	intel_hdcp_atomic_check(conn, old_state, new_state);
-	intel_psr_atomic_check(conn, old_state, new_state);
 
 	if (!new_state->crtc)
 		return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index cddbda5303ff..3c3adaee7b49 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -18373,8 +18373,6 @@  int intel_modeset_init(struct drm_i915_private *i915)
 
 	intel_init_ipc(i915);
 
-	intel_psr_set_force_mode_changed(i915->psr.dp);
-
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index cf09aca7607b..3b0dbda5919a 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -3778,6 +3778,12 @@  bool intel_dp_initial_fastset_check(struct intel_encoder *encoder,
 		return false;
 	}
 
+	if (CAN_PSR(i915) && intel_dp_is_edp(intel_dp)) {
+		drm_dbg_kms(&i915->drm, "Forcing full modeset to compute PSR state\n");
+		crtc_state->uapi.mode_changed = true;
+		return false;
+	}
+
 	return true;
 }
 
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 1576c3722d0b..b3631b722de3 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1024,8 +1024,6 @@  void intel_psr_enable(struct intel_dp *intel_dp,
 	if (!CAN_PSR(dev_priv) || dev_priv->psr.dp != intel_dp)
 		return;
 
-	dev_priv->psr.force_mode_changed = false;
-
 	if (!crtc_state->has_psr)
 		return;
 
@@ -1334,8 +1332,6 @@  void intel_psr_update(struct intel_dp *intel_dp,
 	if (!CAN_PSR(dev_priv) || READ_ONCE(psr->dp) != intel_dp)
 		return;
 
-	dev_priv->psr.force_mode_changed = false;
-
 	mutex_lock(&dev_priv->psr.lock);
 
 	enable = crtc_state->has_psr;
@@ -1869,40 +1865,3 @@  bool intel_psr_enabled(struct intel_dp *intel_dp)
 
 	return ret;
 }
-
-void intel_psr_atomic_check(struct drm_connector *connector,
-			    struct drm_connector_state *old_state,
-			    struct drm_connector_state *new_state)
-{
-	struct drm_i915_private *dev_priv = to_i915(connector->dev);
-	struct intel_connector *intel_connector;
-	struct intel_digital_port *dig_port;
-	struct drm_crtc_state *crtc_state;
-
-	if (!CAN_PSR(dev_priv) || !new_state->crtc ||
-	    !dev_priv->psr.force_mode_changed)
-		return;
-
-	intel_connector = to_intel_connector(connector);
-	dig_port = enc_to_dig_port(to_intel_encoder(new_state->best_encoder));
-	if (dev_priv->psr.dp != &dig_port->dp)
-		return;
-
-	crtc_state = drm_atomic_get_new_crtc_state(new_state->state,
-						   new_state->crtc);
-	crtc_state->mode_changed = true;
-}
-
-void intel_psr_set_force_mode_changed(struct intel_dp *intel_dp)
-{
-	struct drm_i915_private *dev_priv;
-
-	if (!intel_dp)
-		return;
-
-	dev_priv = dp_to_i915(intel_dp);
-	if (!CAN_PSR(dev_priv) || intel_dp != dev_priv->psr.dp)
-		return;
-
-	dev_priv->psr.force_mode_changed = true;
-}
diff --git a/drivers/gpu/drm/i915/display/intel_psr.h b/drivers/gpu/drm/i915/display/intel_psr.h
index 3eca9dcec3c0..0a517978e8af 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.h
+++ b/drivers/gpu/drm/i915/display/intel_psr.h
@@ -43,10 +43,6 @@  void intel_psr_short_pulse(struct intel_dp *intel_dp);
 int intel_psr_wait_for_idle(const struct intel_crtc_state *new_crtc_state,
 			    u32 *out_value);
 bool intel_psr_enabled(struct intel_dp *intel_dp);
-void intel_psr_atomic_check(struct drm_connector *connector,
-			    struct drm_connector_state *old_state,
-			    struct drm_connector_state *new_state);
-void intel_psr_set_force_mode_changed(struct intel_dp *intel_dp);
 int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
 				struct intel_crtc *crtc);
 void intel_psr2_program_trans_man_trk_ctl(const struct intel_crtc_state *crtc_state);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index bcd8650603d8..8e4a5468b1d0 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -508,7 +508,6 @@  struct i915_psr {
 	bool dc3co_enabled;
 	u32 dc3co_exit_delay;
 	struct delayed_work dc3co_work;
-	bool force_mode_changed;
 	struct drm_dp_vsc_sdp vsc;
 };