All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support
@ 2024-03-29  1:12 Ville Syrjala
  2024-03-29  1:12 ` [PATCH 01/22] drm/i915: Disable port sync when bigjoiner is used Ville Syrjala
                   ` (25 more replies)
  0 siblings, 26 replies; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

I started to look at the MST+bignoier stuff floating around
and then decided that there's just too much noise in the way,
and so did a quick pass over the whole thing to clean and
fix things up ahead of time.

I then applied the stuff from Stan and Vidya on top of what
I had and fixed it up enough to do a quick smoke test on my
ADL. It survived a 2x2 MST configuration with uncompressed
joiner enabled on both outputs. I don't have any DSC capable
hardware around so couldn't test bigjoiner.

Anyways, here's the whole pile for people to ruminate
over during Easter.

Also pushed it here:
https://github.com/vsyrjala/linux.git bigjoiner_mst_etc

Stanislav Lisovskiy (1):
  drm/i915: Handle joined pipes inside hsw_crtc_enable()

Vidya Srinivas (1):
  drm/i915: Allow bigjoiner for MST

Ville Syrjälä (20):
  drm/i915: Disable port sync when bigjoiner is used
  drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner
  drm/i915: Disable live M/N updates when using bigjoiner
  drm/i915/vrr: Disable VRR when using bigjoiner
  drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks
  drm/i915: Shuffle DP .mode_valid() checks
  drm/i915: Clean up glk_pipe_scaler_clock_gating_wa()
  drm/i915: Extract glk_need_scaler_clock_gating_wa()
  drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/
  drm/i915: Extract intel_dp_joiner_needs_dsc()
  drm/i915/mst: Check intel_dp_joiner_needs_dsc()
  drm/i915: Pass connector to intel_dp_need_bigjoiner()
  drm/i915/mst: Limit MST+DSC to TGL+
  drm/i915/mst: Reject FEC+MST on ICL
  drm/i915: Introduce intel_crtc_joined_pipe_mask()
  drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst()
  drm/i915: Utilize intel_crtc_joined_pipe_mask() more
  drm/i915: Handle joined pipes inside hsw_crtc_disable()
  drm/i915/mst: Add bigjoiner handling to MST modeset sequence
  drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable"

 drivers/gpu/drm/i915/display/intel_crt.c      |   3 -
 drivers/gpu/drm/i915/display/intel_ddi.c      |  79 +++--
 drivers/gpu/drm/i915/display/intel_display.c  | 330 ++++++++++--------
 drivers/gpu/drm/i915/display/intel_display.h  |   7 +
 .../drm/i915/display/intel_display_debugfs.c  |  44 +--
 .../drm/i915/display/intel_display_device.h   |   1 +
 drivers/gpu/drm/i915/display/intel_dp.c       |  55 +--
 drivers/gpu/drm/i915/display/intel_dp.h       |   4 +-
 drivers/gpu/drm/i915/display/intel_dp_mst.c   | 102 +++---
 drivers/gpu/drm/i915/display/intel_dsi.c      |   3 -
 drivers/gpu/drm/i915/display/intel_dvo.c      |   3 -
 drivers/gpu/drm/i915/display/intel_lvds.c     |   3 -
 drivers/gpu/drm/i915/display/intel_sdvo.c     |   3 -
 drivers/gpu/drm/i915/display/intel_tv.c       |   3 -
 drivers/gpu/drm/i915/display/intel_vrr.c      |   7 +
 15 files changed, 347 insertions(+), 300 deletions(-)

-- 
2.43.2


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

* [PATCH 01/22] drm/i915: Disable port sync when bigjoiner is used
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  5:57   ` Kulkarni, Vandita
  2024-03-29  1:12 ` [PATCH 02/22] drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner Ville Syrjala
                   ` (24 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The current modeset sequence can't handle port sync and bigjoiner
at the same time. Refuse port sync when bigjoiner is needed,
at least until we fix the modeset sequence.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index a3d3d4942eb1..fa6fe9ec8027 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4244,6 +4244,7 @@ static bool crtcs_port_sync_compatible(const struct intel_crtc_state *crtc_state
 				       const struct intel_crtc_state *crtc_state2)
 {
 	return crtc_state1->hw.active && crtc_state2->hw.active &&
+		!crtc_state1->bigjoiner_pipes && !crtc_state2->bigjoiner_pipes &&
 		crtc_state1->output_types == crtc_state2->output_types &&
 		crtc_state1->output_format == crtc_state2->output_format &&
 		crtc_state1->lane_count == crtc_state2->lane_count &&
-- 
2.43.2


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

* [PATCH 02/22] drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
  2024-03-29  1:12 ` [PATCH 01/22] drm/i915: Disable port sync when bigjoiner is used Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  9:23   ` Kulkarni, Vandita
  2024-03-29  1:12 ` [PATCH 03/22] drm/i915: Disable live M/N updates when using bigjoiner Ville Syrjala
                   ` (23 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Currently intel_modeset_pipe_config_late() is called after the
bigjoiner state copy, and it will actually not do anything for
bigjoiner slaves. This can lead to a mismatched state between
the master and slave.

The two things that we do in the encoder .compute_config_late()
hook are mst master transcoder and port sync master transcoder
elections. So if either of either MST or port sync is combined
with bigjoiner then we can see the mismatch.

Currently this problem is more or less theoretical; MST+bigjoiner
has not been implemented yet, and port sync+bigjoiner would
require a tiled display with >5k tiles (or a very high
dotclock per tile). Although we do have kms_tiled_display in
igt which can fake a tiled display, and we can now force bigjoiner
via debugfs, so it is possible to trigger this if you try hard
enough.

Reorder the code such that intel_modeset_pipe_config_late()
will be called before the bigjoiner state copy happens so
that both pipes will end up with the same state.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 46 ++++++++++++++------
 1 file changed, 32 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 614e60420a29..08705042b4f8 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -4753,8 +4753,6 @@ intel_modeset_pipe_config_late(struct intel_atomic_state *state,
 	struct drm_connector *connector;
 	int i;
 
-	intel_bigjoiner_adjust_pipe_src(crtc_state);
-
 	for_each_new_connector_in_state(&state->base, connector,
 					conn_state, i) {
 		struct intel_encoder *encoder =
@@ -6248,27 +6246,37 @@ static int intel_atomic_check_config(struct intel_atomic_state *state,
 			continue;
 		}
 
-		if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
-			drm_WARN_ON(&i915->drm, new_crtc_state->uapi.enable);
+		if (drm_WARN_ON(&i915->drm, intel_crtc_is_bigjoiner_slave(new_crtc_state)))
 			continue;
-		}
 
 		ret = intel_crtc_prepare_cleared_state(state, crtc);
 		if (ret)
-			break;
+			goto fail;
 
 		if (!new_crtc_state->hw.enable)
 			continue;
 
 		ret = intel_modeset_pipe_config(state, crtc, limits);
 		if (ret)
-			break;
+			goto fail;
+	}
 
-		ret = intel_atomic_check_bigjoiner(state, crtc);
+	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
+		if (!intel_crtc_needs_modeset(new_crtc_state))
+			continue;
+
+		if (drm_WARN_ON(&i915->drm, intel_crtc_is_bigjoiner_slave(new_crtc_state)))
+			continue;
+
+		if (!new_crtc_state->hw.enable)
+			continue;
+
+		ret = intel_modeset_pipe_config_late(state, crtc);
 		if (ret)
-			break;
+			goto fail;
 	}
 
+fail:
 	if (ret)
 		*failed_pipe = crtc->pipe;
 
@@ -6364,16 +6372,26 @@ int intel_atomic_check(struct drm_device *dev,
 	if (ret)
 		goto fail;
 
+	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
+		if (!intel_crtc_needs_modeset(new_crtc_state))
+			continue;
+
+		if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
+			drm_WARN_ON(&dev_priv->drm, new_crtc_state->uapi.enable);
+			continue;
+		}
+
+		ret = intel_atomic_check_bigjoiner(state, crtc);
+		if (ret)
+			goto fail;
+	}
+
 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
 					    new_crtc_state, i) {
 		if (!intel_crtc_needs_modeset(new_crtc_state))
 			continue;
 
-		if (new_crtc_state->hw.enable) {
-			ret = intel_modeset_pipe_config_late(state, crtc);
-			if (ret)
-				goto fail;
-		}
+		intel_bigjoiner_adjust_pipe_src(new_crtc_state);
 
 		intel_crtc_check_fastset(old_crtc_state, new_crtc_state);
 	}
-- 
2.43.2


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

* [PATCH 03/22] drm/i915: Disable live M/N updates when using bigjoiner
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
  2024-03-29  1:12 ` [PATCH 01/22] drm/i915: Disable port sync when bigjoiner is used Ville Syrjala
  2024-03-29  1:12 ` [PATCH 02/22] drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 10:32   ` Murthy, Arun R
  2024-03-29  1:12 ` [PATCH 04/22] drm/i915/vrr: Disable VRR " Ville Syrjala
                   ` (22 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

All joined pipes share the same transcoder/timing generator.
Currently we just do the commits per-pipe, which doesn't really
work if we need to change the timings at the same time. For
now just disable live M/N updates when bigjoiner is needed.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index f755fd974da2..bc9d6efc99ee 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -2719,7 +2719,11 @@ intel_dp_drrs_compute_config(struct intel_connector *connector,
 		intel_panel_downclock_mode(connector, &pipe_config->hw.adjusted_mode);
 	int pixel_clock;
 
-	if (has_seamless_m_n(connector))
+	/*
+	 * FIXME all joined pipes share the same transcoder.
+	 * Need to account for that when updating M/N live.
+	 */
+	if (has_seamless_m_n(connector) && !pipe_config->bigjoiner_pipes)
 		pipe_config->update_m_n = true;
 
 	if (!can_enable_drrs(connector, pipe_config, downclock_mode)) {
-- 
2.43.2


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

* [PATCH 04/22] drm/i915/vrr: Disable VRR when using bigjoiner
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (2 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 03/22] drm/i915: Disable live M/N updates when using bigjoiner Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 10:04   ` Kulkarni, Vandita
  2024-03-29  1:12 ` [PATCH 05/22] drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks Ville Syrjala
                   ` (21 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

All joined pipes share the same transcoder/timing generator.
Currently we just do the commits per-pipe, which doesn't really
work if we need to change switch between non-VRR and VRR timings
generators on the fly, or even when sending the push to the
transcoder. For now just disable VRR when bigjoiner is needed.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_vrr.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index eb5bd0743902..f542ee1db1d9 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -117,6 +117,13 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
 	const struct drm_display_info *info = &connector->base.display_info;
 	int vmin, vmax;
 
+	/*
+	 * FIXME all joined pipes share the same transcoder.
+	 * Need to account for that during VRR toggle/push/etc.
+	 */
+	if (crtc_state->bigjoiner_pipes)
+		return;
+
 	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
 		return;
 
-- 
2.43.2


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

* [PATCH 05/22] drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (3 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 04/22] drm/i915/vrr: Disable VRR " Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 11:25   ` Kulkarni, Vandita
  2024-03-29  1:12 ` [PATCH 06/22] drm/i915: Shuffle DP .mode_valid() checks Ville Syrjala
                   ` (20 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

We never set connector->doublescan_allowed, so the probe helper
already filters out all doublescan modes for us.

Sadly we still need to keep the explicit doublescan checks
in .compute_config as outlined in commit e4dd27aadd20
("drm/i915: Allow DBLSCAN user modes with eDP/LVDS/DSI")

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_crt.c    | 3 ---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 5 -----
 drivers/gpu/drm/i915/display/intel_dsi.c    | 3 ---
 drivers/gpu/drm/i915/display/intel_dvo.c    | 3 ---
 drivers/gpu/drm/i915/display/intel_lvds.c   | 3 ---
 drivers/gpu/drm/i915/display/intel_sdvo.c   | 3 ---
 drivers/gpu/drm/i915/display/intel_tv.c     | 3 ---
 7 files changed, 23 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index 93479db0f89f..2e95093aa4d4 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -356,9 +356,6 @@ intel_crt_mode_valid(struct drm_connector *connector,
 	if (status != MODE_OK)
 		return status;
 
-	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
-		return MODE_NO_DBLESCAN;
-
 	if (mode->clock < 25000)
 		return MODE_CLOCK_LOW;
 
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 53aec023ce92..9a7c75039989 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1302,11 +1302,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 	if (*status != MODE_OK)
 		return 0;
 
-	if (mode->flags & DRM_MODE_FLAG_DBLSCAN) {
-		*status = MODE_NO_DBLESCAN;
-		return 0;
-	}
-
 	max_link_clock = intel_dp_max_link_rate(intel_dp);
 	max_lanes = intel_dp_max_lane_count(intel_dp);
 
diff --git a/drivers/gpu/drm/i915/display/intel_dsi.c b/drivers/gpu/drm/i915/display/intel_dsi.c
index d3cf6a652221..2dfc60e4b615 100644
--- a/drivers/gpu/drm/i915/display/intel_dsi.c
+++ b/drivers/gpu/drm/i915/display/intel_dsi.c
@@ -69,9 +69,6 @@ enum drm_mode_status intel_dsi_mode_valid(struct drm_connector *connector,
 
 	drm_dbg_kms(&dev_priv->drm, "\n");
 
-	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
-		return MODE_NO_DBLESCAN;
-
 	status = intel_panel_mode_valid(intel_connector, mode);
 	if (status != MODE_OK)
 		return status;
diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c
index c076da75b066..060328c0df7e 100644
--- a/drivers/gpu/drm/i915/display/intel_dvo.c
+++ b/drivers/gpu/drm/i915/display/intel_dvo.c
@@ -231,9 +231,6 @@ intel_dvo_mode_valid(struct drm_connector *_connector,
 	if (status != MODE_OK)
 		return status;
 
-	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
-		return MODE_NO_DBLESCAN;
-
 	/* XXX: Validate clock range */
 
 	if (fixed_mode) {
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index 221f5c6c871b..24860945f2e4 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -399,9 +399,6 @@ intel_lvds_mode_valid(struct drm_connector *_connector,
 	if (status != MODE_OK)
 		return status;
 
-	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
-		return MODE_NO_DBLESCAN;
-
 	status = intel_panel_mode_valid(connector, mode);
 	if (status != MODE_OK)
 		return status;
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 50f0557d9ca2..df76044a739a 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -1952,9 +1952,6 @@ intel_sdvo_mode_valid(struct drm_connector *connector,
 	if (status != MODE_OK)
 		return status;
 
-	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
-		return MODE_NO_DBLESCAN;
-
 	if (clock > max_dotclk)
 		return MODE_CLOCK_HIGH;
 
diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
index ba5d2b7174b7..79d35c1b3c81 100644
--- a/drivers/gpu/drm/i915/display/intel_tv.c
+++ b/drivers/gpu/drm/i915/display/intel_tv.c
@@ -969,9 +969,6 @@ intel_tv_mode_valid(struct drm_connector *connector,
 	if (status != MODE_OK)
 		return status;
 
-	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
-		return MODE_NO_DBLESCAN;
-
 	if (mode->clock > max_dotclk)
 		return MODE_CLOCK_HIGH;
 
-- 
2.43.2


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

* [PATCH 06/22] drm/i915: Shuffle DP .mode_valid() checks
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (4 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 05/22] drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 10:35   ` Kulkarni, Vandita
  2024-03-29  1:12 ` [PATCH 07/22] drm/i915: Clean up glk_pipe_scaler_clock_gating_wa() Ville Syrjala
                   ` (19 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Move some of the more trivial checks in the DP .mode_valid()
hooks upwards to lessen the noise amongst the more complex
checks.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c     |  6 +++---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 21 ++++++++++-----------
 2 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index bc9d6efc99ee..2490ce32da50 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1229,6 +1229,9 @@ intel_dp_mode_valid(struct drm_connector *_connector,
 	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
 		return MODE_H_ILLEGAL;
 
+	if (mode->clock < 10000)
+		return MODE_CLOCK_LOW;
+
 	fixed_mode = intel_panel_fixed_mode(connector, mode);
 	if (intel_dp_is_edp(intel_dp) && fixed_mode) {
 		status = intel_panel_mode_valid(connector, mode);
@@ -1238,9 +1241,6 @@ intel_dp_mode_valid(struct drm_connector *_connector,
 		target_clock = fixed_mode->clock;
 	}
 
-	if (mode->clock < 10000)
-		return MODE_CLOCK_LOW;
-
 	if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock)) {
 		bigjoiner = true;
 		max_dotclk *= 2;
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 9a7c75039989..1405ab5e3acc 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1302,6 +1302,16 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 	if (*status != MODE_OK)
 		return 0;
 
+	if (mode->flags & DRM_MODE_FLAG_DBLCLK) {
+		*status = MODE_H_ILLEGAL;
+		return 0;
+	}
+
+	if (mode->clock < 10000) {
+		*status = MODE_CLOCK_LOW;
+		return 0;
+	}
+
 	max_link_clock = intel_dp_max_link_rate(intel_dp);
 	max_lanes = intel_dp_max_lane_count(intel_dp);
 
@@ -1330,17 +1340,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 		*status = MODE_CLOCK_HIGH;
 		return 0;
 	}
-
-	if (mode->clock < 10000) {
-		*status = MODE_CLOCK_LOW;
-		return 0;
-	}
-
-	if (mode->flags & DRM_MODE_FLAG_DBLCLK) {
-		*status = MODE_H_ILLEGAL;
-		return 0;
-	}
-
 	if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock)) {
 		bigjoiner = true;
 		max_dotclk *= 2;
-- 
2.43.2


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

* [PATCH 07/22] drm/i915: Clean up glk_pipe_scaler_clock_gating_wa()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (5 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 06/22] drm/i915: Shuffle DP .mode_valid() checks Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 11:08   ` Kulkarni, Vandita
  2024-03-29  1:12 ` [PATCH 08/22] drm/i915: Extract glk_need_scaler_clock_gating_wa() Ville Syrjala
                   ` (18 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

glk_pipe_scaler_clock_gating_wa() is messy. Clean it up via
intel_de_rmw(), and also just pass in the whole crtc so the
caller doesn't dance around so much.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 08705042b4f8..83474fcf4131 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -1551,18 +1551,13 @@ static void ilk_crtc_enable(struct intel_atomic_state *state,
 	intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true);
 }
 
-static void glk_pipe_scaler_clock_gating_wa(struct drm_i915_private *dev_priv,
-					    enum pipe pipe, bool apply)
+static void glk_pipe_scaler_clock_gating_wa(struct intel_crtc *crtc, bool enable)
 {
-	u32 val = intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe));
+	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
 	u32 mask = DPF_GATING_DIS | DPF_RAM_GATING_DIS | DPFR_GATING_DIS;
 
-	if (apply)
-		val |= mask;
-	else
-		val &= ~mask;
-
-	intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe), val);
+	intel_de_rmw(i915, CLKGATE_DIS_PSL(crtc->pipe),
+		     mask, enable ? mask : 0);
 }
 
 static void hsw_set_linetime_wm(const struct intel_crtc_state *crtc_state)
@@ -1638,8 +1633,8 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
 	const struct intel_crtc_state *new_crtc_state =
 		intel_atomic_get_new_crtc_state(state, crtc);
 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
-	enum pipe pipe = crtc->pipe, hsw_workaround_pipe;
 	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
+	enum pipe hsw_workaround_pipe;
 	bool psl_clkgate_wa;
 
 	if (drm_WARN_ON(&dev_priv->drm, crtc->active))
@@ -1677,7 +1672,7 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
 	psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 &&
 		new_crtc_state->pch_pfit.enabled;
 	if (psl_clkgate_wa)
-		glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true);
+		glk_pipe_scaler_clock_gating_wa(crtc, true);
 
 	if (DISPLAY_VER(dev_priv) >= 9)
 		skl_pfit_enable(new_crtc_state);
@@ -1709,7 +1704,7 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
 
 	if (psl_clkgate_wa) {
 		intel_crtc_wait_for_next_vblank(crtc);
-		glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false);
+		glk_pipe_scaler_clock_gating_wa(crtc, false);
 	}
 
 	/* If we change the relative order between pipe/planes enabling, we need
-- 
2.43.2


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

* [PATCH 08/22] drm/i915: Extract glk_need_scaler_clock_gating_wa()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (6 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 07/22] drm/i915: Clean up glk_pipe_scaler_clock_gating_wa() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 11:09   ` Kulkarni, Vandita
  2024-03-29  1:12 ` [PATCH 09/22] drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/ Ville Syrjala
                   ` (17 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Simplify our life by extracting the "do we need the glk scaler
clock gating w/a?" check into a small helper.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 83474fcf4131..6197b62dac55 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -1551,6 +1551,14 @@ static void ilk_crtc_enable(struct intel_atomic_state *state,
 	intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true);
 }
 
+/* Display WA #1180: WaDisableScalarClockGating: glk */
+static bool glk_need_scaler_clock_gating_wa(const struct intel_crtc_state *crtc_state)
+{
+	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
+
+	return DISPLAY_VER(i915) == 10 && crtc_state->pch_pfit.enabled;
+}
+
 static void glk_pipe_scaler_clock_gating_wa(struct intel_crtc *crtc, bool enable)
 {
 	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
@@ -1635,7 +1643,6 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
 	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
 	enum pipe hsw_workaround_pipe;
-	bool psl_clkgate_wa;
 
 	if (drm_WARN_ON(&dev_priv->drm, crtc->active))
 		return;
@@ -1668,10 +1675,7 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
 
 	crtc->active = true;
 
-	/* Display WA #1180: WaDisableScalarClockGating: glk */
-	psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 &&
-		new_crtc_state->pch_pfit.enabled;
-	if (psl_clkgate_wa)
+	if (glk_need_scaler_clock_gating_wa(new_crtc_state))
 		glk_pipe_scaler_clock_gating_wa(crtc, true);
 
 	if (DISPLAY_VER(dev_priv) >= 9)
@@ -1702,7 +1706,7 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
 
 	intel_encoders_enable(state, crtc);
 
-	if (psl_clkgate_wa) {
+	if (glk_need_scaler_clock_gating_wa(new_crtc_state)) {
 		intel_crtc_wait_for_next_vblank(crtc);
 		glk_pipe_scaler_clock_gating_wa(crtc, false);
 	}
-- 
2.43.2


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

* [PATCH 09/22] drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (7 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 08/22] drm/i915: Extract glk_need_scaler_clock_gating_wa() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 10:01   ` Kulkarni, Vandita
  2024-03-29  1:12 ` [PATCH 10/22] drm/i915: Extract intel_dp_joiner_needs_dsc() Ville Syrjala
                   ` (16 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Rename intel_dp_can_bigjoiner() to intel_dp_has_bigjoiner()
to better reflect its function.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 4 ++--
 drivers/gpu/drm/i915/display/intel_dp.h | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 2490ce32da50..402b3b8f6382 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -425,7 +425,7 @@ int intel_dp_max_link_data_rate(struct intel_dp *intel_dp,
 	return max_rate;
 }
 
-bool intel_dp_can_bigjoiner(struct intel_dp *intel_dp)
+bool intel_dp_has_bigjoiner(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct intel_encoder *encoder = &intel_dig_port->base;
@@ -1199,7 +1199,7 @@ bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
 	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
 	struct intel_connector *connector = intel_dp->attached_connector;
 
-	if (!intel_dp_can_bigjoiner(intel_dp))
+	if (!intel_dp_has_bigjoiner(intel_dp))
 		return false;
 
 	return clock > i915->max_dotclk_freq || hdisplay > 5120 ||
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index c540d3a73fe7..4a4b39f2748b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -119,7 +119,7 @@ int intel_dp_effective_data_rate(int pixel_clock, int bpp_x16,
 				 int bw_overhead);
 int intel_dp_max_link_data_rate(struct intel_dp *intel_dp,
 				int max_dprx_rate, int max_dprx_lanes);
-bool intel_dp_can_bigjoiner(struct intel_dp *intel_dp);
+bool intel_dp_has_bigjoiner(struct intel_dp *intel_dp);
 bool intel_dp_needs_vsc_sdp(const struct intel_crtc_state *crtc_state,
 			    const struct drm_connector_state *conn_state);
 void intel_dp_set_infoframes(struct intel_encoder *encoder, bool enable,
-- 
2.43.2


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

* [PATCH 10/22] drm/i915: Extract intel_dp_joiner_needs_dsc()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (8 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 09/22] drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/ Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  9:22   ` Shankar, Uma
  2024-03-29  1:12 ` [PATCH 11/22] drm/i915/mst: Check intel_dp_joiner_needs_dsc() Ville Syrjala
                   ` (15 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Pull the "does joiner need DSC?" check into a helper. MST will
want to use this too at some point.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c     | 26 ++++++++++-----------
 drivers/gpu/drm/i915/display/intel_dp.h     |  1 +
 drivers/gpu/drm/i915/display/intel_dp_mst.c |  6 +----
 3 files changed, 15 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 402b3b8f6382..6fa8fc56a39c 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1302,11 +1302,7 @@ intel_dp_mode_valid(struct drm_connector *_connector,
 		dsc = dsc_max_compressed_bpp && dsc_slice_count;
 	}
 
-	/*
-	 * Big joiner configuration needs DSC for TGL which is not true for
-	 * XE_LPD where uncompressed joiner is supported.
-	 */
-	if (DISPLAY_VER(dev_priv) < 13 && bigjoiner && !dsc)
+	if (intel_dp_joiner_needs_dsc(dev_priv, bigjoiner) && !dsc)
 		return MODE_CLOCK_HIGH;
 
 	if (mode_rate > max_rate && !dsc)
@@ -2395,6 +2391,16 @@ int intel_dp_config_required_rate(const struct intel_crtc_state *crtc_state)
 	return intel_dp_link_required(adjusted_mode->crtc_clock, bpp);
 }
 
+bool intel_dp_joiner_needs_dsc(struct drm_i915_private *i915, bool use_joiner)
+{
+	/*
+	 * Pipe joiner needs compression up to display 12 due to bandwidth
+	 * limitation. DG2 onwards pipe joiner can be enabled without
+	 * compression.
+	 */
+	return DISPLAY_VER(i915) < 13 && use_joiner;
+}
+
 static int
 intel_dp_compute_link_config(struct intel_encoder *encoder,
 			     struct intel_crtc_state *pipe_config,
@@ -2409,8 +2415,7 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
 		&pipe_config->hw.adjusted_mode;
 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
 	struct link_config_limits limits;
-	bool joiner_needs_dsc = false;
-	bool dsc_needed;
+	bool dsc_needed, joiner_needs_dsc;
 	int ret = 0;
 
 	if (pipe_config->fec_enable &&
@@ -2421,12 +2426,7 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
 				    adjusted_mode->crtc_clock))
 		pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe);
 
-	/*
-	 * Pipe joiner needs compression up to display 12 due to bandwidth
-	 * limitation. DG2 onwards pipe joiner can be enabled without
-	 * compression.
-	 */
-	joiner_needs_dsc = DISPLAY_VER(i915) < 13 && pipe_config->bigjoiner_pipes;
+	joiner_needs_dsc = intel_dp_joiner_needs_dsc(i915, pipe_config->bigjoiner_pipes);
 
 	dsc_needed = joiner_needs_dsc || intel_dp->force_dsc_en ||
 		     !intel_dp_compute_config_limits(intel_dp, pipe_config,
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index 4a4b39f2748b..d5697b99ac21 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -119,6 +119,7 @@ int intel_dp_effective_data_rate(int pixel_clock, int bpp_x16,
 				 int bw_overhead);
 int intel_dp_max_link_data_rate(struct intel_dp *intel_dp,
 				int max_dprx_rate, int max_dprx_lanes);
+bool intel_dp_joiner_needs_dsc(struct drm_i915_private *i915, bool use_joiner);
 bool intel_dp_has_bigjoiner(struct intel_dp *intel_dp);
 bool intel_dp_needs_vsc_sdp(const struct intel_crtc_state *crtc_state,
 			    const struct drm_connector_state *conn_state);
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 1405ab5e3acc..6da031f9724d 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1377,11 +1377,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 		dsc = dsc_max_compressed_bpp && dsc_slice_count;
 	}
 
-	/*
-	 * Big joiner configuration needs DSC for TGL which is not true for
-	 * XE_LPD where uncompressed joiner is supported.
-	 */
-	if (DISPLAY_VER(dev_priv) < 13 && bigjoiner && !dsc) {
+	if (intel_dp_joiner_needs_dsc(dev_priv, bigjoiner) && !dsc) {
 		*status = MODE_CLOCK_HIGH;
 		return 0;
 	}
-- 
2.43.2


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

* [PATCH 11/22] drm/i915/mst: Check intel_dp_joiner_needs_dsc()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (9 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 10/22] drm/i915: Extract intel_dp_joiner_needs_dsc() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  9:28   ` Shankar, Uma
  2024-03-29  1:12 ` [PATCH 12/22] drm/i915: Pass connector to intel_dp_need_bigjoiner() Ville Syrjala
                   ` (14 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

intel_dp_mst_compute_config() is missing the "does the
joiner need DSC?" check despite claiming to have a lot
of other joiner/dsc stuff in there (albeit disabled).
Replicate the logic from the SST side.

TODO: refactor all this duplicated code!

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 6da031f9724d..1cf6241a7d53 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -532,7 +532,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
 	const struct drm_display_mode *adjusted_mode =
 		&pipe_config->hw.adjusted_mode;
 	struct link_config_limits limits;
-	bool dsc_needed;
+	bool dsc_needed, joiner_needs_dsc;
 	int ret = 0;
 
 	if (pipe_config->fec_enable &&
@@ -546,7 +546,9 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
 	pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
 	pipe_config->has_pch_encoder = false;
 
-	dsc_needed = intel_dp->force_dsc_en ||
+	joiner_needs_dsc = intel_dp_joiner_needs_dsc(dev_priv, pipe_config->bigjoiner_pipes);
+
+	dsc_needed = joiner_needs_dsc || intel_dp->force_dsc_en ||
 		     !intel_dp_mst_compute_config_limits(intel_dp,
 							 connector,
 							 pipe_config,
@@ -566,8 +568,8 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
 
 	/* enable compression if the mode doesn't fit available BW */
 	if (dsc_needed) {
-		drm_dbg_kms(&dev_priv->drm, "Try DSC (fallback=%s, force=%s)\n",
-			    str_yes_no(ret),
+		drm_dbg_kms(&dev_priv->drm, "Try DSC (fallback=%s, joiner=%s, force=%s)\n",
+			    str_yes_no(ret), str_yes_no(joiner_needs_dsc),
 			    str_yes_no(intel_dp->force_dsc_en));
 
 		if (!intel_dp_mst_dsc_source_support(pipe_config))
-- 
2.43.2


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

* [PATCH 12/22] drm/i915: Pass connector to intel_dp_need_bigjoiner()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (10 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 11/22] drm/i915/mst: Check intel_dp_joiner_needs_dsc() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  9:39   ` Shankar, Uma
  2024-03-29  1:12 ` [PATCH 13/22] drm/i915/mst: Limit MST+DSC to TGL+ Ville Syrjala
                   ` (13 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Pass the connector explicitly to intel_dp_need_bigjoiner()
so that it'll actually check the correct place for the
bigjoiner force flag.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c     | 10 ++++++----
 drivers/gpu/drm/i915/display/intel_dp.h     |  1 +
 drivers/gpu/drm/i915/display/intel_dp_mst.c |  5 +++--
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 6fa8fc56a39c..cbabd1924474 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1194,10 +1194,10 @@ intel_dp_mode_valid_downstream(struct intel_connector *connector,
 }
 
 bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
+			     struct intel_connector *connector,
 			     int hdisplay, int clock)
 {
 	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
-	struct intel_connector *connector = intel_dp->attached_connector;
 
 	if (!intel_dp_has_bigjoiner(intel_dp))
 		return false;
@@ -1241,7 +1241,8 @@ intel_dp_mode_valid(struct drm_connector *_connector,
 		target_clock = fixed_mode->clock;
 	}
 
-	if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock)) {
+	if (intel_dp_need_bigjoiner(intel_dp, connector,
+				    mode->hdisplay, target_clock)) {
 		bigjoiner = true;
 		max_dotclk *= 2;
 	}
@@ -2409,7 +2410,7 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
 {
 	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
-	const struct intel_connector *connector =
+	struct intel_connector *connector =
 		to_intel_connector(conn_state->connector);
 	const struct drm_display_mode *adjusted_mode =
 		&pipe_config->hw.adjusted_mode;
@@ -2422,7 +2423,8 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
 	    !intel_dp_supports_fec(intel_dp, connector, pipe_config))
 		return -EINVAL;
 
-	if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay,
+	if (intel_dp_need_bigjoiner(intel_dp, connector,
+				    adjusted_mode->crtc_hdisplay,
 				    adjusted_mode->crtc_clock))
 		pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe);
 
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index d5697b99ac21..cd6969d05fe3 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -150,6 +150,7 @@ u8 intel_dp_dsc_get_slice_count(const struct intel_connector *connector,
 				int mode_clock, int mode_hdisplay,
 				bool bigjoiner);
 bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
+			     struct intel_connector *connector,
 			     int hdisplay, int clock);
 
 static inline unsigned int intel_dp_unused_lane_mask(int lane_count)
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 1cf6241a7d53..a3b0026adb2d 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -527,7 +527,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
 	struct intel_atomic_state *state = to_intel_atomic_state(conn_state->state);
 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder);
 	struct intel_dp *intel_dp = &intel_mst->primary->dp;
-	const struct intel_connector *connector =
+	struct intel_connector *connector =
 		to_intel_connector(conn_state->connector);
 	const struct drm_display_mode *adjusted_mode =
 		&pipe_config->hw.adjusted_mode;
@@ -1342,7 +1342,8 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 		*status = MODE_CLOCK_HIGH;
 		return 0;
 	}
-	if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock)) {
+	if (intel_dp_need_bigjoiner(intel_dp, intel_connector,
+				    mode->hdisplay, target_clock)) {
 		bigjoiner = true;
 		max_dotclk *= 2;
 
-- 
2.43.2


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

* [PATCH 13/22] drm/i915/mst: Limit MST+DSC to TGL+
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (11 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 12/22] drm/i915: Pass connector to intel_dp_need_bigjoiner() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  9:44   ` Shankar, Uma
  2024-03-29  1:12 ` [PATCH 14/22] drm/i915/mst: Reject FEC+MST on ICL Ville Syrjala
                   ` (12 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The MST code currently assumes that glk+ alerady supports MST+DSC,
which is incorrect. We need to check for TGL+ actually. ICL does
support SST+DSC, but supposedly it can't do MST+FEC which will
also rule MST+DSC.

Note that a straight TGL+ check doesn't work here because DSC
support can get fused out, so we do need to also check 'has_dsc'.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_device.h | 1 +
 drivers/gpu/drm/i915/display/intel_dp_mst.c         | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h
index fe4268813786..9b1bce2624b9 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.h
+++ b/drivers/gpu/drm/i915/display/intel_display_device.h
@@ -47,6 +47,7 @@ struct drm_printer;
 #define HAS_DPT(i915)			(DISPLAY_VER(i915) >= 13)
 #define HAS_DSB(i915)			(DISPLAY_INFO(i915)->has_dsb)
 #define HAS_DSC(__i915)			(DISPLAY_RUNTIME_INFO(__i915)->has_dsc)
+#define HAS_DSC_MST(__i915)		(DISPLAY_VER(__i915) >= 12 && HAS_DSC(__i915))
 #define HAS_FBC(i915)			(DISPLAY_RUNTIME_INFO(i915)->fbc_mask != 0)
 #define HAS_FPGA_DBG_UNCLAIMED(i915)	(DISPLAY_INFO(i915)->has_fpga_dbg)
 #define HAS_FW_BLC(i915)		(DISPLAY_VER(i915) >= 3)
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index a3b0026adb2d..de364ed77c08 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1352,7 +1352,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 		return 0;
 	}
 
-	if (DISPLAY_VER(dev_priv) >= 10 &&
+	if (HAS_DSC_MST(dev_priv) &&
 	    drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) {
 		/*
 		 * TBD pass the connector BPC,
-- 
2.43.2


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

* [PATCH 14/22] drm/i915/mst: Reject FEC+MST on ICL
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (12 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 13/22] drm/i915/mst: Limit MST+DSC to TGL+ Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  9:45   ` Shankar, Uma
  2024-03-29  1:12 ` [PATCH 15/22] drm/i915: Introduce intel_crtc_joined_pipe_mask() Ville Syrjala
                   ` (11 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

ICL supposedly doesn't support FEC on MST. Reject it.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index cbabd1924474..8b8059b6bb21 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1415,7 +1415,8 @@ static bool intel_dp_source_supports_fec(struct intel_dp *intel_dp,
 	if (DISPLAY_VER(dev_priv) >= 12)
 		return true;
 
-	if (DISPLAY_VER(dev_priv) == 11 && encoder->port != PORT_A)
+	if (DISPLAY_VER(dev_priv) == 11 && encoder->port != PORT_A &&
+	    !intel_crtc_has_type(pipe_config, INTEL_OUTPUT_DP_MST))
 		return true;
 
 	return false;
-- 
2.43.2


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

* [PATCH 15/22] drm/i915: Introduce intel_crtc_joined_pipe_mask()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (13 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 14/22] drm/i915/mst: Reject FEC+MST on ICL Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 10:20   ` Murthy, Arun R
  2024-03-29  1:12 ` [PATCH 16/22] drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst() Ville Syrjala
                   ` (10 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Add a small helper to compute the set of pipes that the current
crtc is using.

And we have at least one trivial place in
intel_ddi_update_active_dpll() where we can use it
immediately, so let's do that.

v2: Use the name 'pipe_crtc' for the per-pipe crtc pointer

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c     | 11 +++++------
 drivers/gpu/drm/i915/display/intel_display.c |  7 +++++++
 drivers/gpu/drm/i915/display/intel_display.h |  1 +
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index fa6fe9ec8027..24a9be2a217f 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3463,18 +3463,17 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state,
 				  struct intel_crtc *crtc)
 {
 	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
-	struct intel_crtc_state *crtc_state =
+	const struct intel_crtc_state *crtc_state =
 		intel_atomic_get_new_crtc_state(state, crtc);
-	struct intel_crtc *slave_crtc;
+	struct intel_crtc *pipe_crtc;
 
 	/* FIXME: Add MTL pll_mgr */
 	if (DISPLAY_VER(i915) >= 14 || !intel_encoder_is_tc(encoder))
 		return;
 
-	intel_update_active_dpll(state, crtc, encoder);
-	for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc,
-					 intel_crtc_bigjoiner_slave_pipes(crtc_state))
-		intel_update_active_dpll(state, slave_crtc, encoder);
+	for_each_intel_crtc_in_pipe_mask(&i915->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(crtc_state))
+		intel_update_active_dpll(state, pipe_crtc, encoder);
 }
 
 static void
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 6197b62dac55..58ee40786d5c 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -275,6 +275,13 @@ static int intel_bigjoiner_num_pipes(const struct intel_crtc_state *crtc_state)
 	return hweight8(crtc_state->bigjoiner_pipes);
 }
 
+u8 intel_crtc_joined_pipe_mask(const struct intel_crtc_state *crtc_state)
+{
+	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
+
+	return BIT(crtc->pipe) | crtc_state->bigjoiner_pipes;
+}
+
 struct intel_crtc *intel_master_crtc(const struct intel_crtc_state *crtc_state)
 {
 	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
index 986ec77490de..31ee34c59844 100644
--- a/drivers/gpu/drm/i915/display/intel_display.h
+++ b/drivers/gpu/drm/i915/display/intel_display.h
@@ -408,6 +408,7 @@ intel_cpu_transcoder_mode_valid(struct drm_i915_private *i915,
 enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port);
 bool is_trans_port_sync_mode(const struct intel_crtc_state *state);
 bool is_trans_port_sync_master(const struct intel_crtc_state *state);
+u8 intel_crtc_joined_pipe_mask(const struct intel_crtc_state *crtc_state);
 bool intel_crtc_is_bigjoiner_slave(const struct intel_crtc_state *crtc_state);
 bool intel_crtc_is_bigjoiner_master(const struct intel_crtc_state *crtc_state);
 u8 intel_crtc_bigjoiner_slave_pipes(const struct intel_crtc_state *crtc_state);
-- 
2.43.2


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

* [PATCH 16/22] drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (14 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 15/22] drm/i915: Introduce intel_crtc_joined_pipe_mask() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01 10:17   ` Murthy, Arun R
  2024-03-29  1:12 ` [PATCH 17/22] drm/i915: Utilize intel_crtc_joined_pipe_mask() more Ville Syrjala
                   ` (9 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Extract the "not-MST" stuff from intel_ddi_post_disable() so that
the whole thing isn't so cluttered.

The bigjoiner slave handling was outside of the !MST check,
but it really should have been inside it as its the counterpart
to the master handling inside the check. So we pull that
in as well. There is no functional change here as we don't
currently support bigjoiner+MST anyway.

v2: Rebase

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 52 +++++++++++-------------
 1 file changed, 24 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 24a9be2a217f..1130bfb7363c 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3092,39 +3092,35 @@ static void intel_ddi_post_disable_hdmi(struct intel_atomic_state *state,
 	intel_dp_dual_mode_set_tmds_output(intel_hdmi, false);
 }
 
+static void intel_ddi_post_disable_hdmi_or_sst(struct intel_atomic_state *state,
+					       struct intel_encoder *encoder,
+					       const struct intel_crtc_state *old_crtc_state,
+					       const struct drm_connector_state *old_conn_state)
+{
+	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+
+	intel_crtc_vblank_off(old_crtc_state);
+
+	intel_disable_transcoder(old_crtc_state);
+
+	intel_ddi_disable_transcoder_func(old_crtc_state);
+
+	intel_dsc_disable(old_crtc_state);
+
+	if (DISPLAY_VER(dev_priv) >= 9)
+		skl_scaler_disable(old_crtc_state);
+	else
+		ilk_pfit_disable(old_crtc_state);
+}
+
 static void intel_ddi_post_disable(struct intel_atomic_state *state,
 				   struct intel_encoder *encoder,
 				   const struct intel_crtc_state *old_crtc_state,
 				   const struct drm_connector_state *old_conn_state)
 {
-	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	struct intel_crtc *slave_crtc;
-
-	if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) {
-		intel_crtc_vblank_off(old_crtc_state);
-
-		intel_disable_transcoder(old_crtc_state);
-
-		intel_ddi_disable_transcoder_func(old_crtc_state);
-
-		intel_dsc_disable(old_crtc_state);
-
-		if (DISPLAY_VER(dev_priv) >= 9)
-			skl_scaler_disable(old_crtc_state);
-		else
-			ilk_pfit_disable(old_crtc_state);
-	}
-
-	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc,
-					 intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) {
-		const struct intel_crtc_state *old_slave_crtc_state =
-			intel_atomic_get_old_crtc_state(state, slave_crtc);
-
-		intel_crtc_vblank_off(old_slave_crtc_state);
-
-		intel_dsc_disable(old_slave_crtc_state);
-		skl_scaler_disable(old_slave_crtc_state);
-	}
+	if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
+		intel_ddi_post_disable_hdmi_or_sst(state, encoder,
+						   old_crtc_state, old_conn_state);
 
 	/*
 	 * When called from DP MST code:
-- 
2.43.2


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

* [PATCH 17/22] drm/i915: Utilize intel_crtc_joined_pipe_mask() more
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (15 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 16/22] drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  6:52   ` Murthy, Arun R
  2024-03-29  1:12 ` [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable() Ville Syrjala
                   ` (8 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Unify the master vs. slave handling in
intel_ddi_post_disable_hdmi_or_sst() by looping over all the
pipes in one go.

This also lets us move the intel_crtc_vblank_off() calls to
happen in a consistent place vs. the transcoder disable.
Previously we did the master vs. slaves on different sides
of that.

v2: Use the name 'pipe_crtc' for the per-pipe crtc pointer

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 25 ++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 1130bfb7363c..af34e905a85d 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3098,19 +3098,32 @@ static void intel_ddi_post_disable_hdmi_or_sst(struct intel_atomic_state *state,
 					       const struct drm_connector_state *old_conn_state)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	struct intel_crtc *pipe_crtc;
 
-	intel_crtc_vblank_off(old_crtc_state);
+	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(old_crtc_state)) {
+		const struct intel_crtc_state *old_pipe_crtc_state =
+			intel_atomic_get_old_crtc_state(state, pipe_crtc);
+
+		intel_crtc_vblank_off(old_pipe_crtc_state);
+	}
 
 	intel_disable_transcoder(old_crtc_state);
 
 	intel_ddi_disable_transcoder_func(old_crtc_state);
 
-	intel_dsc_disable(old_crtc_state);
+	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(old_crtc_state)) {
+		const struct intel_crtc_state *old_pipe_crtc_state =
+			intel_atomic_get_old_crtc_state(state, pipe_crtc);
 
-	if (DISPLAY_VER(dev_priv) >= 9)
-		skl_scaler_disable(old_crtc_state);
-	else
-		ilk_pfit_disable(old_crtc_state);
+		intel_dsc_disable(old_pipe_crtc_state);
+
+		if (DISPLAY_VER(dev_priv) >= 9)
+			skl_scaler_disable(old_pipe_crtc_state);
+		else
+			ilk_pfit_disable(old_pipe_crtc_state);
+	}
 }
 
 static void intel_ddi_post_disable(struct intel_atomic_state *state,
-- 
2.43.2


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

* [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (16 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 17/22] drm/i915: Utilize intel_crtc_joined_pipe_mask() more Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  6:46   ` Murthy, Arun R
  2024-03-29  1:12 ` [PATCH 19/22] drm/i915: Handle joined pipes inside hsw_crtc_enable() Ville Syrjala
                   ` (7 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reorganize the crtc disable path to only deal with the
master pipes/transcoders in intel_old_crtc_state_disables()
and offload the handling of joined pipes to hsw_crtc_disable().
This makes the whole thing much more sensible since we can
actually control the order in which we do the per-pipe vs.
per-transcoder modeset steps.

v2: Use the name 'pipe_crtc' for the per-pipe crtc pointer

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 64 ++++++++++++--------
 1 file changed, 39 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 58ee40786d5c..c15ea046c62a 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -1791,29 +1791,28 @@ static void hsw_crtc_disable(struct intel_atomic_state *state,
 	const struct intel_crtc_state *old_crtc_state =
 		intel_atomic_get_old_crtc_state(state, crtc);
 	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
+	struct intel_crtc *pipe_crtc;
 
 	/*
 	 * FIXME collapse everything to one hook.
 	 * Need care with mst->ddi interactions.
 	 */
-	if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
-		intel_encoders_disable(state, crtc);
-		intel_encoders_post_disable(state, crtc);
-	}
-
-	intel_disable_shared_dpll(old_crtc_state);
+	intel_encoders_disable(state, crtc);
+	intel_encoders_post_disable(state, crtc);
 
-	if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
-		struct intel_crtc *slave_crtc;
+	for_each_intel_crtc_in_pipe_mask(&i915->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(old_crtc_state)) {
+		const struct intel_crtc_state *old_pipe_crtc_state =
+			intel_atomic_get_old_crtc_state(state, pipe_crtc);
 
-		intel_encoders_post_pll_disable(state, crtc);
+		intel_disable_shared_dpll(old_pipe_crtc_state);
+	}
 
-		intel_dmc_disable_pipe(i915, crtc->pipe);
+	intel_encoders_post_pll_disable(state, crtc);
 
-		for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc,
-						 intel_crtc_bigjoiner_slave_pipes(old_crtc_state))
-			intel_dmc_disable_pipe(i915, slave_crtc->pipe);
-	}
+	for_each_intel_crtc_in_pipe_mask(&i915->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(old_crtc_state))
+		intel_dmc_disable_pipe(i915, pipe_crtc->pipe);
 }
 
 static void i9xx_pfit_enable(const struct intel_crtc_state *crtc_state)
@@ -6784,21 +6783,31 @@ static void intel_old_crtc_state_disables(struct intel_atomic_state *state,
 					  struct intel_crtc *crtc)
 {
 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
-	const struct intel_crtc_state *new_crtc_state =
-		intel_atomic_get_new_crtc_state(state, crtc);
+	const struct intel_crtc_state *old_crtc_state =
+		intel_atomic_get_old_crtc_state(state, crtc);
+	struct intel_crtc *pipe_crtc;
 
 	/*
 	 * We need to disable pipe CRC before disabling the pipe,
 	 * or we race against vblank off.
 	 */
-	intel_crtc_disable_pipe_crc(crtc);
+	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(old_crtc_state))
+		intel_crtc_disable_pipe_crc(pipe_crtc);
 
 	dev_priv->display.funcs.display->crtc_disable(state, crtc);
-	crtc->active = false;
-	intel_fbc_disable(crtc);
 
-	if (!new_crtc_state->hw.active)
-		intel_initial_watermarks(state, crtc);
+	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(old_crtc_state)) {
+		const struct intel_crtc_state *new_pipe_crtc_state =
+			intel_atomic_get_new_crtc_state(state, pipe_crtc);
+
+		pipe_crtc->active = false;
+		intel_fbc_disable(pipe_crtc);
+
+		if (!new_pipe_crtc_state->hw.active)
+			intel_initial_watermarks(state, pipe_crtc);
+	}
 }
 
 static void intel_commit_modeset_disables(struct intel_atomic_state *state)
@@ -6838,19 +6847,21 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state)
 		if ((disable_pipes & BIT(crtc->pipe)) == 0)
 			continue;
 
+		if (intel_crtc_is_bigjoiner_slave(old_crtc_state))
+			continue;
+
 		/* In case of Transcoder port Sync master slave CRTCs can be
 		 * assigned in any order and we need to make sure that
 		 * slave CRTCs are disabled first and then master CRTC since
 		 * Slave vblanks are masked till Master Vblanks.
 		 */
 		if (!is_trans_port_sync_slave(old_crtc_state) &&
-		    !intel_dp_mst_is_slave_trans(old_crtc_state) &&
-		    !intel_crtc_is_bigjoiner_slave(old_crtc_state))
+		    !intel_dp_mst_is_slave_trans(old_crtc_state))
 			continue;
 
 		intel_old_crtc_state_disables(state, crtc);
 
-		disable_pipes &= ~BIT(crtc->pipe);
+		disable_pipes &= ~intel_crtc_joined_pipe_mask(old_crtc_state);
 	}
 
 	/* Disable everything else left on */
@@ -6858,9 +6869,12 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state)
 		if ((disable_pipes & BIT(crtc->pipe)) == 0)
 			continue;
 
+		if (intel_crtc_is_bigjoiner_slave(old_crtc_state))
+			continue;
+
 		intel_old_crtc_state_disables(state, crtc);
 
-		disable_pipes &= ~BIT(crtc->pipe);
+		disable_pipes &= ~intel_crtc_joined_pipe_mask(old_crtc_state);
 	}
 
 	drm_WARN_ON(&i915->drm, disable_pipes);
-- 
2.43.2


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

* [PATCH 19/22] drm/i915: Handle joined pipes inside hsw_crtc_enable()
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (17 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-03-29  1:12 ` [PATCH 20/22] drm/i915/mst: Add bigjoiner handling to MST modeset sequence Ville Syrjala
                   ` (6 subsequent siblings)
  25 siblings, 0 replies; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx; +Cc: Vidya Srinivas, Manasi Navare, Ville Syrjälä

From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

Handle only bigjoiner masters in skl_commit_modeset_enables/disables,
slave crtcs should be handled by master hooks. Same for encoders.
That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave.

v2: - Moved skl_pfit_enable, intel_dsc_enable, intel_crtc_vblank_on to intel_enable_ddi,
      so that it is now finally symmetrical with the disable case, because currently
      for some weird reason we are calling those from skl_commit_modeset_enables, while
      for the disable case those are called from the ddi disable hooks.
v3: - Create intel_ddi_enable_hdmi_or_sst symmetrical to
      intel_ddi_post_disable_hdmi_or_sst and move it also under non-mst check.
v4: - Fix intel_enable_ddi sequence
    - Call intel_crtc_update_active_timings for slave pipes as well
[v5: vsyrjala: Use the name 'pipe_crtc' for the per-pipe crtc pointer
               Use consistent style and naming
	       Protect macro arguments properly
               Drop superfluous changes to the modeset sequence,
	       this now follows the old non-joiner sequence 100%
	       apart from just looping in places]

Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Tested-by: Vidya Srinivas <vidya.srinivas@intel.com> #v4?
Reviewed-by: Manasi Navare <navaremanasi@chromium.org> #v4?
Co-developed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c     |  14 +-
 drivers/gpu/drm/i915/display/intel_display.c | 188 ++++++++++---------
 drivers/gpu/drm/i915/display/intel_display.h |   6 +
 3 files changed, 116 insertions(+), 92 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index af34e905a85d..f81843058e79 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3364,10 +3364,10 @@ static void intel_enable_ddi(struct intel_atomic_state *state,
 			     const struct intel_crtc_state *crtc_state,
 			     const struct drm_connector_state *conn_state)
 {
-	drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder);
+	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
+	struct intel_crtc *pipe_crtc;
 
-	if (!intel_crtc_is_bigjoiner_slave(crtc_state))
-		intel_ddi_enable_transcoder_func(encoder, crtc_state);
+	intel_ddi_enable_transcoder_func(encoder, crtc_state);
 
 	/* Enable/Disable DP2.0 SDP split config before transcoder */
 	intel_audio_sdp_split_update(crtc_state);
@@ -3376,7 +3376,13 @@ static void intel_enable_ddi(struct intel_atomic_state *state,
 
 	intel_ddi_wait_for_fec_status(encoder, crtc_state, true);
 
-	intel_crtc_vblank_on(crtc_state);
+	for_each_intel_crtc_in_pipe_mask_reverse(&i915->drm, pipe_crtc,
+						 intel_crtc_joined_pipe_mask(crtc_state)) {
+		const struct intel_crtc_state *pipe_crtc_state =
+			intel_atomic_get_new_crtc_state(state, pipe_crtc);
+
+		intel_crtc_vblank_on(pipe_crtc_state);
+	}
 
 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
 		intel_enable_ddi_hdmi(state, encoder, crtc_state, conn_state);
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index c15ea046c62a..bebc4463ed4a 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -1595,24 +1595,6 @@ static void hsw_set_frame_start_delay(const struct intel_crtc_state *crtc_state)
 		     HSW_FRAME_START_DELAY(crtc_state->framestart_delay - 1));
 }
 
-static void icl_ddi_bigjoiner_pre_enable(struct intel_atomic_state *state,
-					 const struct intel_crtc_state *crtc_state)
-{
-	struct intel_crtc *master_crtc = intel_master_crtc(crtc_state);
-
-	/*
-	 * Enable sequence steps 1-7 on bigjoiner master
-	 */
-	if (intel_crtc_is_bigjoiner_slave(crtc_state))
-		intel_encoders_pre_pll_enable(state, master_crtc);
-
-	if (crtc_state->shared_dpll)
-		intel_enable_shared_dpll(crtc_state);
-
-	if (intel_crtc_is_bigjoiner_slave(crtc_state))
-		intel_encoders_pre_enable(state, master_crtc);
-}
-
 static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_state)
 {
 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
@@ -1649,85 +1631,106 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
 		intel_atomic_get_new_crtc_state(state, crtc);
 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
 	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
-	enum pipe hsw_workaround_pipe;
+	struct intel_crtc *pipe_crtc;
 
 	if (drm_WARN_ON(&dev_priv->drm, crtc->active))
 		return;
 
-	intel_dmc_enable_pipe(dev_priv, crtc->pipe);
+	for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, pipe_crtc,
+						 intel_crtc_joined_pipe_mask(new_crtc_state))
+		intel_dmc_enable_pipe(dev_priv, pipe_crtc->pipe);
 
-	if (!new_crtc_state->bigjoiner_pipes) {
-		intel_encoders_pre_pll_enable(state, crtc);
+	intel_encoders_pre_pll_enable(state, crtc);
 
-		if (new_crtc_state->shared_dpll)
-			intel_enable_shared_dpll(new_crtc_state);
+	for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, pipe_crtc,
+						 intel_crtc_joined_pipe_mask(new_crtc_state)) {
+		const struct intel_crtc_state *pipe_crtc_state =
+			intel_atomic_get_new_crtc_state(state, pipe_crtc);
 
-		intel_encoders_pre_enable(state, crtc);
-	} else {
-		icl_ddi_bigjoiner_pre_enable(state, new_crtc_state);
+		if (pipe_crtc_state->shared_dpll)
+			intel_enable_shared_dpll(pipe_crtc_state);
 	}
 
-	intel_dsc_enable(new_crtc_state);
+	intel_encoders_pre_enable(state, crtc);
 
-	if (DISPLAY_VER(dev_priv) >= 13)
-		intel_uncompressed_joiner_enable(new_crtc_state);
+	for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, pipe_crtc,
+						 intel_crtc_joined_pipe_mask(new_crtc_state)) {
+		const struct intel_crtc_state *pipe_crtc_state =
+			intel_atomic_get_new_crtc_state(state, pipe_crtc);
 
-	intel_set_pipe_src_size(new_crtc_state);
-	if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
-		bdw_set_pipe_misc(new_crtc_state);
+		intel_dsc_enable(pipe_crtc_state);
 
-	if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) &&
-	    !transcoder_is_dsi(cpu_transcoder))
+		if (DISPLAY_VER(dev_priv) >= 13)
+			intel_uncompressed_joiner_enable(pipe_crtc_state);
+
+		intel_set_pipe_src_size(pipe_crtc_state);
+
+		if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
+			bdw_set_pipe_misc(pipe_crtc_state);
+	}
+
+	if (!transcoder_is_dsi(cpu_transcoder))
 		hsw_configure_cpu_transcoder(new_crtc_state);
 
-	crtc->active = true;
-
-	if (glk_need_scaler_clock_gating_wa(new_crtc_state))
-		glk_pipe_scaler_clock_gating_wa(crtc, true);
-
-	if (DISPLAY_VER(dev_priv) >= 9)
-		skl_pfit_enable(new_crtc_state);
-	else
-		ilk_pfit_enable(new_crtc_state);
-
-	/*
-	 * On ILK+ LUT must be loaded before the pipe is running but with
-	 * clocks enabled
-	 */
-	intel_color_load_luts(new_crtc_state);
-	intel_color_commit_noarm(new_crtc_state);
-	intel_color_commit_arm(new_crtc_state);
-	/* update DSPCNTR to configure gamma/csc for pipe bottom color */
-	if (DISPLAY_VER(dev_priv) < 9)
-		intel_disable_primary_plane(new_crtc_state);
-
-	hsw_set_linetime_wm(new_crtc_state);
-
-	if (DISPLAY_VER(dev_priv) >= 11)
-		icl_set_pipe_chicken(new_crtc_state);
-
-	intel_initial_watermarks(state, crtc);
-
-	if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
-		intel_crtc_vblank_on(new_crtc_state);
-
-	intel_encoders_enable(state, crtc);
-
-	if (glk_need_scaler_clock_gating_wa(new_crtc_state)) {
-		intel_crtc_wait_for_next_vblank(crtc);
-		glk_pipe_scaler_clock_gating_wa(crtc, false);
+	for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, pipe_crtc,
+						 intel_crtc_joined_pipe_mask(new_crtc_state)) {
+		const struct intel_crtc_state *pipe_crtc_state =
+			intel_atomic_get_new_crtc_state(state, pipe_crtc);
+
+		pipe_crtc->active = true;
+
+		if (glk_need_scaler_clock_gating_wa(pipe_crtc_state))
+			glk_pipe_scaler_clock_gating_wa(pipe_crtc, true);
+
+		if (DISPLAY_VER(dev_priv) >= 9)
+			skl_pfit_enable(pipe_crtc_state);
+		else
+			ilk_pfit_enable(pipe_crtc_state);
+
+		/*
+		 * On ILK+ LUT must be loaded before the pipe is running but with
+		 * clocks enabled
+		 */
+		intel_color_load_luts(pipe_crtc_state);
+		intel_color_commit_noarm(pipe_crtc_state);
+		intel_color_commit_arm(pipe_crtc_state);
+		/* update DSPCNTR to configure gamma/csc for pipe bottom color */
+		if (DISPLAY_VER(dev_priv) < 9)
+			intel_disable_primary_plane(pipe_crtc_state);
+
+		hsw_set_linetime_wm(pipe_crtc_state);
+
+		if (DISPLAY_VER(dev_priv) >= 11)
+			icl_set_pipe_chicken(pipe_crtc_state);
+
+		intel_initial_watermarks(state, pipe_crtc);
 	}
 
-	/* If we change the relative order between pipe/planes enabling, we need
-	 * to change the workaround. */
-	hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe;
-	if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) {
-		struct intel_crtc *wa_crtc;
+	intel_encoders_enable(state, crtc);
 
-		wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe);
+	for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, pipe_crtc,
+						 intel_crtc_joined_pipe_mask(new_crtc_state)) {
+		const struct intel_crtc_state *pipe_crtc_state =
+			intel_atomic_get_new_crtc_state(state, pipe_crtc);
+		enum pipe hsw_workaround_pipe;
 
-		intel_crtc_wait_for_next_vblank(wa_crtc);
-		intel_crtc_wait_for_next_vblank(wa_crtc);
+		if (glk_need_scaler_clock_gating_wa(pipe_crtc_state)) {
+			intel_crtc_wait_for_next_vblank(pipe_crtc);
+			glk_pipe_scaler_clock_gating_wa(pipe_crtc, false);
+		}
+
+		/*
+		 * If we change the relative order between pipe/planes
+		 * enabling, we need to change the workaround.
+		 */
+		hsw_workaround_pipe = pipe_crtc_state->hsw_workaround_pipe;
+		if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) {
+			struct intel_crtc *wa_crtc =
+				intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe);
+
+			intel_crtc_wait_for_next_vblank(wa_crtc);
+			intel_crtc_wait_for_next_vblank(wa_crtc);
+		}
 	}
 }
 
@@ -6678,18 +6681,22 @@ static void intel_enable_crtc(struct intel_atomic_state *state,
 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
 	const struct intel_crtc_state *new_crtc_state =
 		intel_atomic_get_new_crtc_state(state, crtc);
+	struct intel_crtc *pipe_crtc;
 
 	if (!intel_crtc_needs_modeset(new_crtc_state))
 		return;
 
-	/* VRR will be enable later, if required */
-	intel_crtc_update_active_timings(new_crtc_state, false);
+	for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, pipe_crtc,
+						 intel_crtc_joined_pipe_mask(new_crtc_state)) {
+		const struct intel_crtc_state *pipe_crtc_state =
+			intel_atomic_get_new_crtc_state(state, pipe_crtc);
+
+		/* VRR will be enable later, if required */
+		intel_crtc_update_active_timings(pipe_crtc_state, false);
+	}
 
 	dev_priv->display.funcs.display->crtc_enable(state, crtc);
 
-	if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
-		return;
-
 	/* vblanks work again, re-enable pipe CRC. */
 	intel_crtc_enable_pipe_crc(crtc);
 }
@@ -6986,12 +6993,14 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state)
 		if ((modeset_pipes & BIT(pipe)) == 0)
 			continue;
 
+		if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
+			continue;
+
 		if (intel_dp_mst_is_slave_trans(new_crtc_state) ||
-		    is_trans_port_sync_master(new_crtc_state) ||
-		    intel_crtc_is_bigjoiner_master(new_crtc_state))
+		    is_trans_port_sync_master(new_crtc_state))
 			continue;
 
-		modeset_pipes &= ~BIT(pipe);
+		modeset_pipes &= ~intel_crtc_joined_pipe_mask(new_crtc_state);
 
 		intel_enable_crtc(state, crtc);
 	}
@@ -7006,7 +7015,10 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state)
 		if ((modeset_pipes & BIT(pipe)) == 0)
 			continue;
 
-		modeset_pipes &= ~BIT(pipe);
+		if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
+			continue;
+
+		modeset_pipes &= ~intel_crtc_joined_pipe_mask(new_crtc_state);
 
 		intel_enable_crtc(state, crtc);
 	}
diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
index 31ee34c59844..08b300eef798 100644
--- a/drivers/gpu/drm/i915/display/intel_display.h
+++ b/drivers/gpu/drm/i915/display/intel_display.h
@@ -280,6 +280,12 @@ enum phy_fia {
 			    base.head)					\
 		for_each_if((pipe_mask) & BIT(intel_crtc->pipe))
 
+#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask)	\
+	list_for_each_entry_reverse((intel_crtc),				\
+				    &(dev)->mode_config.crtc_list,		\
+				    base.head)					\
+		for_each_if((pipe_mask) & BIT((intel_crtc)->pipe))
+
 #define for_each_intel_encoder(dev, intel_encoder)		\
 	list_for_each_entry(intel_encoder,			\
 			    &(dev)->mode_config.encoder_list,	\
-- 
2.43.2


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

* [PATCH 20/22] drm/i915/mst: Add bigjoiner handling to MST modeset sequence
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (18 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 19/22] drm/i915: Handle joined pipes inside hsw_crtc_enable() Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  6:33   ` Murthy, Arun R
  2024-03-29  1:12 ` [PATCH 21/22] drm/i915: Allow bigjoiner for MST Ville Syrjala
                   ` (5 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx; +Cc: Vidya Srinivas

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Loop over all joined pipes at relevant points in the MST
modeset sequence.

Carved out from Vidya's earlier big patch, with naming/etc.
changed to match the earlier hsw_crtc_enable() stuff.

Co-developed-by: Vidya Srinivas <vidya.srinivas@intel.com>
Signed-off-by: Vidya Srinivas <vidya.srinivas@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 34 ++++++++++++++++-----
 1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index de364ed77c08..2d601d214915 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -956,6 +956,7 @@ static void intel_mst_post_disable_dp(struct intel_atomic_state *state,
 	struct drm_dp_mst_atomic_payload *new_payload =
 		drm_atomic_get_mst_payload_state(new_mst_state, connector->port);
 	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
+	struct intel_crtc *pipe_crtc;
 	bool last_mst_stream;
 
 	intel_dp->active_mst_links--;
@@ -964,7 +965,13 @@ static void intel_mst_post_disable_dp(struct intel_atomic_state *state,
 		    DISPLAY_VER(dev_priv) >= 12 && last_mst_stream &&
 		    !intel_dp_mst_is_master_trans(old_crtc_state));
 
-	intel_crtc_vblank_off(old_crtc_state);
+	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(old_crtc_state)) {
+		const struct intel_crtc_state *old_pipe_crtc_state =
+			intel_atomic_get_old_crtc_state(state, pipe_crtc);
+
+		intel_crtc_vblank_off(old_pipe_crtc_state);
+	}
 
 	intel_disable_transcoder(old_crtc_state);
 
@@ -982,12 +989,18 @@ static void intel_mst_post_disable_dp(struct intel_atomic_state *state,
 
 	intel_ddi_disable_transcoder_func(old_crtc_state);
 
-	intel_dsc_disable(old_crtc_state);
+	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(old_crtc_state)) {
+		const struct intel_crtc_state *old_pipe_crtc_state =
+			intel_atomic_get_old_crtc_state(state, pipe_crtc);
 
-	if (DISPLAY_VER(dev_priv) >= 9)
-		skl_scaler_disable(old_crtc_state);
-	else
-		ilk_pfit_disable(old_crtc_state);
+		intel_dsc_disable(old_pipe_crtc_state);
+
+		if (DISPLAY_VER(dev_priv) >= 9)
+			skl_scaler_disable(old_pipe_crtc_state);
+		else
+			ilk_pfit_disable(old_pipe_crtc_state);
+	}
 
 	/*
 	 * Power down mst path before disabling the port, otherwise we end
@@ -1133,6 +1146,7 @@ static void intel_mst_enable_dp(struct intel_atomic_state *state,
 		drm_atomic_get_new_mst_topology_state(&state->base, &intel_dp->mst_mgr);
 	enum transcoder trans = pipe_config->cpu_transcoder;
 	bool first_mst_stream = intel_dp->active_mst_links == 1;
+	struct intel_crtc *pipe_crtc;
 
 	drm_WARN_ON(&dev_priv->drm, pipe_config->has_pch_encoder);
 
@@ -1174,7 +1188,13 @@ static void intel_mst_enable_dp(struct intel_atomic_state *state,
 
 	intel_enable_transcoder(pipe_config);
 
-	intel_crtc_vblank_on(pipe_config);
+	for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, pipe_crtc,
+						 intel_crtc_joined_pipe_mask(pipe_config)) {
+		const struct intel_crtc_state *pipe_crtc_state =
+			intel_atomic_get_new_crtc_state(state, pipe_crtc);
+
+		intel_crtc_vblank_on(pipe_crtc_state);
+	}
 
 	intel_hdcp_enable(state, encoder, pipe_config, conn_state);
 }
-- 
2.43.2


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

* [PATCH 21/22] drm/i915: Allow bigjoiner for MST
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (19 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 20/22] drm/i915/mst: Add bigjoiner handling to MST modeset sequence Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  6:26   ` Murthy, Arun R
  2024-03-29  1:12 ` [PATCH 22/22] drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable" Ville Syrjala
                   ` (4 subsequent siblings)
  25 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx; +Cc: Manasi Navare, Ville Syrjälä

From: Vidya Srinivas <vidya.srinivas@intel.com>

We need bigjoiner support with MST functionality
for MST monitor resolutions > 5K to work.
Adding support for the same.

v2: Addressed review comments from Jani.
Revert rejection of MST bigjoiner modes and add
functionality

v3: Fixed pipe_mismatch WARN for mst_master_transcoder
Credits-to: Manasi Navare <navaremanasi@chromium.org>

v4: Utilize intel_crtc_joined_pipe_mask() also for handling
    bigjoiner slave pipes for MST case(Stan)
[v5: vsyrjala: chunked the modeset squence stuff out,
               removed bogus mst master transcoder hack,
	       keep mgr_lock near the full_pbn check]

Signed-off-by: Vidya Srinivas <vidya.srinivas@intel.com>
Reviewed-by: Manasi Navare <navaremanasi@chromium.org>
Co-developed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 25 ++++++++++++---------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 2d601d214915..c1530c01f541 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -525,6 +525,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 	struct intel_atomic_state *state = to_intel_atomic_state(conn_state->state);
+	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder);
 	struct intel_dp *intel_dp = &intel_mst->primary->dp;
 	struct intel_connector *connector =
@@ -542,6 +543,11 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
 	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
 		return -EINVAL;
 
+	if (intel_dp_need_bigjoiner(intel_dp, connector,
+				    adjusted_mode->crtc_hdisplay,
+				    adjusted_mode->crtc_clock))
+		pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe);
+
 	pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
 	pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
 	pipe_config->has_pch_encoder = false;
@@ -1341,10 +1347,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 					       max_link_clock, max_lanes);
 	mode_rate = intel_dp_link_required(mode->clock, min_bpp);
 
-	ret = drm_modeset_lock(&mgr->base.lock, ctx);
-	if (ret)
-		return ret;
-
 	/*
 	 * TODO:
 	 * - Also check if compression would allow for the mode
@@ -1357,17 +1359,18 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 	 *   corresponding link capabilities of the sink) in case the
 	 *   stream is uncompressed for it by the last branch device.
 	 */
-	if (mode_rate > max_rate || mode->clock > max_dotclk ||
-	    drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) {
-		*status = MODE_CLOCK_HIGH;
-		return 0;
-	}
 	if (intel_dp_need_bigjoiner(intel_dp, intel_connector,
 				    mode->hdisplay, target_clock)) {
 		bigjoiner = true;
 		max_dotclk *= 2;
+	}
 
-		/* TODO: add support for bigjoiner */
+	ret = drm_modeset_lock(&mgr->base.lock, ctx);
+	if (ret)
+		return ret;
+
+	if (mode_rate > max_rate || mode->clock > max_dotclk ||
+	    drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) {
 		*status = MODE_CLOCK_HIGH;
 		return 0;
 	}
@@ -1410,7 +1413,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
 		return 0;
 	}
 
-	*status = intel_mode_valid_max_plane_size(dev_priv, mode, false);
+	*status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner);
 	return 0;
 }
 
-- 
2.43.2


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

* [PATCH 22/22] drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable"
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (20 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 21/22] drm/i915: Allow bigjoiner for MST Ville Syrjala
@ 2024-03-29  1:12 ` Ville Syrjala
  2024-04-01  5:08   ` Murthy, Arun R
  2024-04-02  7:37   ` Srinivas, Vidya
  2024-03-29  6:36 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Bigjoiner modeset sequence redesign and MST support Patchwork
                   ` (3 subsequent siblings)
  25 siblings, 2 replies; 51+ messages in thread
From: Ville Syrjala @ 2024-03-29  1:12 UTC (permalink / raw)
  To: intel-gfx

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

There is no reason to make this debugfs file for a simple
boolean so complicated. Just use debugfs_create_bool().

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 .../drm/i915/display/intel_display_debugfs.c  | 44 +------------------
 1 file changed, 2 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index b99c024b0934..3e364891dcd0 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -1402,20 +1402,6 @@ out:	drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
 	return ret;
 }
 
-static int i915_bigjoiner_enable_show(struct seq_file *m, void *data)
-{
-	struct intel_connector *connector = m->private;
-	struct drm_crtc *crtc;
-
-	crtc = connector->base.state->crtc;
-	if (connector->base.status != connector_status_connected || !crtc)
-		return -ENODEV;
-
-	seq_printf(m, "Bigjoiner enable: %d\n", connector->force_bigjoiner_enable);
-
-	return 0;
-}
-
 static ssize_t i915_dsc_output_format_write(struct file *file,
 					    const char __user *ubuf,
 					    size_t len, loff_t *offp)
@@ -1437,30 +1423,6 @@ static ssize_t i915_dsc_output_format_write(struct file *file,
 	return len;
 }
 
-static ssize_t i915_bigjoiner_enable_write(struct file *file,
-					   const char __user *ubuf,
-					   size_t len, loff_t *offp)
-{
-	struct seq_file *m = file->private_data;
-	struct intel_connector *connector = m->private;
-	struct drm_crtc *crtc;
-	bool bigjoiner_en = 0;
-	int ret;
-
-	crtc = connector->base.state->crtc;
-	if (connector->base.status != connector_status_connected || !crtc)
-		return -ENODEV;
-
-	ret = kstrtobool_from_user(ubuf, len, &bigjoiner_en);
-	if (ret < 0)
-		return ret;
-
-	connector->force_bigjoiner_enable = bigjoiner_en;
-	*offp += len;
-
-	return len;
-}
-
 static int i915_dsc_output_format_open(struct inode *inode,
 				       struct file *file)
 {
@@ -1554,8 +1516,6 @@ static const struct file_operations i915_dsc_fractional_bpp_fops = {
 	.write = i915_dsc_fractional_bpp_write
 };
 
-DEFINE_SHOW_STORE_ATTRIBUTE(i915_bigjoiner_enable);
-
 /*
  * Returns the Current CRTC's bpc.
  * Example usage: cat /sys/kernel/debug/dri/0/crtc-0/i915_current_bpc
@@ -1640,8 +1600,8 @@ void intel_connector_debugfs_add(struct intel_connector *connector)
 	if (DISPLAY_VER(i915) >= 11 &&
 	    (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
 	     connector_type == DRM_MODE_CONNECTOR_eDP)) {
-		debugfs_create_file("i915_bigjoiner_force_enable", 0644, root,
-				    connector, &i915_bigjoiner_enable_fops);
+		debugfs_create_bool("i915_bigjoiner_force_enable", 0644, root,
+				    &connector->force_bigjoiner_enable);
 	}
 
 	if (connector_type == DRM_MODE_CONNECTOR_DSI ||
-- 
2.43.2


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

* ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Bigjoiner modeset sequence redesign and MST support
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (21 preceding siblings ...)
  2024-03-29  1:12 ` [PATCH 22/22] drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable" Ville Syrjala
@ 2024-03-29  6:36 ` Patchwork
  2024-03-29  6:36 ` ✗ Fi.CI.SPARSE: " Patchwork
                   ` (2 subsequent siblings)
  25 siblings, 0 replies; 51+ messages in thread
From: Patchwork @ 2024-03-29  6:36 UTC (permalink / raw)
  To: Ville Syrjala; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Bigjoiner modeset sequence redesign and MST support
URL   : https://patchwork.freedesktop.org/series/131797/
State : warning

== Summary ==

Error: dim checkpatch failed
e16878b1bab4 drm/i915: Disable port sync when bigjoiner is used
61c083f1c409 drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner
1aa3af74a9d0 drm/i915: Disable live M/N updates when using bigjoiner
ad332ec89a89 drm/i915/vrr: Disable VRR when using bigjoiner
8b8444a6ba01 drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks
362e5e731e81 drm/i915: Shuffle DP .mode_valid() checks
1444552d5c6d drm/i915: Clean up glk_pipe_scaler_clock_gating_wa()
f2e6bb1a86be drm/i915: Extract glk_need_scaler_clock_gating_wa()
1491dc535f89 drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/
ee621ace7952 drm/i915: Extract intel_dp_joiner_needs_dsc()
174432877eba drm/i915/mst: Check intel_dp_joiner_needs_dsc()
ace6f95b242c drm/i915: Pass connector to intel_dp_need_bigjoiner()
5ed89467f1ba drm/i915/mst: Limit MST+DSC to TGL+
-:27: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__i915' - possible side-effects?
#27: FILE: drivers/gpu/drm/i915/display/intel_display_device.h:50:
+#define HAS_DSC_MST(__i915)		(DISPLAY_VER(__i915) >= 12 && HAS_DSC(__i915))

total: 0 errors, 0 warnings, 1 checks, 15 lines checked
9744ad3477c4 drm/i915/mst: Reject FEC+MST on ICL
1db4f49a585d drm/i915: Introduce intel_crtc_joined_pipe_mask()
6c093161ac46 drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst()
72b9ca566c34 drm/i915: Utilize intel_crtc_joined_pipe_mask() more
19408352066d drm/i915: Handle joined pipes inside hsw_crtc_disable()
6b16be7b50ff drm/i915: Handle joined pipes inside hsw_crtc_enable()
-:11: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#11: 
That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave.

-:320: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#320: FILE: drivers/gpu/drm/i915/display/intel_display.h:283:
+#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask)	\
+	list_for_each_entry_reverse((intel_crtc),				\
+				    &(dev)->mode_config.crtc_list,		\
+				    base.head)					\
+		for_each_if((pipe_mask) & BIT((intel_crtc)->pipe))

-:320: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'intel_crtc' - possible side-effects?
#320: FILE: drivers/gpu/drm/i915/display/intel_display.h:283:
+#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask)	\
+	list_for_each_entry_reverse((intel_crtc),				\
+				    &(dev)->mode_config.crtc_list,		\
+				    base.head)					\
+		for_each_if((pipe_mask) & BIT((intel_crtc)->pipe))

total: 1 errors, 1 warnings, 1 checks, 275 lines checked
427daade2d7c drm/i915/mst: Add bigjoiner handling to MST modeset sequence
409107225cb5 drm/i915: Allow bigjoiner for MST
4bf8e6c9ef2c drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable"



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

* ✗ Fi.CI.SPARSE: warning for drm/i915: Bigjoiner modeset sequence redesign and MST support
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (22 preceding siblings ...)
  2024-03-29  6:36 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Bigjoiner modeset sequence redesign and MST support Patchwork
@ 2024-03-29  6:36 ` Patchwork
  2024-03-29  6:49 ` ✓ Fi.CI.BAT: success " Patchwork
  2024-03-30  6:58 ` ✗ Fi.CI.IGT: failure " Patchwork
  25 siblings, 0 replies; 51+ messages in thread
From: Patchwork @ 2024-03-29  6:36 UTC (permalink / raw)
  To: Ville Syrjala; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Bigjoiner modeset sequence redesign and MST support
URL   : https://patchwork.freedesktop.org/series/131797/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.



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

* ✓ Fi.CI.BAT: success for drm/i915: Bigjoiner modeset sequence redesign and MST support
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (23 preceding siblings ...)
  2024-03-29  6:36 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2024-03-29  6:49 ` Patchwork
  2024-03-30  6:58 ` ✗ Fi.CI.IGT: failure " Patchwork
  25 siblings, 0 replies; 51+ messages in thread
From: Patchwork @ 2024-03-29  6:49 UTC (permalink / raw)
  To: Ville Syrjala; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 5478 bytes --]

== Series Details ==

Series: drm/i915: Bigjoiner modeset sequence redesign and MST support
URL   : https://patchwork.freedesktop.org/series/131797/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14506 -> Patchwork_131797v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/index.html

Participating hosts (37 -> 38)
------------------------------

  Additional (3): fi-glk-j4005 fi-bsw-nick fi-kbl-8809g 
  Missing    (2): bat-mtlp-8 fi-snb-2520m 

Known issues
------------

  Here are the changes found in Patchwork_131797v1 that come from known issues:

### CI changes ###

#### Issues hit ####

  * boot:
    - bat-jsl-1:          [PASS][1] -> [FAIL][2] ([i915#8293])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/bat-jsl-1/boot.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/bat-jsl-1/boot.html
    - fi-kbl-8809g:       NOTRUN -> [FAIL][3] ([i915#8293])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/fi-kbl-8809g/boot.html

  

### IGT changes ###

#### Issues hit ####

  * igt@gem_huc_copy@huc-copy:
    - fi-glk-j4005:       NOTRUN -> [SKIP][4] ([i915#2190])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/fi-glk-j4005/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - fi-glk-j4005:       NOTRUN -> [SKIP][5] ([i915#4613]) +3 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/fi-glk-j4005/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@parallel-random-engines:
    - fi-bsw-nick:        NOTRUN -> [SKIP][6] +19 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/fi-bsw-nick/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@i915_selftest@live@gt_timelines:
    - bat-dg2-14:         [PASS][7] -> [ABORT][8] ([i915#10366])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/bat-dg2-14/igt@i915_selftest@live@gt_timelines.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/bat-dg2-14/igt@i915_selftest@live@gt_timelines.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - fi-glk-j4005:       NOTRUN -> [SKIP][9] +10 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/fi-glk-j4005/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  
#### Possible fixes ####

  * igt@kms_cursor_legacy@basic-flip-before-cursor-atomic:
    - {bat-mtlp-9}:       [DMESG-WARN][10] ([i915#10435]) -> [PASS][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/bat-mtlp-9/igt@kms_cursor_legacy@basic-flip-before-cursor-atomic.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/bat-mtlp-9/igt@kms_cursor_legacy@basic-flip-before-cursor-atomic.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [i915#10366]: https://gitlab.freedesktop.org/drm/intel/issues/10366
  [i915#10435]: https://gitlab.freedesktop.org/drm/intel/issues/10435
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#8293]: https://gitlab.freedesktop.org/drm/intel/issues/8293
  [i915#9947]: https://gitlab.freedesktop.org/drm/intel/issues/9947


Build changes
-------------

  * Linux: CI_DRM_14506 -> Patchwork_131797v1

  CI-20190529: 20190529
  CI_DRM_14506: 98f893b726e1ba5db2680da3f9f53ab2af9780be @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7790: 5ec1ff6da3535cf80fd4e1844867d75c481ef86a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_131797v1: 98f893b726e1ba5db2680da3f9f53ab2af9780be @ git://anongit.freedesktop.org/gfx-ci/linux


### Linux commits

826720686063 drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable"
fdd34986c7f6 drm/i915: Allow bigjoiner for MST
1970678e75f7 drm/i915/mst: Add bigjoiner handling to MST modeset sequence
1bfca223bdd6 drm/i915: Handle joined pipes inside hsw_crtc_enable()
112dba149e55 drm/i915: Handle joined pipes inside hsw_crtc_disable()
73ad3fd30033 drm/i915: Utilize intel_crtc_joined_pipe_mask() more
5fd383fce4ea drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst()
7130322303d1 drm/i915: Introduce intel_crtc_joined_pipe_mask()
df298b93508a drm/i915/mst: Reject FEC+MST on ICL
79924e64fd1f drm/i915/mst: Limit MST+DSC to TGL+
955744fe39b8 drm/i915: Pass connector to intel_dp_need_bigjoiner()
de8166aeda04 drm/i915/mst: Check intel_dp_joiner_needs_dsc()
9804e5e0f9d7 drm/i915: Extract intel_dp_joiner_needs_dsc()
bab384dd9014 drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/
5d3a353ed8db drm/i915: Extract glk_need_scaler_clock_gating_wa()
0f8aa0474602 drm/i915: Clean up glk_pipe_scaler_clock_gating_wa()
10b46fa1c7b5 drm/i915: Shuffle DP .mode_valid() checks
9e9275654e60 drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks
c6f82096d42b drm/i915/vrr: Disable VRR when using bigjoiner
e211bbf35455 drm/i915: Disable live M/N updates when using bigjoiner
d2d996e53067 drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner
bc0f1169d7b0 drm/i915: Disable port sync when bigjoiner is used

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/index.html

[-- Attachment #2: Type: text/html, Size: 6391 bytes --]

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

* ✗ Fi.CI.IGT: failure for drm/i915: Bigjoiner modeset sequence redesign and MST support
  2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
                   ` (24 preceding siblings ...)
  2024-03-29  6:49 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2024-03-30  6:58 ` Patchwork
  25 siblings, 0 replies; 51+ messages in thread
From: Patchwork @ 2024-03-30  6:58 UTC (permalink / raw)
  To: Ville Syrjala; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 73595 bytes --]

== Series Details ==

Series: drm/i915: Bigjoiner modeset sequence redesign and MST support
URL   : https://patchwork.freedesktop.org/series/131797/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_14506_full -> Patchwork_131797v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_131797v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_131797v1_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (10 -> 9)
------------------------------

  Missing    (1): shard-snb-0 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_131797v1_full:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_plane@pixel-format@pipe-b:
    - shard-mtlp:         [PASS][1] -> [ABORT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-mtlp-2/igt@kms_plane@pixel-format@pipe-b.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-8/igt@kms_plane@pixel-format@pipe-b.html

  * igt@sysfs_heartbeat_interval@nopreempt@bcs0:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][3]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@sysfs_heartbeat_interval@nopreempt@bcs0.html

  
Known issues
------------

  Here are the changes found in Patchwork_131797v1_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-purge-cache:
    - shard-mtlp:         NOTRUN -> [SKIP][4] ([i915#8411])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@api_intel_bb@blit-reloc-purge-cache.html

  * igt@device_reset@cold-reset-bound:
    - shard-tglu:         NOTRUN -> [SKIP][5] ([i915#7701])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@device_reset@cold-reset-bound.html

  * igt@drm_fdinfo@busy-idle@vecs0:
    - shard-mtlp:         NOTRUN -> [SKIP][6] ([i915#8414]) +7 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@drm_fdinfo@busy-idle@vecs0.html

  * igt@gem_ccs@block-copy-compressed:
    - shard-mtlp:         NOTRUN -> [SKIP][7] ([i915#3555] / [i915#9323])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@gem_ccs@block-copy-compressed.html

  * igt@gem_ccs@ctrl-surf-copy-new-ctx:
    - shard-mtlp:         NOTRUN -> [SKIP][8] ([i915#9323])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@gem_ccs@ctrl-surf-copy-new-ctx.html

  * igt@gem_ccs@suspend-resume:
    - shard-dg1:          NOTRUN -> [SKIP][9] ([i915#9323])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_ccs@suspend-resume.html

  * igt@gem_create@create-ext-cpu-access-big:
    - shard-mtlp:         NOTRUN -> [SKIP][10] ([i915#6335])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@gem_create@create-ext-cpu-access-big.html
    - shard-dg2:          NOTRUN -> [INCOMPLETE][11] ([i915#9364])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@gem_create@create-ext-cpu-access-big.html

  * igt@gem_create@create-ext-set-pat:
    - shard-tglu:         NOTRUN -> [SKIP][12] ([i915#8562])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@gem_create@create-ext-set-pat.html

  * igt@gem_ctx_persistence@legacy-engines-hostile:
    - shard-snb:          NOTRUN -> [SKIP][13] ([i915#1099])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb4/igt@gem_ctx_persistence@legacy-engines-hostile.html

  * igt@gem_eio@unwedge-stress:
    - shard-snb:          NOTRUN -> [FAIL][14] ([i915#8898])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb2/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@bonded-false-hang:
    - shard-mtlp:         NOTRUN -> [SKIP][15] ([i915#4812])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@gem_exec_balancer@bonded-false-hang.html

  * igt@gem_exec_balancer@bonded-sync:
    - shard-dg1:          NOTRUN -> [SKIP][16] ([i915#4771])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_exec_balancer@bonded-sync.html

  * igt@gem_exec_balancer@parallel-bb-first:
    - shard-rkl:          NOTRUN -> [SKIP][17] ([i915#4525])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@gem_exec_balancer@parallel-bb-first.html

  * igt@gem_exec_capture@many-4k-zero:
    - shard-mtlp:         NOTRUN -> [FAIL][18] ([i915#9606])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@gem_exec_capture@many-4k-zero.html

  * igt@gem_exec_fair@basic-none-rrul@rcs0:
    - shard-tglu:         NOTRUN -> [FAIL][19] ([i915#2842])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@gem_exec_fair@basic-none-rrul@rcs0.html

  * igt@gem_exec_fair@basic-none-solo:
    - shard-mtlp:         NOTRUN -> [SKIP][20] ([i915#4473])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@gem_exec_fair@basic-none-solo.html

  * igt@gem_exec_fair@basic-none@vcs0:
    - shard-rkl:          [PASS][21] -> [FAIL][22] ([i915#2842]) +2 other tests fail
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-rkl-4/igt@gem_exec_fair@basic-none@vcs0.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-5/igt@gem_exec_fair@basic-none@vcs0.html

  * igt@gem_exec_fair@basic-pace@rcs0:
    - shard-tglu:         [PASS][23] -> [FAIL][24] ([i915#2842])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-tglu-7/igt@gem_exec_fair@basic-pace@rcs0.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-9/igt@gem_exec_fair@basic-pace@rcs0.html

  * igt@gem_exec_fair@basic-sync:
    - shard-mtlp:         NOTRUN -> [SKIP][25] ([i915#4473] / [i915#4771]) +1 other test skip
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@gem_exec_fair@basic-sync.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - shard-rkl:          NOTRUN -> [FAIL][26] ([i915#2842])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gem_exec_flush@basic-uc-set-default:
    - shard-dg1:          NOTRUN -> [SKIP][27] ([i915#3539])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_exec_flush@basic-uc-set-default.html

  * igt@gem_exec_reloc@basic-cpu-read-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][28] ([i915#3281])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@gem_exec_reloc@basic-cpu-read-noreloc.html

  * igt@gem_exec_reloc@basic-gtt-wc-noreloc:
    - shard-dg1:          NOTRUN -> [SKIP][29] ([i915#3281]) +1 other test skip
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_exec_reloc@basic-gtt-wc-noreloc.html

  * igt@gem_exec_reloc@basic-wc-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][30] ([i915#3281]) +9 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@gem_exec_reloc@basic-wc-gtt.html

  * igt@gem_exec_schedule@preempt-queue:
    - shard-dg1:          NOTRUN -> [SKIP][31] ([i915#4812])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_exec_schedule@preempt-queue.html

  * igt@gem_lmem_evict@dontneed-evict-race:
    - shard-tglu:         NOTRUN -> [SKIP][32] ([i915#4613] / [i915#7582])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@gem_lmem_evict@dontneed-evict-race.html

  * igt@gem_lmem_swapping@heavy-random:
    - shard-rkl:          NOTRUN -> [SKIP][33] ([i915#4613]) +1 other test skip
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@gem_lmem_swapping@heavy-random.html

  * igt@gem_lmem_swapping@heavy-random@lmem0:
    - shard-dg1:          [PASS][34] -> [FAIL][35] ([i915#10378])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg1-17/igt@gem_lmem_swapping@heavy-random@lmem0.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-15/igt@gem_lmem_swapping@heavy-random@lmem0.html

  * igt@gem_lmem_swapping@heavy-verify-multi:
    - shard-mtlp:         NOTRUN -> [SKIP][36] ([i915#4613]) +2 other tests skip
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@gem_lmem_swapping@heavy-verify-multi.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs:
    - shard-glk:          NOTRUN -> [SKIP][37] ([i915#4613]) +1 other test skip
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-glk5/igt@gem_lmem_swapping@heavy-verify-random-ccs.html

  * igt@gem_lmem_swapping@parallel-random-verify-ccs@lmem0:
    - shard-dg1:          NOTRUN -> [SKIP][38] ([i915#4565])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_lmem_swapping@parallel-random-verify-ccs@lmem0.html

  * igt@gem_lmem_swapping@smem-oom:
    - shard-tglu:         NOTRUN -> [SKIP][39] ([i915#4613])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@gem_lmem_swapping@smem-oom.html

  * igt@gem_media_vme:
    - shard-tglu:         NOTRUN -> [SKIP][40] ([i915#284])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@gem_media_vme.html

  * igt@gem_mmap@big-bo:
    - shard-dg1:          NOTRUN -> [SKIP][41] ([i915#4083])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_mmap@big-bo.html

  * igt@gem_mmap_gtt@medium-copy:
    - shard-dg1:          NOTRUN -> [SKIP][42] ([i915#4077])
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_mmap_gtt@medium-copy.html

  * igt@gem_mmap_wc@pf-nonblock:
    - shard-mtlp:         NOTRUN -> [SKIP][43] ([i915#4083])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@gem_mmap_wc@pf-nonblock.html

  * igt@gem_partial_pwrite_pread@reads:
    - shard-rkl:          NOTRUN -> [SKIP][44] ([i915#3282])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@gem_partial_pwrite_pread@reads.html

  * igt@gem_partial_pwrite_pread@writes-after-reads:
    - shard-mtlp:         NOTRUN -> [SKIP][45] ([i915#3282]) +1 other test skip
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@gem_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_pread@bench:
    - shard-dg1:          NOTRUN -> [SKIP][46] ([i915#3282])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_pread@bench.html

  * igt@gem_pxp@fail-invalid-protected-context:
    - shard-tglu:         NOTRUN -> [SKIP][47] ([i915#4270]) +3 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@gem_pxp@fail-invalid-protected-context.html

  * igt@gem_pxp@protected-raw-src-copy-not-readible:
    - shard-dg1:          NOTRUN -> [SKIP][48] ([i915#4270])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_pxp@protected-raw-src-copy-not-readible.html

  * igt@gem_pxp@verify-pxp-execution-after-suspend-resume:
    - shard-rkl:          NOTRUN -> [SKIP][49] ([i915#4270]) +1 other test skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html

  * igt@gem_pxp@verify-pxp-stale-buf-optout-execution:
    - shard-mtlp:         NOTRUN -> [SKIP][50] ([i915#4270]) +2 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@gem_pxp@verify-pxp-stale-buf-optout-execution.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][51] ([i915#8428]) +2 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-ccs.html

  * igt@gem_render_copy@yf-tiled-ccs-to-y-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][52] ([i915#5190] / [i915#8428])
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@gem_render_copy@yf-tiled-ccs-to-y-tiled.html

  * igt@gem_render_tiled_blits@basic:
    - shard-mtlp:         NOTRUN -> [SKIP][53] ([i915#4079]) +1 other test skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@gem_render_tiled_blits@basic.html

  * igt@gem_set_tiling_vs_pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][54] ([i915#4079])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_set_tiling_vs_pwrite.html

  * igt@gem_softpin@evict-snoop:
    - shard-mtlp:         NOTRUN -> [SKIP][55] ([i915#4885])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@gem_softpin@evict-snoop.html

  * igt@gem_userptr_blits@coherency-unsync:
    - shard-dg1:          NOTRUN -> [SKIP][56] ([i915#3297])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_userptr_blits@coherency-unsync.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][57] ([i915#3297])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_userptr_blits@forbidden-operations:
    - shard-dg1:          NOTRUN -> [SKIP][58] ([i915#3282] / [i915#3297])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gem_userptr_blits@forbidden-operations.html

  * igt@gem_userptr_blits@map-fixed-invalidate:
    - shard-mtlp:         NOTRUN -> [SKIP][59] ([i915#3297])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@gem_userptr_blits@map-fixed-invalidate.html

  * igt@gem_userptr_blits@unsync-unmap-cycles:
    - shard-tglu:         NOTRUN -> [SKIP][60] ([i915#3297]) +2 other tests skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@gem_userptr_blits@unsync-unmap-cycles.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-glk:          NOTRUN -> [ABORT][61] ([i915#5566])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-glk5/igt@gen9_exec_parse@allowed-all.html

  * igt@gen9_exec_parse@batch-zero-length:
    - shard-dg1:          NOTRUN -> [SKIP][62] ([i915#2527])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@gen9_exec_parse@batch-zero-length.html

  * igt@gen9_exec_parse@bb-secure:
    - shard-tglu:         NOTRUN -> [SKIP][63] ([i915#2527] / [i915#2856])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@gen9_exec_parse@bb-secure.html

  * igt@gen9_exec_parse@bb-start-cmd:
    - shard-rkl:          NOTRUN -> [SKIP][64] ([i915#2527])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@gen9_exec_parse@bb-start-cmd.html

  * igt@gen9_exec_parse@bb-start-far:
    - shard-mtlp:         NOTRUN -> [SKIP][65] ([i915#2856])
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@gen9_exec_parse@bb-start-far.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg1:          [PASS][66] -> [INCOMPLETE][67] ([i915#9820] / [i915#9849])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg1-16/igt@i915_module_load@reload-with-fault-injection.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@i915_module_load@reload-with-fault-injection.html
    - shard-tglu:         NOTRUN -> [INCOMPLETE][68] ([i915#9820])
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_module_load@resize-bar:
    - shard-mtlp:         NOTRUN -> [SKIP][69] ([i915#6412])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@i915_module_load@resize-bar.html

  * igt@i915_pm_freq_api@freq-reset:
    - shard-tglu:         NOTRUN -> [SKIP][70] ([i915#8399]) +1 other test skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@i915_pm_freq_api@freq-reset.html

  * igt@i915_pm_rps@basic-api:
    - shard-dg1:          NOTRUN -> [SKIP][71] ([i915#6621])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@i915_pm_rps@basic-api.html

  * igt@i915_pm_rps@min-max-config-idle:
    - shard-dg2:          NOTRUN -> [SKIP][72] ([i915#6621])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@i915_pm_rps@min-max-config-idle.html
    - shard-mtlp:         NOTRUN -> [SKIP][73] ([i915#6621])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@i915_pm_rps@min-max-config-idle.html

  * igt@i915_pm_rps@reset:
    - shard-snb:          [PASS][74] -> [INCOMPLETE][75] ([i915#7790])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-snb6/igt@i915_pm_rps@reset.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb5/igt@i915_pm_rps@reset.html
    - shard-mtlp:         NOTRUN -> [FAIL][76] ([i915#8346])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@i915_pm_rps@reset.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-tglu:         NOTRUN -> [INCOMPLETE][77] ([i915#7443])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@i915_suspend@basic-s3-without-i915.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-mtlp:         NOTRUN -> [SKIP][78] ([i915#4077]) +8 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_addfb_basic@basic-y-tiled-legacy:
    - shard-mtlp:         NOTRUN -> [SKIP][79] ([i915#4212])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@kms_addfb_basic@basic-y-tiled-legacy.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-4-rc-ccs-cc:
    - shard-mtlp:         NOTRUN -> [SKIP][80] ([i915#8709]) +11 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-4-rc-ccs-cc.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-2-y-rc-ccs-cc:
    - shard-rkl:          NOTRUN -> [SKIP][81] ([i915#8709]) +3 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-2-y-rc-ccs-cc.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-2-4-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][82] ([i915#8709]) +11 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-2-4-mc-ccs.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-270:
    - shard-tglu:         NOTRUN -> [SKIP][83] ([i915#5286]) +2 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][84] ([i915#4538] / [i915#5286]) +1 other test skip
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_big_fb@4-tiled-64bpp-rotate-90.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
    - shard-rkl:          NOTRUN -> [SKIP][85] ([i915#5286])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][86] ([i915#3638])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-tglu:         [PASS][87] -> [FAIL][88] ([i915#3743])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-tglu-6/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-270:
    - shard-dg2:          NOTRUN -> [SKIP][89] ([i915#4538] / [i915#5190])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-8bpp-rotate-180:
    - shard-dg1:          NOTRUN -> [SKIP][90] ([i915#4538]) +1 other test skip
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_big_fb@yf-tiled-8bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-mtlp:         NOTRUN -> [SKIP][91] +13 other tests skip
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_joiner@2x-modeset:
    - shard-dg1:          NOTRUN -> [SKIP][92] ([i915#2705])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_big_joiner@2x-modeset.html

  * igt@kms_big_joiner@invalid-modeset:
    - shard-mtlp:         NOTRUN -> [SKIP][93] ([i915#2705])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_big_joiner@invalid-modeset.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-2:
    - shard-glk:          NOTRUN -> [SKIP][94] +242 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-glk5/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][95] ([i915#6095]) +49 other tests skip
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][96] ([i915#6095]) +27 other tests skip
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs@pipe-c-edp-1.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-xe2-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][97] ([i915#10278])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_ccs@bad-rotation-90-4-tiled-xe2-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][98] ([i915#6095]) +59 other tests skip
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-18/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][99] ([i915#6095]) +15 other tests skip
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][100] ([i915#10307] / [i915#6095]) +182 other tests skip
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-8/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][101] ([i915#10307] / [i915#10434] / [i915#6095]) +4 other tests skip
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_cdclk@mode-transition@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][102] ([i915#7213] / [i915#9010]) +3 other tests skip
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_cdclk@mode-transition@pipe-b-edp-1.html

  * igt@kms_cdclk@mode-transition@pipe-b-hdmi-a-2:
    - shard-dg2:          NOTRUN -> [SKIP][103] ([i915#7213]) +3 other tests skip
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@kms_cdclk@mode-transition@pipe-b-hdmi-a-2.html

  * igt@kms_cdclk@plane-scaling@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][104] ([i915#4087]) +3 other tests skip
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@kms_cdclk@plane-scaling@pipe-d-hdmi-a-1.html

  * igt@kms_chamelium_color@gamma:
    - shard-tglu:         NOTRUN -> [SKIP][105] +45 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@kms_chamelium_color@gamma.html

  * igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k:
    - shard-rkl:          NOTRUN -> [SKIP][106] ([i915#7828])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html

  * igt@kms_chamelium_hpd@dp-hpd-after-suspend:
    - shard-dg1:          NOTRUN -> [SKIP][107] ([i915#7828]) +1 other test skip
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html

  * igt@kms_chamelium_hpd@dp-hpd-fast:
    - shard-tglu:         NOTRUN -> [SKIP][108] ([i915#7828]) +3 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@kms_chamelium_hpd@dp-hpd-fast.html

  * igt@kms_chamelium_hpd@dp-hpd-for-each-pipe:
    - shard-mtlp:         NOTRUN -> [SKIP][109] ([i915#7828]) +5 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_chamelium_hpd@dp-hpd-for-each-pipe.html
    - shard-dg2:          NOTRUN -> [SKIP][110] ([i915#7828]) +1 other test skip
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@kms_chamelium_hpd@dp-hpd-for-each-pipe.html

  * igt@kms_content_protection@atomic:
    - shard-mtlp:         NOTRUN -> [SKIP][111] ([i915#6944] / [i915#9424])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_content_protection@atomic.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-dg1:          NOTRUN -> [SKIP][112] ([i915#3299])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@lic-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][113] ([i915#6944] / [i915#9424])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@kms_content_protection@lic-type-0.html

  * igt@kms_content_protection@srm:
    - shard-rkl:          NOTRUN -> [SKIP][114] ([i915#7118])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_content_protection@srm.html

  * igt@kms_cursor_crc@cursor-offscreen-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][115] ([i915#3359])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@kms_cursor_crc@cursor-offscreen-512x170.html

  * igt@kms_cursor_crc@cursor-onscreen-32x32:
    - shard-mtlp:         NOTRUN -> [SKIP][116] ([i915#3555] / [i915#8814]) +1 other test skip
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@kms_cursor_crc@cursor-onscreen-32x32.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-mtlp:         NOTRUN -> [SKIP][117] ([i915#3359]) +1 other test skip
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-rapid-movement-128x42:
    - shard-mtlp:         NOTRUN -> [SKIP][118] ([i915#8814])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_cursor_crc@cursor-rapid-movement-128x42.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-rkl:          NOTRUN -> [SKIP][119] ([i915#3555])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][120] +8 other tests skip
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
    - shard-mtlp:         NOTRUN -> [SKIP][121] ([i915#9809])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-glk:          NOTRUN -> [FAIL][122] ([i915#2346])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-glk5/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
    - shard-rkl:          NOTRUN -> [SKIP][123] ([i915#4103])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][124] ([i915#9227])
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-8/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1.html

  * igt@kms_display_modes@mst-extended-mode-negative:
    - shard-mtlp:         NOTRUN -> [SKIP][125] ([i915#8588])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_display_modes@mst-extended-mode-negative.html

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][126] ([i915#3804])
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2.html

  * igt@kms_dp_aux_dev:
    - shard-tglu:         NOTRUN -> [SKIP][127] ([i915#1257])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@kms_dp_aux_dev.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-tglu:         NOTRUN -> [SKIP][128] ([i915#3840])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-with-bpc:
    - shard-tglu:         NOTRUN -> [SKIP][129] ([i915#3555] / [i915#3840]) +1 other test skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@kms_dsc@dsc-with-bpc.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-dg2:          [PASS][130] -> [FAIL][131] ([i915#4767])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-2/igt@kms_fbcon_fbt@fbc-suspend.html
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-8/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_fbcon_fbt@psr:
    - shard-dg2:          NOTRUN -> [SKIP][132] ([i915#3469])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@chamelium:
    - shard-dg1:          NOTRUN -> [SKIP][133] ([i915#4854])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_feature_discovery@chamelium.html

  * igt@kms_fence_pin_leak:
    - shard-dg1:          NOTRUN -> [SKIP][134] ([i915#4881])
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_fence_pin_leak.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-vga1-hdmi-a1:
    - shard-snb:          [PASS][135] -> [FAIL][136] ([i915#2122])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-snb2/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-vga1-hdmi-a1.html
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb7/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-vga1-hdmi-a1.html

  * igt@kms_flip@2x-flip-vs-expired-vblank:
    - shard-dg1:          NOTRUN -> [SKIP][137] ([i915#9934])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_flip@2x-flip-vs-expired-vblank.html

  * igt@kms_flip@2x-flip-vs-fences-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][138] ([i915#8381])
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@kms_flip@2x-flip-vs-fences-interruptible.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][139] ([i915#3637]) +5 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@2x-flip-vs-wf_vblank:
    - shard-dg2:          NOTRUN -> [SKIP][140] +3 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@kms_flip@2x-flip-vs-wf_vblank.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible@b-hdmi-a2:
    - shard-dg2:          NOTRUN -> [FAIL][141] ([i915#2122]) +1 other test fail
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@kms_flip@wf_vblank-ts-check-interruptible@b-hdmi-a2.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-upscaling@pipe-a-valid-mode:
    - shard-tglu:         NOTRUN -> [SKIP][142] ([i915#2587] / [i915#2672])
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode:
    - shard-dg1:          NOTRUN -> [SKIP][143] ([i915#2587] / [i915#2672])
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][144] ([i915#2672]) +2 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][145] ([i915#2672]) +1 other test skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling@pipe-a-valid-mode.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][146] ([i915#8708]) +5 other tests skip
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render:
    - shard-dg2:          [PASS][147] -> [FAIL][148] ([i915#6880])
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render.html
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-plflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][149] ([i915#1825]) +9 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-pwrite:
    - shard-mtlp:         NOTRUN -> [SKIP][150] ([i915#1825]) +18 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-dg1:          NOTRUN -> [SKIP][151] ([i915#3458]) +2 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][152] ([i915#3023]) +5 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-shrfb-fliptrack-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][153] ([i915#8708])
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-shrfb-fliptrack-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-indfb-fliptrack-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][154] ([i915#8708]) +6 other tests skip
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_frontbuffer_tracking@fbcpsr-2p-indfb-fliptrack-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][155] +6 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][156] ([i915#3458]) +1 other test skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render.html

  * igt@kms_frontbuffer_tracking@plane-fbc-rte:
    - shard-mtlp:         NOTRUN -> [SKIP][157] ([i915#10070])
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_frontbuffer_tracking@plane-fbc-rte.html

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-tglu:         NOTRUN -> [SKIP][158] ([i915#3555] / [i915#8228])
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_panel_fitting@legacy:
    - shard-tglu:         NOTRUN -> [SKIP][159] ([i915#6301])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@kms_panel_fitting@legacy.html

  * igt@kms_plane_multiple@tiling-y:
    - shard-mtlp:         NOTRUN -> [SKIP][160] ([i915#3555] / [i915#8806])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@kms_plane_multiple@tiling-y.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [FAIL][161] ([i915#8292])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-13/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-3.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][162] ([i915#9423]) +5 other tests skip
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-4/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][163] ([i915#5176]) +7 other tests skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-a-edp-1.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][164] ([i915#9423]) +3 other tests skip
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-d-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][165] ([i915#9423]) +7 other tests skip
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-16/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-d-hdmi-a-4.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-b-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][166] ([i915#5235] / [i915#9423]) +15 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-5/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-b-hdmi-a-3.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-c-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][167] ([i915#5235]) +7 other tests skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-c-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-c-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][168] ([i915#5235]) +3 other tests skip
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-18/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-c-hdmi-a-4.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-factor-0-25@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][169] ([i915#5235]) +6 other tests skip
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-factor-0-25@pipe-a-edp-1.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][170] ([i915#5235]) +3 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-a-hdmi-a-2.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-d-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][171] ([i915#3555] / [i915#5235])
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-d-edp-1.html

  * igt@kms_pm_backlight@basic-brightness:
    - shard-rkl:          NOTRUN -> [SKIP][172] ([i915#5354])
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - shard-dg1:          NOTRUN -> [SKIP][173] ([i915#9685])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_pm_dc@dc3co-vpb-simulation.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-mtlp:         NOTRUN -> [SKIP][174] ([i915#8430])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@modeset-lpsp:
    - shard-dg2:          [PASS][175] -> [SKIP][176] ([i915#9519]) +3 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-8/igt@kms_pm_rpm@modeset-lpsp.html
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-5/igt@kms_pm_rpm@modeset-lpsp.html
    - shard-rkl:          [PASS][177] -> [SKIP][178] ([i915#9519]) +2 other tests skip
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-rkl-4/igt@kms_pm_rpm@modeset-lpsp.html
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_pm_rpm@modeset-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-mtlp:         NOTRUN -> [SKIP][179] ([i915#9519])
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_prime@d3hot:
    - shard-tglu:         NOTRUN -> [SKIP][180] ([i915#6524])
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@kms_prime@d3hot.html

  * igt@kms_psr2_sf@fbc-cursor-plane-move-continuous-exceed-sf@psr2-pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][181] ([i915#9808]) +1 other test skip
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@kms_psr2_sf@fbc-cursor-plane-move-continuous-exceed-sf@psr2-pipe-a-edp-1.html

  * igt@kms_psr@fbc-pr-sprite-blt:
    - shard-rkl:          NOTRUN -> [SKIP][182] ([i915#1072] / [i915#9732]) +4 other tests skip
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_psr@fbc-pr-sprite-blt.html

  * igt@kms_psr@pr-primary-mmap-cpu:
    - shard-mtlp:         NOTRUN -> [SKIP][183] ([i915#9688]) +10 other tests skip
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@kms_psr@pr-primary-mmap-cpu.html

  * igt@kms_psr@pr-sprite-plane-move:
    - shard-tglu:         NOTRUN -> [SKIP][184] ([i915#9732]) +9 other tests skip
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@kms_psr@pr-sprite-plane-move.html

  * igt@kms_psr@psr-primary-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][185] ([i915#1072] / [i915#9732]) +2 other tests skip
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@kms_psr@psr-primary-mmap-gtt.html

  * igt@kms_psr@psr-primary-mmap-gtt@edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][186] ([i915#4077] / [i915#9688])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_psr@psr-primary-mmap-gtt@edp-1.html

  * igt@kms_psr@psr2-cursor-blt:
    - shard-dg1:          NOTRUN -> [SKIP][187] ([i915#1072] / [i915#9732]) +5 other tests skip
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_psr@psr2-cursor-blt.html

  * igt@kms_rotation_crc@bad-pixel-format:
    - shard-snb:          NOTRUN -> [SKIP][188] +186 other tests skip
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb4/igt@kms_rotation_crc@bad-pixel-format.html

  * igt@kms_rotation_crc@bad-tiling:
    - shard-mtlp:         NOTRUN -> [SKIP][189] ([i915#4235])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@kms_rotation_crc@bad-tiling.html

  * igt@kms_scaling_modes@scaling-mode-none@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][190] ([i915#5030]) +2 other tests skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_scaling_modes@scaling-mode-none@pipe-a-edp-1.html

  * igt@kms_scaling_modes@scaling-mode-none@pipe-d-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][191] ([i915#5030] / [i915#9041])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_scaling_modes@scaling-mode-none@pipe-d-edp-1.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [FAIL][192] ([i915#9196])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-4.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-tglu:         NOTRUN -> [SKIP][193] ([i915#9906]) +1 other test skip
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-5/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-mtlp:         NOTRUN -> [SKIP][194] ([i915#2437])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@kms_writeback@writeback-fb-id.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-mtlp:         NOTRUN -> [SKIP][195] ([i915#2437] / [i915#9412])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf@gen8-unprivileged-single-ctx-counters:
    - shard-rkl:          NOTRUN -> [SKIP][196] ([i915#2436])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@perf@gen8-unprivileged-single-ctx-counters.html

  * igt@perf_pmu@cpu-hotplug:
    - shard-rkl:          NOTRUN -> [SKIP][197] ([i915#8850])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@perf_pmu@cpu-hotplug.html

  * igt@perf_pmu@event-wait@rcs0:
    - shard-mtlp:         NOTRUN -> [SKIP][198] ([i915#3555] / [i915#8807])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@perf_pmu@event-wait@rcs0.html

  * igt@perf_pmu@faulting-read@gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][199] ([i915#8440])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@perf_pmu@faulting-read@gtt.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-tglu:         NOTRUN -> [SKIP][200] ([i915#8516])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@runner@aborted:
    - shard-glk:          NOTRUN -> [FAIL][201] ([i915#10291])
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-glk3/igt@runner@aborted.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-rkl:          NOTRUN -> [SKIP][202] ([i915#9917])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@syncobj_timeline@invalid-wait-zero-handles:
    - shard-snb:          NOTRUN -> [FAIL][203] ([i915#9781])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb2/igt@syncobj_timeline@invalid-wait-zero-handles.html

  * igt@syncobj_wait@invalid-wait-zero-handles:
    - shard-mtlp:         NOTRUN -> [FAIL][204] ([i915#9779])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@syncobj_wait@invalid-wait-zero-handles.html

  * igt@v3d/v3d_mmap@mmap-bad-handle:
    - shard-dg1:          NOTRUN -> [SKIP][205] ([i915#2575]) +1 other test skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@v3d/v3d_mmap@mmap-bad-handle.html

  * igt@v3d/v3d_submit_cl@bad-multisync-pad:
    - shard-tglu:         NOTRUN -> [SKIP][206] ([i915#2575]) +12 other tests skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@v3d/v3d_submit_cl@bad-multisync-pad.html

  * igt@v3d/v3d_submit_csd@bad-pad:
    - shard-dg2:          NOTRUN -> [SKIP][207] ([i915#2575])
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@v3d/v3d_submit_csd@bad-pad.html

  * igt@v3d/v3d_wait_bo@map-bo-0ns:
    - shard-mtlp:         NOTRUN -> [SKIP][208] ([i915#2575]) +7 other tests skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@v3d/v3d_wait_bo@map-bo-0ns.html

  * igt@vc4/vc4_purgeable_bo@mark-purgeable-twice:
    - shard-mtlp:         NOTRUN -> [SKIP][209] ([i915#7711]) +5 other tests skip
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-6/igt@vc4/vc4_purgeable_bo@mark-purgeable-twice.html

  * igt@vc4/vc4_purgeable_bo@mark-unpurgeable-twice:
    - shard-dg1:          NOTRUN -> [SKIP][210] ([i915#7711]) +2 other tests skip
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-17/igt@vc4/vc4_purgeable_bo@mark-unpurgeable-twice.html

  * igt@vc4/vc4_tiling@set-get:
    - shard-rkl:          NOTRUN -> [SKIP][211] ([i915#7711]) +1 other test skip
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@vc4/vc4_tiling@set-get.html

  
#### Possible fixes ####

  * igt@drm_fdinfo@most-busy-check-all@rcs0:
    - shard-rkl:          [FAIL][212] ([i915#7742]) -> [PASS][213]
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-rkl-3/igt@drm_fdinfo@most-busy-check-all@rcs0.html
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-5/igt@drm_fdinfo@most-busy-check-all@rcs0.html

  * igt@gem_exec_fair@basic-none-solo@rcs0:
    - shard-rkl:          [FAIL][214] ([i915#2842]) -> [PASS][215]
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-rkl-3/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-4/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-tglu:         [FAIL][216] ([i915#2842]) -> [PASS][217]
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-tglu-5/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-8/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_lmem_swapping@basic@lmem0:
    - shard-dg2:          [INCOMPLETE][218] -> [PASS][219]
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-6/igt@gem_lmem_swapping@basic@lmem0.html
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@gem_lmem_swapping@basic@lmem0.html

  * igt@gem_lmem_swapping@heavy-verify-random@lmem0:
    - shard-dg2:          [FAIL][220] ([i915#10378]) -> [PASS][221]
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-10/igt@gem_lmem_swapping@heavy-verify-random@lmem0.html
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@gem_lmem_swapping@heavy-verify-random@lmem0.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - shard-dg2:          [TIMEOUT][222] ([i915#5493]) -> [PASS][223]
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-10/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-5/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@gem_mmap_offset@clear@smem0:
    - shard-mtlp:         [ABORT][224] ([i915#10029]) -> [PASS][225]
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-mtlp-7/igt@gem_mmap_offset@clear@smem0.html
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-5/igt@gem_mmap_offset@clear@smem0.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          [INCOMPLETE][226] ([i915#9849]) -> [PASS][227]
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-snb1/igt@i915_module_load@reload-with-fault-injection.html
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb2/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-rkl:          [FAIL][228] ([i915#10031]) -> [PASS][229]
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-rkl-4/igt@i915_suspend@basic-s3-without-i915.html
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-5/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_async_flips@alternate-sync-async-flip@pipe-a-hdmi-a-1:
    - shard-tglu:         [FAIL][230] ([i915#2521]) -> [PASS][231]
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-tglu-6/igt@kms_async_flips@alternate-sync-async-flip@pipe-a-hdmi-a-1.html
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@kms_async_flips@alternate-sync-async-flip@pipe-a-hdmi-a-1.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-tglu:         [FAIL][232] ([i915#3743]) -> [PASS][233] +1 other test pass
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-tglu-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-2/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_flip@2x-flip-vs-blocking-wf-vblank@ab-vga1-hdmi-a1:
    - shard-snb:          [FAIL][234] ([i915#2122]) -> [PASS][235]
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-snb7/igt@kms_flip@2x-flip-vs-blocking-wf-vblank@ab-vga1-hdmi-a1.html
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb5/igt@kms_flip@2x-flip-vs-blocking-wf-vblank@ab-vga1-hdmi-a1.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@ab-vga1-hdmi-a1:
    - shard-snb:          [ABORT][236] -> [PASS][237]
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-snb4/igt@kms_flip@2x-flip-vs-expired-vblank@ab-vga1-hdmi-a1.html
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb1/igt@kms_flip@2x-flip-vs-expired-vblank@ab-vga1-hdmi-a1.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible@b-hdmi-a4:
    - shard-dg1:          [FAIL][238] ([i915#2122]) -> [PASS][239]
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg1-18/igt@kms_flip@wf_vblank-ts-check-interruptible@b-hdmi-a4.html
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-16/igt@kms_flip@wf_vblank-ts-check-interruptible@b-hdmi-a4.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible@c-hdmi-a4:
    - shard-dg1:          [FAIL][240] -> [PASS][241]
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg1-18/igt@kms_flip@wf_vblank-ts-check-interruptible@c-hdmi-a4.html
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg1-16/igt@kms_flip@wf_vblank-ts-check-interruptible@c-hdmi-a4.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt:
    - shard-dg2:          [FAIL][242] ([i915#6880]) -> [PASS][243]
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt.html
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-cpu:
    - shard-snb:          [SKIP][244] -> [PASS][245] +3 other tests pass
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-snb2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-cpu.html
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-tglu:         [SKIP][246] ([i915#4281]) -> [PASS][247]
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-tglu-7/igt@kms_pm_dc@dc9-dpms.html
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-4/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-dg2:          [SKIP][248] ([i915#9519]) -> [PASS][249] +1 other test pass
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-8/igt@kms_pm_rpm@dpms-non-lpsp.html
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-5/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-rkl:          [SKIP][250] ([i915#9519]) -> [PASS][251] +2 other tests pass
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-rkl-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-3/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1:
    - shard-mtlp:         [FAIL][252] ([i915#9196]) -> [PASS][253]
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-mtlp-8/igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1.html
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-mtlp-7/igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1:
    - shard-snb:          [FAIL][254] ([i915#9196]) -> [PASS][255]
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-snb4/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-snb1/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1:
    - shard-tglu:         [FAIL][256] ([i915#9196]) -> [PASS][257] +1 other test pass
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-tglu-3/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-tglu-7/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html

  * igt@perf_pmu@most-busy-idle-check-all@rcs0:
    - shard-rkl:          [FAIL][258] ([i915#4349]) -> [PASS][259]
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-rkl-4/igt@perf_pmu@most-busy-idle-check-all@rcs0.html
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-rkl-4/igt@perf_pmu@most-busy-idle-check-all@rcs0.html

  * igt@sysfs_timeslice_duration@duration@vecs1:
    - shard-dg2:          [INCOMPLETE][260] ([i915#9252]) -> [PASS][261]
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-5/igt@sysfs_timeslice_duration@duration@vecs1.html
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@sysfs_timeslice_duration@duration@vecs1.html

  
#### Warnings ####

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0:
    - shard-dg2:          [FAIL][262] ([i915#10446]) -> [FAIL][263] ([i915#10378])
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-10/igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0.html
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-2/igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0:
    - shard-dg2:          [FAIL][264] ([i915#10378]) -> [FAIL][265] ([i915#10446])
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-5/igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0.html
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0.html

  * igt@kms_psr@pr-cursor-mmap-cpu:
    - shard-dg2:          [SKIP][266] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][267] ([i915#1072] / [i915#9732]) +4 other tests skip
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14506/shard-dg2-11/igt@kms_psr@pr-cursor-mmap-cpu.html
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/shard-dg2-10/igt@kms_psr@pr-cursor-mmap-cpu.html

  
  [i915#10029]: https://gitlab.freedesktop.org/drm/intel/issues/10029
  [i915#10031]: https://gitlab.freedesktop.org/drm/intel/issues/10031
  [i915#10070]: https://gitlab.freedesktop.org/drm/intel/issues/10070
  [i915#10278]: https://gitlab.freedesktop.org/drm/intel/issues/10278
  [i915#10291]: https://gitlab.freedesktop.org/drm/intel/issues/10291
  [i915#10307]: https://gitlab.freedesktop.org/drm/intel/issues/10307
  [i915#10378]: https://gitlab.freedesktop.org/drm/intel/issues/10378
  [i915#10434]: https://gitlab.freedesktop.org/drm/intel/issues/10434
  [i915#10446]: https://gitlab.freedesktop.org/drm/intel/issues/10446
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
  [i915#1257]: https://gitlab.freedesktop.org/drm/intel/issues/1257
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2436]: https://gitlab.freedesktop.org/drm/intel/issues/2436
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2521]: https://gitlab.freedesktop.org/drm/intel/issues/2521
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4087]: https://gitlab.freedesktop.org/drm/intel/issues/4087
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4473]: https://gitlab.freedesktop.org/drm/intel/issues/4473
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767
  [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4854]: https://gitlab.freedesktop.org/drm/intel/issues/4854
  [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
  [i915#4885]: https://gitlab.freedesktop.org/drm/intel/issues/4885
  [i915#5030]: https://gitlab.freedesktop.org/drm/intel/issues/5030
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493
  [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
  [i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
  [i915#6412]: https://gitlab.freedesktop.org/drm/intel/issues/6412
  [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880
  [i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213
  [i915#7443]: https://gitlab.freedesktop.org/drm/intel/issues/7443
  [i915#7582]: https://gitlab.freedesktop.org/drm/intel/issues/7582
  [i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7790]: https://gitlab.freedesktop.org/drm/intel/issues/7790
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
  [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
  [i915#8346]: https://gitlab.freedesktop.org/drm/intel/issues/8346
  [i915#8381]: https://gitlab.freedesktop.org/drm/intel/issues/8381
  [i915#8399]: https://gitlab.freedesktop.org/drm/intel/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
  [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
  [i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428
  [i915#8430]: https://gitlab.freedesktop.org/drm/intel/issues/8430
  [i915#8440]: https://gitlab.freedesktop.org/drm/intel/issues/8440
  [i915#8516]: https://gitlab.freedesktop.org/drm/intel/issues/8516
  [i915#8562]: https://gitlab.freedesktop.org/drm/intel/issues/8562
  [i915#8588]: https://gitlab.freedesktop.org/drm/intel/issues/8588
  [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
  [i915#8709]: https://gitlab.freedesktop.org/drm/intel/issues/8709
  [i915#8806]: https://gitlab.freedesktop.org/drm/intel/issues/8806
  [i915#8807]: https://gitlab.freedesktop.org/drm/intel/issues/8807
  [i915#8814]: https://gitlab.freedesktop.org/drm/intel/issues/8814
  [i915#8850]: https://gitlab.freedesktop.org/drm/intel/issues/8850
  [i915#8898]: https://gitlab.freedesktop.org/drm/intel/issues/8898
  [i915#9010]: https://gitlab.freedesktop.org/drm/intel/issues/9010
  [i915#9041]: https://gitlab.freedesktop.org/drm/intel/issues/9041
  [i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196
  [i915#9227]: https://gitlab.freedesktop.org/drm/intel/issues/9227
  [i915#9252]: https://gitlab.freedesktop.org/drm/intel/issues/9252
  [i915#9323]: https://gitlab.freedesktop.org/drm/intel/issues/9323
  [i915#9364]: https://gitlab.freedesktop.org/drm/intel/issues/9364
  [i915#9412]: https://gitlab.freedesktop.org/drm/intel/issues/9412
  [i915#9423]: https://gitlab.freedesktop.org/drm/intel/issues/9423
  [i915#9424]: https://gitlab.freedesktop.org/drm/intel/issues/9424
  [i915#9519]: https://gitlab.freedesktop.org/drm/intel/issues/9519
  [i915#9606]: https://gitlab.freedesktop.org/drm/intel/issues/9606
  [i915#9673]: https://gitlab.freedesktop.org/drm/intel/issues/9673
  [i915#9685]: https://gitlab.freedesktop.org/drm/intel/issues/9685
  [i915#9688]: https://gitlab.freedesktop.org/drm/intel/issues/9688
  [i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732
  [i915#9779]: https://gitlab.freedesktop.org/drm/intel/issues/9779
  [i915#9781]: https://gitlab.freedesktop.org/drm/intel/issues/9781
  [i915#9808]: https://gitlab.freedesktop.org/drm/intel/issues/9808
  [i915#9809]: https://gitlab.freedesktop.org/drm/intel/issues/9809
  [i915#9820]: https://gitlab.freedesktop.org/drm/intel/issues/9820
  [i915#9849]: https://gitlab.freedesktop.org/drm/intel/issues/9849
  [i915#9906]: https://gitlab.freedesktop.org/drm/intel/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/intel/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/intel/issues/9934


Build changes
-------------

  * Linux: CI_DRM_14506 -> Patchwork_131797v1

  CI-20190529: 20190529
  CI_DRM_14506: 98f893b726e1ba5db2680da3f9f53ab2af9780be @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7790: 5ec1ff6da3535cf80fd4e1844867d75c481ef86a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_131797v1: 98f893b726e1ba5db2680da3f9f53ab2af9780be @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_131797v1/index.html

[-- Attachment #2: Type: text/html, Size: 87541 bytes --]

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

* RE: [PATCH 22/22] drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable"
  2024-03-29  1:12 ` [PATCH 22/22] drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable" Ville Syrjala
@ 2024-04-01  5:08   ` Murthy, Arun R
  2024-04-02  7:37   ` Srinivas, Vidya
  1 sibling, 0 replies; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-01  5:08 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx


> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 22/22] drm/i915: Use debugfs_create_bool() for
> "i915_bigjoiner_force_enable"
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> There is no reason to make this debugfs file for a simple boolean so
> complicated. Just use debugfs_create_bool().
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>

Thanks and Regards,
Arun R Murthy
-------------------

> ---
>  .../drm/i915/display/intel_display_debugfs.c  | 44 +------------------
>  1 file changed, 2 insertions(+), 42 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index b99c024b0934..3e364891dcd0 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -1402,20 +1402,6 @@ out:	drm_modeset_unlock(&i915-
> >drm.mode_config.connection_mutex);
>  	return ret;
>  }
> 
> -static int i915_bigjoiner_enable_show(struct seq_file *m, void *data) -{
> -	struct intel_connector *connector = m->private;
> -	struct drm_crtc *crtc;
> -
> -	crtc = connector->base.state->crtc;
> -	if (connector->base.status != connector_status_connected || !crtc)
> -		return -ENODEV;
> -
> -	seq_printf(m, "Bigjoiner enable: %d\n", connector-
> >force_bigjoiner_enable);
> -
> -	return 0;
> -}
> -
>  static ssize_t i915_dsc_output_format_write(struct file *file,
>  					    const char __user *ubuf,
>  					    size_t len, loff_t *offp)
> @@ -1437,30 +1423,6 @@ static ssize_t i915_dsc_output_format_write(struct
> file *file,
>  	return len;
>  }
> 
> -static ssize_t i915_bigjoiner_enable_write(struct file *file,
> -					   const char __user *ubuf,
> -					   size_t len, loff_t *offp)
> -{
> -	struct seq_file *m = file->private_data;
> -	struct intel_connector *connector = m->private;
> -	struct drm_crtc *crtc;
> -	bool bigjoiner_en = 0;
> -	int ret;
> -
> -	crtc = connector->base.state->crtc;
> -	if (connector->base.status != connector_status_connected || !crtc)
> -		return -ENODEV;
> -
> -	ret = kstrtobool_from_user(ubuf, len, &bigjoiner_en);
> -	if (ret < 0)
> -		return ret;
> -
> -	connector->force_bigjoiner_enable = bigjoiner_en;
> -	*offp += len;
> -
> -	return len;
> -}
> -
>  static int i915_dsc_output_format_open(struct inode *inode,
>  				       struct file *file)
>  {
> @@ -1554,8 +1516,6 @@ static const struct file_operations
> i915_dsc_fractional_bpp_fops = {
>  	.write = i915_dsc_fractional_bpp_write  };
> 
> -DEFINE_SHOW_STORE_ATTRIBUTE(i915_bigjoiner_enable);
> -
>  /*
>   * Returns the Current CRTC's bpc.
>   * Example usage: cat /sys/kernel/debug/dri/0/crtc-0/i915_current_bpc
> @@ -1640,8 +1600,8 @@ void intel_connector_debugfs_add(struct
> intel_connector *connector)
>  	if (DISPLAY_VER(i915) >= 11 &&
>  	    (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
>  	     connector_type == DRM_MODE_CONNECTOR_eDP)) {
> -		debugfs_create_file("i915_bigjoiner_force_enable", 0644, root,
> -				    connector, &i915_bigjoiner_enable_fops);
> +		debugfs_create_bool("i915_bigjoiner_force_enable", 0644,
> root,
> +				    &connector->force_bigjoiner_enable);
>  	}
> 
>  	if (connector_type == DRM_MODE_CONNECTOR_DSI ||
> --
> 2.43.2


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

* RE: [PATCH 01/22] drm/i915: Disable port sync when bigjoiner is used
  2024-03-29  1:12 ` [PATCH 01/22] drm/i915: Disable port sync when bigjoiner is used Ville Syrjala
@ 2024-04-01  5:57   ` Kulkarni, Vandita
  0 siblings, 0 replies; 51+ messages in thread
From: Kulkarni, Vandita @ 2024-04-01  5:57 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 01/22] drm/i915: Disable port sync when bigjoiner is used
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> The current modeset sequence can't handle port sync and bigjoiner at the
> same time. Refuse port sync when bigjoiner is needed, at least until we fix
> the modeset sequence.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Like you have said in the second patch in the series " port sync+bigjoiner would require a tiled display with >5k tiles (or a very high dotclock per tile)." this would be a rare case, since it needs to be fixed later, a todo comment would be helpful, to take care of it for later.
With that
Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index a3d3d4942eb1..fa6fe9ec8027 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4244,6 +4244,7 @@ static bool crtcs_port_sync_compatible(const
> struct intel_crtc_state *crtc_state
>  				       const struct intel_crtc_state *crtc_state2)
> {
>  	return crtc_state1->hw.active && crtc_state2->hw.active &&
> +		!crtc_state1->bigjoiner_pipes && !crtc_state2-
> >bigjoiner_pipes &&
>  		crtc_state1->output_types == crtc_state2->output_types &&
>  		crtc_state1->output_format == crtc_state2->output_format
> &&
>  		crtc_state1->lane_count == crtc_state2->lane_count &&
> --
> 2.43.2


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

* RE: [PATCH 21/22] drm/i915: Allow bigjoiner for MST
  2024-03-29  1:12 ` [PATCH 21/22] drm/i915: Allow bigjoiner for MST Ville Syrjala
@ 2024-04-01  6:26   ` Murthy, Arun R
  0 siblings, 0 replies; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-01  6:26 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx; +Cc: Manasi Navare


> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Cc: Manasi Navare <navaremanasi@chromium.org>; Ville Syrjälä
> <ville.syrjala@linux.intel.com>
> Subject: [PATCH 21/22] drm/i915: Allow bigjoiner for MST
> 
> From: Vidya Srinivas <vidya.srinivas@intel.com>
> 
> We need bigjoiner support with MST functionality for MST monitor resolutions
> > 5K to work.
> Adding support for the same.
> 
> v2: Addressed review comments from Jani.
> Revert rejection of MST bigjoiner modes and add functionality
> 
> v3: Fixed pipe_mismatch WARN for mst_master_transcoder
> Credits-to: Manasi Navare <navaremanasi@chromium.org>
> 
> v4: Utilize intel_crtc_joined_pipe_mask() also for handling
>     bigjoiner slave pipes for MST case(Stan)
> [v5: vsyrjala: chunked the modeset squence stuff out,
>                removed bogus mst master transcoder hack,
> 	       keep mgr_lock near the full_pbn check]
> 
> Signed-off-by: Vidya Srinivas <vidya.srinivas@intel.com>
> Reviewed-by: Manasi Navare <navaremanasi@chromium.org>
> Co-developed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>

Thanks and Regards,
Arun R Murthy
-------------------

>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 25 ++++++++++++---------
>  1 file changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 2d601d214915..c1530c01f541 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -525,6 +525,7 @@ static int intel_dp_mst_compute_config(struct
> intel_encoder *encoder,  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>  	struct intel_atomic_state *state = to_intel_atomic_state(conn_state-
> >state);
> +	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
>  	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder);
>  	struct intel_dp *intel_dp = &intel_mst->primary->dp;
>  	struct intel_connector *connector =
> @@ -542,6 +543,11 @@ static int intel_dp_mst_compute_config(struct
> intel_encoder *encoder,
>  	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
>  		return -EINVAL;
> 
> +	if (intel_dp_need_bigjoiner(intel_dp, connector,
> +				    adjusted_mode->crtc_hdisplay,
> +				    adjusted_mode->crtc_clock))
> +		pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc-
> >pipe);
> +
>  	pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
>  	pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
>  	pipe_config->has_pch_encoder = false;
> @@ -1341,10 +1347,6 @@ intel_dp_mst_mode_valid_ctx(struct
> drm_connector *connector,
>  					       max_link_clock, max_lanes);
>  	mode_rate = intel_dp_link_required(mode->clock, min_bpp);
> 
> -	ret = drm_modeset_lock(&mgr->base.lock, ctx);
> -	if (ret)
> -		return ret;
> -
>  	/*
>  	 * TODO:
>  	 * - Also check if compression would allow for the mode @@ -1357,17
> +1359,18 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
>  	 *   corresponding link capabilities of the sink) in case the
>  	 *   stream is uncompressed for it by the last branch device.
>  	 */
> -	if (mode_rate > max_rate || mode->clock > max_dotclk ||
> -	    drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port-
> >full_pbn) {
> -		*status = MODE_CLOCK_HIGH;
> -		return 0;
> -	}
>  	if (intel_dp_need_bigjoiner(intel_dp, intel_connector,
>  				    mode->hdisplay, target_clock)) {
>  		bigjoiner = true;
>  		max_dotclk *= 2;
> +	}
> 
> -		/* TODO: add support for bigjoiner */
> +	ret = drm_modeset_lock(&mgr->base.lock, ctx);
> +	if (ret)
> +		return ret;
> +
> +	if (mode_rate > max_rate || mode->clock > max_dotclk ||
> +	    drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port-
> >full_pbn)
> +{
>  		*status = MODE_CLOCK_HIGH;
>  		return 0;
>  	}
> @@ -1410,7 +1413,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector
> *connector,
>  		return 0;
>  	}
> 
> -	*status = intel_mode_valid_max_plane_size(dev_priv, mode, false);
> +	*status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner);
>  	return 0;
>  }
> 
> --
> 2.43.2


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

* RE: [PATCH 20/22] drm/i915/mst: Add bigjoiner handling to MST modeset sequence
  2024-03-29  1:12 ` [PATCH 20/22] drm/i915/mst: Add bigjoiner handling to MST modeset sequence Ville Syrjala
@ 2024-04-01  6:33   ` Murthy, Arun R
  0 siblings, 0 replies; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-01  6:33 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx; +Cc: Srinivas, Vidya

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Cc: Srinivas, Vidya <vidya.srinivas@intel.com>
> Subject: [PATCH 20/22] drm/i915/mst: Add bigjoiner handling to MST modeset
> sequence
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Loop over all joined pipes at relevant points in the MST modeset sequence.
> 
> Carved out from Vidya's earlier big patch, with naming/etc.
> changed to match the earlier hsw_crtc_enable() stuff.
> 
> Co-developed-by: Vidya Srinivas <vidya.srinivas@intel.com>
> Signed-off-by: Vidya Srinivas <vidya.srinivas@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>

Thanks and Regards,
Arun R Murthy
--------------------
> ---
>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 34 ++++++++++++++++-----
>  1 file changed, 27 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index de364ed77c08..2d601d214915 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -956,6 +956,7 @@ static void intel_mst_post_disable_dp(struct
> intel_atomic_state *state,
>  	struct drm_dp_mst_atomic_payload *new_payload =
>  		drm_atomic_get_mst_payload_state(new_mst_state,
> connector->port);
>  	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
> +	struct intel_crtc *pipe_crtc;
>  	bool last_mst_stream;
> 
>  	intel_dp->active_mst_links--;
> @@ -964,7 +965,13 @@ static void intel_mst_post_disable_dp(struct
> intel_atomic_state *state,
>  		    DISPLAY_VER(dev_priv) >= 12 && last_mst_stream &&
>  		    !intel_dp_mst_is_master_trans(old_crtc_state));
> 
> -	intel_crtc_vblank_off(old_crtc_state);
> +	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
> +
> intel_crtc_joined_pipe_mask(old_crtc_state)) {
> +		const struct intel_crtc_state *old_pipe_crtc_state =
> +			intel_atomic_get_old_crtc_state(state, pipe_crtc);
> +
> +		intel_crtc_vblank_off(old_pipe_crtc_state);
> +	}
> 
>  	intel_disable_transcoder(old_crtc_state);
> 
> @@ -982,12 +989,18 @@ static void intel_mst_post_disable_dp(struct
> intel_atomic_state *state,
> 
>  	intel_ddi_disable_transcoder_func(old_crtc_state);
> 
> -	intel_dsc_disable(old_crtc_state);
> +	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
> +
> intel_crtc_joined_pipe_mask(old_crtc_state)) {
> +		const struct intel_crtc_state *old_pipe_crtc_state =
> +			intel_atomic_get_old_crtc_state(state, pipe_crtc);
> 
> -	if (DISPLAY_VER(dev_priv) >= 9)
> -		skl_scaler_disable(old_crtc_state);
> -	else
> -		ilk_pfit_disable(old_crtc_state);
> +		intel_dsc_disable(old_pipe_crtc_state);
> +
> +		if (DISPLAY_VER(dev_priv) >= 9)
> +			skl_scaler_disable(old_pipe_crtc_state);
> +		else
> +			ilk_pfit_disable(old_pipe_crtc_state);
> +	}
> 
>  	/*
>  	 * Power down mst path before disabling the port, otherwise we end
> @@ -1133,6 +1146,7 @@ static void intel_mst_enable_dp(struct
> intel_atomic_state *state,
>  		drm_atomic_get_new_mst_topology_state(&state->base,
> &intel_dp->mst_mgr);
>  	enum transcoder trans = pipe_config->cpu_transcoder;
>  	bool first_mst_stream = intel_dp->active_mst_links == 1;
> +	struct intel_crtc *pipe_crtc;
> 
>  	drm_WARN_ON(&dev_priv->drm, pipe_config->has_pch_encoder);
> 
> @@ -1174,7 +1188,13 @@ static void intel_mst_enable_dp(struct
> intel_atomic_state *state,
> 
>  	intel_enable_transcoder(pipe_config);
> 
> -	intel_crtc_vblank_on(pipe_config);
> +	for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, pipe_crtc,
> +
> intel_crtc_joined_pipe_mask(pipe_config)) {
> +		const struct intel_crtc_state *pipe_crtc_state =
> +			intel_atomic_get_new_crtc_state(state, pipe_crtc);
> +
> +		intel_crtc_vblank_on(pipe_crtc_state);
> +	}
> 
>  	intel_hdcp_enable(state, encoder, pipe_config, conn_state);  }
> --
> 2.43.2


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

* RE: [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable()
  2024-03-29  1:12 ` [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable() Ville Syrjala
@ 2024-04-01  6:46   ` Murthy, Arun R
  2024-04-02 19:50     ` Ville Syrjälä
  0 siblings, 1 reply; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-01  6:46 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx


> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable()
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Reorganize the crtc disable path to only deal with the master pipes/transcoders
> in intel_old_crtc_state_disables() and offload the handling of joined pipes to
> hsw_crtc_disable().
> This makes the whole thing much more sensible since we can actually control
> the order in which we do the per-pipe vs.
> per-transcoder modeset steps.
> 
> v2: Use the name 'pipe_crtc' for the per-pipe crtc pointer
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 64 ++++++++++++--------
>  1 file changed, 39 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 58ee40786d5c..c15ea046c62a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -1791,29 +1791,28 @@ static void hsw_crtc_disable(struct
> intel_atomic_state *state,
>  	const struct intel_crtc_state *old_crtc_state =
>  		intel_atomic_get_old_crtc_state(state, crtc);
>  	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> +	struct intel_crtc *pipe_crtc;
> 
>  	/*
>  	 * FIXME collapse everything to one hook.
>  	 * Need care with mst->ddi interactions.
>  	 */
> -	if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
> -		intel_encoders_disable(state, crtc);
> -		intel_encoders_post_disable(state, crtc);
> -	}
> -
> -	intel_disable_shared_dpll(old_crtc_state);
> +	intel_encoders_disable(state, crtc);
> +	intel_encoders_post_disable(state, crtc);
> 
> -	if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
> -		struct intel_crtc *slave_crtc;
> +	for_each_intel_crtc_in_pipe_mask(&i915->drm, pipe_crtc,
> +
> intel_crtc_joined_pipe_mask(old_crtc_state)) {
> +		const struct intel_crtc_state *old_pipe_crtc_state =
> +			intel_atomic_get_old_crtc_state(state, pipe_crtc);
> 
> -		intel_encoders_post_pll_disable(state, crtc);
> +		intel_disable_shared_dpll(old_pipe_crtc_state);
> +	}

As per the sequence is considered, should the pll be disabled prior to disabling the encoders and then followed by post_pll_disable?

Thanks and Regards,
Arun R Murthy
--------------------

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

* RE: [PATCH 17/22] drm/i915: Utilize intel_crtc_joined_pipe_mask() more
  2024-03-29  1:12 ` [PATCH 17/22] drm/i915: Utilize intel_crtc_joined_pipe_mask() more Ville Syrjala
@ 2024-04-01  6:52   ` Murthy, Arun R
  0 siblings, 0 replies; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-01  6:52 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx


> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 17/22] drm/i915: Utilize intel_crtc_joined_pipe_mask() more
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Unify the master vs. slave handling in
> intel_ddi_post_disable_hdmi_or_sst() by looping over all the pipes in one go.
> 
> This also lets us move the intel_crtc_vblank_off() calls to happen in a consistent
> place vs. the transcoder disable.
> Previously we did the master vs. slaves on different sides of that.
> 
> v2: Use the name 'pipe_crtc' for the per-pipe crtc pointer
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>

Thanks and Regards,
Arun R Murthy
---------------------
> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c | 25 ++++++++++++++++++------
>  1 file changed, 19 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 1130bfb7363c..af34e905a85d 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -3098,19 +3098,32 @@ static void
> intel_ddi_post_disable_hdmi_or_sst(struct intel_atomic_state *state,
>  					       const struct drm_connector_state
> *old_conn_state)  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> +	struct intel_crtc *pipe_crtc;
> 
> -	intel_crtc_vblank_off(old_crtc_state);
> +	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
> +
> intel_crtc_joined_pipe_mask(old_crtc_state)) {
> +		const struct intel_crtc_state *old_pipe_crtc_state =
> +			intel_atomic_get_old_crtc_state(state, pipe_crtc);
> +
> +		intel_crtc_vblank_off(old_pipe_crtc_state);
> +	}
> 
>  	intel_disable_transcoder(old_crtc_state);
> 
>  	intel_ddi_disable_transcoder_func(old_crtc_state);
> 
> -	intel_dsc_disable(old_crtc_state);
> +	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, pipe_crtc,
> +
> intel_crtc_joined_pipe_mask(old_crtc_state)) {
> +		const struct intel_crtc_state *old_pipe_crtc_state =
> +			intel_atomic_get_old_crtc_state(state, pipe_crtc);
> 
> -	if (DISPLAY_VER(dev_priv) >= 9)
> -		skl_scaler_disable(old_crtc_state);
> -	else
> -		ilk_pfit_disable(old_crtc_state);
> +		intel_dsc_disable(old_pipe_crtc_state);
> +
> +		if (DISPLAY_VER(dev_priv) >= 9)
> +			skl_scaler_disable(old_pipe_crtc_state);
> +		else
> +			ilk_pfit_disable(old_pipe_crtc_state);
> +	}
>  }
> 
>  static void intel_ddi_post_disable(struct intel_atomic_state *state,
> --
> 2.43.2


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

* RE: [PATCH 10/22] drm/i915: Extract intel_dp_joiner_needs_dsc()
  2024-03-29  1:12 ` [PATCH 10/22] drm/i915: Extract intel_dp_joiner_needs_dsc() Ville Syrjala
@ 2024-04-01  9:22   ` Shankar, Uma
  0 siblings, 0 replies; 51+ messages in thread
From: Shankar, Uma @ 2024-04-01  9:22 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 10/22] drm/i915: Extract intel_dp_joiner_needs_dsc()
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Pull the "does joiner need DSC?" check into a helper. MST will want to use this too
> at some point.

Looks Good to me.
Reviewed-by: Uma Shankar <uma.shankar@intel.com>

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c     | 26 ++++++++++-----------
>  drivers/gpu/drm/i915/display/intel_dp.h     |  1 +
>  drivers/gpu/drm/i915/display/intel_dp_mst.c |  6 +----
>  3 files changed, 15 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 402b3b8f6382..6fa8fc56a39c 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1302,11 +1302,7 @@ intel_dp_mode_valid(struct drm_connector
> *_connector,
>  		dsc = dsc_max_compressed_bpp && dsc_slice_count;
>  	}
> 
> -	/*
> -	 * Big joiner configuration needs DSC for TGL which is not true for
> -	 * XE_LPD where uncompressed joiner is supported.
> -	 */
> -	if (DISPLAY_VER(dev_priv) < 13 && bigjoiner && !dsc)
> +	if (intel_dp_joiner_needs_dsc(dev_priv, bigjoiner) && !dsc)
>  		return MODE_CLOCK_HIGH;
> 
>  	if (mode_rate > max_rate && !dsc)
> @@ -2395,6 +2391,16 @@ int intel_dp_config_required_rate(const struct
> intel_crtc_state *crtc_state)
>  	return intel_dp_link_required(adjusted_mode->crtc_clock, bpp);  }
> 
> +bool intel_dp_joiner_needs_dsc(struct drm_i915_private *i915, bool
> +use_joiner) {
> +	/*
> +	 * Pipe joiner needs compression up to display 12 due to bandwidth
> +	 * limitation. DG2 onwards pipe joiner can be enabled without
> +	 * compression.
> +	 */
> +	return DISPLAY_VER(i915) < 13 && use_joiner; }
> +
>  static int
>  intel_dp_compute_link_config(struct intel_encoder *encoder,
>  			     struct intel_crtc_state *pipe_config, @@ -2409,8
> +2415,7 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
>  		&pipe_config->hw.adjusted_mode;
>  	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
>  	struct link_config_limits limits;
> -	bool joiner_needs_dsc = false;
> -	bool dsc_needed;
> +	bool dsc_needed, joiner_needs_dsc;
>  	int ret = 0;
> 
>  	if (pipe_config->fec_enable &&
> @@ -2421,12 +2426,7 @@ intel_dp_compute_link_config(struct intel_encoder
> *encoder,
>  				    adjusted_mode->crtc_clock))
>  		pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc-
> >pipe);
> 
> -	/*
> -	 * Pipe joiner needs compression up to display 12 due to bandwidth
> -	 * limitation. DG2 onwards pipe joiner can be enabled without
> -	 * compression.
> -	 */
> -	joiner_needs_dsc = DISPLAY_VER(i915) < 13 && pipe_config-
> >bigjoiner_pipes;
> +	joiner_needs_dsc = intel_dp_joiner_needs_dsc(i915,
> +pipe_config->bigjoiner_pipes);
> 
>  	dsc_needed = joiner_needs_dsc || intel_dp->force_dsc_en ||
>  		     !intel_dp_compute_config_limits(intel_dp, pipe_config, diff --
> git a/drivers/gpu/drm/i915/display/intel_dp.h
> b/drivers/gpu/drm/i915/display/intel_dp.h
> index 4a4b39f2748b..d5697b99ac21 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp.h
> @@ -119,6 +119,7 @@ int intel_dp_effective_data_rate(int pixel_clock, int
> bpp_x16,
>  				 int bw_overhead);
>  int intel_dp_max_link_data_rate(struct intel_dp *intel_dp,
>  				int max_dprx_rate, int max_dprx_lanes);
> +bool intel_dp_joiner_needs_dsc(struct drm_i915_private *i915, bool
> +use_joiner);
>  bool intel_dp_has_bigjoiner(struct intel_dp *intel_dp);  bool
> intel_dp_needs_vsc_sdp(const struct intel_crtc_state *crtc_state,
>  			    const struct drm_connector_state *conn_state); diff --
> git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 1405ab5e3acc..6da031f9724d 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -1377,11 +1377,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector
> *connector,
>  		dsc = dsc_max_compressed_bpp && dsc_slice_count;
>  	}
> 
> -	/*
> -	 * Big joiner configuration needs DSC for TGL which is not true for
> -	 * XE_LPD where uncompressed joiner is supported.
> -	 */
> -	if (DISPLAY_VER(dev_priv) < 13 && bigjoiner && !dsc) {
> +	if (intel_dp_joiner_needs_dsc(dev_priv, bigjoiner) && !dsc) {
>  		*status = MODE_CLOCK_HIGH;
>  		return 0;
>  	}
> --
> 2.43.2


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

* RE: [PATCH 02/22] drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner
  2024-03-29  1:12 ` [PATCH 02/22] drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner Ville Syrjala
@ 2024-04-01  9:23   ` Kulkarni, Vandita
  0 siblings, 0 replies; 51+ messages in thread
From: Kulkarni, Vandita @ 2024-04-01  9:23 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx


> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 02/22] drm/i915: Fix intel_modeset_pipe_config_late() for
> bigjoiner
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Currently intel_modeset_pipe_config_late() is called after the bigjoiner state
> copy, and it will actually not do anything for bigjoiner slaves. This can lead to
> a mismatched state between the master and slave.
> 
> The two things that we do in the encoder .compute_config_late() hook are
> mst master transcoder and port sync master transcoder elections. So if either
> of either MST or port sync is combined with bigjoiner then we can see the
> mismatch.
> 
> Currently this problem is more or less theoretical; MST+bigjoiner has not
> been implemented yet, and port sync+bigjoiner would require a tiled display
> with >5k tiles (or a very high dotclock per tile). Although we do have
> kms_tiled_display in igt which can fake a tiled display, and we can now force
> bigjoiner via debugfs, so it is possible to trigger this if you try hard enough.
> 
> Reorder the code such that intel_modeset_pipe_config_late() will be called
> before the bigjoiner state copy happens so that both pipes will end up with
> the same state.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

As we are already calling out on not being able to support port sync + bigjoiner  not being able  to support as of now in the patch 1, this change looks good to me.

Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 46 ++++++++++++++------
>  1 file changed, 32 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 614e60420a29..08705042b4f8 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -4753,8 +4753,6 @@ intel_modeset_pipe_config_late(struct
> intel_atomic_state *state,
>  	struct drm_connector *connector;
>  	int i;
> 
> -	intel_bigjoiner_adjust_pipe_src(crtc_state);
> -
>  	for_each_new_connector_in_state(&state->base, connector,
>  					conn_state, i) {
>  		struct intel_encoder *encoder =
> @@ -6248,27 +6246,37 @@ static int intel_atomic_check_config(struct
> intel_atomic_state *state,
>  			continue;
>  		}
> 
> -		if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
> -			drm_WARN_ON(&i915->drm, new_crtc_state-
> >uapi.enable);
> +		if (drm_WARN_ON(&i915->drm,
> +intel_crtc_is_bigjoiner_slave(new_crtc_state)))
>  			continue;
> -		}
> 
>  		ret = intel_crtc_prepare_cleared_state(state, crtc);
>  		if (ret)
> -			break;
> +			goto fail;
> 
>  		if (!new_crtc_state->hw.enable)
>  			continue;
> 
>  		ret = intel_modeset_pipe_config(state, crtc, limits);
>  		if (ret)
> -			break;
> +			goto fail;
> +	}
> 
> -		ret = intel_atomic_check_bigjoiner(state, crtc);
> +	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
> +		if (!intel_crtc_needs_modeset(new_crtc_state))
> +			continue;
> +
> +		if (drm_WARN_ON(&i915->drm,
> intel_crtc_is_bigjoiner_slave(new_crtc_state)))
> +			continue;
> +
> +		if (!new_crtc_state->hw.enable)
> +			continue;
> +
> +		ret = intel_modeset_pipe_config_late(state, crtc);
>  		if (ret)
> -			break;
> +			goto fail;
>  	}
> 
> +fail:
>  	if (ret)
>  		*failed_pipe = crtc->pipe;
> 
> @@ -6364,16 +6372,26 @@ int intel_atomic_check(struct drm_device *dev,
>  	if (ret)
>  		goto fail;
> 
> +	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
> +		if (!intel_crtc_needs_modeset(new_crtc_state))
> +			continue;
> +
> +		if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) {
> +			drm_WARN_ON(&dev_priv->drm, new_crtc_state-
> >uapi.enable);
> +			continue;
> +		}
> +
> +		ret = intel_atomic_check_bigjoiner(state, crtc);
> +		if (ret)
> +			goto fail;
> +	}
> +
>  	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
>  					    new_crtc_state, i) {
>  		if (!intel_crtc_needs_modeset(new_crtc_state))
>  			continue;
> 
> -		if (new_crtc_state->hw.enable) {
> -			ret = intel_modeset_pipe_config_late(state, crtc);
> -			if (ret)
> -				goto fail;
> -		}
> +		intel_bigjoiner_adjust_pipe_src(new_crtc_state);
> 
>  		intel_crtc_check_fastset(old_crtc_state, new_crtc_state);
>  	}
> --
> 2.43.2


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

* RE: [PATCH 11/22] drm/i915/mst: Check intel_dp_joiner_needs_dsc()
  2024-03-29  1:12 ` [PATCH 11/22] drm/i915/mst: Check intel_dp_joiner_needs_dsc() Ville Syrjala
@ 2024-04-01  9:28   ` Shankar, Uma
  0 siblings, 0 replies; 51+ messages in thread
From: Shankar, Uma @ 2024-04-01  9:28 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 11/22] drm/i915/mst: Check intel_dp_joiner_needs_dsc()
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> intel_dp_mst_compute_config() is missing the "does the joiner need DSC?" check
> despite claiming to have a lot of other joiner/dsc stuff in there (albeit disabled).
> Replicate the logic from the SST side.
> 
> TODO: refactor all this duplicated code!

Looks Good to me.
Reviewed-by: Uma Shankar <uma.shankar@intel.com>

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 6da031f9724d..1cf6241a7d53 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -532,7 +532,7 @@ static int intel_dp_mst_compute_config(struct
> intel_encoder *encoder,
>  	const struct drm_display_mode *adjusted_mode =
>  		&pipe_config->hw.adjusted_mode;
>  	struct link_config_limits limits;
> -	bool dsc_needed;
> +	bool dsc_needed, joiner_needs_dsc;
>  	int ret = 0;
> 
>  	if (pipe_config->fec_enable &&
> @@ -546,7 +546,9 @@ static int intel_dp_mst_compute_config(struct
> intel_encoder *encoder,
>  	pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
>  	pipe_config->has_pch_encoder = false;
> 
> -	dsc_needed = intel_dp->force_dsc_en ||
> +	joiner_needs_dsc = intel_dp_joiner_needs_dsc(dev_priv,
> +pipe_config->bigjoiner_pipes);
> +
> +	dsc_needed = joiner_needs_dsc || intel_dp->force_dsc_en ||
>  		     !intel_dp_mst_compute_config_limits(intel_dp,
>  							 connector,
>  							 pipe_config,
> @@ -566,8 +568,8 @@ static int intel_dp_mst_compute_config(struct
> intel_encoder *encoder,
> 
>  	/* enable compression if the mode doesn't fit available BW */
>  	if (dsc_needed) {
> -		drm_dbg_kms(&dev_priv->drm, "Try DSC (fallback=%s,
> force=%s)\n",
> -			    str_yes_no(ret),
> +		drm_dbg_kms(&dev_priv->drm, "Try DSC (fallback=%s,
> joiner=%s, force=%s)\n",
> +			    str_yes_no(ret), str_yes_no(joiner_needs_dsc),
>  			    str_yes_no(intel_dp->force_dsc_en));
> 
>  		if (!intel_dp_mst_dsc_source_support(pipe_config))
> --
> 2.43.2


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

* RE: [PATCH 12/22] drm/i915: Pass connector to intel_dp_need_bigjoiner()
  2024-03-29  1:12 ` [PATCH 12/22] drm/i915: Pass connector to intel_dp_need_bigjoiner() Ville Syrjala
@ 2024-04-01  9:39   ` Shankar, Uma
  0 siblings, 0 replies; 51+ messages in thread
From: Shankar, Uma @ 2024-04-01  9:39 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 12/22] drm/i915: Pass connector to intel_dp_need_bigjoiner()
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Pass the connector explicitly to intel_dp_need_bigjoiner() so that it'll actually
> check the correct place for the bigjoiner force flag.

Looks Good to me.
Reviewed-by: Uma Shankar <uma.shankar@intel.com>

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c     | 10 ++++++----
>  drivers/gpu/drm/i915/display/intel_dp.h     |  1 +
>  drivers/gpu/drm/i915/display/intel_dp_mst.c |  5 +++--
>  3 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 6fa8fc56a39c..cbabd1924474 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1194,10 +1194,10 @@ intel_dp_mode_valid_downstream(struct
> intel_connector *connector,  }
> 
>  bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
> +			     struct intel_connector *connector,
>  			     int hdisplay, int clock)
>  {
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
> -	struct intel_connector *connector = intel_dp->attached_connector;
> 
>  	if (!intel_dp_has_bigjoiner(intel_dp))
>  		return false;
> @@ -1241,7 +1241,8 @@ intel_dp_mode_valid(struct drm_connector
> *_connector,
>  		target_clock = fixed_mode->clock;
>  	}
> 
> -	if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock)) {
> +	if (intel_dp_need_bigjoiner(intel_dp, connector,
> +				    mode->hdisplay, target_clock)) {
>  		bigjoiner = true;
>  		max_dotclk *= 2;
>  	}
> @@ -2409,7 +2410,7 @@ intel_dp_compute_link_config(struct intel_encoder
> *encoder,  {
>  	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
>  	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
> -	const struct intel_connector *connector =
> +	struct intel_connector *connector =
>  		to_intel_connector(conn_state->connector);
>  	const struct drm_display_mode *adjusted_mode =
>  		&pipe_config->hw.adjusted_mode;
> @@ -2422,7 +2423,8 @@ intel_dp_compute_link_config(struct intel_encoder
> *encoder,
>  	    !intel_dp_supports_fec(intel_dp, connector, pipe_config))
>  		return -EINVAL;
> 
> -	if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay,
> +	if (intel_dp_need_bigjoiner(intel_dp, connector,
> +				    adjusted_mode->crtc_hdisplay,
>  				    adjusted_mode->crtc_clock))
>  		pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc-
> >pipe);
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.h
> b/drivers/gpu/drm/i915/display/intel_dp.h
> index d5697b99ac21..cd6969d05fe3 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp.h
> @@ -150,6 +150,7 @@ u8 intel_dp_dsc_get_slice_count(const struct
> intel_connector *connector,
>  				int mode_clock, int mode_hdisplay,
>  				bool bigjoiner);
>  bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
> +			     struct intel_connector *connector,
>  			     int hdisplay, int clock);
> 
>  static inline unsigned int intel_dp_unused_lane_mask(int lane_count) diff --git
> a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 1cf6241a7d53..a3b0026adb2d 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -527,7 +527,7 @@ static int intel_dp_mst_compute_config(struct
> intel_encoder *encoder,
>  	struct intel_atomic_state *state = to_intel_atomic_state(conn_state-
> >state);
>  	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder);
>  	struct intel_dp *intel_dp = &intel_mst->primary->dp;
> -	const struct intel_connector *connector =
> +	struct intel_connector *connector =
>  		to_intel_connector(conn_state->connector);
>  	const struct drm_display_mode *adjusted_mode =
>  		&pipe_config->hw.adjusted_mode;
> @@ -1342,7 +1342,8 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector
> *connector,
>  		*status = MODE_CLOCK_HIGH;
>  		return 0;
>  	}
> -	if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock)) {
> +	if (intel_dp_need_bigjoiner(intel_dp, intel_connector,
> +				    mode->hdisplay, target_clock)) {
>  		bigjoiner = true;
>  		max_dotclk *= 2;
> 
> --
> 2.43.2


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

* RE: [PATCH 13/22] drm/i915/mst: Limit MST+DSC to TGL+
  2024-03-29  1:12 ` [PATCH 13/22] drm/i915/mst: Limit MST+DSC to TGL+ Ville Syrjala
@ 2024-04-01  9:44   ` Shankar, Uma
  0 siblings, 0 replies; 51+ messages in thread
From: Shankar, Uma @ 2024-04-01  9:44 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 13/22] drm/i915/mst: Limit MST+DSC to TGL+
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> The MST code currently assumes that glk+ alerady supports MST+DSC, which is

Nit: Typo in already 

> incorrect. We need to check for TGL+ actually. ICL does support SST+DSC, but
> supposedly it can't do MST+FEC which will also rule MST+DSC.
> 
> Note that a straight TGL+ check doesn't work here because DSC support can get
> fused out, so we do need to also check 'has_dsc'.

Yeah right.

Looks Good to me.
Reviewed-by: Uma Shankar <uma.shankar@intel.com>

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_device.h | 1 +
>  drivers/gpu/drm/i915/display/intel_dp_mst.c         | 2 +-
>  2 files changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h
> b/drivers/gpu/drm/i915/display/intel_display_device.h
> index fe4268813786..9b1bce2624b9 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_device.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_device.h
> @@ -47,6 +47,7 @@ struct drm_printer;
>  #define HAS_DPT(i915)			(DISPLAY_VER(i915) >= 13)
>  #define HAS_DSB(i915)			(DISPLAY_INFO(i915)->has_dsb)
>  #define HAS_DSC(__i915)
> 	(DISPLAY_RUNTIME_INFO(__i915)->has_dsc)
> +#define HAS_DSC_MST(__i915)		(DISPLAY_VER(__i915) >= 12 &&
> HAS_DSC(__i915))
>  #define HAS_FBC(i915)			(DISPLAY_RUNTIME_INFO(i915)-
> >fbc_mask != 0)
>  #define HAS_FPGA_DBG_UNCLAIMED(i915)	(DISPLAY_INFO(i915)-
> >has_fpga_dbg)
>  #define HAS_FW_BLC(i915)		(DISPLAY_VER(i915) >= 3)
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index a3b0026adb2d..de364ed77c08 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -1352,7 +1352,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector
> *connector,
>  		return 0;
>  	}
> 
> -	if (DISPLAY_VER(dev_priv) >= 10 &&
> +	if (HAS_DSC_MST(dev_priv) &&
>  	    drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) {
>  		/*
>  		 * TBD pass the connector BPC,
> --
> 2.43.2


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

* RE: [PATCH 14/22] drm/i915/mst: Reject FEC+MST on ICL
  2024-03-29  1:12 ` [PATCH 14/22] drm/i915/mst: Reject FEC+MST on ICL Ville Syrjala
@ 2024-04-01  9:45   ` Shankar, Uma
  0 siblings, 0 replies; 51+ messages in thread
From: Shankar, Uma @ 2024-04-01  9:45 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 14/22] drm/i915/mst: Reject FEC+MST on ICL
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> ICL supposedly doesn't support FEC on MST. Reject it.

Looks Good to me.
Reviewed-by: Uma Shankar <uma.shankar@intel.com>

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index cbabd1924474..8b8059b6bb21 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1415,7 +1415,8 @@ static bool intel_dp_source_supports_fec(struct
> intel_dp *intel_dp,
>  	if (DISPLAY_VER(dev_priv) >= 12)
>  		return true;
> 
> -	if (DISPLAY_VER(dev_priv) == 11 && encoder->port != PORT_A)
> +	if (DISPLAY_VER(dev_priv) == 11 && encoder->port != PORT_A &&
> +	    !intel_crtc_has_type(pipe_config, INTEL_OUTPUT_DP_MST))
>  		return true;
> 
>  	return false;
> --
> 2.43.2


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

* RE: [PATCH 09/22] drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/
  2024-03-29  1:12 ` [PATCH 09/22] drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/ Ville Syrjala
@ 2024-04-01 10:01   ` Kulkarni, Vandita
  0 siblings, 0 replies; 51+ messages in thread
From: Kulkarni, Vandita @ 2024-04-01 10:01 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 09/22] drm/i915:
> s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Rename intel_dp_can_bigjoiner() to intel_dp_has_bigjoiner() to better reflect
> its function.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---

Typo in the commit header.
With that fixed
Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>

>  drivers/gpu/drm/i915/display/intel_dp.c | 4 ++--
> drivers/gpu/drm/i915/display/intel_dp.h | 2 +-
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 2490ce32da50..402b3b8f6382 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -425,7 +425,7 @@ int intel_dp_max_link_data_rate(struct intel_dp
> *intel_dp,
>  	return max_rate;
>  }
> 
> -bool intel_dp_can_bigjoiner(struct intel_dp *intel_dp)
> +bool intel_dp_has_bigjoiner(struct intel_dp *intel_dp)
>  {
>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
>  	struct intel_encoder *encoder = &intel_dig_port->base; @@ -1199,7
> +1199,7 @@ bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	struct intel_connector *connector = intel_dp->attached_connector;
> 
> -	if (!intel_dp_can_bigjoiner(intel_dp))
> +	if (!intel_dp_has_bigjoiner(intel_dp))
>  		return false;
> 
>  	return clock > i915->max_dotclk_freq || hdisplay > 5120 || diff --git
> a/drivers/gpu/drm/i915/display/intel_dp.h
> b/drivers/gpu/drm/i915/display/intel_dp.h
> index c540d3a73fe7..4a4b39f2748b 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp.h
> @@ -119,7 +119,7 @@ int intel_dp_effective_data_rate(int pixel_clock, int
> bpp_x16,
>  				 int bw_overhead);
>  int intel_dp_max_link_data_rate(struct intel_dp *intel_dp,
>  				int max_dprx_rate, int max_dprx_lanes); -
> bool intel_dp_can_bigjoiner(struct intel_dp *intel_dp);
> +bool intel_dp_has_bigjoiner(struct intel_dp *intel_dp);
>  bool intel_dp_needs_vsc_sdp(const struct intel_crtc_state *crtc_state,
>  			    const struct drm_connector_state *conn_state);
> void intel_dp_set_infoframes(struct intel_encoder *encoder, bool enable,
> --
> 2.43.2


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

* RE: [PATCH 04/22] drm/i915/vrr: Disable VRR when using bigjoiner
  2024-03-29  1:12 ` [PATCH 04/22] drm/i915/vrr: Disable VRR " Ville Syrjala
@ 2024-04-01 10:04   ` Kulkarni, Vandita
  0 siblings, 0 replies; 51+ messages in thread
From: Kulkarni, Vandita @ 2024-04-01 10:04 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 04/22] drm/i915/vrr: Disable VRR when using bigjoiner
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> All joined pipes share the same transcoder/timing generator.
> Currently we just do the commits per-pipe, which doesn't really work if we
> need to change switch between non-VRR and VRR timings generators on the
> fly, or even when sending the push to the transcoder. For now just disable
> VRR when bigjoiner is needed.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---

LGTM.
Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>

>  drivers/gpu/drm/i915/display/intel_vrr.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c
> b/drivers/gpu/drm/i915/display/intel_vrr.c
> index eb5bd0743902..f542ee1db1d9 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -117,6 +117,13 @@ intel_vrr_compute_config(struct intel_crtc_state
> *crtc_state,
>  	const struct drm_display_info *info = &connector-
> >base.display_info;
>  	int vmin, vmax;
> 
> +	/*
> +	 * FIXME all joined pipes share the same transcoder.
> +	 * Need to account for that during VRR toggle/push/etc.
> +	 */
> +	if (crtc_state->bigjoiner_pipes)
> +		return;
> +
>  	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
>  		return;
> 
> --
> 2.43.2


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

* RE: [PATCH 16/22] drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst()
  2024-03-29  1:12 ` [PATCH 16/22] drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst() Ville Syrjala
@ 2024-04-01 10:17   ` Murthy, Arun R
  0 siblings, 0 replies; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-01 10:17 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 16/22] drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst()
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Extract the "not-MST" stuff from intel_ddi_post_disable() so that the whole
> thing isn't so cluttered.
> 
> The bigjoiner slave handling was outside of the !MST check, but it really should
> have been inside it as its the counterpart to the master handling inside the
> check. So we pull that in as well. There is no functional change here as we don't
> currently support bigjoiner+MST anyway.
> 
> v2: Rebase
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>

Thanks and Regards,
Arun R Murthy
-------------------

> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c | 52 +++++++++++-------------
>  1 file changed, 24 insertions(+), 28 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 24a9be2a217f..1130bfb7363c 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -3092,39 +3092,35 @@ static void intel_ddi_post_disable_hdmi(struct
> intel_atomic_state *state,
>  	intel_dp_dual_mode_set_tmds_output(intel_hdmi, false);  }
> 
> +static void intel_ddi_post_disable_hdmi_or_sst(struct intel_atomic_state
> *state,
> +					       struct intel_encoder *encoder,
> +					       const struct intel_crtc_state
> *old_crtc_state,
> +					       const struct drm_connector_state
> *old_conn_state) {
> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> +
> +	intel_crtc_vblank_off(old_crtc_state);
> +
> +	intel_disable_transcoder(old_crtc_state);
> +
> +	intel_ddi_disable_transcoder_func(old_crtc_state);
> +
> +	intel_dsc_disable(old_crtc_state);
> +
> +	if (DISPLAY_VER(dev_priv) >= 9)
> +		skl_scaler_disable(old_crtc_state);
> +	else
> +		ilk_pfit_disable(old_crtc_state);
> +}
> +
>  static void intel_ddi_post_disable(struct intel_atomic_state *state,
>  				   struct intel_encoder *encoder,
>  				   const struct intel_crtc_state *old_crtc_state,
>  				   const struct drm_connector_state
> *old_conn_state)  {
> -	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> -	struct intel_crtc *slave_crtc;
> -
> -	if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) {
> -		intel_crtc_vblank_off(old_crtc_state);
> -
> -		intel_disable_transcoder(old_crtc_state);
> -
> -		intel_ddi_disable_transcoder_func(old_crtc_state);
> -
> -		intel_dsc_disable(old_crtc_state);
> -
> -		if (DISPLAY_VER(dev_priv) >= 9)
> -			skl_scaler_disable(old_crtc_state);
> -		else
> -			ilk_pfit_disable(old_crtc_state);
> -	}
> -
> -	for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc,
> -
> intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) {
> -		const struct intel_crtc_state *old_slave_crtc_state =
> -			intel_atomic_get_old_crtc_state(state, slave_crtc);
> -
> -		intel_crtc_vblank_off(old_slave_crtc_state);
> -
> -		intel_dsc_disable(old_slave_crtc_state);
> -		skl_scaler_disable(old_slave_crtc_state);
> -	}
> +	if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
> +		intel_ddi_post_disable_hdmi_or_sst(state, encoder,
> +						   old_crtc_state,
> old_conn_state);
> 
>  	/*
>  	 * When called from DP MST code:
> --
> 2.43.2


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

* RE: [PATCH 15/22] drm/i915: Introduce intel_crtc_joined_pipe_mask()
  2024-03-29  1:12 ` [PATCH 15/22] drm/i915: Introduce intel_crtc_joined_pipe_mask() Ville Syrjala
@ 2024-04-01 10:20   ` Murthy, Arun R
  0 siblings, 0 replies; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-01 10:20 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx


> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 15/22] drm/i915: Introduce intel_crtc_joined_pipe_mask()
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Add a small helper to compute the set of pipes that the current crtc is using.
> 
> And we have at least one trivial place in
> intel_ddi_update_active_dpll() where we can use it immediately, so let's do
> that.
> 
> v2: Use the name 'pipe_crtc' for the per-pipe crtc pointer
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>

Thanks and Regards,
Arun R Murthy
-------------------

> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c     | 11 +++++------
>  drivers/gpu/drm/i915/display/intel_display.c |  7 +++++++
> drivers/gpu/drm/i915/display/intel_display.h |  1 +
>  3 files changed, 13 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index fa6fe9ec8027..24a9be2a217f 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -3463,18 +3463,17 @@ void intel_ddi_update_active_dpll(struct
> intel_atomic_state *state,
>  				  struct intel_crtc *crtc)
>  {
>  	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
> -	struct intel_crtc_state *crtc_state =
> +	const struct intel_crtc_state *crtc_state =
>  		intel_atomic_get_new_crtc_state(state, crtc);
> -	struct intel_crtc *slave_crtc;
> +	struct intel_crtc *pipe_crtc;
> 
>  	/* FIXME: Add MTL pll_mgr */
>  	if (DISPLAY_VER(i915) >= 14 || !intel_encoder_is_tc(encoder))
>  		return;
> 
> -	intel_update_active_dpll(state, crtc, encoder);
> -	for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc,
> -
> intel_crtc_bigjoiner_slave_pipes(crtc_state))
> -		intel_update_active_dpll(state, slave_crtc, encoder);
> +	for_each_intel_crtc_in_pipe_mask(&i915->drm, pipe_crtc,
> +
> intel_crtc_joined_pipe_mask(crtc_state))
> +		intel_update_active_dpll(state, pipe_crtc, encoder);
>  }
> 
>  static void
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 6197b62dac55..58ee40786d5c 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -275,6 +275,13 @@ static int intel_bigjoiner_num_pipes(const struct
> intel_crtc_state *crtc_state)
>  	return hweight8(crtc_state->bigjoiner_pipes);
>  }
> 
> +u8 intel_crtc_joined_pipe_mask(const struct intel_crtc_state
> +*crtc_state) {
> +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> +
> +	return BIT(crtc->pipe) | crtc_state->bigjoiner_pipes; }
> +
>  struct intel_crtc *intel_master_crtc(const struct intel_crtc_state *crtc_state)  {
>  	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
> diff --git a/drivers/gpu/drm/i915/display/intel_display.h
> b/drivers/gpu/drm/i915/display/intel_display.h
> index 986ec77490de..31ee34c59844 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.h
> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> @@ -408,6 +408,7 @@ intel_cpu_transcoder_mode_valid(struct
> drm_i915_private *i915,  enum phy intel_port_to_phy(struct drm_i915_private
> *i915, enum port port);  bool is_trans_port_sync_mode(const struct
> intel_crtc_state *state);  bool is_trans_port_sync_master(const struct
> intel_crtc_state *state);
> +u8 intel_crtc_joined_pipe_mask(const struct intel_crtc_state
> +*crtc_state);
>  bool intel_crtc_is_bigjoiner_slave(const struct intel_crtc_state *crtc_state);
> bool intel_crtc_is_bigjoiner_master(const struct intel_crtc_state *crtc_state);
>  u8 intel_crtc_bigjoiner_slave_pipes(const struct intel_crtc_state *crtc_state);
> --
> 2.43.2


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

* RE: [PATCH 03/22] drm/i915: Disable live M/N updates when using bigjoiner
  2024-03-29  1:12 ` [PATCH 03/22] drm/i915: Disable live M/N updates when using bigjoiner Ville Syrjala
@ 2024-04-01 10:32   ` Murthy, Arun R
  0 siblings, 0 replies; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-01 10:32 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx


> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 03/22] drm/i915: Disable live M/N updates when using
> bigjoiner
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> All joined pipes share the same transcoder/timing generator.
> Currently we just do the commits per-pipe, which doesn't really work if we need
> to change the timings at the same time. For now just disable live M/N updates
> when bigjoiner is needed.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>

Thanks and Regards,
Arun R Murthy
--------------------
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index f755fd974da2..bc9d6efc99ee 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -2719,7 +2719,11 @@ intel_dp_drrs_compute_config(struct
> intel_connector *connector,
>  		intel_panel_downclock_mode(connector, &pipe_config-
> >hw.adjusted_mode);
>  	int pixel_clock;
> 
> -	if (has_seamless_m_n(connector))
> +	/*
> +	 * FIXME all joined pipes share the same transcoder.
> +	 * Need to account for that when updating M/N live.
> +	 */
> +	if (has_seamless_m_n(connector) && !pipe_config->bigjoiner_pipes)
>  		pipe_config->update_m_n = true;
> 
>  	if (!can_enable_drrs(connector, pipe_config, downclock_mode)) {
> --
> 2.43.2


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

* RE: [PATCH 06/22] drm/i915: Shuffle DP .mode_valid() checks
  2024-03-29  1:12 ` [PATCH 06/22] drm/i915: Shuffle DP .mode_valid() checks Ville Syrjala
@ 2024-04-01 10:35   ` Kulkarni, Vandita
  0 siblings, 0 replies; 51+ messages in thread
From: Kulkarni, Vandita @ 2024-04-01 10:35 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 06/22] drm/i915: Shuffle DP .mode_valid() checks
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Move some of the more trivial checks in the DP .mode_valid() hooks upwards
> to lessen the noise amongst the more complex checks.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---

LGTM.
Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>

>  drivers/gpu/drm/i915/display/intel_dp.c     |  6 +++---
>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 21 ++++++++++-----------
>  2 files changed, 13 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index bc9d6efc99ee..2490ce32da50 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1229,6 +1229,9 @@ intel_dp_mode_valid(struct drm_connector
> *_connector,
>  	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
>  		return MODE_H_ILLEGAL;
> 
> +	if (mode->clock < 10000)
> +		return MODE_CLOCK_LOW;
> +
>  	fixed_mode = intel_panel_fixed_mode(connector, mode);
>  	if (intel_dp_is_edp(intel_dp) && fixed_mode) {
>  		status = intel_panel_mode_valid(connector, mode); @@ -
> 1238,9 +1241,6 @@ intel_dp_mode_valid(struct drm_connector
> *_connector,
>  		target_clock = fixed_mode->clock;
>  	}
> 
> -	if (mode->clock < 10000)
> -		return MODE_CLOCK_LOW;
> -
>  	if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock))
> {
>  		bigjoiner = true;
>  		max_dotclk *= 2;
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 9a7c75039989..1405ab5e3acc 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -1302,6 +1302,16 @@ intel_dp_mst_mode_valid_ctx(struct
> drm_connector *connector,
>  	if (*status != MODE_OK)
>  		return 0;
> 
> +	if (mode->flags & DRM_MODE_FLAG_DBLCLK) {
> +		*status = MODE_H_ILLEGAL;
> +		return 0;
> +	}
> +
> +	if (mode->clock < 10000) {
> +		*status = MODE_CLOCK_LOW;
> +		return 0;
> +	}
> +
>  	max_link_clock = intel_dp_max_link_rate(intel_dp);
>  	max_lanes = intel_dp_max_lane_count(intel_dp);
> 
> @@ -1330,17 +1340,6 @@ intel_dp_mst_mode_valid_ctx(struct
> drm_connector *connector,
>  		*status = MODE_CLOCK_HIGH;
>  		return 0;
>  	}
> -
> -	if (mode->clock < 10000) {
> -		*status = MODE_CLOCK_LOW;
> -		return 0;
> -	}
> -
> -	if (mode->flags & DRM_MODE_FLAG_DBLCLK) {
> -		*status = MODE_H_ILLEGAL;
> -		return 0;
> -	}
> -
>  	if (intel_dp_need_bigjoiner(intel_dp, mode->hdisplay, target_clock))
> {
>  		bigjoiner = true;
>  		max_dotclk *= 2;
> --
> 2.43.2


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

* RE: [PATCH 07/22] drm/i915: Clean up glk_pipe_scaler_clock_gating_wa()
  2024-03-29  1:12 ` [PATCH 07/22] drm/i915: Clean up glk_pipe_scaler_clock_gating_wa() Ville Syrjala
@ 2024-04-01 11:08   ` Kulkarni, Vandita
  0 siblings, 0 replies; 51+ messages in thread
From: Kulkarni, Vandita @ 2024-04-01 11:08 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 07/22] drm/i915: Clean up
> glk_pipe_scaler_clock_gating_wa()
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> glk_pipe_scaler_clock_gating_wa() is messy. Clean it up via intel_de_rmw(),
> and also just pass in the whole crtc so the caller doesn't dance around so
> much.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---

LGTM,
Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>

>  drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++------------
>  1 file changed, 7 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 08705042b4f8..83474fcf4131 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -1551,18 +1551,13 @@ static void ilk_crtc_enable(struct
> intel_atomic_state *state,
>  	intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true);  }
> 
> -static void glk_pipe_scaler_clock_gating_wa(struct drm_i915_private
> *dev_priv,
> -					    enum pipe pipe, bool apply)
> +static void glk_pipe_scaler_clock_gating_wa(struct intel_crtc *crtc,
> +bool enable)
>  {
> -	u32 val = intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe));
> +	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
>  	u32 mask = DPF_GATING_DIS | DPF_RAM_GATING_DIS |
> DPFR_GATING_DIS;
> 
> -	if (apply)
> -		val |= mask;
> -	else
> -		val &= ~mask;
> -
> -	intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe), val);
> +	intel_de_rmw(i915, CLKGATE_DIS_PSL(crtc->pipe),
> +		     mask, enable ? mask : 0);
>  }
> 
>  static void hsw_set_linetime_wm(const struct intel_crtc_state *crtc_state)
> @@ -1638,8 +1633,8 @@ static void hsw_crtc_enable(struct
> intel_atomic_state *state,
>  	const struct intel_crtc_state *new_crtc_state =
>  		intel_atomic_get_new_crtc_state(state, crtc);
>  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> -	enum pipe pipe = crtc->pipe, hsw_workaround_pipe;
>  	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
> +	enum pipe hsw_workaround_pipe;
>  	bool psl_clkgate_wa;
> 
>  	if (drm_WARN_ON(&dev_priv->drm, crtc->active)) @@ -1677,7
> +1672,7 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
>  	psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 &&
>  		new_crtc_state->pch_pfit.enabled;
>  	if (psl_clkgate_wa)
> -		glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true);
> +		glk_pipe_scaler_clock_gating_wa(crtc, true);
> 
>  	if (DISPLAY_VER(dev_priv) >= 9)
>  		skl_pfit_enable(new_crtc_state);
> @@ -1709,7 +1704,7 @@ static void hsw_crtc_enable(struct
> intel_atomic_state *state,
> 
>  	if (psl_clkgate_wa) {
>  		intel_crtc_wait_for_next_vblank(crtc);
> -		glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false);
> +		glk_pipe_scaler_clock_gating_wa(crtc, false);
>  	}
> 
>  	/* If we change the relative order between pipe/planes enabling, we
> need
> --
> 2.43.2


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

* RE: [PATCH 08/22] drm/i915: Extract glk_need_scaler_clock_gating_wa()
  2024-03-29  1:12 ` [PATCH 08/22] drm/i915: Extract glk_need_scaler_clock_gating_wa() Ville Syrjala
@ 2024-04-01 11:09   ` Kulkarni, Vandita
  0 siblings, 0 replies; 51+ messages in thread
From: Kulkarni, Vandita @ 2024-04-01 11:09 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 08/22] drm/i915: Extract glk_need_scaler_clock_gating_wa()
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Simplify our life by extracting the "do we need the glk scaler clock gating
> w/a?" check into a small helper.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---

LGTM.
Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>

>  drivers/gpu/drm/i915/display/intel_display.c | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 83474fcf4131..6197b62dac55 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -1551,6 +1551,14 @@ static void ilk_crtc_enable(struct
> intel_atomic_state *state,
>  	intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true);  }
> 
> +/* Display WA #1180: WaDisableScalarClockGating: glk */ static bool
> +glk_need_scaler_clock_gating_wa(const struct intel_crtc_state
> +*crtc_state) {
> +	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
> +
> +	return DISPLAY_VER(i915) == 10 && crtc_state->pch_pfit.enabled; }
> +
>  static void glk_pipe_scaler_clock_gating_wa(struct intel_crtc *crtc, bool
> enable)  {
>  	struct drm_i915_private *i915 = to_i915(crtc->base.dev); @@ -1635,7
> +1643,6 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
>  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>  	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
>  	enum pipe hsw_workaround_pipe;
> -	bool psl_clkgate_wa;
> 
>  	if (drm_WARN_ON(&dev_priv->drm, crtc->active))
>  		return;
> @@ -1668,10 +1675,7 @@ static void hsw_crtc_enable(struct
> intel_atomic_state *state,
> 
>  	crtc->active = true;
> 
> -	/* Display WA #1180: WaDisableScalarClockGating: glk */
> -	psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 &&
> -		new_crtc_state->pch_pfit.enabled;
> -	if (psl_clkgate_wa)
> +	if (glk_need_scaler_clock_gating_wa(new_crtc_state))
>  		glk_pipe_scaler_clock_gating_wa(crtc, true);
> 
>  	if (DISPLAY_VER(dev_priv) >= 9)
> @@ -1702,7 +1706,7 @@ static void hsw_crtc_enable(struct
> intel_atomic_state *state,
> 
>  	intel_encoders_enable(state, crtc);
> 
> -	if (psl_clkgate_wa) {
> +	if (glk_need_scaler_clock_gating_wa(new_crtc_state)) {
>  		intel_crtc_wait_for_next_vblank(crtc);
>  		glk_pipe_scaler_clock_gating_wa(crtc, false);
>  	}
> --
> 2.43.2


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

* RE: [PATCH 05/22] drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks
  2024-03-29  1:12 ` [PATCH 05/22] drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks Ville Syrjala
@ 2024-04-01 11:25   ` Kulkarni, Vandita
  0 siblings, 0 replies; 51+ messages in thread
From: Kulkarni, Vandita @ 2024-04-01 11:25 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 05/22] drm/i915: Remove DRM_MODE_FLAG_DBLSCAN
> checks from .mode_valid() hooks
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> We never set connector->doublescan_allowed, so the probe helper already
> filters out all doublescan modes for us.
> 
> Sadly we still need to keep the explicit doublescan checks in .compute_config
> as outlined in commit e4dd27aadd20
> ("drm/i915: Allow DBLSCAN user modes with eDP/LVDS/DSI")
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---

LGTM.
Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>

>  drivers/gpu/drm/i915/display/intel_crt.c    | 3 ---
>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 5 -----
>  drivers/gpu/drm/i915/display/intel_dsi.c    | 3 ---
>  drivers/gpu/drm/i915/display/intel_dvo.c    | 3 ---
>  drivers/gpu/drm/i915/display/intel_lvds.c   | 3 ---
>  drivers/gpu/drm/i915/display/intel_sdvo.c   | 3 ---
>  drivers/gpu/drm/i915/display/intel_tv.c     | 3 ---
>  7 files changed, 23 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_crt.c
> b/drivers/gpu/drm/i915/display/intel_crt.c
> index 93479db0f89f..2e95093aa4d4 100644
> --- a/drivers/gpu/drm/i915/display/intel_crt.c
> +++ b/drivers/gpu/drm/i915/display/intel_crt.c
> @@ -356,9 +356,6 @@ intel_crt_mode_valid(struct drm_connector
> *connector,
>  	if (status != MODE_OK)
>  		return status;
> 
> -	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> -		return MODE_NO_DBLESCAN;
> -
>  	if (mode->clock < 25000)
>  		return MODE_CLOCK_LOW;
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 53aec023ce92..9a7c75039989 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -1302,11 +1302,6 @@ intel_dp_mst_mode_valid_ctx(struct
> drm_connector *connector,
>  	if (*status != MODE_OK)
>  		return 0;
> 
> -	if (mode->flags & DRM_MODE_FLAG_DBLSCAN) {
> -		*status = MODE_NO_DBLESCAN;
> -		return 0;
> -	}
> -
>  	max_link_clock = intel_dp_max_link_rate(intel_dp);
>  	max_lanes = intel_dp_max_lane_count(intel_dp);
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dsi.c
> b/drivers/gpu/drm/i915/display/intel_dsi.c
> index d3cf6a652221..2dfc60e4b615 100644
> --- a/drivers/gpu/drm/i915/display/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/display/intel_dsi.c
> @@ -69,9 +69,6 @@ enum drm_mode_status intel_dsi_mode_valid(struct
> drm_connector *connector,
> 
>  	drm_dbg_kms(&dev_priv->drm, "\n");
> 
> -	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> -		return MODE_NO_DBLESCAN;
> -
>  	status = intel_panel_mode_valid(intel_connector, mode);
>  	if (status != MODE_OK)
>  		return status;
> diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c
> b/drivers/gpu/drm/i915/display/intel_dvo.c
> index c076da75b066..060328c0df7e 100644
> --- a/drivers/gpu/drm/i915/display/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_dvo.c
> @@ -231,9 +231,6 @@ intel_dvo_mode_valid(struct drm_connector
> *_connector,
>  	if (status != MODE_OK)
>  		return status;
> 
> -	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> -		return MODE_NO_DBLESCAN;
> -
>  	/* XXX: Validate clock range */
> 
>  	if (fixed_mode) {
> diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c
> b/drivers/gpu/drm/i915/display/intel_lvds.c
> index 221f5c6c871b..24860945f2e4 100644
> --- a/drivers/gpu/drm/i915/display/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/display/intel_lvds.c
> @@ -399,9 +399,6 @@ intel_lvds_mode_valid(struct drm_connector
> *_connector,
>  	if (status != MODE_OK)
>  		return status;
> 
> -	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> -		return MODE_NO_DBLESCAN;
> -
>  	status = intel_panel_mode_valid(connector, mode);
>  	if (status != MODE_OK)
>  		return status;
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c
> b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 50f0557d9ca2..df76044a739a 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -1952,9 +1952,6 @@ intel_sdvo_mode_valid(struct drm_connector
> *connector,
>  	if (status != MODE_OK)
>  		return status;
> 
> -	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> -		return MODE_NO_DBLESCAN;
> -
>  	if (clock > max_dotclk)
>  		return MODE_CLOCK_HIGH;
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_tv.c
> b/drivers/gpu/drm/i915/display/intel_tv.c
> index ba5d2b7174b7..79d35c1b3c81 100644
> --- a/drivers/gpu/drm/i915/display/intel_tv.c
> +++ b/drivers/gpu/drm/i915/display/intel_tv.c
> @@ -969,9 +969,6 @@ intel_tv_mode_valid(struct drm_connector
> *connector,
>  	if (status != MODE_OK)
>  		return status;
> 
> -	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
> -		return MODE_NO_DBLESCAN;
> -
>  	if (mode->clock > max_dotclk)
>  		return MODE_CLOCK_HIGH;
> 
> --
> 2.43.2


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

* RE: [PATCH 22/22] drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable"
  2024-03-29  1:12 ` [PATCH 22/22] drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable" Ville Syrjala
  2024-04-01  5:08   ` Murthy, Arun R
@ 2024-04-02  7:37   ` Srinivas, Vidya
  1 sibling, 0 replies; 51+ messages in thread
From: Srinivas, Vidya @ 2024-04-02  7:37 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx

Hello Ville, Thank you very much for the series. 6K detects fine and works.
Tested-by: Vidya Srinivas <vidya.srinivas@intel.com>

> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Friday, March 29, 2024 6:43 AM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 22/22] drm/i915: Use debugfs_create_bool() for
> "i915_bigjoiner_force_enable"
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> There is no reason to make this debugfs file for a simple boolean so
> complicated. Just use debugfs_create_bool().
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  .../drm/i915/display/intel_display_debugfs.c  | 44 +------------------
>  1 file changed, 2 insertions(+), 42 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index b99c024b0934..3e364891dcd0 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -1402,20 +1402,6 @@ out:	drm_modeset_unlock(&i915-
> >drm.mode_config.connection_mutex);
>  	return ret;
>  }
> 
> -static int i915_bigjoiner_enable_show(struct seq_file *m, void *data) -{
> -	struct intel_connector *connector = m->private;
> -	struct drm_crtc *crtc;
> -
> -	crtc = connector->base.state->crtc;
> -	if (connector->base.status != connector_status_connected || !crtc)
> -		return -ENODEV;
> -
> -	seq_printf(m, "Bigjoiner enable: %d\n", connector-
> >force_bigjoiner_enable);
> -
> -	return 0;
> -}
> -
>  static ssize_t i915_dsc_output_format_write(struct file *file,
>  					    const char __user *ubuf,
>  					    size_t len, loff_t *offp)
> @@ -1437,30 +1423,6 @@ static ssize_t i915_dsc_output_format_write(struct
> file *file,
>  	return len;
>  }
> 
> -static ssize_t i915_bigjoiner_enable_write(struct file *file,
> -					   const char __user *ubuf,
> -					   size_t len, loff_t *offp)
> -{
> -	struct seq_file *m = file->private_data;
> -	struct intel_connector *connector = m->private;
> -	struct drm_crtc *crtc;
> -	bool bigjoiner_en = 0;
> -	int ret;
> -
> -	crtc = connector->base.state->crtc;
> -	if (connector->base.status != connector_status_connected || !crtc)
> -		return -ENODEV;
> -
> -	ret = kstrtobool_from_user(ubuf, len, &bigjoiner_en);
> -	if (ret < 0)
> -		return ret;
> -
> -	connector->force_bigjoiner_enable = bigjoiner_en;
> -	*offp += len;
> -
> -	return len;
> -}
> -
>  static int i915_dsc_output_format_open(struct inode *inode,
>  				       struct file *file)
>  {
> @@ -1554,8 +1516,6 @@ static const struct file_operations
> i915_dsc_fractional_bpp_fops = {
>  	.write = i915_dsc_fractional_bpp_write  };
> 
> -DEFINE_SHOW_STORE_ATTRIBUTE(i915_bigjoiner_enable);
> -
>  /*
>   * Returns the Current CRTC's bpc.
>   * Example usage: cat /sys/kernel/debug/dri/0/crtc-0/i915_current_bpc
> @@ -1640,8 +1600,8 @@ void intel_connector_debugfs_add(struct
> intel_connector *connector)
>  	if (DISPLAY_VER(i915) >= 11 &&
>  	    (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
>  	     connector_type == DRM_MODE_CONNECTOR_eDP)) {
> -		debugfs_create_file("i915_bigjoiner_force_enable", 0644,
> root,
> -				    connector, &i915_bigjoiner_enable_fops);
> +		debugfs_create_bool("i915_bigjoiner_force_enable", 0644,
> root,
> +				    &connector->force_bigjoiner_enable);
>  	}
> 
>  	if (connector_type == DRM_MODE_CONNECTOR_DSI ||
> --
> 2.43.2


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

* Re: [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable()
  2024-04-01  6:46   ` Murthy, Arun R
@ 2024-04-02 19:50     ` Ville Syrjälä
  2024-04-03  4:32       ` Murthy, Arun R
  0 siblings, 1 reply; 51+ messages in thread
From: Ville Syrjälä @ 2024-04-02 19:50 UTC (permalink / raw)
  To: Murthy, Arun R; +Cc: intel-gfx

On Mon, Apr 01, 2024 at 06:46:20AM +0000, Murthy, Arun R wrote:
> 
> > -----Original Message-----
> > From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> > Syrjala
> > Sent: Friday, March 29, 2024 6:43 AM
> > To: intel-gfx@lists.freedesktop.org
> > Subject: [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable()
> > 
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Reorganize the crtc disable path to only deal with the master pipes/transcoders
> > in intel_old_crtc_state_disables() and offload the handling of joined pipes to
> > hsw_crtc_disable().
> > This makes the whole thing much more sensible since we can actually control
> > the order in which we do the per-pipe vs.
> > per-transcoder modeset steps.
> > 
> > v2: Use the name 'pipe_crtc' for the per-pipe crtc pointer
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 64 ++++++++++++--------
> >  1 file changed, 39 insertions(+), 25 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > b/drivers/gpu/drm/i915/display/intel_display.c
> > index 58ee40786d5c..c15ea046c62a 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -1791,29 +1791,28 @@ static void hsw_crtc_disable(struct
> > intel_atomic_state *state,
> >  	const struct intel_crtc_state *old_crtc_state =
> >  		intel_atomic_get_old_crtc_state(state, crtc);
> >  	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> > +	struct intel_crtc *pipe_crtc;
> > 
> >  	/*
> >  	 * FIXME collapse everything to one hook.
> >  	 * Need care with mst->ddi interactions.
> >  	 */
> > -	if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
> > -		intel_encoders_disable(state, crtc);
> > -		intel_encoders_post_disable(state, crtc);
> > -	}
> > -
> > -	intel_disable_shared_dpll(old_crtc_state);
> > +	intel_encoders_disable(state, crtc);
> > +	intel_encoders_post_disable(state, crtc);
> > 
> > -	if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
> > -		struct intel_crtc *slave_crtc;
> > +	for_each_intel_crtc_in_pipe_mask(&i915->drm, pipe_crtc,
> > +
> > intel_crtc_joined_pipe_mask(old_crtc_state)) {
> > +		const struct intel_crtc_state *old_pipe_crtc_state =
> > +			intel_atomic_get_old_crtc_state(state, pipe_crtc);
> > 
> > -		intel_encoders_post_pll_disable(state, crtc);
> > +		intel_disable_shared_dpll(old_pipe_crtc_state);
> > +	}
> 
> As per the sequence is considered, should the pll be disabled prior to disabling the encoders and then followed by post_pll_disable?

The correct disable order is:
1. encoder disable()
2. disable transcoder/etc. (nop for hsw+ as that stuff
   has been sucked into the encoder hooks)
3. encoder post_disable()
4. pll disable
5. encoder post_pll_disable()

which we should be following here, thouh the diff is
rather hard to read due to the indentation changes.

-- 
Ville Syrjälä
Intel

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

* RE: [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable()
  2024-04-02 19:50     ` Ville Syrjälä
@ 2024-04-03  4:32       ` Murthy, Arun R
  0 siblings, 0 replies; 51+ messages in thread
From: Murthy, Arun R @ 2024-04-03  4:32 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

> -----Original Message-----
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Sent: Wednesday, April 3, 2024 1:20 AM
> To: Murthy, Arun R <arun.r.murthy@intel.com>
> Cc: intel-gfx@lists.freedesktop.org
> Subject: Re: [PATCH 18/22] drm/i915: Handle joined pipes inside
> hsw_crtc_disable()
> 
> On Mon, Apr 01, 2024 at 06:46:20AM +0000, Murthy, Arun R wrote:
> >
> > > -----Original Message-----
> > > From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf
> > > Of Ville Syrjala
> > > Sent: Friday, March 29, 2024 6:43 AM
> > > To: intel-gfx@lists.freedesktop.org
> > > Subject: [PATCH 18/22] drm/i915: Handle joined pipes inside
> > > hsw_crtc_disable()
> > >
> > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > >
> > > Reorganize the crtc disable path to only deal with the master
> > > pipes/transcoders in intel_old_crtc_state_disables() and offload the
> > > handling of joined pipes to hsw_crtc_disable().
> > > This makes the whole thing much more sensible since we can actually
> > > control the order in which we do the per-pipe vs.
> > > per-transcoder modeset steps.
> > >
> > > v2: Use the name 'pipe_crtc' for the per-pipe crtc pointer
> > >
> > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_display.c | 64
> > > ++++++++++++--------
> > >  1 file changed, 39 insertions(+), 25 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > > b/drivers/gpu/drm/i915/display/intel_display.c
> > > index 58ee40786d5c..c15ea046c62a 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > @@ -1791,29 +1791,28 @@ static void hsw_crtc_disable(struct
> > > intel_atomic_state *state,
> > >  	const struct intel_crtc_state *old_crtc_state =
> > >  		intel_atomic_get_old_crtc_state(state, crtc);
> > >  	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> > > +	struct intel_crtc *pipe_crtc;
> > >
> > >  	/*
> > >  	 * FIXME collapse everything to one hook.
> > >  	 * Need care with mst->ddi interactions.
> > >  	 */
> > > -	if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
> > > -		intel_encoders_disable(state, crtc);
> > > -		intel_encoders_post_disable(state, crtc);
> > > -	}
> > > -
> > > -	intel_disable_shared_dpll(old_crtc_state);
> > > +	intel_encoders_disable(state, crtc);
> > > +	intel_encoders_post_disable(state, crtc);
> > >
> > > -	if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) {
> > > -		struct intel_crtc *slave_crtc;
> > > +	for_each_intel_crtc_in_pipe_mask(&i915->drm, pipe_crtc,
> > > +
> > > intel_crtc_joined_pipe_mask(old_crtc_state)) {
> > > +		const struct intel_crtc_state *old_pipe_crtc_state =
> > > +			intel_atomic_get_old_crtc_state(state, pipe_crtc);
> > >
> > > -		intel_encoders_post_pll_disable(state, crtc);
> > > +		intel_disable_shared_dpll(old_pipe_crtc_state);
> > > +	}
> >
> > As per the sequence is considered, should the pll be disabled prior to disabling
> the encoders and then followed by post_pll_disable?
> 
> The correct disable order is:
> 1. encoder disable()
> 2. disable transcoder/etc. (nop for hsw+ as that stuff
>    has been sucked into the encoder hooks) 3. encoder post_disable() 4. pll
> disable 5. encoder post_pll_disable()
> 
> which we should be following here, thouh the diff is rather hard to read due to
> the indentation changes.
> 
Thanks for the clarification. I verified in the source code.

Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>

Thanks and Regards,
Arun R Murthy
--------------------
> --
> Ville Syrjälä
> Intel

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

end of thread, other threads:[~2024-04-03  4:32 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-29  1:12 [PATCH 00/22] drm/i915: Bigjoiner modeset sequence redesign and MST support Ville Syrjala
2024-03-29  1:12 ` [PATCH 01/22] drm/i915: Disable port sync when bigjoiner is used Ville Syrjala
2024-04-01  5:57   ` Kulkarni, Vandita
2024-03-29  1:12 ` [PATCH 02/22] drm/i915: Fix intel_modeset_pipe_config_late() for bigjoiner Ville Syrjala
2024-04-01  9:23   ` Kulkarni, Vandita
2024-03-29  1:12 ` [PATCH 03/22] drm/i915: Disable live M/N updates when using bigjoiner Ville Syrjala
2024-04-01 10:32   ` Murthy, Arun R
2024-03-29  1:12 ` [PATCH 04/22] drm/i915/vrr: Disable VRR " Ville Syrjala
2024-04-01 10:04   ` Kulkarni, Vandita
2024-03-29  1:12 ` [PATCH 05/22] drm/i915: Remove DRM_MODE_FLAG_DBLSCAN checks from .mode_valid() hooks Ville Syrjala
2024-04-01 11:25   ` Kulkarni, Vandita
2024-03-29  1:12 ` [PATCH 06/22] drm/i915: Shuffle DP .mode_valid() checks Ville Syrjala
2024-04-01 10:35   ` Kulkarni, Vandita
2024-03-29  1:12 ` [PATCH 07/22] drm/i915: Clean up glk_pipe_scaler_clock_gating_wa() Ville Syrjala
2024-04-01 11:08   ` Kulkarni, Vandita
2024-03-29  1:12 ` [PATCH 08/22] drm/i915: Extract glk_need_scaler_clock_gating_wa() Ville Syrjala
2024-04-01 11:09   ` Kulkarni, Vandita
2024-03-29  1:12 ` [PATCH 09/22] drm/i915: s/intel_dp_can_bigjoiner()/intel_dp_can_bigjoiner()/ Ville Syrjala
2024-04-01 10:01   ` Kulkarni, Vandita
2024-03-29  1:12 ` [PATCH 10/22] drm/i915: Extract intel_dp_joiner_needs_dsc() Ville Syrjala
2024-04-01  9:22   ` Shankar, Uma
2024-03-29  1:12 ` [PATCH 11/22] drm/i915/mst: Check intel_dp_joiner_needs_dsc() Ville Syrjala
2024-04-01  9:28   ` Shankar, Uma
2024-03-29  1:12 ` [PATCH 12/22] drm/i915: Pass connector to intel_dp_need_bigjoiner() Ville Syrjala
2024-04-01  9:39   ` Shankar, Uma
2024-03-29  1:12 ` [PATCH 13/22] drm/i915/mst: Limit MST+DSC to TGL+ Ville Syrjala
2024-04-01  9:44   ` Shankar, Uma
2024-03-29  1:12 ` [PATCH 14/22] drm/i915/mst: Reject FEC+MST on ICL Ville Syrjala
2024-04-01  9:45   ` Shankar, Uma
2024-03-29  1:12 ` [PATCH 15/22] drm/i915: Introduce intel_crtc_joined_pipe_mask() Ville Syrjala
2024-04-01 10:20   ` Murthy, Arun R
2024-03-29  1:12 ` [PATCH 16/22] drm/i915: Extract intel_ddi_post_disable_hdmi_or_sst() Ville Syrjala
2024-04-01 10:17   ` Murthy, Arun R
2024-03-29  1:12 ` [PATCH 17/22] drm/i915: Utilize intel_crtc_joined_pipe_mask() more Ville Syrjala
2024-04-01  6:52   ` Murthy, Arun R
2024-03-29  1:12 ` [PATCH 18/22] drm/i915: Handle joined pipes inside hsw_crtc_disable() Ville Syrjala
2024-04-01  6:46   ` Murthy, Arun R
2024-04-02 19:50     ` Ville Syrjälä
2024-04-03  4:32       ` Murthy, Arun R
2024-03-29  1:12 ` [PATCH 19/22] drm/i915: Handle joined pipes inside hsw_crtc_enable() Ville Syrjala
2024-03-29  1:12 ` [PATCH 20/22] drm/i915/mst: Add bigjoiner handling to MST modeset sequence Ville Syrjala
2024-04-01  6:33   ` Murthy, Arun R
2024-03-29  1:12 ` [PATCH 21/22] drm/i915: Allow bigjoiner for MST Ville Syrjala
2024-04-01  6:26   ` Murthy, Arun R
2024-03-29  1:12 ` [PATCH 22/22] drm/i915: Use debugfs_create_bool() for "i915_bigjoiner_force_enable" Ville Syrjala
2024-04-01  5:08   ` Murthy, Arun R
2024-04-02  7:37   ` Srinivas, Vidya
2024-03-29  6:36 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Bigjoiner modeset sequence redesign and MST support Patchwork
2024-03-29  6:36 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-03-29  6:49 ` ✓ Fi.CI.BAT: success " Patchwork
2024-03-30  6:58 ` ✗ Fi.CI.IGT: failure " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.