All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
@ 2019-09-22 17:08 Manasi Navare
  2019-09-22 17:08 ` [PATCH v3 2/6] drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports Manasi Navare
                   ` (14 more replies)
  0 siblings, 15 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-22 17:08 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter

In case of tiled displays when the two tiles are sent across two CRTCs
over two separate DP SST connectors, we need a mechanism to synchronize
the two CRTCs and their corresponding transcoders.
So use the master-slave mode where there is one master corresponding
to last horizontal and vertical tile that needs to be genlocked with
all other slave tiles.
This patch identifies saves the master transcoder in all the slave
CRTC states. This is needed to select the master CRTC/transcoder
while configuring transcoder port sync for the corresponding slaves.

v4:
* Rebase
v3:
* Use master_tramscoder instead of master_crtc for valid
HW state readouts (Ville)
v2:
* Move this to intel_mode_set_pipe_config(Jani N, Ville)
* Use slave_bitmask to save associated slaves in master crtc state (Ville)

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c  | 123 ++++++++++++++++++
 drivers/gpu/drm/i915/display/intel_display.h  |   3 +
 .../drm/i915/display/intel_display_types.h    |   6 +
 3 files changed, 132 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index c05ba6af6226..4ff375d5852d 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -521,6 +521,24 @@ needs_modeset(const struct intel_crtc_state *state)
 	return drm_atomic_crtc_needs_modeset(&state->base);
 }
 
+bool
+is_trans_port_sync_mode(struct drm_i915_private *dev_priv,
+			const struct intel_crtc_state *state)
+{
+	return (INTEL_GEN(dev_priv) >= 11 &&
+		(state->master_transcoder != INVALID_TRANSCODER ||
+		 state->sync_mode_slaves_mask));
+}
+
+static bool
+is_trans_port_sync_master(struct drm_i915_private *dev_priv,
+			  const struct intel_crtc_state *state)
+{
+	return (INTEL_GEN(dev_priv) >= 11 &&
+		(state->master_transcoder == INVALID_TRANSCODER &&
+		 state->sync_mode_slaves_mask));
+}
+
 /*
  * Platform specific helpers to calculate the port PLL loopback- (clock.m),
  * and post-divider (clock.p) values, pre- (clock.vco) and post-divided fast
@@ -11773,6 +11791,91 @@ static bool c8_planes_changed(const struct intel_crtc_state *new_crtc_state)
 	return !old_crtc_state->c8_planes != !new_crtc_state->c8_planes;
 }
 
+static int icl_add_sync_mode_crtcs(struct drm_crtc *crtc,
+				   struct intel_crtc_state *crtc_state,
+				   struct drm_atomic_state *state)
+{
+	struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
+	struct drm_connector *master_connector, *connector;
+	struct drm_connector_state *connector_state;
+	struct drm_connector_list_iter conn_iter;
+	struct drm_crtc *master_crtc = NULL;
+	struct drm_crtc_state *master_crtc_state;
+	struct intel_crtc_state *master_pipe_config;
+	int i, tile_group_id;
+
+	if (INTEL_GEN(dev_priv) < 11)
+		return 0;
+
+	/*
+	 * In case of tiled displays there could be one or more slaves but there is
+	 * only one master. Lets make the CRTC used by the connector corresponding
+	 * to the last horizonal and last vertical tile a master/genlock CRTC.
+	 * All the other CRTCs corresponding to other tiles of the same Tile group
+	 * are the slave CRTCs and hold a pointer to their genlock CRTC.
+	 */
+	for_each_new_connector_in_state(state, connector, connector_state, i) {
+		if (connector_state->crtc != crtc)
+			continue;
+		if (!connector->has_tile)
+			continue;
+		if (crtc_state->base.mode.hdisplay != connector->tile_h_size ||
+		    crtc_state->base.mode.vdisplay != connector->tile_v_size)
+			return 0;
+		if (connector->tile_h_loc == connector->num_h_tile - 1 &&
+		    connector->tile_v_loc == connector->num_v_tile - 1)
+			continue;
+		crtc_state->sync_mode_slaves_mask = 0;
+		tile_group_id = connector->tile_group->id;
+		drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
+		drm_for_each_connector_iter(master_connector, &conn_iter) {
+			struct drm_connector_state *master_conn_state = NULL;
+
+			if (!master_connector->has_tile)
+				continue;
+			if (master_connector->tile_h_loc != master_connector->num_h_tile - 1 ||
+			    master_connector->tile_v_loc != master_connector->num_v_tile - 1)
+				continue;
+			if (master_connector->tile_group->id != tile_group_id)
+				continue;
+
+			master_conn_state = drm_atomic_get_connector_state(state,
+									   master_connector);
+			if (IS_ERR(master_conn_state)) {
+				drm_connector_list_iter_end(&conn_iter);
+				return PTR_ERR(master_conn_state);
+			}
+			if (master_conn_state->crtc) {
+				master_crtc = master_conn_state->crtc;
+				break;
+			}
+		}
+		drm_connector_list_iter_end(&conn_iter);
+
+		if (!master_crtc) {
+			DRM_DEBUG_KMS("Could not find Master CRTC for Slave CRTC %d\n",
+				      connector_state->crtc->base.id);
+			return -EINVAL;
+		}
+
+		master_crtc_state = drm_atomic_get_crtc_state(state,
+							      master_crtc);
+		if (IS_ERR(master_crtc_state))
+			return PTR_ERR(master_crtc_state);
+
+		master_pipe_config = to_intel_crtc_state(master_crtc_state);
+		crtc_state->master_transcoder = master_pipe_config->cpu_transcoder;
+		master_pipe_config->sync_mode_slaves_mask |=
+			BIT(crtc_state->cpu_transcoder);
+		DRM_DEBUG_KMS("Master Transcoder = %s added for Slave CRTC = %d, slave transcoder bitmask = %d\n",
+			      transcoder_name(crtc_state->master_transcoder),
+			      crtc_state->base.crtc->base.id,
+			      master_pipe_config->sync_mode_slaves_mask);
+	}
+
+	return 0;
+}
+
 static int intel_crtc_atomic_check(struct drm_crtc *_crtc,
 				   struct drm_crtc_state *_crtc_state)
 {
@@ -12276,6 +12379,12 @@ clear_intel_crtc_state(struct intel_crtc_state *crtc_state)
 	if (IS_G4X(dev_priv) ||
 	    IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
 		saved_state->wm = crtc_state->wm;
+	/* Save the slave bitmask which gets filled for master crtc state during
+	 * slave atomic check call.
+	 */
+	if (is_trans_port_sync_master(dev_priv, crtc_state))
+		saved_state->sync_mode_slaves_mask =
+			crtc_state->sync_mode_slaves_mask;
 
 	/* Keep base drm_crtc_state intact, only clear our extended struct */
 	BUILD_BUG_ON(offsetof(struct intel_crtc_state, base));
@@ -12369,6 +12478,15 @@ intel_modeset_pipe_config(struct intel_crtc_state *pipe_config)
 	drm_mode_set_crtcinfo(&pipe_config->base.adjusted_mode,
 			      CRTC_STEREO_DOUBLE);
 
+	/* Set the crtc_state defaults for trans_port_sync */
+	pipe_config->master_transcoder = INVALID_TRANSCODER;
+	ret = icl_add_sync_mode_crtcs(crtc, pipe_config, state);
+	if (ret) {
+		DRM_DEBUG_KMS("Cannot assign Sync Mode CRTCs: %d\n",
+			      ret);
+		return ret;
+	}
+
 	/* Pass our mode to the connectors and the CRTC to give them a chance to
 	 * adjust it according to limitations or connector properties, and also
 	 * a chance to reject the mode entirely.
@@ -12882,6 +13000,11 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
 	PIPE_CONF_CHECK_INFOFRAME(hdmi);
 	PIPE_CONF_CHECK_INFOFRAME(drm);
 
+	if (INTEL_GEN(dev_priv) >= 11) {
+		PIPE_CONF_CHECK_I(sync_mode_slaves_mask);
+		PIPE_CONF_CHECK_I(master_transcoder);
+	}
+
 #undef PIPE_CONF_CHECK_X
 #undef PIPE_CONF_CHECK_I
 #undef PIPE_CONF_CHECK_BOOL
diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
index b1ae0e59c715..1623face436b 100644
--- a/drivers/gpu/drm/i915/display/intel_display.h
+++ b/drivers/gpu/drm/i915/display/intel_display.h
@@ -93,6 +93,7 @@ enum pipe {
 #define pipe_name(p) ((p) + 'A')
 
 enum transcoder {
+	INVALID_TRANSCODER = -1,
 	/*
 	 * The following transcoders have a 1:1 transcoder -> pipe mapping,
 	 * keep their values fixed: the code assumes that TRANSCODER_A=0, the
@@ -453,6 +454,8 @@ enum drm_mode_status
 intel_mode_valid_max_plane_size(struct drm_i915_private *dev_priv,
 				const struct drm_display_mode *mode);
 enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port);
+bool is_trans_port_sync_mode(struct drm_i915_private *i915,
+			     const struct intel_crtc_state *state);
 
 void intel_plane_destroy(struct drm_plane *plane);
 void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index d5cc4b810d9e..17ff34ca298b 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -991,6 +991,12 @@ struct intel_crtc_state {
 
 	/* Forward Error correction State */
 	bool fec_enable;
+
+	/* Pointer to master transcoder in case of tiled displays */
+	enum transcoder master_transcoder;
+
+	/* Bitmask to indicate slaves attached */
+	u8 sync_mode_slaves_mask;
 };
 
 struct intel_crtc {
-- 
2.19.1

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

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

* [PATCH v3 2/6] drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
@ 2019-09-22 17:08 ` Manasi Navare
  2019-09-30 14:19   ` Ville Syrjälä
  2019-09-22 17:08 ` [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config Manasi Navare
                   ` (13 subsequent siblings)
  14 siblings, 1 reply; 38+ messages in thread
From: Manasi Navare @ 2019-09-22 17:08 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Daniel Vetter

In case of tiled displays where different tiles are displayed across
different ports, we need to synchronize the transcoders involved.
This patch implements the transcoder port sync feature for
synchronizing one master transcoder with one or more slave
transcoders. This is only enbaled in slave transcoder
and the master transcoder is unaware that it is operating
in this mode.
This has been tested with tiled display connected to ICL.

v5:
* Add TRANSCODER_D case and MISSING_CASE (Maarten)
v4:
Rebase
v3:
* Check of DP_MST moved to atomic_check (Maarten)
v2:
* Do not use RMW, just write to the register in commit (Jani N)

Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 46 ++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 4ff375d5852d..1ae5eafe2892 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -4426,6 +4426,49 @@ static void icl_set_pipe_chicken(struct intel_crtc *crtc)
 	I915_WRITE(PIPE_CHICKEN(pipe), tmp);
 }
 
+static void icl_enable_trans_port_sync(const struct intel_crtc_state *crtc_state)
+{
+	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
+	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
+	u32 trans_ddi_func_ctl2_val;
+	u8 master_select;
+
+	/*
+	 * Configure the master select and enable Transcoder Port Sync for
+	 * Slave CRTCs transcoder.
+	 */
+	if (crtc_state->master_transcoder == INVALID_TRANSCODER)
+		return;
+
+	switch (crtc_state->master_transcoder) {
+	case TRANSCODER_A:
+		master_select = 1;
+		break;
+	case TRANSCODER_B:
+		master_select = 2;
+		break;
+	case TRANSCODER_C:
+		master_select = 3;
+		break;
+	case TRANSCODER_D:
+		master_select = 4;
+		break;
+	case TRANSCODER_EDP:
+	default:
+		MISSING_CASE(crtc_state->master_transcoder);
+		master_select = 0;
+	}
+	/* Set the master select bits for Tranascoder Port Sync */
+	trans_ddi_func_ctl2_val = (PORT_SYNC_MODE_MASTER_SELECT(master_select) &
+				   PORT_SYNC_MODE_MASTER_SELECT_MASK) <<
+		PORT_SYNC_MODE_MASTER_SELECT_SHIFT;
+	/* Enable Transcoder Port Sync */
+	trans_ddi_func_ctl2_val |= PORT_SYNC_MODE_ENABLE;
+
+	I915_WRITE(TRANS_DDI_FUNC_CTL2(crtc_state->cpu_transcoder),
+		   trans_ddi_func_ctl2_val);
+}
+
 static void intel_update_pipe_config(const struct intel_crtc_state *old_crtc_state,
 				     const struct intel_crtc_state *new_crtc_state)
 {
@@ -6494,6 +6537,9 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config,
 	if (!transcoder_is_dsi(cpu_transcoder))
 		intel_set_pipe_timings(pipe_config);
 
+	if (INTEL_GEN(dev_priv) >= 11)
+		icl_enable_trans_port_sync(pipe_config);
+
 	intel_set_pipe_src_size(pipe_config);
 
 	if (cpu_transcoder != TRANSCODER_EDP &&
-- 
2.19.1

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

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

* [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
  2019-09-22 17:08 ` [PATCH v3 2/6] drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports Manasi Navare
@ 2019-09-22 17:08 ` Manasi Navare
  2019-09-23  4:43   ` Manasi Navare
                     ` (2 more replies)
  2019-09-22 17:08 ` [PATCH v3 4/6] drm/i915/display/icl: Enable master-slaves in trans port sync Manasi Navare
                   ` (12 subsequent siblings)
  14 siblings, 3 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-22 17:08 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

After the state is committed, we readout the HW registers and compare
the HW state with the SW state that we just committed.
For Transcdoer port sync, we add master_transcoder and the
salves bitmask to the crtc_state, hence we need to read those during
the HW state readout to avoid pipe state mismatch.

v4:
* Get power domains in master loop for get_config (Ville)
v3:
* Add TRANSCODER_D (Maarten)
* v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
v2:
* Add Transcoder_D and MISSING_CASE (Maarten)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 1ae5eafe2892..711987eb4e9e 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -10470,6 +10470,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
 	}
 }
 
+static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
+					 enum transcoder cpu_transcoder)
+{
+	u32 trans_port_sync, master_select;
+
+	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
+
+	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
+		return INVALID_TRANSCODER;
+
+	master_select = trans_port_sync &
+			PORT_SYNC_MODE_MASTER_SELECT_MASK;
+	switch (master_select) {
+	case 1:
+		return TRANSCODER_A;
+	case 2:
+		return TRANSCODER_B;
+	case 3:
+		return TRANSCODER_C;
+	case 4:
+		return TRANSCODER_D;
+	default:
+		MISSING_CASE(master_select);
+	}
+
+	return INVALID_TRANSCODER;
+}
+
+static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
+					       struct intel_crtc_state *pipe_config)
+{
+	struct drm_device *dev = crtc->base.dev;
+	struct drm_i915_private *dev_priv = to_i915(dev);
+	u32 transcoders;
+	enum transcoder cpu_transcoder;
+
+	pipe_config->master_transcoder = transcoder_master(dev_priv,
+							   pipe_config->cpu_transcoder);
+	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
+		pipe_config->sync_mode_slaves_mask = 0;
+		return;
+	}
+
+	transcoders = BIT(TRANSCODER_A) |
+		BIT(TRANSCODER_B) |
+		BIT(TRANSCODER_C) |
+		BIT(TRANSCODER_D);
+	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
+		enum intel_display_power_domain power_domain;
+		intel_wakeref_t trans_wakeref;
+
+		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
+		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
+								   power_domain);
+
+		if (!trans_wakeref)
+			continue;
+
+		if (transcoder_master(dev_priv, cpu_transcoder) ==
+		    pipe_config->cpu_transcoder)
+			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
+
+		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
+	}
+}
+
 static bool haswell_get_pipe_config(struct intel_crtc *crtc,
 				    struct intel_crtc_state *pipe_config)
 {
@@ -10566,6 +10632,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
 		pipe_config->pixel_multiplier = 1;
 	}
 
+	if (INTEL_GEN(dev_priv) >= 11)
+		icelake_get_trans_port_sync_config(crtc, pipe_config);
+
 out:
 	for_each_power_domain(power_domain, power_domain_mask)
 		intel_display_power_put(dev_priv,
-- 
2.19.1

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

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

* [PATCH v3 4/6] drm/i915/display/icl: Enable master-slaves in trans port sync
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
  2019-09-22 17:08 ` [PATCH v3 2/6] drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports Manasi Navare
  2019-09-22 17:08 ` [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config Manasi Navare
@ 2019-09-22 17:08 ` Manasi Navare
  2019-09-30 15:28   ` Ville Syrjälä
  2019-09-22 17:08 ` [PATCH v3 5/6] drm/i915/display/icl: Disable transcoder port sync as part of crtc_disable() sequence Manasi Navare
                   ` (11 subsequent siblings)
  14 siblings, 1 reply; 38+ messages in thread
From: Manasi Navare @ 2019-09-22 17:08 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter

As per the display enable sequence, we need to follow the enable sequence
for slaves first with DP_TP_CTL set to Idle and configure the transcoder
port sync register to select the corersponding master, then follow the
enable sequence for master leaving DP_TP_CTL to idle.
At this point the transcoder port sync mode is configured and enabled
and the Vblanks of both ports are synchronized so then set DP_TP_CTL
for the slave and master to Normal and do post crtc enable updates.

v6:
* Modeset implies active_changed, remove one condition (Maarten)
v5:
* Fix checkpatch warning (Manasi)
v4:
* Reuse skl_commit_modeset_enables() hook (Maarten)
* Obtain slave crtc and states from master (Maarten)
v3:
* Rebase on drm-tip (Manasi)
v2:
* Create a icl_update_crtcs hook (Maarten, Danvet)
* This sequence only for CRTCs in trans port sync mode (Maarten)

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c     |   3 +-
 drivers/gpu/drm/i915/display/intel_display.c | 141 ++++++++++++++++++-
 drivers/gpu/drm/i915/display/intel_display.h |   2 +
 3 files changed, 142 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 3e6394139964..62e9f5602b6b 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3347,7 +3347,8 @@ static void hsw_ddi_pre_enable_dp(struct intel_encoder *encoder,
 					      true);
 	intel_dp_sink_set_fec_ready(intel_dp, crtc_state);
 	intel_dp_start_link_train(intel_dp);
-	if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
+	if ((port != PORT_A || INTEL_GEN(dev_priv) >= 9) &&
+	    !is_trans_port_sync_mode(dev_priv, crtc_state))
 		intel_dp_stop_link_train(intel_dp);
 
 	intel_ddi_enable_fec(encoder, crtc_state);
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 711987eb4e9e..10425a789b5e 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -13928,6 +13928,30 @@ static void intel_update_crtc(struct intel_crtc *crtc,
 	intel_finish_crtc_commit(state, crtc);
 }
 
+static struct intel_crtc *intel_get_slave_crtc(struct drm_i915_private *dev_priv,
+					       struct intel_crtc_state *new_crtc_state)
+{
+	if (new_crtc_state->sync_mode_slaves_mask &
+	    BIT(TRANSCODER_A))
+		return intel_get_crtc_for_pipe(dev_priv,
+					       PIPE_A);
+	else if (new_crtc_state->sync_mode_slaves_mask &
+		 BIT(TRANSCODER_B))
+		return intel_get_crtc_for_pipe(dev_priv,
+					       PIPE_B);
+	else if (new_crtc_state->sync_mode_slaves_mask &
+		 BIT(TRANSCODER_C))
+		return intel_get_crtc_for_pipe(dev_priv,
+					       PIPE_C);
+	else if (new_crtc_state->sync_mode_slaves_mask &
+		 BIT(TRANSCODER_D))
+		return intel_get_crtc_for_pipe(dev_priv,
+					       PIPE_D);
+	/* should never happen */
+	WARN_ON(1);
+	return NULL;
+}
+
 static void intel_old_crtc_state_disables(struct intel_atomic_state *state,
 					  struct intel_crtc_state *old_crtc_state,
 					  struct intel_crtc_state *new_crtc_state,
@@ -14006,6 +14030,104 @@ static void intel_commit_modeset_enables(struct intel_atomic_state *state)
 	}
 }
 
+static void intel_crtc_enable_trans_port_sync(struct intel_crtc *crtc,
+					      struct intel_atomic_state *state,
+					      struct intel_crtc_state *new_crtc_state)
+{
+	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
+
+	update_scanline_offset(new_crtc_state);
+	dev_priv->display.crtc_enable(new_crtc_state, state);
+	intel_crtc_enable_pipe_crc(crtc);
+}
+
+static void intel_set_dp_tp_ctl_normal(struct intel_crtc *crtc,
+				       struct intel_atomic_state *state)
+{
+	struct drm_connector_state *conn_state;
+	struct drm_connector *conn;
+	struct intel_dp *intel_dp;
+	int i;
+
+	for_each_new_connector_in_state(&state->base, conn, conn_state, i) {
+		if (conn_state->crtc == &crtc->base)
+			break;
+	}
+	intel_dp = enc_to_intel_dp(&intel_attached_encoder(conn)->base);
+	intel_dp_stop_link_train(intel_dp);
+}
+
+static void intel_post_crtc_enable_updates(struct intel_crtc *crtc,
+					   struct intel_atomic_state *state,
+					   struct intel_crtc_state *old_crtc_state,
+					   struct intel_crtc_state *new_crtc_state)
+{
+	struct intel_plane_state *new_plane_state =
+		intel_atomic_get_new_plane_state(state,
+						 to_intel_plane(crtc->base.primary));
+
+	if (new_crtc_state->update_pipe && !new_crtc_state->enable_fbc)
+		intel_fbc_disable(crtc);
+	else if (new_plane_state)
+		intel_fbc_enable(crtc, new_crtc_state, new_plane_state);
+
+	intel_begin_crtc_commit(state, crtc);
+	skl_update_planes_on_crtc(state, crtc);
+	intel_finish_crtc_commit(state, crtc);
+}
+
+static void intel_update_trans_port_sync_crtcs(struct intel_crtc *crtc,
+					       struct intel_atomic_state *state,
+					       struct intel_crtc_state *old_crtc_state,
+					       struct intel_crtc_state *new_crtc_state)
+{
+	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
+	struct intel_crtc *slave_crtc = intel_get_slave_crtc(dev_priv,
+							     new_crtc_state);
+	struct intel_crtc_state *new_slave_crtc_state =
+		intel_atomic_get_new_crtc_state(state, slave_crtc);
+	struct intel_crtc_state *old_slave_crtc_state =
+		intel_atomic_get_old_crtc_state(state, slave_crtc);
+
+	WARN_ON(!slave_crtc || !new_slave_crtc_state ||
+		!old_slave_crtc_state);
+
+	DRM_DEBUG_KMS("Updating Transcoder Port Sync Master CRTC = %d %s and Slave CRTC %d %s\n",
+		      crtc->base.base.id, crtc->base.name, slave_crtc->base.base.id,
+		      slave_crtc->base.name);
+
+	/* Enable seq for slave with with DP_TP_CTL left Idle until the
+	 * master is ready
+	 */
+	intel_crtc_enable_trans_port_sync(slave_crtc,
+					  state,
+					  new_slave_crtc_state);
+
+	/* Enable seq for master with with DP_TP_CTL left Idle */
+	intel_crtc_enable_trans_port_sync(crtc,
+					  state,
+					  new_crtc_state);
+
+	/* Set Slave's DP_TP_CTL to Normal */
+	intel_set_dp_tp_ctl_normal(slave_crtc,
+				   state);
+
+	/* Set Master's DP_TP_CTL To Normal */
+	usleep_range(200, 400);
+	intel_set_dp_tp_ctl_normal(crtc,
+				   state);
+
+	/* Now do the post crtc enable for all master and slaves */
+	intel_post_crtc_enable_updates(slave_crtc,
+				       state,
+				       new_slave_crtc_state,
+				       old_slave_crtc_state);
+	intel_post_crtc_enable_updates(crtc,
+				       state,
+				       new_crtc_state,
+				       old_crtc_state);
+}
+
 static void skl_commit_modeset_enables(struct intel_atomic_state *state)
 {
 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
@@ -14040,6 +14162,7 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state)
 		for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
 			bool vbl_wait = false;
 			unsigned int cmask = drm_crtc_mask(&crtc->base);
+			bool modeset = needs_modeset(new_crtc_state);
 
 			pipe = crtc->pipe;
 
@@ -14062,12 +14185,24 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state)
 			 */
 			if (!skl_ddb_entry_equal(&new_crtc_state->wm.skl.ddb,
 						 &old_crtc_state->wm.skl.ddb) &&
-			    !new_crtc_state->base.active_changed &&
+			    !modeset &&
 			    state->wm_results.dirty_pipes != updated)
 				vbl_wait = true;
 
-			intel_update_crtc(crtc, state, old_crtc_state,
-					  new_crtc_state);
+			if (modeset && is_trans_port_sync_mode(dev_priv,
+							       new_crtc_state)) {
+				if (is_trans_port_sync_master(dev_priv,
+							      new_crtc_state))
+					intel_update_trans_port_sync_crtcs(crtc,
+									   state,
+									   old_crtc_state,
+									   new_crtc_state);
+				else
+					continue;
+			} else {
+				intel_update_crtc(crtc, state, old_crtc_state,
+						  new_crtc_state);
+			}
 
 			if (vbl_wait)
 				intel_wait_for_vblank(dev_priv, pipe);
diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
index 1623face436b..efa4d62514ce 100644
--- a/drivers/gpu/drm/i915/display/intel_display.h
+++ b/drivers/gpu/drm/i915/display/intel_display.h
@@ -27,6 +27,7 @@
 
 #include <drm/drm_util.h>
 #include <drm/i915_drm.h>
+#include "intel_dp_link_training.h"
 
 enum link_m_n_set;
 struct dpll;
@@ -54,6 +55,7 @@ struct intel_plane;
 struct intel_plane_state;
 struct intel_remapped_info;
 struct intel_rotation_info;
+struct intel_crtc_state;
 
 enum i915_gpio {
 	GPIOA,
-- 
2.19.1

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

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

* [PATCH v3 5/6] drm/i915/display/icl: Disable transcoder port sync as part of crtc_disable() sequence
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (2 preceding siblings ...)
  2019-09-22 17:08 ` [PATCH v3 4/6] drm/i915/display/icl: Enable master-slaves in trans port sync Manasi Navare
@ 2019-09-22 17:08 ` Manasi Navare
  2019-09-22 17:08 ` [PATCH v3 6/6] drm/i915/display/icl: In port sync mode disable slaves first then master Manasi Navare
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-22 17:08 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

This clears the transcoder port sync bits of the TRANS_DDI_FUNC_CTL2
register during crtc_disable().

v2:
* Directly write the trans_port_sync reg value (Maarten)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 22 ++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 10425a789b5e..af932054b5f4 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -4469,6 +4469,25 @@ static void icl_enable_trans_port_sync(const struct intel_crtc_state *crtc_state
 		   trans_ddi_func_ctl2_val);
 }
 
+static void icl_disable_transcoder_port_sync(const struct intel_crtc_state *old_crtc_state)
+{
+	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc);
+	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
+	i915_reg_t reg;
+	u32 trans_ddi_func_ctl2_val;
+
+	if (old_crtc_state->master_transcoder == INVALID_TRANSCODER)
+		return;
+
+	DRM_DEBUG_KMS("Disabling Transcoder Port Sync on Slave Transcoder %s\n",
+		      transcoder_name(old_crtc_state->cpu_transcoder));
+
+	reg = TRANS_DDI_FUNC_CTL2(old_crtc_state->cpu_transcoder);
+	trans_ddi_func_ctl2_val = ~(PORT_SYNC_MODE_ENABLE |
+				    PORT_SYNC_MODE_MASTER_SELECT_MASK);
+	I915_WRITE(reg, trans_ddi_func_ctl2_val);
+}
+
 static void intel_update_pipe_config(const struct intel_crtc_state *old_crtc_state,
 				     const struct intel_crtc_state *new_crtc_state)
 {
@@ -6718,6 +6737,9 @@ static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state,
 	if (intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
 		intel_ddi_set_vc_payload_alloc(old_crtc_state, false);
 
+	if (INTEL_GEN(dev_priv) >= 11)
+		icl_disable_transcoder_port_sync(old_crtc_state);
+
 	if (!transcoder_is_dsi(cpu_transcoder))
 		intel_ddi_disable_transcoder_func(old_crtc_state);
 
-- 
2.19.1

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

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

* [PATCH v3 6/6] drm/i915/display/icl: In port sync mode disable slaves first then master
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (3 preceding siblings ...)
  2019-09-22 17:08 ` [PATCH v3 5/6] drm/i915/display/icl: Disable transcoder port sync as part of crtc_disable() sequence Manasi Navare
@ 2019-09-22 17:08 ` Manasi Navare
  2019-09-22 17:39 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Patchwork
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-22 17:08 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

In the transcoder port sync mode, the slave transcoders mask their vblanks
until master transcoder's vblank so while disabling them, make
sure slaves are disabled first and then the masters.

v4:
* Obtain slave state from master (Maarten)
v3:
* Rebase
v2:
* Use the intel_old_crtc_state_disables() helper

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 62 ++++++++++++++++++--
 1 file changed, 56 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index af932054b5f4..1b2164bf0384 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -14009,8 +14009,42 @@ static void intel_old_crtc_state_disables(struct intel_atomic_state *state,
 						     new_crtc_state);
 }
 
+static void intel_trans_port_sync_modeset_disables(struct intel_atomic_state *state,
+						   struct intel_crtc *crtc,
+						   struct intel_crtc_state *old_crtc_state,
+						   struct intel_crtc_state *new_crtc_state)
+{
+	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
+	struct intel_crtc *slave_crtc = intel_get_slave_crtc(dev_priv,
+							     new_crtc_state);
+	struct intel_crtc_state *new_slave_crtc_state =
+		intel_atomic_get_new_crtc_state(state, slave_crtc);
+	struct intel_crtc_state *old_slave_crtc_state =
+		intel_atomic_get_old_crtc_state(state, slave_crtc);
+
+	WARN_ON(!slave_crtc || !new_slave_crtc_state ||
+		!old_slave_crtc_state);
+
+	/* Disable Slave first */
+	intel_pre_plane_update(old_slave_crtc_state, new_slave_crtc_state);
+	if (old_slave_crtc_state->base.active)
+		intel_old_crtc_state_disables(state,
+					      old_slave_crtc_state,
+					      new_slave_crtc_state,
+					      slave_crtc);
+
+	/* Disable Master */
+	intel_pre_plane_update(old_crtc_state, new_crtc_state);
+	if (old_crtc_state->base.active)
+		intel_old_crtc_state_disables(state,
+					      old_crtc_state,
+					      new_crtc_state,
+					      crtc);
+}
+
 static void intel_commit_modeset_disables(struct intel_atomic_state *state)
 {
+	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
 	struct intel_crtc_state *new_crtc_state, *old_crtc_state;
 	struct intel_crtc *crtc;
 	int i;
@@ -14027,13 +14061,29 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state)
 		if (!needs_modeset(new_crtc_state))
 			continue;
 
-		intel_pre_plane_update(old_crtc_state, new_crtc_state);
+		/* 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_mode(dev_priv, new_crtc_state)) {
+			if (is_trans_port_sync_master(dev_priv,
+						      new_crtc_state))
+				intel_trans_port_sync_modeset_disables(state,
+								       crtc,
+								       old_crtc_state,
+								       new_crtc_state);
+			else
+				continue;
+		} else {
+			intel_pre_plane_update(old_crtc_state, new_crtc_state);
 
-		if (old_crtc_state->base.active)
-			intel_old_crtc_state_disables(state,
-						      old_crtc_state,
-						      new_crtc_state,
-						      crtc);
+			if (old_crtc_state->base.active)
+				intel_old_crtc_state_disables(state,
+							      old_crtc_state,
+							      new_crtc_state,
+							      crtc);
+		}
 	}
 }
 
-- 
2.19.1

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

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

* ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (4 preceding siblings ...)
  2019-09-22 17:08 ` [PATCH v3 6/6] drm/i915/display/icl: In port sync mode disable slaves first then master Manasi Navare
@ 2019-09-22 17:39 ` Patchwork
  2019-09-23  8:29 ` ✓ Fi.CI.IGT: " Patchwork
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2019-09-22 17:39 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
URL   : https://patchwork.freedesktop.org/series/67043/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6935 -> Patchwork_14490
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_create@basic-files:
    - fi-cml-u2:          [PASS][1] -> [INCOMPLETE][2] ([fdo#110566])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/fi-cml-u2/igt@gem_ctx_create@basic-files.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/fi-cml-u2/igt@gem_ctx_create@basic-files.html

  * igt@gem_ctx_switch@rcs0:
    - fi-icl-u2:          [PASS][3] -> [INCOMPLETE][4] ([fdo#107713])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/fi-icl-u2/igt@gem_ctx_switch@rcs0.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/fi-icl-u2/igt@gem_ctx_switch@rcs0.html

  * igt@kms_chamelium@hdmi-hpd-fast:
    - fi-kbl-7500u:       [PASS][5] -> [FAIL][6] ([fdo#111407])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html

  
#### Possible fixes ####

  * igt@gem_ctx_switch@rcs0:
    - {fi-icl-guc}:       [INCOMPLETE][7] ([fdo#107713]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/fi-icl-guc/igt@gem_ctx_switch@rcs0.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/fi-icl-guc/igt@gem_ctx_switch@rcs0.html

  * igt@kms_frontbuffer_tracking@basic:
    - {fi-icl-u4}:        [FAIL][9] ([fdo#103167]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/fi-icl-u4/igt@kms_frontbuffer_tracking@basic.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/fi-icl-u4/igt@kms_frontbuffer_tracking@basic.html

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

  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#110566]: https://bugs.freedesktop.org/show_bug.cgi?id=110566
  [fdo#111407]: https://bugs.freedesktop.org/show_bug.cgi?id=111407


Participating hosts (55 -> 45)
------------------------------

  Missing    (10): fi-ilk-m540 fi-cml-s fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-apl-guc fi-icl-u3 fi-icl-y fi-byt-clapper fi-bdw-samus 


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6935 -> Patchwork_14490

  CI-20190529: 20190529
  CI_DRM_6935: fd159a931308ad279c27e138e1724265e04326dd @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5196: 98783313b8b3097680df69007a9551c6248ab209 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14490: 3b27c24493e3715474b8c985831fa44bce7963cd @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

3b27c24493e3 drm/i915/display/icl: In port sync mode disable slaves first then master
632350dc4881 drm/i915/display/icl: Disable transcoder port sync as part of crtc_disable() sequence
f25822eb06e6 drm/i915/display/icl: Enable master-slaves in trans port sync
c0439393cdee drm/i915/display/icl: HW state readout for transcoder port sync config
d3a8f7ff28b5 drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports
4c41fa2eb07a drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync

== Logs ==

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

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

* Re: [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-22 17:08 ` [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config Manasi Navare
@ 2019-09-23  4:43   ` Manasi Navare
  2019-09-24 15:38   ` Maarten Lankhorst
  2019-09-24 19:50   ` [PATCH v4] " Manasi Navare
  2 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-23  4:43 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

Hi Ville,

This gave me clean CI results with adding the power well get/put like you suggested,
could you please review this patch?

Regards
Manasi


On Sun, Sep 22, 2019 at 10:08:04AM -0700, Manasi Navare wrote:
> After the state is committed, we readout the HW registers and compare
> the HW state with the SW state that we just committed.
> For Transcdoer port sync, we add master_transcoder and the
> salves bitmask to the crtc_state, hence we need to read those during
> the HW state readout to avoid pipe state mismatch.
> 
> v4:
> * Get power domains in master loop for get_config (Ville)
> v3:
> * Add TRANSCODER_D (Maarten)
> * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> v2:
> * Add Transcoder_D and MISSING_CASE (Maarten)
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
>  1 file changed, 69 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 1ae5eafe2892..711987eb4e9e 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -10470,6 +10470,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
>  	}
>  }
>  
> +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> +					 enum transcoder cpu_transcoder)
> +{
> +	u32 trans_port_sync, master_select;
> +
> +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> +
> +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> +		return INVALID_TRANSCODER;
> +
> +	master_select = trans_port_sync &
> +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> +	switch (master_select) {
> +	case 1:
> +		return TRANSCODER_A;
> +	case 2:
> +		return TRANSCODER_B;
> +	case 3:
> +		return TRANSCODER_C;
> +	case 4:
> +		return TRANSCODER_D;
> +	default:
> +		MISSING_CASE(master_select);
> +	}
> +
> +	return INVALID_TRANSCODER;
> +}
> +
> +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> +					       struct intel_crtc_state *pipe_config)
> +{
> +	struct drm_device *dev = crtc->base.dev;
> +	struct drm_i915_private *dev_priv = to_i915(dev);
> +	u32 transcoders;
> +	enum transcoder cpu_transcoder;
> +
> +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> +							   pipe_config->cpu_transcoder);
> +	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
> +		pipe_config->sync_mode_slaves_mask = 0;
> +		return;
> +	}
> +
> +	transcoders = BIT(TRANSCODER_A) |
> +		BIT(TRANSCODER_B) |
> +		BIT(TRANSCODER_C) |
> +		BIT(TRANSCODER_D);
> +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> +		enum intel_display_power_domain power_domain;
> +		intel_wakeref_t trans_wakeref;
> +
> +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> +								   power_domain);
> +
> +		if (!trans_wakeref)
> +			continue;
> +
> +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> +		    pipe_config->cpu_transcoder)
> +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> +
> +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> +	}
> +}
> +
>  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
>  				    struct intel_crtc_state *pipe_config)
>  {
> @@ -10566,6 +10632,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
>  		pipe_config->pixel_multiplier = 1;
>  	}
>  
> +	if (INTEL_GEN(dev_priv) >= 11)
> +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> +
>  out:
>  	for_each_power_domain(power_domain, power_domain_mask)
>  		intel_display_power_put(dev_priv,
> -- 
> 2.19.1
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.IGT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (5 preceding siblings ...)
  2019-09-22 17:39 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Patchwork
@ 2019-09-23  8:29 ` Patchwork
  2019-09-24 21:17 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev2) Patchwork
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2019-09-23  8:29 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
URL   : https://patchwork.freedesktop.org/series/67043/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6935_full -> Patchwork_14490_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

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

### IGT changes ###

#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * {igt@i915_pm_dc@dc6-psr}:
    - shard-iclb:         [PASS][1] -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb4/igt@i915_pm_dc@dc6-psr.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb4/igt@i915_pm_dc@dc6-psr.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_eio@unwedge-stress:
    - shard-glk:          [PASS][3] -> [FAIL][4] ([fdo#109661])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-glk2/igt@gem_eio@unwedge-stress.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-glk6/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_schedule@deep-bsd:
    - shard-iclb:         [PASS][5] -> [SKIP][6] ([fdo#111325]) +1 similar issue
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb3/igt@gem_exec_schedule@deep-bsd.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb1/igt@gem_exec_schedule@deep-bsd.html

  * igt@gem_exec_schedule@preempt-queue-bsd2:
    - shard-iclb:         [PASS][7] -> [SKIP][8] ([fdo#109276]) +7 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb2/igt@gem_exec_schedule@preempt-queue-bsd2.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb6/igt@gem_exec_schedule@preempt-queue-bsd2.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-apl:          [PASS][9] -> [DMESG-WARN][10] ([fdo#108566]) +3 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-apl6/igt@i915_suspend@fence-restore-tiled2untiled.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-apl6/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-glk:          [PASS][11] -> [FAIL][12] ([fdo#105363])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-glk2/igt@kms_flip@flip-vs-expired-vblank.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-glk7/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-skl:          [PASS][13] -> [FAIL][14] ([fdo#105363])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-skl2/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-skl10/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@modeset-vs-vblank-race:
    - shard-glk:          [PASS][15] -> [FAIL][16] ([fdo#111609])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-glk4/igt@kms_flip@modeset-vs-vblank-race.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-glk3/igt@kms_flip@modeset-vs-vblank-race.html

  * igt@kms_frontbuffer_tracking@fbc-1p-indfb-fliptrack:
    - shard-iclb:         [PASS][17] -> [INCOMPLETE][18] ([fdo#107713])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb3/igt@kms_frontbuffer_tracking@fbc-1p-indfb-fliptrack.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb4/igt@kms_frontbuffer_tracking@fbc-1p-indfb-fliptrack.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move:
    - shard-iclb:         [PASS][19] -> [FAIL][20] ([fdo#103167]) +1 similar issue
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move.html

  * igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:
    - shard-skl:          [PASS][21] -> [FAIL][22] ([fdo#108145] / [fdo#110403])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-skl9/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-skl7/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html

  * igt@kms_plane_lowres@pipe-a-tiling-y:
    - shard-iclb:         [PASS][23] -> [FAIL][24] ([fdo#103166])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb1/igt@kms_plane_lowres@pipe-a-tiling-y.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb4/igt@kms_plane_lowres@pipe-a-tiling-y.html

  * igt@kms_psr@psr2_primary_page_flip:
    - shard-iclb:         [PASS][25] -> [SKIP][26] ([fdo#109441]) +1 similar issue
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb2/igt@kms_psr@psr2_primary_page_flip.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb6/igt@kms_psr@psr2_primary_page_flip.html

  
#### Possible fixes ####

  * igt@gem_eio@in-flight-suspend:
    - shard-skl:          [INCOMPLETE][27] ([fdo#104108]) -> [PASS][28] +1 similar issue
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-skl5/igt@gem_eio@in-flight-suspend.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-skl10/igt@gem_eio@in-flight-suspend.html

  * igt@gem_eio@unwedge-stress:
    - shard-skl:          [DMESG-WARN][29] -> [PASS][30]
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-skl7/igt@gem_eio@unwedge-stress.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-skl4/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@smoke:
    - shard-iclb:         [SKIP][31] ([fdo#110854]) -> [PASS][32]
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb8/igt@gem_exec_balancer@smoke.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb2/igt@gem_exec_balancer@smoke.html

  * igt@gem_exec_schedule@in-order-bsd:
    - shard-iclb:         [SKIP][33] ([fdo#111325]) -> [PASS][34] +3 similar issues
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb4/igt@gem_exec_schedule@in-order-bsd.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb5/igt@gem_exec_schedule@in-order-bsd.html

  * igt@kms_cursor_crc@pipe-c-cursor-suspend:
    - shard-apl:          [DMESG-WARN][35] ([fdo#108566]) -> [PASS][36] +5 similar issues
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-apl7/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-apl1/igt@kms_cursor_crc@pipe-c-cursor-suspend.html

  * igt@kms_cursor_legacy@cursor-vs-flip-toggle:
    - shard-hsw:          [FAIL][37] ([fdo#103355]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-hsw1/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-hsw5/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html

  * igt@kms_cursor_legacy@pipe-a-forked-move:
    - shard-apl:          [INCOMPLETE][39] ([fdo#103927]) -> [PASS][40] +3 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-apl6/igt@kms_cursor_legacy@pipe-a-forked-move.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-apl7/igt@kms_cursor_legacy@pipe-a-forked-move.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt:
    - shard-iclb:         [FAIL][41] ([fdo#103167]) -> [PASS][42] +6 similar issues
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
    - shard-kbl:          [DMESG-WARN][43] ([fdo#108566]) -> [PASS][44] +1 similar issue
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-kbl1/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-kbl1/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c.html

  * igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min:
    - shard-skl:          [FAIL][45] ([fdo#108145]) -> [PASS][46]
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-skl4/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-skl1/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min.html

  * igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
    - shard-skl:          [FAIL][47] ([fdo#108145] / [fdo#110403]) -> [PASS][48]
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-skl5/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-skl8/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html

  * igt@kms_psr@psr2_cursor_render:
    - shard-iclb:         [SKIP][49] ([fdo#109441]) -> [PASS][50] +1 similar issue
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb3/igt@kms_psr@psr2_cursor_render.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb2/igt@kms_psr@psr2_cursor_render.html

  * igt@kms_setmode@basic:
    - shard-apl:          [FAIL][51] ([fdo#99912]) -> [PASS][52]
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-apl6/igt@kms_setmode@basic.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-apl6/igt@kms_setmode@basic.html

  * igt@perf@polling:
    - shard-skl:          [FAIL][53] ([fdo#110728]) -> [PASS][54]
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-skl4/igt@perf@polling.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-skl4/igt@perf@polling.html

  * igt@prime_vgem@fence-wait-bsd2:
    - shard-iclb:         [SKIP][55] ([fdo#109276]) -> [PASS][56] +4 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb3/igt@prime_vgem@fence-wait-bsd2.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb2/igt@prime_vgem@fence-wait-bsd2.html

  
#### Warnings ####

  * igt@gem_ctx_isolation@vcs1-nonpriv:
    - shard-iclb:         [FAIL][57] ([fdo#111329]) -> [SKIP][58] ([fdo#109276])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb4/igt@gem_ctx_isolation@vcs1-nonpriv.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb5/igt@gem_ctx_isolation@vcs1-nonpriv.html

  * igt@gem_mocs_settings@mocs-isolation-bsd2:
    - shard-iclb:         [FAIL][59] ([fdo#111330]) -> [SKIP][60] ([fdo#109276])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6935/shard-iclb2/igt@gem_mocs_settings@mocs-isolation-bsd2.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14490/shard-iclb6/igt@gem_mocs_settings@mocs-isolation-bsd2.html

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

  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103355]: https://bugs.freedesktop.org/show_bug.cgi?id=103355
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109661]: https://bugs.freedesktop.org/show_bug.cgi?id=109661
  [fdo#110403]: https://bugs.freedesktop.org/show_bug.cgi?id=110403
  [fdo#110728]: https://bugs.freedesktop.org/show_bug.cgi?id=110728
  [fdo#110854]: https://bugs.freedesktop.org/show_bug.cgi?id=110854
  [fdo#111325]: https://bugs.freedesktop.org/show_bug.cgi?id=111325
  [fdo#111329]: https://bugs.freedesktop.org/show_bug.cgi?id=111329
  [fdo#111330]: https://bugs.freedesktop.org/show_bug.cgi?id=111330
  [fdo#111609]: https://bugs.freedesktop.org/show_bug.cgi?id=111609
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


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

  No changes in participating hosts


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6935 -> Patchwork_14490

  CI-20190529: 20190529
  CI_DRM_6935: fd159a931308ad279c27e138e1724265e04326dd @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5196: 98783313b8b3097680df69007a9551c6248ab209 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14490: 3b27c24493e3715474b8c985831fa44bce7963cd @ 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_14490/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-22 17:08 ` [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config Manasi Navare
  2019-09-23  4:43   ` Manasi Navare
@ 2019-09-24 15:38   ` Maarten Lankhorst
  2019-09-24 17:59     ` Manasi Navare
  2019-09-24 19:50   ` [PATCH v4] " Manasi Navare
  2 siblings, 1 reply; 38+ messages in thread
From: Maarten Lankhorst @ 2019-09-24 15:38 UTC (permalink / raw)
  To: Manasi Navare, intel-gfx; +Cc: Jani Nikula

Op 22-09-2019 om 19:08 schreef Manasi Navare:
> After the state is committed, we readout the HW registers and compare
> the HW state with the SW state that we just committed.
> For Transcdoer port sync, we add master_transcoder and the
> salves bitmask to the crtc_state, hence we need to read those during
> the HW state readout to avoid pipe state mismatch.
>
> v4:
> * Get power domains in master loop for get_config (Ville)
> v3:
> * Add TRANSCODER_D (Maarten)
> * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> v2:
> * Add Transcoder_D and MISSING_CASE (Maarten)
>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
>  1 file changed, 69 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 1ae5eafe2892..711987eb4e9e 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -10470,6 +10470,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
>  	}
>  }
>  
> +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> +					 enum transcoder cpu_transcoder)
> +{
> +	u32 trans_port_sync, master_select;
> +
> +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> +
> +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> +		return INVALID_TRANSCODER;
> +
> +	master_select = trans_port_sync &
> +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> +	switch (master_select) {
> +	case 1:
> +		return TRANSCODER_A;
> +	case 2:
> +		return TRANSCODER_B;
> +	case 3:
> +		return TRANSCODER_C;
> +	case 4:
> +		return TRANSCODER_D;
> +	default:
> +		MISSING_CASE(master_select);
> +	}
> +
> +	return INVALID_TRANSCODER;
Could move this return up to default. :)
> +}
> +
> +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> +					       struct intel_crtc_state *pipe_config)
> +{
> +	struct drm_device *dev = crtc->base.dev;
> +	struct drm_i915_private *dev_priv = to_i915(dev);
> +	u32 transcoders;
> +	enum transcoder cpu_transcoder;
> +
> +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> +							   pipe_config->cpu_transcoder);
> +	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
> +		pipe_config->sync_mode_slaves_mask = 0;
> +		return;
> +	}
> +

It could still be useful to go through the loop below anyway, in case we messed up. We are reading out from hw after all.

And then also add this as a PIPE_CONF_CHECK_X check to pipe_config_compare().

With that fixed and CI happy,

Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>

> +	transcoders = BIT(TRANSCODER_A) |
> +		BIT(TRANSCODER_B) |
> +		BIT(TRANSCODER_C) |
> +		BIT(TRANSCODER_D);
> +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> +		enum intel_display_power_domain power_domain;
> +		intel_wakeref_t trans_wakeref;
> +
> +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> +								   power_domain);
> +
> +		if (!trans_wakeref)
> +			continue;
> +
> +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> +		    pipe_config->cpu_transcoder)
> +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> +
> +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> +	}
> +}
> +
>  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
>  				    struct intel_crtc_state *pipe_config)
>  {
> @@ -10566,6 +10632,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
>  		pipe_config->pixel_multiplier = 1;
>  	}
>  
> +	if (INTEL_GEN(dev_priv) >= 11)
> +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> +
>  out:
>  	for_each_power_domain(power_domain, power_domain_mask)
>  		intel_display_power_put(dev_priv,


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

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

* Re: [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-24 15:38   ` Maarten Lankhorst
@ 2019-09-24 17:59     ` Manasi Navare
  2019-09-25 10:08       ` Ville Syrjälä
  0 siblings, 1 reply; 38+ messages in thread
From: Manasi Navare @ 2019-09-24 17:59 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: Jani Nikula, intel-gfx

On Tue, Sep 24, 2019 at 05:38:00PM +0200, Maarten Lankhorst wrote:
> Op 22-09-2019 om 19:08 schreef Manasi Navare:
> > After the state is committed, we readout the HW registers and compare
> > the HW state with the SW state that we just committed.
> > For Transcdoer port sync, we add master_transcoder and the
> > salves bitmask to the crtc_state, hence we need to read those during
> > the HW state readout to avoid pipe state mismatch.
> >
> > v4:
> > * Get power domains in master loop for get_config (Ville)
> > v3:
> > * Add TRANSCODER_D (Maarten)
> > * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > v2:
> > * Add Transcoder_D and MISSING_CASE (Maarten)
> >
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > Cc: Matt Roper <matthew.d.roper@intel.com>
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
> >  1 file changed, 69 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > index 1ae5eafe2892..711987eb4e9e 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -10470,6 +10470,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
> >  	}
> >  }
> >  
> > +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> > +					 enum transcoder cpu_transcoder)
> > +{
> > +	u32 trans_port_sync, master_select;
> > +
> > +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> > +
> > +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> > +		return INVALID_TRANSCODER;
> > +
> > +	master_select = trans_port_sync &
> > +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> > +	switch (master_select) {
> > +	case 1:
> > +		return TRANSCODER_A;
> > +	case 2:
> > +		return TRANSCODER_B;
> > +	case 3:
> > +		return TRANSCODER_C;
> > +	case 4:
> > +		return TRANSCODER_D;
> > +	default:
> > +		MISSING_CASE(master_select);
> > +	}
> > +
> > +	return INVALID_TRANSCODER;
> Could move this return up to default. :)

Yes will do this

> > +}
> > +
> > +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> > +					       struct intel_crtc_state *pipe_config)
> > +{
> > +	struct drm_device *dev = crtc->base.dev;
> > +	struct drm_i915_private *dev_priv = to_i915(dev);
> > +	u32 transcoders;
> > +	enum transcoder cpu_transcoder;
> > +
> > +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> > +							   pipe_config->cpu_transcoder);
> > +	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
> > +		pipe_config->sync_mode_slaves_mask = 0;
> > +		return;
> > +	}
> > +
> 
> It could still be useful to go through the loop below anyway, in case we messed up. We are reading out from hw after all.
>

The loop below will be called always in case of the HW state readout for master, in case of the slave it will execute
the firs part, get the master transcoder and return, why do we need to call the loop below for slave? Why cant we just return here
as in the code?
 
> And then also add this as a PIPE_CONF_CHECK_X check to pipe_config_compare().
> 

This is already added in pipe_config_compare() in the patch that adds these two master_trans and slave_bitmask to the crtc state

Manasi

> With that fixed and CI happy,
> 
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> 
> > +	transcoders = BIT(TRANSCODER_A) |
> > +		BIT(TRANSCODER_B) |
> > +		BIT(TRANSCODER_C) |
> > +		BIT(TRANSCODER_D);
> > +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> > +		enum intel_display_power_domain power_domain;
> > +		intel_wakeref_t trans_wakeref;
> > +
> > +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> > +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> > +								   power_domain);
> > +
> > +		if (!trans_wakeref)
> > +			continue;
> > +
> > +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> > +		    pipe_config->cpu_transcoder)
> > +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> > +
> > +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> > +	}
> > +}
> > +
> >  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> >  				    struct intel_crtc_state *pipe_config)
> >  {
> > @@ -10566,6 +10632,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> >  		pipe_config->pixel_multiplier = 1;
> >  	}
> >  
> > +	if (INTEL_GEN(dev_priv) >= 11)
> > +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> > +
> >  out:
> >  	for_each_power_domain(power_domain, power_domain_mask)
> >  		intel_display_power_put(dev_priv,
> 
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH v4] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-22 17:08 ` [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config Manasi Navare
  2019-09-23  4:43   ` Manasi Navare
  2019-09-24 15:38   ` Maarten Lankhorst
@ 2019-09-24 19:50   ` Manasi Navare
  2019-09-24 22:59     ` kbuild test robot
  2019-09-27  0:11     ` [PATCH v5 3/6] " Manasi Navare
  2 siblings, 2 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-24 19:50 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

After the state is committed, we readout the HW registers and compare
the HW state with the SW state that we just committed.
For Transcdoer port sync, we add master_transcoder and the
salves bitmask to the crtc_state, hence we need to read those during
the HW state readout to avoid pipe state mismatch.

v5:
* Add return INVALID in defaut case (Maarten)
v4:
* Get power domains in master loop for get_config (Ville)
v3:
* Add TRANSCODER_D (Maarten)
* v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
v2:
* Add Transcoder_D and MISSING_CASE (Maarten)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 68 ++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 2099fed3713a..84a0a83e9e05 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -10506,6 +10506,71 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
 	}
 }
 
+static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
+					 enum transcoder cpu_transcoder)
+{
+	u32 trans_port_sync, master_select;
+
+	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
+
+	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
+		return INVALID_TRANSCODER;
+
+	master_select = trans_port_sync &
+			PORT_SYNC_MODE_MASTER_SELECT_MASK;
+	switch (master_select) {
+	case 1:
+		return TRANSCODER_A;
+	case 2:
+		return TRANSCODER_B;
+	case 3:
+		return TRANSCODER_C;
+	case 4:
+		return TRANSCODER_D;
+	default:
+		MISSING_CASE(master_select);
+		return INVALID_TRANSCODER;
+	}
+}
+
+static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
+					       struct intel_crtc_state *pipe_config)
+{
+	struct drm_device *dev = crtc->base.dev;
+	struct drm_i915_private *dev_priv = to_i915(dev);
+	u32 transcoders;
+	enum transcoder cpu_transcoder;
+
+	pipe_config->master_transcoder = transcoder_master(dev_priv,
+							   pipe_config->cpu_transcoder);
+	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
+		pipe_config->sync_mode_slaves_mask = 0;
+		return;
+	}
+
+	transcoders = BIT(TRANSCODER_A) |
+		BIT(TRANSCODER_B) |
+		BIT(TRANSCODER_C) |
+		BIT(TRANSCODER_D);
+	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
+		enum intel_display_power_domain power_domain;
+		intel_wakeref_t trans_wakeref;
+
+		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
+		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
+								   power_domain);
+
+		if (!trans_wakeref)
+			continue;
+
+		if (transcoder_master(dev_priv, cpu_transcoder) ==
+		    pipe_config->cpu_transcoder)
+			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
+
+		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
+	}
+}
+
 static bool haswell_get_pipe_config(struct intel_crtc *crtc,
 				    struct intel_crtc_state *pipe_config)
 {
@@ -10625,6 +10690,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
 		pipe_config->pixel_multiplier = 1;
 	}
 
+	if (INTEL_GEN(dev_priv) >= 11)
+		icelake_get_trans_port_sync_config(crtc, pipe_config);
+
 out:
 	for_each_power_domain(power_domain, power_domain_mask)
 		intel_display_power_put(dev_priv,
-- 
2.19.1

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

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

* ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev2)
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (6 preceding siblings ...)
  2019-09-23  8:29 ` ✓ Fi.CI.IGT: " Patchwork
@ 2019-09-24 21:17 ` Patchwork
  2019-09-25 15:30 ` ✓ Fi.CI.IGT: " Patchwork
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2019-09-24 21:17 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev2)
URL   : https://patchwork.freedesktop.org/series/67043/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6952 -> Patchwork_14520
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_switch@legacy-render:
    - fi-bxt-dsi:         [PASS][1] -> [INCOMPLETE][2] ([fdo#103927] / [fdo#111381])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/fi-bxt-dsi/igt@gem_ctx_switch@legacy-render.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/fi-bxt-dsi/igt@gem_ctx_switch@legacy-render.html

  
#### Possible fixes ####

  * igt@gem_ctx_switch@legacy-render:
    - {fi-icl-guc}:       [INCOMPLETE][3] ([fdo#107713] / [fdo#111381]) -> [PASS][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/fi-icl-guc/igt@gem_ctx_switch@legacy-render.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/fi-icl-guc/igt@gem_ctx_switch@legacy-render.html

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

  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#111381]: https://bugs.freedesktop.org/show_bug.cgi?id=111381


Participating hosts (49 -> 43)
------------------------------

  Missing    (6): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-icl-y fi-bdw-samus 


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6952 -> Patchwork_14520

  CI-20190529: 20190529
  CI_DRM_6952: ec3b5d92c87e554e407f308b4183f21d59c4a13d @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5202: 3499c5eb17054e2abd88023fe962768140d24302 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14520: 0dc1c17cb6a3959eb56053e4f084ee764ef9b494 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

0dc1c17cb6a3 drm/i915/display/icl: In port sync mode disable slaves first then master
55062a596e9b drm/i915/display/icl: Disable transcoder port sync as part of crtc_disable() sequence
7e24b9a6c389 drm/i915/display/icl: Enable master-slaves in trans port sync
688e2bc76687 drm/i915/display/icl: HW state readout for transcoder port sync config
3cc97cb92866 drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports
70dddaaa556c drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync

== Logs ==

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

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

* Re: [PATCH v4] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-24 19:50   ` [PATCH v4] " Manasi Navare
@ 2019-09-24 22:59     ` kbuild test robot
  2019-09-27  0:11     ` [PATCH v5 3/6] " Manasi Navare
  1 sibling, 0 replies; 38+ messages in thread
From: kbuild test robot @ 2019-09-24 22:59 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Jani Nikula, intel-gfx, kbuild-all

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

Hi Manasi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-intel/for-linux-next]
[cannot apply to v5.3 next-20190920]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Manasi-Navare/drm-i915-display-icl-HW-state-readout-for-transcoder-port-sync-config/20190925-051250
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: i386-defconfig (attached as .config)
compiler: gcc-7 (Debian 7.4.0-13) 7.4.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   drivers/gpu/drm/i915/display/intel_display.c: In function 'transcoder_master':
>> drivers/gpu/drm/i915/display/intel_display.c:10400:10: error: 'INVALID_TRANSCODER' undeclared (first use in this function); did you mean 'I915_MAX_TRANSCODERS'?
      return INVALID_TRANSCODER;
             ^~~~~~~~~~~~~~~~~~
             I915_MAX_TRANSCODERS
   drivers/gpu/drm/i915/display/intel_display.c:10400:10: note: each undeclared identifier is reported only once for each function it appears in
   drivers/gpu/drm/i915/display/intel_display.c: In function 'icelake_get_trans_port_sync_config':
>> drivers/gpu/drm/i915/display/intel_display.c:10427:15: error: 'struct intel_crtc_state' has no member named 'master_transcoder'; did you mean 'cpu_transcoder'?
     pipe_config->master_transcoder = transcoder_master(dev_priv,
                  ^~~~~~~~~~~~~~~~~
                  cpu_transcoder
   drivers/gpu/drm/i915/display/intel_display.c:10429:19: error: 'struct intel_crtc_state' has no member named 'master_transcoder'; did you mean 'cpu_transcoder'?
     if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
                      ^~~~~~~~~~~~~~~~~
                      cpu_transcoder
   drivers/gpu/drm/i915/display/intel_display.c:10429:40: error: 'INVALID_TRANSCODER' undeclared (first use in this function); did you mean 'I915_MAX_TRANSCODERS'?
     if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
                                           ^~~~~~~~~~~~~~~~~~
                                           I915_MAX_TRANSCODERS
>> drivers/gpu/drm/i915/display/intel_display.c:10430:14: error: 'struct intel_crtc_state' has no member named 'sync_mode_slaves_mask'
      pipe_config->sync_mode_slaves_mask = 0;
                 ^~
   drivers/gpu/drm/i915/display/intel_display.c:10451:15: error: 'struct intel_crtc_state' has no member named 'sync_mode_slaves_mask'
       pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
                  ^~
   drivers/gpu/drm/i915/display/intel_display.c: In function 'transcoder_master':
>> drivers/gpu/drm/i915/display/intel_display.c:10417:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^

vim +10400 drivers/gpu/drm/i915/display/intel_display.c

 10391	
 10392	static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
 10393						 enum transcoder cpu_transcoder)
 10394	{
 10395		u32 trans_port_sync, master_select;
 10396	
 10397		trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
 10398	
 10399		if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
 10400			return INVALID_TRANSCODER;
 10401	
 10402		master_select = trans_port_sync &
 10403				PORT_SYNC_MODE_MASTER_SELECT_MASK;
 10404		switch (master_select) {
 10405		case 1:
 10406			return TRANSCODER_A;
 10407		case 2:
 10408			return TRANSCODER_B;
 10409		case 3:
 10410			return TRANSCODER_C;
 10411		case 4:
 10412			return TRANSCODER_D;
 10413		default:
 10414			MISSING_CASE(master_select);
 10415			return INVALID_TRANSCODER;
 10416		}
 10417	}
 10418	
 10419	static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
 10420						       struct intel_crtc_state *pipe_config)
 10421	{
 10422		struct drm_device *dev = crtc->base.dev;
 10423		struct drm_i915_private *dev_priv = to_i915(dev);
 10424		u32 transcoders;
 10425		enum transcoder cpu_transcoder;
 10426	
 10427		pipe_config->master_transcoder = transcoder_master(dev_priv,
 10428								   pipe_config->cpu_transcoder);
 10429		if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
 10430			pipe_config->sync_mode_slaves_mask = 0;
 10431			return;
 10432		}
 10433	
 10434		transcoders = BIT(TRANSCODER_A) |
 10435			BIT(TRANSCODER_B) |
 10436			BIT(TRANSCODER_C) |
 10437			BIT(TRANSCODER_D);
 10438		for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
 10439			enum intel_display_power_domain power_domain;
 10440			intel_wakeref_t trans_wakeref;
 10441	
 10442			power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
 10443			trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
 10444									   power_domain);
 10445	
 10446			if (!trans_wakeref)
 10447				continue;
 10448	
 10449			if (transcoder_master(dev_priv, cpu_transcoder) ==
 10450			    pipe_config->cpu_transcoder)
 10451				pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
 10452	
 10453			intel_display_power_put(dev_priv, power_domain, trans_wakeref);
 10454		}
 10455	}
 10456	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28067 bytes --]

[-- Attachment #3: Type: text/plain, Size: 159 bytes --]

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

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

* Re: [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-24 17:59     ` Manasi Navare
@ 2019-09-25 10:08       ` Ville Syrjälä
  2019-09-25 18:37         ` Manasi Navare
  0 siblings, 1 reply; 38+ messages in thread
From: Ville Syrjälä @ 2019-09-25 10:08 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Jani Nikula, intel-gfx

On Tue, Sep 24, 2019 at 10:59:57AM -0700, Manasi Navare wrote:
> On Tue, Sep 24, 2019 at 05:38:00PM +0200, Maarten Lankhorst wrote:
> > Op 22-09-2019 om 19:08 schreef Manasi Navare:
> > > After the state is committed, we readout the HW registers and compare
> > > the HW state with the SW state that we just committed.
> > > For Transcdoer port sync, we add master_transcoder and the
> > > salves bitmask to the crtc_state, hence we need to read those during
> > > the HW state readout to avoid pipe state mismatch.
> > >
> > > v4:
> > > * Get power domains in master loop for get_config (Ville)
> > > v3:
> > > * Add TRANSCODER_D (Maarten)
> > > * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > v2:
> > > * Add Transcoder_D and MISSING_CASE (Maarten)
> > >
> > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > Cc: Matt Roper <matthew.d.roper@intel.com>
> > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
> > >  1 file changed, 69 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > > index 1ae5eafe2892..711987eb4e9e 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > @@ -10470,6 +10470,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
> > >  	}
> > >  }
> > >  
> > > +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> > > +					 enum transcoder cpu_transcoder)
> > > +{
> > > +	u32 trans_port_sync, master_select;
> > > +
> > > +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> > > +
> > > +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> > > +		return INVALID_TRANSCODER;
> > > +
> > > +	master_select = trans_port_sync &
> > > +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> > > +	switch (master_select) {
> > > +	case 1:
> > > +		return TRANSCODER_A;
> > > +	case 2:
> > > +		return TRANSCODER_B;
> > > +	case 3:
> > > +		return TRANSCODER_C;
> > > +	case 4:
> > > +		return TRANSCODER_D;
> > > +	default:
> > > +		MISSING_CASE(master_select);
> > > +	}
> > > +
> > > +	return INVALID_TRANSCODER;
> > Could move this return up to default. :)
> 
> Yes will do this
> 
> > > +}
> > > +
> > > +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> > > +					       struct intel_crtc_state *pipe_config)
> > > +{
> > > +	struct drm_device *dev = crtc->base.dev;
> > > +	struct drm_i915_private *dev_priv = to_i915(dev);
> > > +	u32 transcoders;
> > > +	enum transcoder cpu_transcoder;
> > > +
> > > +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> > > +							   pipe_config->cpu_transcoder);
> > > +	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
> > > +		pipe_config->sync_mode_slaves_mask = 0;
> > > +		return;
> > > +	}
> > > +
> > 
> > It could still be useful to go through the loop below anyway, in case we messed up. We are reading out from hw after all.
> >
> 
> The loop below will be called always in case of the HW state readout for master, in case of the slave it will execute
> the firs part, get the master transcoder and return, why do we need to call the loop below for slave? Why cant we just return here
> as in the code?

I think Maarten's point was to catch cases where the same transcoder is
accidentally configure as both slave and master.

>  
> > And then also add this as a PIPE_CONF_CHECK_X check to pipe_config_compare().
> > 
> 
> This is already added in pipe_config_compare() in the patch that adds these two master_trans and slave_bitmask to the crtc state
> 
> Manasi
> 
> > With that fixed and CI happy,
> > 
> > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > 
> > > +	transcoders = BIT(TRANSCODER_A) |
> > > +		BIT(TRANSCODER_B) |
> > > +		BIT(TRANSCODER_C) |
> > > +		BIT(TRANSCODER_D);
> > > +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> > > +		enum intel_display_power_domain power_domain;
> > > +		intel_wakeref_t trans_wakeref;
> > > +
> > > +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> > > +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> > > +								   power_domain);
> > > +
> > > +		if (!trans_wakeref)
> > > +			continue;
> > > +
> > > +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> > > +		    pipe_config->cpu_transcoder)
> > > +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> > > +
> > > +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> > > +	}
> > > +}
> > > +
> > >  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> > >  				    struct intel_crtc_state *pipe_config)
> > >  {
> > > @@ -10566,6 +10632,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> > >  		pipe_config->pixel_multiplier = 1;
> > >  	}
> > >  
> > > +	if (INTEL_GEN(dev_priv) >= 11)
> > > +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> > > +
> > >  out:
> > >  	for_each_power_domain(power_domain, power_domain_mask)
> > >  		intel_display_power_put(dev_priv,
> > 
> > 

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

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

* ✓ Fi.CI.IGT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev2)
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (7 preceding siblings ...)
  2019-09-24 21:17 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev2) Patchwork
@ 2019-09-25 15:30 ` Patchwork
  2019-09-27  0:41 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev3) Patchwork
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2019-09-25 15:30 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev2)
URL   : https://patchwork.freedesktop.org/series/67043/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6952_full -> Patchwork_14520_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_schedule@preemptive-hang-bsd:
    - shard-iclb:         [PASS][1] -> [SKIP][2] ([fdo#111325]) +5 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb8/igt@gem_exec_schedule@preemptive-hang-bsd.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb1/igt@gem_exec_schedule@preemptive-hang-bsd.html

  * igt@gem_softpin@noreloc-s3:
    - shard-skl:          [PASS][3] -> [INCOMPLETE][4] ([fdo#104108])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-skl4/igt@gem_softpin@noreloc-s3.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-skl5/igt@gem_softpin@noreloc-s3.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-glk:          [PASS][5] -> [FAIL][6] ([fdo#105363])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-glk9/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-glk7/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-snb:          [PASS][7] -> [DMESG-WARN][8] ([fdo#102365]) +1 similar issue
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-snb4/igt@kms_flip@flip-vs-suspend.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-snb7/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-apl:          [PASS][9] -> [DMESG-WARN][10] ([fdo#108566]) +5 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-apl2/igt@kms_flip@flip-vs-suspend-interruptible.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-apl6/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move:
    - shard-snb:          [PASS][11] -> [SKIP][12] ([fdo#109271]) +1 similar issue
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-snb6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-snb2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbc-1p-rte:
    - shard-iclb:         [PASS][13] -> [FAIL][14] ([fdo#103167] / [fdo#110378])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb6/igt@kms_frontbuffer_tracking@fbc-1p-rte.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb2/igt@kms_frontbuffer_tracking@fbc-1p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-shrfb-plflip-blt:
    - shard-iclb:         [PASS][15] -> [FAIL][16] ([fdo#103167]) +3 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-shrfb-plflip-blt.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu:
    - shard-skl:          [PASS][17] -> [FAIL][18] ([fdo#103167])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-skl3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-skl9/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu.html

  * igt@kms_psr@psr2_no_drrs:
    - shard-iclb:         [PASS][19] -> [SKIP][20] ([fdo#109441])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb2/igt@kms_psr@psr2_no_drrs.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb6/igt@kms_psr@psr2_no_drrs.html

  * igt@kms_setmode@basic:
    - shard-hsw:          [PASS][21] -> [FAIL][22] ([fdo#99912])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-hsw5/igt@kms_setmode@basic.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-hsw8/igt@kms_setmode@basic.html

  * igt@kms_vblank@pipe-c-ts-continuation-suspend:
    - shard-kbl:          [PASS][23] -> [DMESG-WARN][24] ([fdo#108566])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-kbl4/igt@kms_vblank@pipe-c-ts-continuation-suspend.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-kbl3/igt@kms_vblank@pipe-c-ts-continuation-suspend.html

  * igt@perf@blocking:
    - shard-skl:          [PASS][25] -> [FAIL][26] ([fdo#110728])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-skl8/igt@perf@blocking.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-skl2/igt@perf@blocking.html

  * igt@prime_busy@hang-bsd2:
    - shard-iclb:         [PASS][27] -> [SKIP][28] ([fdo#109276]) +24 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb4/igt@prime_busy@hang-bsd2.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb7/igt@prime_busy@hang-bsd2.html

  * igt@syncobj_basic@bad-create-flags:
    - shard-iclb:         [PASS][29] -> [INCOMPLETE][30] ([fdo#107713])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb6/igt@syncobj_basic@bad-create-flags.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb7/igt@syncobj_basic@bad-create-flags.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@vcs0-s3:
    - shard-skl:          [INCOMPLETE][31] ([fdo#104108]) -> [PASS][32]
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-skl1/igt@gem_ctx_isolation@vcs0-s3.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-skl1/igt@gem_ctx_isolation@vcs0-s3.html

  * igt@gem_ctx_switch@bcs0-heavy-queue:
    - shard-apl:          [INCOMPLETE][33] ([fdo#103927]) -> [PASS][34] +1 similar issue
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-apl4/igt@gem_ctx_switch@bcs0-heavy-queue.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-apl1/igt@gem_ctx_switch@bcs0-heavy-queue.html

  * igt@gem_exec_balancer@smoke:
    - shard-iclb:         [SKIP][35] ([fdo#110854]) -> [PASS][36]
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb6/igt@gem_exec_balancer@smoke.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb2/igt@gem_exec_balancer@smoke.html

  * igt@gem_exec_schedule@preempt-queue-bsd2:
    - shard-iclb:         [SKIP][37] ([fdo#109276]) -> [PASS][38] +21 similar issues
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb6/igt@gem_exec_schedule@preempt-queue-bsd2.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb2/igt@gem_exec_schedule@preempt-queue-bsd2.html

  * igt@gem_exec_schedule@reorder-wide-bsd:
    - shard-iclb:         [SKIP][39] ([fdo#111325]) -> [PASS][40] +9 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb4/igt@gem_exec_schedule@reorder-wide-bsd.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb5/igt@gem_exec_schedule@reorder-wide-bsd.html

  * igt@gem_softpin@noreloc-s3:
    - shard-kbl:          [DMESG-WARN][41] ([fdo#108566]) -> [PASS][42]
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-kbl3/igt@gem_softpin@noreloc-s3.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-kbl7/igt@gem_softpin@noreloc-s3.html

  * igt@gem_workarounds@suspend-resume-context:
    - shard-apl:          [DMESG-WARN][43] ([fdo#108566]) -> [PASS][44] +5 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-apl7/igt@gem_workarounds@suspend-resume-context.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-apl1/igt@gem_workarounds@suspend-resume-context.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-hsw:          [INCOMPLETE][45] ([fdo#103540]) -> [PASS][46]
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-hsw4/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-hsw6/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-skl:          [FAIL][47] ([fdo#105363]) -> [PASS][48]
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-skl1/igt@kms_flip@flip-vs-expired-vblank.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-skl8/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip@plain-flip-ts-check-interruptible:
    - shard-skl:          [FAIL][49] ([fdo#100368]) -> [PASS][50]
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-skl7/igt@kms_flip@plain-flip-ts-check-interruptible.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-skl6/igt@kms_flip@plain-flip-ts-check-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-mmap-cpu:
    - shard-iclb:         [FAIL][51] ([fdo#103167]) -> [PASS][52] +2 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-mmap-cpu.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsr-slowdraw:
    - shard-iclb:         [INCOMPLETE][53] ([fdo#106978] / [fdo#107713]) -> [PASS][54]
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb1/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb6/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html

  * igt@kms_plane_alpha_blend@pipe-a-coverage-7efc:
    - shard-skl:          [FAIL][55] ([fdo#108145]) -> [PASS][56]
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-skl1/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-skl8/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html

  * igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
    - shard-skl:          [FAIL][57] ([fdo#108145] / [fdo#110403]) -> [PASS][58]
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-skl4/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-skl6/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html

  * igt@kms_plane_lowres@pipe-a-tiling-x:
    - shard-iclb:         [FAIL][59] ([fdo#103166]) -> [PASS][60] +1 similar issue
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb8/igt@kms_plane_lowres@pipe-a-tiling-x.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb1/igt@kms_plane_lowres@pipe-a-tiling-x.html

  * igt@kms_psr2_su@frontbuffer:
    - shard-iclb:         [SKIP][61] ([fdo#109642] / [fdo#111068]) -> [PASS][62]
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb6/igt@kms_psr2_su@frontbuffer.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb2/igt@kms_psr2_su@frontbuffer.html

  * igt@kms_psr@psr2_cursor_plane_onoff:
    - shard-iclb:         [SKIP][63] ([fdo#109441]) -> [PASS][64] +1 similar issue
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb5/igt@kms_psr@psr2_cursor_plane_onoff.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb2/igt@kms_psr@psr2_cursor_plane_onoff.html

  
#### Warnings ####

  * igt@gem_ctx_isolation@vcs1-nonpriv:
    - shard-iclb:         [FAIL][65] ([fdo#111329]) -> [SKIP][66] ([fdo#109276])
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb2/igt@gem_ctx_isolation@vcs1-nonpriv.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb8/igt@gem_ctx_isolation@vcs1-nonpriv.html

  * igt@gem_mocs_settings@mocs-isolation-bsd2:
    - shard-iclb:         [SKIP][67] ([fdo#109276]) -> [FAIL][68] ([fdo#111330])
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb6/igt@gem_mocs_settings@mocs-isolation-bsd2.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb2/igt@gem_mocs_settings@mocs-isolation-bsd2.html

  * igt@gem_mocs_settings@mocs-settings-bsd2:
    - shard-iclb:         [FAIL][69] ([fdo#111330]) -> [SKIP][70] ([fdo#109276]) +1 similar issue
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6952/shard-iclb2/igt@gem_mocs_settings@mocs-settings-bsd2.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14520/shard-iclb6/igt@gem_mocs_settings@mocs-settings-bsd2.html

  
  [fdo#100368]: https://bugs.freedesktop.org/show_bug.cgi?id=100368
  [fdo#102365]: https://bugs.freedesktop.org/show_bug.cgi?id=102365
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#106978]: https://bugs.freedesktop.org/show_bug.cgi?id=106978
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#110378]: https://bugs.freedesktop.org/show_bug.cgi?id=110378
  [fdo#110403]: https://bugs.freedesktop.org/show_bug.cgi?id=110403
  [fdo#110728]: https://bugs.freedesktop.org/show_bug.cgi?id=110728
  [fdo#110854]: https://bugs.freedesktop.org/show_bug.cgi?id=110854
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111325]: https://bugs.freedesktop.org/show_bug.cgi?id=111325
  [fdo#111329]: https://bugs.freedesktop.org/show_bug.cgi?id=111329
  [fdo#111330]: https://bugs.freedesktop.org/show_bug.cgi?id=111330
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


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

  No changes in participating hosts


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6952 -> Patchwork_14520

  CI-20190529: 20190529
  CI_DRM_6952: ec3b5d92c87e554e407f308b4183f21d59c4a13d @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5202: 3499c5eb17054e2abd88023fe962768140d24302 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14520: 0dc1c17cb6a3959eb56053e4f084ee764ef9b494 @ 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_14520/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-25 10:08       ` Ville Syrjälä
@ 2019-09-25 18:37         ` Manasi Navare
  2019-09-26 12:28           ` Ville Syrjälä
  0 siblings, 1 reply; 38+ messages in thread
From: Manasi Navare @ 2019-09-25 18:37 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: Jani Nikula, intel-gfx

On Wed, Sep 25, 2019 at 01:08:23PM +0300, Ville Syrjälä wrote:
> On Tue, Sep 24, 2019 at 10:59:57AM -0700, Manasi Navare wrote:
> > On Tue, Sep 24, 2019 at 05:38:00PM +0200, Maarten Lankhorst wrote:
> > > Op 22-09-2019 om 19:08 schreef Manasi Navare:
> > > > After the state is committed, we readout the HW registers and compare
> > > > the HW state with the SW state that we just committed.
> > > > For Transcdoer port sync, we add master_transcoder and the
> > > > salves bitmask to the crtc_state, hence we need to read those during
> > > > the HW state readout to avoid pipe state mismatch.
> > > >
> > > > v4:
> > > > * Get power domains in master loop for get_config (Ville)
> > > > v3:
> > > > * Add TRANSCODER_D (Maarten)
> > > > * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > > v2:
> > > > * Add Transcoder_D and MISSING_CASE (Maarten)
> > > >
> > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > > Cc: Matt Roper <matthew.d.roper@intel.com>
> > > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > > > ---
> > > >  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
> > > >  1 file changed, 69 insertions(+)
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > > > index 1ae5eafe2892..711987eb4e9e 100644
> > > > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > > @@ -10470,6 +10470,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
> > > >  	}
> > > >  }
> > > >  
> > > > +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> > > > +					 enum transcoder cpu_transcoder)
> > > > +{
> > > > +	u32 trans_port_sync, master_select;
> > > > +
> > > > +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> > > > +
> > > > +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> > > > +		return INVALID_TRANSCODER;
> > > > +
> > > > +	master_select = trans_port_sync &
> > > > +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> > > > +	switch (master_select) {
> > > > +	case 1:
> > > > +		return TRANSCODER_A;
> > > > +	case 2:
> > > > +		return TRANSCODER_B;
> > > > +	case 3:
> > > > +		return TRANSCODER_C;
> > > > +	case 4:
> > > > +		return TRANSCODER_D;
> > > > +	default:
> > > > +		MISSING_CASE(master_select);
> > > > +	}
> > > > +
> > > > +	return INVALID_TRANSCODER;
> > > Could move this return up to default. :)
> > 
> > Yes will do this
> > 
> > > > +}
> > > > +
> > > > +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> > > > +					       struct intel_crtc_state *pipe_config)
> > > > +{
> > > > +	struct drm_device *dev = crtc->base.dev;
> > > > +	struct drm_i915_private *dev_priv = to_i915(dev);
> > > > +	u32 transcoders;
> > > > +	enum transcoder cpu_transcoder;
> > > > +
> > > > +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> > > > +							   pipe_config->cpu_transcoder);
> > > > +	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
> > > > +		pipe_config->sync_mode_slaves_mask = 0;
> > > > +		return;
> > > > +	}
> > > > +
> > > 
> > > It could still be useful to go through the loop below anyway, in case we messed up. We are reading out from hw after all.
> > >
> > 
> > The loop below will be called always in case of the HW state readout for master, in case of the slave it will execute
> > the firs part, get the master transcoder and return, why do we need to call the loop below for slave? Why cant we just return here
> > as in the code?
> 
> I think Maarten's point was to catch cases where the same transcoder is
> accidentally configure as both slave and master.
>
But shouldnt we add a warn on for such a case, if we let it go through both the first part and the loop below
then it will populate the master_trans and slave_bitmask both for the same crtc which would be wrong
How can we flag such a case?

Manasi
 
> >  
> > > And then also add this as a PIPE_CONF_CHECK_X check to pipe_config_compare().
> > > 
> > 
> > This is already added in pipe_config_compare() in the patch that adds these two master_trans and slave_bitmask to the crtc state
> > 
> > Manasi
> > 
> > > With that fixed and CI happy,
> > > 
> > > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > 
> > > > +	transcoders = BIT(TRANSCODER_A) |
> > > > +		BIT(TRANSCODER_B) |
> > > > +		BIT(TRANSCODER_C) |
> > > > +		BIT(TRANSCODER_D);
> > > > +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> > > > +		enum intel_display_power_domain power_domain;
> > > > +		intel_wakeref_t trans_wakeref;
> > > > +
> > > > +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> > > > +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> > > > +								   power_domain);
> > > > +
> > > > +		if (!trans_wakeref)
> > > > +			continue;
> > > > +
> > > > +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> > > > +		    pipe_config->cpu_transcoder)
> > > > +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> > > > +
> > > > +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> > > > +	}
> > > > +}
> > > > +
> > > >  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> > > >  				    struct intel_crtc_state *pipe_config)
> > > >  {
> > > > @@ -10566,6 +10632,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> > > >  		pipe_config->pixel_multiplier = 1;
> > > >  	}
> > > >  
> > > > +	if (INTEL_GEN(dev_priv) >= 11)
> > > > +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> > > > +
> > > >  out:
> > > >  	for_each_power_domain(power_domain, power_domain_mask)
> > > >  		intel_display_power_put(dev_priv,
> > > 
> > > 
> 
> -- 
> Ville Syrjälä
> Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-25 18:37         ` Manasi Navare
@ 2019-09-26 12:28           ` Ville Syrjälä
  2019-09-26 17:29             ` Manasi Navare
  0 siblings, 1 reply; 38+ messages in thread
From: Ville Syrjälä @ 2019-09-26 12:28 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Jani Nikula, intel-gfx

On Wed, Sep 25, 2019 at 11:37:58AM -0700, Manasi Navare wrote:
> On Wed, Sep 25, 2019 at 01:08:23PM +0300, Ville Syrjälä wrote:
> > On Tue, Sep 24, 2019 at 10:59:57AM -0700, Manasi Navare wrote:
> > > On Tue, Sep 24, 2019 at 05:38:00PM +0200, Maarten Lankhorst wrote:
> > > > Op 22-09-2019 om 19:08 schreef Manasi Navare:
> > > > > After the state is committed, we readout the HW registers and compare
> > > > > the HW state with the SW state that we just committed.
> > > > > For Transcdoer port sync, we add master_transcoder and the
> > > > > salves bitmask to the crtc_state, hence we need to read those during
> > > > > the HW state readout to avoid pipe state mismatch.
> > > > >
> > > > > v4:
> > > > > * Get power domains in master loop for get_config (Ville)
> > > > > v3:
> > > > > * Add TRANSCODER_D (Maarten)
> > > > > * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > > > v2:
> > > > > * Add Transcoder_D and MISSING_CASE (Maarten)
> > > > >
> > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > > > Cc: Matt Roper <matthew.d.roper@intel.com>
> > > > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > > > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > > > > ---
> > > > >  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
> > > > >  1 file changed, 69 insertions(+)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > > > > index 1ae5eafe2892..711987eb4e9e 100644
> > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > > > @@ -10470,6 +10470,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
> > > > >  	}
> > > > >  }
> > > > >  
> > > > > +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> > > > > +					 enum transcoder cpu_transcoder)
> > > > > +{
> > > > > +	u32 trans_port_sync, master_select;
> > > > > +
> > > > > +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> > > > > +
> > > > > +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> > > > > +		return INVALID_TRANSCODER;
> > > > > +
> > > > > +	master_select = trans_port_sync &
> > > > > +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> > > > > +	switch (master_select) {
> > > > > +	case 1:
> > > > > +		return TRANSCODER_A;
> > > > > +	case 2:
> > > > > +		return TRANSCODER_B;
> > > > > +	case 3:
> > > > > +		return TRANSCODER_C;
> > > > > +	case 4:
> > > > > +		return TRANSCODER_D;
> > > > > +	default:
> > > > > +		MISSING_CASE(master_select);
> > > > > +	}
> > > > > +
> > > > > +	return INVALID_TRANSCODER;
> > > > Could move this return up to default. :)
> > > 
> > > Yes will do this
> > > 
> > > > > +}
> > > > > +
> > > > > +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> > > > > +					       struct intel_crtc_state *pipe_config)
> > > > > +{
> > > > > +	struct drm_device *dev = crtc->base.dev;
> > > > > +	struct drm_i915_private *dev_priv = to_i915(dev);
> > > > > +	u32 transcoders;
> > > > > +	enum transcoder cpu_transcoder;
> > > > > +
> > > > > +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> > > > > +							   pipe_config->cpu_transcoder);
> > > > > +	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
> > > > > +		pipe_config->sync_mode_slaves_mask = 0;
> > > > > +		return;
> > > > > +	}
> > > > > +
> > > > 
> > > > It could still be useful to go through the loop below anyway, in case we messed up. We are reading out from hw after all.
> > > >
> > > 
> > > The loop below will be called always in case of the HW state readout for master, in case of the slave it will execute
> > > the firs part, get the master transcoder and return, why do we need to call the loop below for slave? Why cant we just return here
> > > as in the code?
> > 
> > I think Maarten's point was to catch cases where the same transcoder is
> > accidentally configure as both slave and master.
> >
> But shouldnt we add a warn on for such a case, if we let it go through both the first part and the loop below
> then it will populate the master_trans and slave_bitmask both for the same crtc which would be wrong
> How can we flag such a case?

During state readout it'll get flagged by the state checker. For the
purposes of the initial readout I guess we could WARN_ON() since it
never should happen.

> 
> Manasi
>  
> > >  
> > > > And then also add this as a PIPE_CONF_CHECK_X check to pipe_config_compare().
> > > > 
> > > 
> > > This is already added in pipe_config_compare() in the patch that adds these two master_trans and slave_bitmask to the crtc state
> > > 
> > > Manasi
> > > 
> > > > With that fixed and CI happy,
> > > > 
> > > > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > > 
> > > > > +	transcoders = BIT(TRANSCODER_A) |
> > > > > +		BIT(TRANSCODER_B) |
> > > > > +		BIT(TRANSCODER_C) |
> > > > > +		BIT(TRANSCODER_D);
> > > > > +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> > > > > +		enum intel_display_power_domain power_domain;
> > > > > +		intel_wakeref_t trans_wakeref;
> > > > > +
> > > > > +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> > > > > +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> > > > > +								   power_domain);
> > > > > +
> > > > > +		if (!trans_wakeref)
> > > > > +			continue;
> > > > > +
> > > > > +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> > > > > +		    pipe_config->cpu_transcoder)
> > > > > +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> > > > > +
> > > > > +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> > > > > +	}
> > > > > +}
> > > > > +
> > > > >  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> > > > >  				    struct intel_crtc_state *pipe_config)
> > > > >  {
> > > > > @@ -10566,6 +10632,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> > > > >  		pipe_config->pixel_multiplier = 1;
> > > > >  	}
> > > > >  
> > > > > +	if (INTEL_GEN(dev_priv) >= 11)
> > > > > +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> > > > > +
> > > > >  out:
> > > > >  	for_each_power_domain(power_domain, power_domain_mask)
> > > > >  		intel_display_power_put(dev_priv,
> > > > 
> > > > 
> > 
> > -- 
> > Ville Syrjälä
> > Intel

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

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

* Re: [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-26 12:28           ` Ville Syrjälä
@ 2019-09-26 17:29             ` Manasi Navare
  0 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-26 17:29 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: Jani Nikula, intel-gfx

On Thu, Sep 26, 2019 at 03:28:44PM +0300, Ville Syrjälä wrote:
> On Wed, Sep 25, 2019 at 11:37:58AM -0700, Manasi Navare wrote:
> > On Wed, Sep 25, 2019 at 01:08:23PM +0300, Ville Syrjälä wrote:
> > > On Tue, Sep 24, 2019 at 10:59:57AM -0700, Manasi Navare wrote:
> > > > On Tue, Sep 24, 2019 at 05:38:00PM +0200, Maarten Lankhorst wrote:
> > > > > Op 22-09-2019 om 19:08 schreef Manasi Navare:
> > > > > > After the state is committed, we readout the HW registers and compare
> > > > > > the HW state with the SW state that we just committed.
> > > > > > For Transcdoer port sync, we add master_transcoder and the
> > > > > > salves bitmask to the crtc_state, hence we need to read those during
> > > > > > the HW state readout to avoid pipe state mismatch.
> > > > > >
> > > > > > v4:
> > > > > > * Get power domains in master loop for get_config (Ville)
> > > > > > v3:
> > > > > > * Add TRANSCODER_D (Maarten)
> > > > > > * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > > > > v2:
> > > > > > * Add Transcoder_D and MISSING_CASE (Maarten)
> > > > > >
> > > > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > > > > Cc: Matt Roper <matthew.d.roper@intel.com>
> > > > > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > > > > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > > > > > ---
> > > > > >  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
> > > > > >  1 file changed, 69 insertions(+)
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > > > > > index 1ae5eafe2892..711987eb4e9e 100644
> > > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > > > > @@ -10470,6 +10470,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
> > > > > >  	}
> > > > > >  }
> > > > > >  
> > > > > > +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> > > > > > +					 enum transcoder cpu_transcoder)
> > > > > > +{
> > > > > > +	u32 trans_port_sync, master_select;
> > > > > > +
> > > > > > +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> > > > > > +
> > > > > > +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> > > > > > +		return INVALID_TRANSCODER;
> > > > > > +
> > > > > > +	master_select = trans_port_sync &
> > > > > > +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> > > > > > +	switch (master_select) {
> > > > > > +	case 1:
> > > > > > +		return TRANSCODER_A;
> > > > > > +	case 2:
> > > > > > +		return TRANSCODER_B;
> > > > > > +	case 3:
> > > > > > +		return TRANSCODER_C;
> > > > > > +	case 4:
> > > > > > +		return TRANSCODER_D;
> > > > > > +	default:
> > > > > > +		MISSING_CASE(master_select);
> > > > > > +	}
> > > > > > +
> > > > > > +	return INVALID_TRANSCODER;
> > > > > Could move this return up to default. :)
> > > > 
> > > > Yes will do this
> > > > 
> > > > > > +}
> > > > > > +
> > > > > > +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> > > > > > +					       struct intel_crtc_state *pipe_config)
> > > > > > +{
> > > > > > +	struct drm_device *dev = crtc->base.dev;
> > > > > > +	struct drm_i915_private *dev_priv = to_i915(dev);
> > > > > > +	u32 transcoders;
> > > > > > +	enum transcoder cpu_transcoder;
> > > > > > +
> > > > > > +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> > > > > > +							   pipe_config->cpu_transcoder);
> > > > > > +	if (pipe_config->master_transcoder != INVALID_TRANSCODER) {
> > > > > > +		pipe_config->sync_mode_slaves_mask = 0;
> > > > > > +		return;
> > > > > > +	}
> > > > > > +
> > > > > 
> > > > > It could still be useful to go through the loop below anyway, in case we messed up. We are reading out from hw after all.
> > > > >
> > > > 
> > > > The loop below will be called always in case of the HW state readout for master, in case of the slave it will execute
> > > > the firs part, get the master transcoder and return, why do we need to call the loop below for slave? Why cant we just return here
> > > > as in the code?
> > > 
> > > I think Maarten's point was to catch cases where the same transcoder is
> > > accidentally configure as both slave and master.
> > >
> > But shouldnt we add a warn on for such a case, if we let it go through both the first part and the loop below
> > then it will populate the master_trans and slave_bitmask both for the same crtc which would be wrong
> > How can we flag such a case?
> 
> During state readout it'll get flagged by the state checker. For the
> purposes of the initial readout I guess we could WARN_ON() since it
> never should happen.
>

So add a WARN_ON if we get INVALID_TRANSCODER for the master_transcoder in slave loop and then instead of returning just
continue to the master part where we get the slave mask, correct?

Manasi
 
> > 
> > Manasi
> >  
> > > >  
> > > > > And then also add this as a PIPE_CONF_CHECK_X check to pipe_config_compare().
> > > > > 
> > > > 
> > > > This is already added in pipe_config_compare() in the patch that adds these two master_trans and slave_bitmask to the crtc state
> > > > 
> > > > Manasi
> > > > 
> > > > > With that fixed and CI happy,
> > > > > 
> > > > > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > > > 
> > > > > > +	transcoders = BIT(TRANSCODER_A) |
> > > > > > +		BIT(TRANSCODER_B) |
> > > > > > +		BIT(TRANSCODER_C) |
> > > > > > +		BIT(TRANSCODER_D);
> > > > > > +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> > > > > > +		enum intel_display_power_domain power_domain;
> > > > > > +		intel_wakeref_t trans_wakeref;
> > > > > > +
> > > > > > +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> > > > > > +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> > > > > > +								   power_domain);
> > > > > > +
> > > > > > +		if (!trans_wakeref)
> > > > > > +			continue;
> > > > > > +
> > > > > > +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> > > > > > +		    pipe_config->cpu_transcoder)
> > > > > > +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> > > > > > +
> > > > > > +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> > > > > > +	}
> > > > > > +}
> > > > > > +
> > > > > >  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> > > > > >  				    struct intel_crtc_state *pipe_config)
> > > > > >  {
> > > > > > @@ -10566,6 +10632,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> > > > > >  		pipe_config->pixel_multiplier = 1;
> > > > > >  	}
> > > > > >  
> > > > > > +	if (INTEL_GEN(dev_priv) >= 11)
> > > > > > +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> > > > > > +
> > > > > >  out:
> > > > > >  	for_each_power_domain(power_domain, power_domain_mask)
> > > > > >  		intel_display_power_put(dev_priv,
> > > > > 
> > > > > 
> > > 
> > > -- 
> > > Ville Syrjälä
> > > Intel
> 
> -- 
> Ville Syrjälä
> Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH v5 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-24 19:50   ` [PATCH v4] " Manasi Navare
  2019-09-24 22:59     ` kbuild test robot
@ 2019-09-27  0:11     ` Manasi Navare
  2019-09-27 21:04       ` Manasi Navare
                         ` (2 more replies)
  1 sibling, 3 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-27  0:11 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

After the state is committed, we readout the HW registers and compare
the HW state with the SW state that we just committed.
For Transcdoer port sync, we add master_transcoder and the
salves bitmask to the crtc_state, hence we need to read those during
the HW state readout to avoid pipe state mismatch.

v6:
* Go through both parts of HW readout (Maarten)
* Add a WARN if the same trans configured as
master and slave (Ville, Maarten)
v5:
* Add return INVALID in defaut case (Maarten)
v4:
* Get power domains in master loop for get_config (Ville)
v3:
* Add TRANSCODER_D (Maarten)
* v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
v2:
* Add Transcoder_D and MISSING_CASE (Maarten)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index af6b8f10f132..6e4af6ded6f0 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -10510,6 +10510,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
 	}
 }
 
+static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
+					 enum transcoder cpu_transcoder)
+{
+	u32 trans_port_sync, master_select;
+
+	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
+
+	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
+		return INVALID_TRANSCODER;
+
+	master_select = trans_port_sync &
+			PORT_SYNC_MODE_MASTER_SELECT_MASK;
+	switch (master_select) {
+	case 1:
+		return TRANSCODER_A;
+	case 2:
+		return TRANSCODER_B;
+	case 3:
+		return TRANSCODER_C;
+	case 4:
+		return TRANSCODER_D;
+	default:
+		MISSING_CASE(master_select);
+		return INVALID_TRANSCODER;
+	}
+}
+
+static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
+					       struct intel_crtc_state *pipe_config)
+{
+	struct drm_device *dev = crtc->base.dev;
+	struct drm_i915_private *dev_priv = to_i915(dev);
+	u32 transcoders;
+	enum transcoder cpu_transcoder;
+
+	pipe_config->master_transcoder = transcoder_master(dev_priv,
+							   pipe_config->cpu_transcoder);
+	if (pipe_config->master_transcoder != INVALID_TRANSCODER)
+		pipe_config->sync_mode_slaves_mask = 0;
+
+	transcoders = BIT(TRANSCODER_A) |
+		BIT(TRANSCODER_B) |
+		BIT(TRANSCODER_C) |
+		BIT(TRANSCODER_D);
+	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
+		enum intel_display_power_domain power_domain;
+		intel_wakeref_t trans_wakeref;
+
+		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
+		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
+								   power_domain);
+
+		if (!trans_wakeref)
+			continue;
+
+		if (transcoder_master(dev_priv, cpu_transcoder) ==
+		    pipe_config->cpu_transcoder)
+			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
+
+		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
+	}
+
+	WARN_ON(pipe_config->master_transcoder != INVALID_TRANSCODER &&
+		pipe_config->sync_mode_slaves_mask);
+}
+
 static bool haswell_get_pipe_config(struct intel_crtc *crtc,
 				    struct intel_crtc_state *pipe_config)
 {
@@ -10629,6 +10695,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
 		pipe_config->pixel_multiplier = 1;
 	}
 
+	if (INTEL_GEN(dev_priv) >= 11)
+		icelake_get_trans_port_sync_config(crtc, pipe_config);
+
 out:
 	for_each_power_domain(power_domain, power_domain_mask)
 		intel_display_power_put(dev_priv,
-- 
2.19.1

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

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

* ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev3)
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (8 preceding siblings ...)
  2019-09-25 15:30 ` ✓ Fi.CI.IGT: " Patchwork
@ 2019-09-27  0:41 ` Patchwork
  2019-09-27 19:07 ` ✗ Fi.CI.IGT: failure " Patchwork
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2019-09-27  0:41 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev3)
URL   : https://patchwork.freedesktop.org/series/67043/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6966 -> Patchwork_14562
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_mmap@basic:
    - fi-icl-u3:          [PASS][1] -> [DMESG-WARN][2] ([fdo#107724]) +2 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/fi-icl-u3/igt@gem_mmap@basic.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/fi-icl-u3/igt@gem_mmap@basic.html

  
#### Possible fixes ####

  * igt@gem_ctx_create@basic-files:
    - {fi-icl-guc}:       [INCOMPLETE][3] ([fdo#107713] / [fdo#109100]) -> [PASS][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/fi-icl-guc/igt@gem_ctx_create@basic-files.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/fi-icl-guc/igt@gem_ctx_create@basic-files.html

  * igt@gem_linear_blits@basic:
    - fi-icl-u3:          [DMESG-WARN][5] ([fdo#107724]) -> [PASS][6] +1 similar issue
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/fi-icl-u3/igt@gem_linear_blits@basic.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/fi-icl-u3/igt@gem_linear_blits@basic.html

  
#### Warnings ####

  * igt@kms_chamelium@hdmi-hpd-fast:
    - fi-kbl-7500u:       [FAIL][7] ([fdo#111045] / [fdo#111096]) -> [FAIL][8] ([fdo#111407])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html

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

  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724
  [fdo#109100]: https://bugs.freedesktop.org/show_bug.cgi?id=109100
  [fdo#111045]: https://bugs.freedesktop.org/show_bug.cgi?id=111045
  [fdo#111096]: https://bugs.freedesktop.org/show_bug.cgi?id=111096
  [fdo#111407]: https://bugs.freedesktop.org/show_bug.cgi?id=111407
  [fdo#111736]: https://bugs.freedesktop.org/show_bug.cgi?id=111736


Participating hosts (53 -> 46)
------------------------------

  Missing    (7): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-icl-y fi-byt-clapper fi-bdw-samus 


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6966 -> Patchwork_14562

  CI-20190529: 20190529
  CI_DRM_6966: 381f5de06837c7a432d0c614ca7f0ece033ce840 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5206: 5a6c68568def840cd720f18fc66f529a89f84675 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14562: 86fe7aea22249df6d87bcbb1bc5e095cc1f58656 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

86fe7aea2224 drm/i915/display/icl: In port sync mode disable slaves first then master
42a5f56dca37 drm/i915/display/icl: Disable transcoder port sync as part of crtc_disable() sequence
82223bc8e2d2 drm/i915/display/icl: Enable master-slaves in trans port sync
390bb3671e76 drm/i915/display/icl: HW state readout for transcoder port sync config
c3559c392163 drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports
4c034f9bc296 drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync

== Logs ==

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

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

* ✗ Fi.CI.IGT: failure for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev3)
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (9 preceding siblings ...)
  2019-09-27  0:41 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev3) Patchwork
@ 2019-09-27 19:07 ` Patchwork
  2019-09-27 20:38 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev4) Patchwork
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2019-09-27 19:07 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev3)
URL   : https://patchwork.freedesktop.org/series/67043/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_6966_full -> Patchwork_14562_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_14562_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_14562_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@perf_pmu@busy-idle-no-semaphores-bcs0:
    - shard-kbl:          [PASS][1] -> [DMESG-WARN][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-kbl2/igt@perf_pmu@busy-idle-no-semaphores-bcs0.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-kbl6/igt@perf_pmu@busy-idle-no-semaphores-bcs0.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_schedule@in-order-bsd2:
    - shard-iclb:         [PASS][3] -> [SKIP][4] ([fdo#109276]) +14 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb2/igt@gem_exec_schedule@in-order-bsd2.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb8/igt@gem_exec_schedule@in-order-bsd2.html

  * igt@gem_exec_schedule@preempt-bsd:
    - shard-iclb:         [PASS][5] -> [SKIP][6] ([fdo#111325])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb5/igt@gem_exec_schedule@preempt-bsd.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb2/igt@gem_exec_schedule@preempt-bsd.html

  * igt@gem_softpin@noreloc-s3:
    - shard-skl:          [PASS][7] -> [INCOMPLETE][8] ([fdo#104108])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-skl2/igt@gem_softpin@noreloc-s3.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-skl3/igt@gem_softpin@noreloc-s3.html

  * igt@i915_suspend@sysfs-reader:
    - shard-apl:          [PASS][9] -> [DMESG-WARN][10] ([fdo#108566]) +3 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-apl5/igt@i915_suspend@sysfs-reader.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-apl7/igt@i915_suspend@sysfs-reader.html

  * igt@kms_flip@2x-flip-vs-dpms-interruptible:
    - shard-hsw:          [PASS][11] -> [INCOMPLETE][12] ([fdo#103540])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-hsw1/igt@kms_flip@2x-flip-vs-dpms-interruptible.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-hsw4/igt@kms_flip@2x-flip-vs-dpms-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-skl:          [PASS][13] -> [FAIL][14] ([fdo#105363])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-skl2/igt@kms_flip@flip-vs-expired-vblank.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-skl5/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-kbl:          [PASS][15] -> [DMESG-WARN][16] ([fdo#103313])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-kbl2/igt@kms_flip@flip-vs-suspend-interruptible.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-kbl2/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt:
    - shard-iclb:         [PASS][17] -> [FAIL][18] ([fdo#103167]) +8 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_psr@psr2_sprite_mmap_gtt:
    - shard-iclb:         [PASS][19] -> [SKIP][20] ([fdo#109441]) +2 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb2/igt@kms_psr@psr2_sprite_mmap_gtt.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb8/igt@kms_psr@psr2_sprite_mmap_gtt.html

  * igt@kms_vblank@pipe-c-ts-continuation-suspend:
    - shard-iclb:         [PASS][21] -> [DMESG-WARN][22] ([fdo#111764])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb1/igt@kms_vblank@pipe-c-ts-continuation-suspend.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb2/igt@kms_vblank@pipe-c-ts-continuation-suspend.html

  * igt@sw_sync@sync_expired_merge:
    - shard-apl:          [PASS][23] -> [INCOMPLETE][24] ([fdo#103927])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-apl6/igt@sw_sync@sync_expired_merge.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-apl6/igt@sw_sync@sync_expired_merge.html

  
#### Possible fixes ####

  * igt@gem_ctx_shared@exec-single-timeline-bsd:
    - shard-iclb:         [SKIP][25] ([fdo#110841]) -> [PASS][26]
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb2/igt@gem_ctx_shared@exec-single-timeline-bsd.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb8/igt@gem_ctx_shared@exec-single-timeline-bsd.html

  * igt@gem_exec_schedule@preempt-other-chain-bsd:
    - shard-iclb:         [SKIP][27] ([fdo#111325]) -> [PASS][28] +9 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb2/igt@gem_exec_schedule@preempt-other-chain-bsd.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb8/igt@gem_exec_schedule@preempt-other-chain-bsd.html

  * igt@gem_exec_schedule@preempt-queue-bsd2:
    - shard-iclb:         [SKIP][29] ([fdo#109276]) -> [PASS][30] +11 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb7/igt@gem_exec_schedule@preempt-queue-bsd2.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb4/igt@gem_exec_schedule@preempt-queue-bsd2.html

  * igt@gem_workarounds@suspend-resume-context:
    - shard-apl:          [DMESG-WARN][31] ([fdo#108566]) -> [PASS][32] +3 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-apl7/igt@gem_workarounds@suspend-resume-context.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-apl7/igt@gem_workarounds@suspend-resume-context.html

  * {igt@i915_pm_dc@dc6-psr}:
    - shard-iclb:         [FAIL][33] ([fdo#110548]) -> [PASS][34]
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb8/igt@i915_pm_dc@dc6-psr.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb5/igt@i915_pm_dc@dc6-psr.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-kbl:          [FAIL][35] ([fdo#105363]) -> [PASS][36]
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-kbl6/igt@kms_flip@flip-vs-expired-vblank.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-kbl6/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip_tiling@flip-to-x-tiled:
    - shard-iclb:         [FAIL][37] ([fdo#108134]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb1/igt@kms_flip_tiling@flip-to-x-tiled.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb4/igt@kms_flip_tiling@flip-to-x-tiled.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
    - shard-iclb:         [FAIL][39] ([fdo#103167]) -> [PASS][40] +3 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_psr@psr2_cursor_render:
    - shard-iclb:         [SKIP][41] ([fdo#109441]) -> [PASS][42] +1 similar issue
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb5/igt@kms_psr@psr2_cursor_render.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb2/igt@kms_psr@psr2_cursor_render.html

  
#### Warnings ####

  * igt@gem_ctx_isolation@vcs1-nonpriv:
    - shard-iclb:         [FAIL][43] ([fdo#111329]) -> [SKIP][44] ([fdo#109276])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb4/igt@gem_ctx_isolation@vcs1-nonpriv.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb6/igt@gem_ctx_isolation@vcs1-nonpriv.html

  * igt@gem_mocs_settings@mocs-reset-bsd2:
    - shard-iclb:         [SKIP][45] ([fdo#109276]) -> [FAIL][46] ([fdo#111330]) +2 similar issues
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-iclb6/igt@gem_mocs_settings@mocs-reset-bsd2.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-iclb1/igt@gem_mocs_settings@mocs-reset-bsd2.html

  * igt@kms_content_protection@atomic:
    - shard-apl:          [FAIL][47] ([fdo#110321] / [fdo#110336]) -> [INCOMPLETE][48] ([fdo#103927])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6966/shard-apl5/igt@kms_content_protection@atomic.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14562/shard-apl3/igt@kms_content_protection@atomic.html

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

  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103313]: https://bugs.freedesktop.org/show_bug.cgi?id=103313
  [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#105411]: https://bugs.freedesktop.org/show_bug.cgi?id=105411
  [fdo#108134]: https://bugs.freedesktop.org/show_bug.cgi?id=108134
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#110321]: https://bugs.freedesktop.org/show_bug.cgi?id=110321
  [fdo#110336]: https://bugs.freedesktop.org/show_bug.cgi?id=110336
  [fdo#110548]: https://bugs.freedesktop.org/show_bug.cgi?id=110548
  [fdo#110841]: https://bugs.freedesktop.org/show_bug.cgi?id=110841
  [fdo#111325]: https://bugs.freedesktop.org/show_bug.cgi?id=111325
  [fdo#111329]: https://bugs.freedesktop.org/show_bug.cgi?id=111329
  [fdo#111330]: https://bugs.freedesktop.org/show_bug.cgi?id=111330
  [fdo#111764]: https://bugs.freedesktop.org/show_bug.cgi?id=111764
  [fdo#111781]: https://bugs.freedesktop.org/show_bug.cgi?id=111781


Participating hosts (16 -> 10)
------------------------------

  Missing    (6): shard-tglb1 shard-tglb2 shard-tglb3 shard-tglb4 shard-tglb5 shard-tglb6 


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6966 -> Patchwork_14562

  CI-20190529: 20190529
  CI_DRM_6966: 381f5de06837c7a432d0c614ca7f0ece033ce840 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5206: 5a6c68568def840cd720f18fc66f529a89f84675 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14562: 86fe7aea22249df6d87bcbb1bc5e095cc1f58656 @ 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_14562/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev4)
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (10 preceding siblings ...)
  2019-09-27 19:07 ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2019-09-27 20:38 ` Patchwork
  2019-09-28 12:22 ` ✗ Fi.CI.IGT: failure " Patchwork
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2019-09-27 20:38 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev4)
URL   : https://patchwork.freedesktop.org/series/67043/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6971 -> Patchwork_14572
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_create@basic-files:
    - fi-icl-u3:          [PASS][1] -> [INCOMPLETE][2] ([fdo#107713] / [fdo#109100])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/fi-icl-u3/igt@gem_ctx_create@basic-files.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/fi-icl-u3/igt@gem_ctx_create@basic-files.html

  * igt@kms_busy@basic-flip-a:
    - fi-cml-u2:          [PASS][3] -> [DMESG-WARN][4] ([fdo#105763])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/fi-cml-u2/igt@kms_busy@basic-flip-a.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/fi-cml-u2/igt@kms_busy@basic-flip-a.html

  
#### Possible fixes ####

  * igt@gem_ctx_create@basic-files:
    - {fi-cml-s}:         [INCOMPLETE][5] ([fdo#110566]) -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/fi-cml-s/igt@gem_ctx_create@basic-files.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/fi-cml-s/igt@gem_ctx_create@basic-files.html
    - {fi-tgl-u2}:        [INCOMPLETE][7] ([fdo#111735]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/fi-tgl-u2/igt@gem_ctx_create@basic-files.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/fi-tgl-u2/igt@gem_ctx_create@basic-files.html

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

  [fdo#105763]: https://bugs.freedesktop.org/show_bug.cgi?id=105763
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#109100]: https://bugs.freedesktop.org/show_bug.cgi?id=109100
  [fdo#110566]: https://bugs.freedesktop.org/show_bug.cgi?id=110566
  [fdo#111735]: https://bugs.freedesktop.org/show_bug.cgi?id=111735


Participating hosts (50 -> 43)
------------------------------

  Additional (2): fi-bsw-kefka fi-icl-guc 
  Missing    (9): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-icl-u2 fi-skl-6600u fi-icl-y fi-bdw-samus fi-byt-clapper fi-skl-6700k2 


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6971 -> Patchwork_14572

  CI-20190529: 20190529
  CI_DRM_6971: b891ecf6856b90013c667c0d8becb7edb2f0c0d1 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5206: 5a6c68568def840cd720f18fc66f529a89f84675 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14572: 6f6828eb81f7110381aff173ea01129bb9b21cb4 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

6f6828eb81f7 drm/i915/display/icl: In port sync mode disable slaves first then master
55b798a89124 drm/i915/display/icl: Disable transcoder port sync as part of crtc_disable() sequence
198940813403 drm/i915/display/icl: Enable master-slaves in trans port sync
1406ade015dd drm/i915/display/icl: HW state readout for transcoder port sync config
280be1656548 drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports
0fad8ae432c5 drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync

== Logs ==

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

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

* Re: [PATCH v5 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-27  0:11     ` [PATCH v5 3/6] " Manasi Navare
@ 2019-09-27 21:04       ` Manasi Navare
  2019-09-30 14:21       ` Ville Syrjälä
  2019-09-30 19:45       ` Lucas De Marchi
  2 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-09-27 21:04 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula

Ville, Maarten

In this patch, I added a WARN ON for the case where the same trans could be
configured as master and slave.

Does this look good?

Manasi 


On Thu, Sep 26, 2019 at 05:11:10PM -0700, Manasi Navare wrote:
> After the state is committed, we readout the HW registers and compare
> the HW state with the SW state that we just committed.
> For Transcdoer port sync, we add master_transcoder and the
> salves bitmask to the crtc_state, hence we need to read those during
> the HW state readout to avoid pipe state mismatch.
> 
> v6:
> * Go through both parts of HW readout (Maarten)
> * Add a WARN if the same trans configured as
> master and slave (Ville, Maarten)
> v5:
> * Add return INVALID in defaut case (Maarten)
> v4:
> * Get power domains in master loop for get_config (Ville)
> v3:
> * Add TRANSCODER_D (Maarten)
> * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> v2:
> * Add Transcoder_D and MISSING_CASE (Maarten)
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
>  1 file changed, 69 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index af6b8f10f132..6e4af6ded6f0 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -10510,6 +10510,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
>  	}
>  }
>  
> +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> +					 enum transcoder cpu_transcoder)
> +{
> +	u32 trans_port_sync, master_select;
> +
> +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> +
> +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> +		return INVALID_TRANSCODER;
> +
> +	master_select = trans_port_sync &
> +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> +	switch (master_select) {
> +	case 1:
> +		return TRANSCODER_A;
> +	case 2:
> +		return TRANSCODER_B;
> +	case 3:
> +		return TRANSCODER_C;
> +	case 4:
> +		return TRANSCODER_D;
> +	default:
> +		MISSING_CASE(master_select);
> +		return INVALID_TRANSCODER;
> +	}
> +}
> +
> +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> +					       struct intel_crtc_state *pipe_config)
> +{
> +	struct drm_device *dev = crtc->base.dev;
> +	struct drm_i915_private *dev_priv = to_i915(dev);
> +	u32 transcoders;
> +	enum transcoder cpu_transcoder;
> +
> +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> +							   pipe_config->cpu_transcoder);
> +	if (pipe_config->master_transcoder != INVALID_TRANSCODER)
> +		pipe_config->sync_mode_slaves_mask = 0;
> +
> +	transcoders = BIT(TRANSCODER_A) |
> +		BIT(TRANSCODER_B) |
> +		BIT(TRANSCODER_C) |
> +		BIT(TRANSCODER_D);
> +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> +		enum intel_display_power_domain power_domain;
> +		intel_wakeref_t trans_wakeref;
> +
> +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> +								   power_domain);
> +
> +		if (!trans_wakeref)
> +			continue;
> +
> +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> +		    pipe_config->cpu_transcoder)
> +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> +
> +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> +	}
> +
> +	WARN_ON(pipe_config->master_transcoder != INVALID_TRANSCODER &&
> +		pipe_config->sync_mode_slaves_mask);
> +}
> +
>  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
>  				    struct intel_crtc_state *pipe_config)
>  {
> @@ -10629,6 +10695,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
>  		pipe_config->pixel_multiplier = 1;
>  	}
>  
> +	if (INTEL_GEN(dev_priv) >= 11)
> +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> +
>  out:
>  	for_each_power_domain(power_domain, power_domain_mask)
>  		intel_display_power_put(dev_priv,
> -- 
> 2.19.1
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.IGT: failure for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev4)
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (11 preceding siblings ...)
  2019-09-27 20:38 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev4) Patchwork
@ 2019-09-28 12:22 ` Patchwork
  2019-09-30 14:14 ` [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Ville Syrjälä
  2019-09-30 18:37 ` Lucas De Marchi
  14 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2019-09-28 12:22 UTC (permalink / raw)
  To: Manasi Navare; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev4)
URL   : https://patchwork.freedesktop.org/series/67043/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_6971_full -> Patchwork_14572_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_14572_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_14572_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_partial_pwrite_pread@writes-after-reads-display:
    - shard-kbl:          [PASS][1] -> [TIMEOUT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-kbl7/igt@gem_partial_pwrite_pread@writes-after-reads-display.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-kbl2/igt@gem_partial_pwrite_pread@writes-after-reads-display.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_eio@suspend:
    - shard-iclb:         [PASS][3] -> [INCOMPLETE][4] ([fdo#107713])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb2/igt@gem_eio@suspend.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb3/igt@gem_eio@suspend.html

  * igt@gem_exec_async@concurrent-writes-bsd:
    - shard-iclb:         [PASS][5] -> [SKIP][6] ([fdo#111325]) +4 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb5/igt@gem_exec_async@concurrent-writes-bsd.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb2/igt@gem_exec_async@concurrent-writes-bsd.html

  * igt@i915_suspend@sysfs-reader:
    - shard-apl:          [PASS][7] -> [DMESG-WARN][8] ([fdo#108566]) +3 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-apl2/igt@i915_suspend@sysfs-reader.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-apl6/igt@i915_suspend@sysfs-reader.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
    - shard-hsw:          [PASS][9] -> [FAIL][10] ([fdo#105767])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-hsw5/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-hsw4/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-skl:          [PASS][11] -> [FAIL][12] ([fdo#105363])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-skl5/igt@kms_flip@flip-vs-expired-vblank.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-skl2/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-skl:          [PASS][13] -> [INCOMPLETE][14] ([fdo#109507])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-skl4/igt@kms_flip@flip-vs-suspend.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-skl1/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-hsw:          [PASS][15] -> [INCOMPLETE][16] ([fdo#103540])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-hsw1/igt@kms_flip@flip-vs-suspend-interruptible.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-hsw2/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
    - shard-iclb:         [PASS][17] -> [FAIL][18] ([fdo#103167]) +5 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_psr@psr2_sprite_mmap_gtt:
    - shard-iclb:         [PASS][19] -> [SKIP][20] ([fdo#109441]) +2 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb2/igt@kms_psr@psr2_sprite_mmap_gtt.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb1/igt@kms_psr@psr2_sprite_mmap_gtt.html

  * igt@perf@polling:
    - shard-skl:          [PASS][21] -> [FAIL][22] ([fdo#110728])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-skl1/igt@perf@polling.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-skl10/igt@perf@polling.html

  * igt@perf_pmu@cpu-hotplug:
    - shard-kbl:          [PASS][23] -> [TIMEOUT][24] ([fdo#111546] / [fdo#111800])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-kbl7/igt@perf_pmu@cpu-hotplug.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-kbl2/igt@perf_pmu@cpu-hotplug.html

  * igt@prime_busy@hang-bsd2:
    - shard-iclb:         [PASS][25] -> [SKIP][26] ([fdo#109276]) +13 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb4/igt@prime_busy@hang-bsd2.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb6/igt@prime_busy@hang-bsd2.html

  
#### Possible fixes ####

  * igt@gem_exec_schedule@reorder-wide-bsd:
    - shard-iclb:         [SKIP][27] ([fdo#111325]) -> [PASS][28] +3 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb1/igt@gem_exec_schedule@reorder-wide-bsd.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb6/igt@gem_exec_schedule@reorder-wide-bsd.html

  * igt@gem_workarounds@suspend-resume-context:
    - shard-apl:          [DMESG-WARN][29] ([fdo#108566]) -> [PASS][30] +3 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-apl5/igt@gem_workarounds@suspend-resume-context.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-apl1/igt@gem_workarounds@suspend-resume-context.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-skl:          [FAIL][31] ([fdo#105363]) -> [PASS][32]
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-skl6/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-skl1/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite:
    - shard-iclb:         [FAIL][33] ([fdo#103167]) -> [PASS][34] +6 similar issues
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb7/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb2/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html

  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes:
    - shard-skl:          [INCOMPLETE][35] ([fdo#104108]) -> [PASS][36]
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-skl9/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-skl10/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes.html

  * igt@kms_plane_lowres@pipe-a-tiling-x:
    - shard-iclb:         [FAIL][37] ([fdo#103166]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb1/igt@kms_plane_lowres@pipe-a-tiling-x.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb6/igt@kms_plane_lowres@pipe-a-tiling-x.html

  * igt@kms_psr@psr2_cursor_mmap_gtt:
    - shard-iclb:         [SKIP][39] ([fdo#109441]) -> [PASS][40]
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb7/igt@kms_psr@psr2_cursor_mmap_gtt.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb2/igt@kms_psr@psr2_cursor_mmap_gtt.html

  * igt@kms_setmode@basic:
    - shard-apl:          [FAIL][41] ([fdo#99912]) -> [PASS][42]
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-apl3/igt@kms_setmode@basic.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-apl6/igt@kms_setmode@basic.html

  * igt@prime_vgem@fence-wait-bsd2:
    - shard-iclb:         [SKIP][43] ([fdo#109276]) -> [PASS][44] +20 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb5/igt@prime_vgem@fence-wait-bsd2.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb2/igt@prime_vgem@fence-wait-bsd2.html

  
#### Warnings ####

  * igt@gem_ctx_isolation@vcs1-nonpriv:
    - shard-iclb:         [SKIP][45] ([fdo#109276]) -> [FAIL][46] ([fdo#111329])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb8/igt@gem_ctx_isolation@vcs1-nonpriv.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb1/igt@gem_ctx_isolation@vcs1-nonpriv.html

  * igt@gem_mocs_settings@mocs-settings-bsd2:
    - shard-iclb:         [FAIL][47] ([fdo#111330]) -> [SKIP][48] ([fdo#109276]) +1 similar issue
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb4/igt@gem_mocs_settings@mocs-settings-bsd2.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb5/igt@gem_mocs_settings@mocs-settings-bsd2.html

  * igt@runner@aborted:
    - shard-iclb:         ([FAIL][49], [FAIL][50], [FAIL][51]) ([fdo#108654] / [fdo#111093]) -> ([FAIL][52], [FAIL][53]) ([fdo#111093])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb2/igt@runner@aborted.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb5/igt@runner@aborted.html
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6971/shard-iclb7/igt@runner@aborted.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb3/igt@runner@aborted.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14572/shard-iclb2/igt@runner@aborted.html

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

  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#105767]: https://bugs.freedesktop.org/show_bug.cgi?id=105767
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#108654]: https://bugs.freedesktop.org/show_bug.cgi?id=108654
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109507]: https://bugs.freedesktop.org/show_bug.cgi?id=109507
  [fdo#110728]: https://bugs.freedesktop.org/show_bug.cgi?id=110728
  [fdo#111093]: https://bugs.freedesktop.org/show_bug.cgi?id=111093
  [fdo#111325]: https://bugs.freedesktop.org/show_bug.cgi?id=111325
  [fdo#111329]: https://bugs.freedesktop.org/show_bug.cgi?id=111329
  [fdo#111330]: https://bugs.freedesktop.org/show_bug.cgi?id=111330
  [fdo#111546]: https://bugs.freedesktop.org/show_bug.cgi?id=111546
  [fdo#111757]: https://bugs.freedesktop.org/show_bug.cgi?id=111757
  [fdo#111781]: https://bugs.freedesktop.org/show_bug.cgi?id=111781
  [fdo#111800]: https://bugs.freedesktop.org/show_bug.cgi?id=111800
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (15 -> 10)
------------------------------

  Additional (1): pig-hsw-4770r 
  Missing    (6): shard-tglb1 shard-tglb2 shard-tglb3 shard-tglb4 shard-tglb5 shard-tglb6 


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

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6971 -> Patchwork_14572

  CI-20190529: 20190529
  CI_DRM_6971: b891ecf6856b90013c667c0d8becb7edb2f0c0d1 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5206: 5a6c68568def840cd720f18fc66f529a89f84675 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14572: 6f6828eb81f7110381aff173ea01129bb9b21cb4 @ 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_14572/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (12 preceding siblings ...)
  2019-09-28 12:22 ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2019-09-30 14:14 ` Ville Syrjälä
  2019-10-07  3:43   ` Manasi Navare
  2019-09-30 18:37 ` Lucas De Marchi
  14 siblings, 1 reply; 38+ messages in thread
From: Ville Syrjälä @ 2019-09-30 14:14 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Daniel Vetter, intel-gfx

On Sun, Sep 22, 2019 at 10:08:02AM -0700, Manasi Navare wrote:
> In case of tiled displays when the two tiles are sent across two CRTCs
> over two separate DP SST connectors, we need a mechanism to synchronize
> the two CRTCs and their corresponding transcoders.
> So use the master-slave mode where there is one master corresponding
> to last horizontal and vertical tile that needs to be genlocked with
> all other slave tiles.
> This patch identifies saves the master transcoder in all the slave
> CRTC states. This is needed to select the master CRTC/transcoder
> while configuring transcoder port sync for the corresponding slaves.
> 
> v4:
> * Rebase
> v3:
> * Use master_tramscoder instead of master_crtc for valid
> HW state readouts (Ville)
> v2:
> * Move this to intel_mode_set_pipe_config(Jani N, Ville)
> * Use slave_bitmask to save associated slaves in master crtc state (Ville)
> 
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c  | 123 ++++++++++++++++++
>  drivers/gpu/drm/i915/display/intel_display.h  |   3 +
>  .../drm/i915/display/intel_display_types.h    |   6 +
>  3 files changed, 132 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index c05ba6af6226..4ff375d5852d 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -521,6 +521,24 @@ needs_modeset(const struct intel_crtc_state *state)
>  	return drm_atomic_crtc_needs_modeset(&state->base);
>  }
>  
> +bool
> +is_trans_port_sync_mode(struct drm_i915_private *dev_priv,

Redundant function parameter. Can be derived if needed.

> +			const struct intel_crtc_state *state)

'crtc_state'

> +{
> +	return (INTEL_GEN(dev_priv) >= 11 &&

I don't think we need a gen check at all. The state should not have
master/slaves set if the feature is not supported.

> +		(state->master_transcoder != INVALID_TRANSCODER ||
> +		 state->sync_mode_slaves_mask));
> +}
> +
> +static bool
> +is_trans_port_sync_master(struct drm_i915_private *dev_priv,
> +			  const struct intel_crtc_state *state)
> +{
> +	return (INTEL_GEN(dev_priv) >= 11 &&
> +		(state->master_transcoder == INVALID_TRANSCODER &&
> +		 state->sync_mode_slaves_mask));
> +}
> +
>  /*
>   * Platform specific helpers to calculate the port PLL loopback- (clock.m),
>   * and post-divider (clock.p) values, pre- (clock.vco) and post-divided fast
> @@ -11773,6 +11791,91 @@ static bool c8_planes_changed(const struct intel_crtc_state *new_crtc_state)
>  	return !old_crtc_state->c8_planes != !new_crtc_state->c8_planes;
>  }
>  
> +static int icl_add_sync_mode_crtcs(struct drm_crtc *crtc,

intel_ types all over please.

Also don't need all three funciton arguments. Either just
crtc_state or state+crtc will do.

> +				   struct intel_crtc_state *crtc_state,
> +				   struct drm_atomic_state *state)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
> +	struct drm_connector *master_connector, *connector;
> +	struct drm_connector_state *connector_state;
> +	struct drm_connector_list_iter conn_iter;
> +	struct drm_crtc *master_crtc = NULL;
> +	struct drm_crtc_state *master_crtc_state;
> +	struct intel_crtc_state *master_pipe_config;
> +	int i, tile_group_id;
> +
> +	if (INTEL_GEN(dev_priv) < 11)
> +		return 0;
> +
> +	/*
> +	 * In case of tiled displays there could be one or more slaves but there is
> +	 * only one master. Lets make the CRTC used by the connector corresponding
> +	 * to the last horizonal and last vertical tile a master/genlock CRTC.
> +	 * All the other CRTCs corresponding to other tiles of the same Tile group
> +	 * are the slave CRTCs and hold a pointer to their genlock CRTC.
> +	 */
> +	for_each_new_connector_in_state(state, connector, connector_state, i) {
> +		if (connector_state->crtc != crtc)
> +			continue;
> +		if (!connector->has_tile)
> +			continue;
> +		if (crtc_state->base.mode.hdisplay != connector->tile_h_size ||
> +		    crtc_state->base.mode.vdisplay != connector->tile_v_size)
> +			return 0;
> +		if (connector->tile_h_loc == connector->num_h_tile - 1 &&
> +		    connector->tile_v_loc == connector->num_v_tile - 1)
> +			continue;
> +		crtc_state->sync_mode_slaves_mask = 0;
> +		tile_group_id = connector->tile_group->id;
> +		drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
> +		drm_for_each_connector_iter(master_connector, &conn_iter) {
> +			struct drm_connector_state *master_conn_state = NULL;
> +
> +			if (!master_connector->has_tile)
> +				continue;
> +			if (master_connector->tile_h_loc != master_connector->num_h_tile - 1 ||
> +			    master_connector->tile_v_loc != master_connector->num_v_tile - 1)
> +				continue;
> +			if (master_connector->tile_group->id != tile_group_id)
> +				continue;
> +
> +			master_conn_state = drm_atomic_get_connector_state(state,
> +									   master_connector);
> +			if (IS_ERR(master_conn_state)) {
> +				drm_connector_list_iter_end(&conn_iter);
> +				return PTR_ERR(master_conn_state);
> +			}
> +			if (master_conn_state->crtc) {
> +				master_crtc = master_conn_state->crtc;
> +				break;
> +			}
> +		}
> +		drm_connector_list_iter_end(&conn_iter);
> +
> +		if (!master_crtc) {
> +			DRM_DEBUG_KMS("Could not find Master CRTC for Slave CRTC %d\n",
> +				      connector_state->crtc->base.id);
> +			return -EINVAL;
> +		}
> +
> +		master_crtc_state = drm_atomic_get_crtc_state(state,
> +							      master_crtc);
> +		if (IS_ERR(master_crtc_state))
> +			return PTR_ERR(master_crtc_state);
> +
> +		master_pipe_config = to_intel_crtc_state(master_crtc_state);
> +		crtc_state->master_transcoder = master_pipe_config->cpu_transcoder;
> +		master_pipe_config->sync_mode_slaves_mask |=
> +			BIT(crtc_state->cpu_transcoder);
> +		DRM_DEBUG_KMS("Master Transcoder = %s added for Slave CRTC = %d, slave transcoder bitmask = %d\n",
> +			      transcoder_name(crtc_state->master_transcoder),
> +			      crtc_state->base.crtc->base.id,
> +			      master_pipe_config->sync_mode_slaves_mask);
> +	}
> +
> +	return 0;
> +}
> +
>  static int intel_crtc_atomic_check(struct drm_crtc *_crtc,
>  				   struct drm_crtc_state *_crtc_state)
>  {
> @@ -12276,6 +12379,12 @@ clear_intel_crtc_state(struct intel_crtc_state *crtc_state)
>  	if (IS_G4X(dev_priv) ||
>  	    IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
>  		saved_state->wm = crtc_state->wm;
> +	/* Save the slave bitmask which gets filled for master crtc state during
> +	 * slave atomic check call.
> +	 */

Wrong comment format.

> +	if (is_trans_port_sync_master(dev_priv, crtc_state))
> +		saved_state->sync_mode_slaves_mask =
> +			crtc_state->sync_mode_slaves_mask;
>  
>  	/* Keep base drm_crtc_state intact, only clear our extended struct */
>  	BUILD_BUG_ON(offsetof(struct intel_crtc_state, base));
> @@ -12369,6 +12478,15 @@ intel_modeset_pipe_config(struct intel_crtc_state *pipe_config)
>  	drm_mode_set_crtcinfo(&pipe_config->base.adjusted_mode,
>  			      CRTC_STEREO_DOUBLE);
>  
> +	/* Set the crtc_state defaults for trans_port_sync */
> +	pipe_config->master_transcoder = INVALID_TRANSCODER;
> +	ret = icl_add_sync_mode_crtcs(crtc, pipe_config, state);
> +	if (ret) {
> +		DRM_DEBUG_KMS("Cannot assign Sync Mode CRTCs: %d\n",
> +			      ret);
> +		return ret;
> +	}
> +
>  	/* Pass our mode to the connectors and the CRTC to give them a chance to
>  	 * adjust it according to limitations or connector properties, and also
>  	 * a chance to reject the mode entirely.
> @@ -12882,6 +13000,11 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
>  	PIPE_CONF_CHECK_INFOFRAME(hdmi);
>  	PIPE_CONF_CHECK_INFOFRAME(drm);
>  
> +	if (INTEL_GEN(dev_priv) >= 11) {

Just do the check uncoditionally.

> +		PIPE_CONF_CHECK_I(sync_mode_slaves_mask);
> +		PIPE_CONF_CHECK_I(master_transcoder);
> +	}
> +
>  #undef PIPE_CONF_CHECK_X
>  #undef PIPE_CONF_CHECK_I
>  #undef PIPE_CONF_CHECK_BOOL
> diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
> index b1ae0e59c715..1623face436b 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.h
> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> @@ -93,6 +93,7 @@ enum pipe {
>  #define pipe_name(p) ((p) + 'A')
>  
>  enum transcoder {
> +	INVALID_TRANSCODER = -1,
>  	/*
>  	 * The following transcoders have a 1:1 transcoder -> pipe mapping,
>  	 * keep their values fixed: the code assumes that TRANSCODER_A=0, the
> @@ -453,6 +454,8 @@ enum drm_mode_status
>  intel_mode_valid_max_plane_size(struct drm_i915_private *dev_priv,
>  				const struct drm_display_mode *mode);
>  enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port);
> +bool is_trans_port_sync_mode(struct drm_i915_private *i915,
> +			     const struct intel_crtc_state *state);
>  
>  void intel_plane_destroy(struct drm_plane *plane);
>  void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index d5cc4b810d9e..17ff34ca298b 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -991,6 +991,12 @@ struct intel_crtc_state {
>  
>  	/* Forward Error correction State */
>  	bool fec_enable;
> +
> +	/* Pointer to master transcoder in case of tiled displays */
> +	enum transcoder master_transcoder;
> +
> +	/* Bitmask to indicate slaves attached */
> +	u8 sync_mode_slaves_mask;
>  };
>  
>  struct intel_crtc {
> -- 
> 2.19.1

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

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

* Re: [PATCH v3 2/6] drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports
  2019-09-22 17:08 ` [PATCH v3 2/6] drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports Manasi Navare
@ 2019-09-30 14:19   ` Ville Syrjälä
  2019-10-07  3:22     ` Manasi Navare
  0 siblings, 1 reply; 38+ messages in thread
From: Ville Syrjälä @ 2019-09-30 14:19 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Daniel Vetter, intel-gfx, Jani Nikula

On Sun, Sep 22, 2019 at 10:08:03AM -0700, Manasi Navare wrote:
> In case of tiled displays where different tiles are displayed across
> different ports, we need to synchronize the transcoders involved.
> This patch implements the transcoder port sync feature for
> synchronizing one master transcoder with one or more slave
> transcoders. This is only enbaled in slave transcoder
> and the master transcoder is unaware that it is operating
> in this mode.
> This has been tested with tiled display connected to ICL.
> 
> v5:
> * Add TRANSCODER_D case and MISSING_CASE (Maarten)
> v4:
> Rebase
> v3:
> * Check of DP_MST moved to atomic_check (Maarten)
> v2:
> * Do not use RMW, just write to the register in commit (Jani N)
> 
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 46 ++++++++++++++++++++
>  1 file changed, 46 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 4ff375d5852d..1ae5eafe2892 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -4426,6 +4426,49 @@ static void icl_set_pipe_chicken(struct intel_crtc *crtc)
>  	I915_WRITE(PIPE_CHICKEN(pipe), tmp);
>  }
>  
> +static void icl_enable_trans_port_sync(const struct intel_crtc_state *crtc_state)
> +{
> +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
> +	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> +	u32 trans_ddi_func_ctl2_val;
> +	u8 master_select;
> +
> +	/*
> +	 * Configure the master select and enable Transcoder Port Sync for
> +	 * Slave CRTCs transcoder.
> +	 */
> +	if (crtc_state->master_transcoder == INVALID_TRANSCODER)
> +		return;
> +
> +	switch (crtc_state->master_transcoder) {
> +	case TRANSCODER_A:
> +		master_select = 1;
> +		break;
> +	case TRANSCODER_B:
> +		master_select = 2;
> +		break;
> +	case TRANSCODER_C:
> +		master_select = 3;
> +		break;
> +	case TRANSCODER_D:
> +		master_select = 4;
> +		break;

That's all just master_transcoder+1.

> +	case TRANSCODER_EDP:

EDP transcoder can be master. The MISSING_CASE is wrong for EDP.

> +	default:
> +		MISSING_CASE(crtc_state->master_transcoder);
> +		master_select = 0;
> +	}
> +	/* Set the master select bits for Tranascoder Port Sync */
> +	trans_ddi_func_ctl2_val = (PORT_SYNC_MODE_MASTER_SELECT(master_select) &
> +				   PORT_SYNC_MODE_MASTER_SELECT_MASK) <<
> +		PORT_SYNC_MODE_MASTER_SELECT_SHIFT;
> +	/* Enable Transcoder Port Sync */
> +	trans_ddi_func_ctl2_val |= PORT_SYNC_MODE_ENABLE;
> +
> +	I915_WRITE(TRANS_DDI_FUNC_CTL2(crtc_state->cpu_transcoder),
> +		   trans_ddi_func_ctl2_val);
> +}
> +
>  static void intel_update_pipe_config(const struct intel_crtc_state *old_crtc_state,
>  				     const struct intel_crtc_state *new_crtc_state)
>  {
> @@ -6494,6 +6537,9 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config,
>  	if (!transcoder_is_dsi(cpu_transcoder))
>  		intel_set_pipe_timings(pipe_config);
>  
> +	if (INTEL_GEN(dev_priv) >= 11)
> +		icl_enable_trans_port_sync(pipe_config);
> +
>  	intel_set_pipe_src_size(pipe_config);
>  
>  	if (cpu_transcoder != TRANSCODER_EDP &&
> -- 
> 2.19.1

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

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

* Re: [PATCH v5 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-27  0:11     ` [PATCH v5 3/6] " Manasi Navare
  2019-09-27 21:04       ` Manasi Navare
@ 2019-09-30 14:21       ` Ville Syrjälä
  2019-10-07  3:31         ` Manasi Navare
  2019-09-30 19:45       ` Lucas De Marchi
  2 siblings, 1 reply; 38+ messages in thread
From: Ville Syrjälä @ 2019-09-30 14:21 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Jani Nikula, intel-gfx

On Thu, Sep 26, 2019 at 05:11:10PM -0700, Manasi Navare wrote:
> After the state is committed, we readout the HW registers and compare
> the HW state with the SW state that we just committed.
> For Transcdoer port sync, we add master_transcoder and the
> salves bitmask to the crtc_state, hence we need to read those during
> the HW state readout to avoid pipe state mismatch.
> 
> v6:
> * Go through both parts of HW readout (Maarten)
> * Add a WARN if the same trans configured as
> master and slave (Ville, Maarten)
> v5:
> * Add return INVALID in defaut case (Maarten)
> v4:
> * Get power domains in master loop for get_config (Ville)
> v3:
> * Add TRANSCODER_D (Maarten)
> * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> v2:
> * Add Transcoder_D and MISSING_CASE (Maarten)
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
>  1 file changed, 69 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index af6b8f10f132..6e4af6ded6f0 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -10510,6 +10510,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
>  	}
>  }
>  
> +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> +					 enum transcoder cpu_transcoder)
> +{
> +	u32 trans_port_sync, master_select;
> +
> +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> +
> +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> +		return INVALID_TRANSCODER;
> +
> +	master_select = trans_port_sync &
> +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> +	switch (master_select) {
> +	case 1:
> +		return TRANSCODER_A;
> +	case 2:
> +		return TRANSCODER_B;
> +	case 3:
> +		return TRANSCODER_C;
> +	case 4:
> +		return TRANSCODER_D;

Missing EDP. Also A-D are just master_select-1

> +	default:
> +		MISSING_CASE(master_select);
> +		return INVALID_TRANSCODER;
> +	}
> +}
> +
> +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> +					       struct intel_crtc_state *pipe_config)

s/pipe_config/crtc_state/

'crtc' argument can be derived so doesn't need to be passed in.

> +{
> +	struct drm_device *dev = crtc->base.dev;
> +	struct drm_i915_private *dev_priv = to_i915(dev);
> +	u32 transcoders;
> +	enum transcoder cpu_transcoder;
> +
> +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> +							   pipe_config->cpu_transcoder);
> +	if (pipe_config->master_transcoder != INVALID_TRANSCODER)
> +		pipe_config->sync_mode_slaves_mask = 0;

Zeroing seems redundant.

> +
> +	transcoders = BIT(TRANSCODER_A) |
> +		BIT(TRANSCODER_B) |
> +		BIT(TRANSCODER_C) |
> +		BIT(TRANSCODER_D);
> +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> +		enum intel_display_power_domain power_domain;
> +		intel_wakeref_t trans_wakeref;
> +
> +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> +								   power_domain);
> +
> +		if (!trans_wakeref)
> +			continue;
> +
> +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> +		    pipe_config->cpu_transcoder)
> +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> +
> +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> +	}
> +
> +	WARN_ON(pipe_config->master_transcoder != INVALID_TRANSCODER &&
> +		pipe_config->sync_mode_slaves_mask);
> +}
> +
>  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
>  				    struct intel_crtc_state *pipe_config)
>  {
> @@ -10629,6 +10695,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
>  		pipe_config->pixel_multiplier = 1;
>  	}
>  
> +	if (INTEL_GEN(dev_priv) >= 11)
> +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> +
>  out:
>  	for_each_power_domain(power_domain, power_domain_mask)
>  		intel_display_power_put(dev_priv,
> -- 
> 2.19.1

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

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

* Re: [PATCH v3 4/6] drm/i915/display/icl: Enable master-slaves in trans port sync
  2019-09-22 17:08 ` [PATCH v3 4/6] drm/i915/display/icl: Enable master-slaves in trans port sync Manasi Navare
@ 2019-09-30 15:28   ` Ville Syrjälä
  2019-10-07  3:14     ` Manasi Navare
  0 siblings, 1 reply; 38+ messages in thread
From: Ville Syrjälä @ 2019-09-30 15:28 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Daniel Vetter, intel-gfx

On Sun, Sep 22, 2019 at 10:08:05AM -0700, Manasi Navare wrote:
> As per the display enable sequence, we need to follow the enable sequence
> for slaves first with DP_TP_CTL set to Idle and configure the transcoder
> port sync register to select the corersponding master, then follow the
> enable sequence for master leaving DP_TP_CTL to idle.
> At this point the transcoder port sync mode is configured and enabled
> and the Vblanks of both ports are synchronized so then set DP_TP_CTL
> for the slave and master to Normal and do post crtc enable updates.
> 
> v6:
> * Modeset implies active_changed, remove one condition (Maarten)
> v5:
> * Fix checkpatch warning (Manasi)
> v4:
> * Reuse skl_commit_modeset_enables() hook (Maarten)
> * Obtain slave crtc and states from master (Maarten)
> v3:
> * Rebase on drm-tip (Manasi)
> v2:
> * Create a icl_update_crtcs hook (Maarten, Danvet)
> * This sequence only for CRTCs in trans port sync mode (Maarten)
> 
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c     |   3 +-
>  drivers/gpu/drm/i915/display/intel_display.c | 141 ++++++++++++++++++-
>  drivers/gpu/drm/i915/display/intel_display.h |   2 +
>  3 files changed, 142 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 3e6394139964..62e9f5602b6b 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -3347,7 +3347,8 @@ static void hsw_ddi_pre_enable_dp(struct intel_encoder *encoder,
>  					      true);
>  	intel_dp_sink_set_fec_ready(intel_dp, crtc_state);
>  	intel_dp_start_link_train(intel_dp);
> -	if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
> +	if ((port != PORT_A || INTEL_GEN(dev_priv) >= 9) &&
> +	    !is_trans_port_sync_mode(dev_priv, crtc_state))
>  		intel_dp_stop_link_train(intel_dp);
>  
>  	intel_ddi_enable_fec(encoder, crtc_state);
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 711987eb4e9e..10425a789b5e 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -13928,6 +13928,30 @@ static void intel_update_crtc(struct intel_crtc *crtc,
>  	intel_finish_crtc_commit(state, crtc);
>  }
>  
> +static struct intel_crtc *intel_get_slave_crtc(struct drm_i915_private *dev_priv,

'dev_priv' can be derived from the crtc state.

> +					       struct intel_crtc_state *new_crtc_state)

const

> +{

cpu_transcoder = ffs(slaves) - 1;
return get_crtc((enum pipe)cpu_transcoder);

or something.

Maybe toss in a  WARN_ON(!is_power_of_2(slaves)).



> +	if (new_crtc_state->sync_mode_slaves_mask &
> +	    BIT(TRANSCODER_A))
> +		return intel_get_crtc_for_pipe(dev_priv,
> +					       PIPE_A);
> +	else if (new_crtc_state->sync_mode_slaves_mask &
> +		 BIT(TRANSCODER_B))
> +		return intel_get_crtc_for_pipe(dev_priv,
> +					       PIPE_B);
> +	else if (new_crtc_state->sync_mode_slaves_mask &
> +		 BIT(TRANSCODER_C))
> +		return intel_get_crtc_for_pipe(dev_priv,
> +					       PIPE_C);
> +	else if (new_crtc_state->sync_mode_slaves_mask &
> +		 BIT(TRANSCODER_D))
> +		return intel_get_crtc_for_pipe(dev_priv,
> +					       PIPE_D);
> +	/* should never happen */
> +	WARN_ON(1);
> +	return NULL;
> +}
> +
>  static void intel_old_crtc_state_disables(struct intel_atomic_state *state,
>  					  struct intel_crtc_state *old_crtc_state,
>  					  struct intel_crtc_state *new_crtc_state,
> @@ -14006,6 +14030,104 @@ static void intel_commit_modeset_enables(struct intel_atomic_state *state)
>  	}
>  }
>  
> +static void intel_crtc_enable_trans_port_sync(struct intel_crtc *crtc,
> +					      struct intel_atomic_state *state,
> +					      struct intel_crtc_state *new_crtc_state)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +
> +	update_scanline_offset(new_crtc_state);
> +	dev_priv->display.crtc_enable(new_crtc_state, state);
> +	intel_crtc_enable_pipe_crc(crtc);
> +}
> +
> +static void intel_set_dp_tp_ctl_normal(struct intel_crtc *crtc,
> +				       struct intel_atomic_state *state)
> +{
> +	struct drm_connector_state *conn_state;
> +	struct drm_connector *conn;
> +	struct intel_dp *intel_dp;
> +	int i;
> +
> +	for_each_new_connector_in_state(&state->base, conn, conn_state, i) {
> +		if (conn_state->crtc == &crtc->base)
> +			break;
> +	}
> +	intel_dp = enc_to_intel_dp(&intel_attached_encoder(conn)->base);
> +	intel_dp_stop_link_train(intel_dp);
> +}
> +
> +static void intel_post_crtc_enable_updates(struct intel_crtc *crtc,
> +					   struct intel_atomic_state *state,
> +					   struct intel_crtc_state *old_crtc_state,
> +					   struct intel_crtc_state *new_crtc_state)
> +{
> +	struct intel_plane_state *new_plane_state =
> +		intel_atomic_get_new_plane_state(state,
> +						 to_intel_plane(crtc->base.primary));
> +
> +	if (new_crtc_state->update_pipe && !new_crtc_state->enable_fbc)
> +		intel_fbc_disable(crtc);
> +	else if (new_plane_state)
> +		intel_fbc_enable(crtc, new_crtc_state, new_plane_state);
> +
> +	intel_begin_crtc_commit(state, crtc);
> +	skl_update_planes_on_crtc(state, crtc);
> +	intel_finish_crtc_commit(state, crtc);
> +}
> +
> +static void intel_update_trans_port_sync_crtcs(struct intel_crtc *crtc,
> +					       struct intel_atomic_state *state,
> +					       struct intel_crtc_state *old_crtc_state,
> +					       struct intel_crtc_state *new_crtc_state)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +	struct intel_crtc *slave_crtc = intel_get_slave_crtc(dev_priv,
> +							     new_crtc_state);
> +	struct intel_crtc_state *new_slave_crtc_state =
> +		intel_atomic_get_new_crtc_state(state, slave_crtc);
> +	struct intel_crtc_state *old_slave_crtc_state =
> +		intel_atomic_get_old_crtc_state(state, slave_crtc);
> +
> +	WARN_ON(!slave_crtc || !new_slave_crtc_state ||
> +		!old_slave_crtc_state);
> +
> +	DRM_DEBUG_KMS("Updating Transcoder Port Sync Master CRTC = %d %s and Slave CRTC %d %s\n",
> +		      crtc->base.base.id, crtc->base.name, slave_crtc->base.base.id,
> +		      slave_crtc->base.name);
> +
> +	/* Enable seq for slave with with DP_TP_CTL left Idle until the
> +	 * master is ready
> +	 */
> +	intel_crtc_enable_trans_port_sync(slave_crtc,
> +					  state,
> +					  new_slave_crtc_state);
> +
> +	/* Enable seq for master with with DP_TP_CTL left Idle */
> +	intel_crtc_enable_trans_port_sync(crtc,
> +					  state,
> +					  new_crtc_state);
> +
> +	/* Set Slave's DP_TP_CTL to Normal */
> +	intel_set_dp_tp_ctl_normal(slave_crtc,
> +				   state);
> +
> +	/* Set Master's DP_TP_CTL To Normal */
> +	usleep_range(200, 400);
> +	intel_set_dp_tp_ctl_normal(crtc,
> +				   state);
> +
> +	/* Now do the post crtc enable for all master and slaves */
> +	intel_post_crtc_enable_updates(slave_crtc,
> +				       state,
> +				       new_slave_crtc_state,
> +				       old_slave_crtc_state);
> +	intel_post_crtc_enable_updates(crtc,
> +				       state,
> +				       new_crtc_state,
> +				       old_crtc_state);
> +}
> +
>  static void skl_commit_modeset_enables(struct intel_atomic_state *state)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> @@ -14040,6 +14162,7 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state)
>  		for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
>  			bool vbl_wait = false;
>  			unsigned int cmask = drm_crtc_mask(&crtc->base);
> +			bool modeset = needs_modeset(new_crtc_state);
>  
>  			pipe = crtc->pipe;
>  
> @@ -14062,12 +14185,24 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state)
>  			 */
>  			if (!skl_ddb_entry_equal(&new_crtc_state->wm.skl.ddb,
>  						 &old_crtc_state->wm.skl.ddb) &&
> -			    !new_crtc_state->base.active_changed &&
> +			    !modeset &&
>  			    state->wm_results.dirty_pipes != updated)
>  				vbl_wait = true;
>  
> -			intel_update_crtc(crtc, state, old_crtc_state,
> -					  new_crtc_state);
> +			if (modeset && is_trans_port_sync_mode(dev_priv,
> +							       new_crtc_state)) {
> +				if (is_trans_port_sync_master(dev_priv,
> +							      new_crtc_state))
> +					intel_update_trans_port_sync_crtcs(crtc,
> +									   state,
> +									   old_crtc_state,
> +									   new_crtc_state);
> +				else
> +					continue;
> +			} else {
> +				intel_update_crtc(crtc, state, old_crtc_state,
> +						  new_crtc_state);
> +			}
>  
>  			if (vbl_wait)
>  				intel_wait_for_vblank(dev_priv, pipe);
> diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
> index 1623face436b..efa4d62514ce 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.h
> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> @@ -27,6 +27,7 @@
>  
>  #include <drm/drm_util.h>
>  #include <drm/i915_drm.h>
> +#include "intel_dp_link_training.h"
>  
>  enum link_m_n_set;
>  struct dpll;
> @@ -54,6 +55,7 @@ struct intel_plane;
>  struct intel_plane_state;
>  struct intel_remapped_info;
>  struct intel_rotation_info;
> +struct intel_crtc_state;
>  
>  enum i915_gpio {
>  	GPIOA,
> -- 
> 2.19.1

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

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

* Re: [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
  2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
                   ` (13 preceding siblings ...)
  2019-09-30 14:14 ` [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Ville Syrjälä
@ 2019-09-30 18:37 ` Lucas De Marchi
  2019-10-01 12:17   ` Ville Syrjälä
  14 siblings, 1 reply; 38+ messages in thread
From: Lucas De Marchi @ 2019-09-30 18:37 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Daniel Vetter, intel-gfx

On Sun, Sep 22, 2019 at 10:08:02AM -0700, Manasi Navare wrote:
>In case of tiled displays when the two tiles are sent across two CRTCs
>over two separate DP SST connectors, we need a mechanism to synchronize
>the two CRTCs and their corresponding transcoders.
>So use the master-slave mode where there is one master corresponding
>to last horizontal and vertical tile that needs to be genlocked with
>all other slave tiles.
>This patch identifies saves the master transcoder in all the slave
>CRTC states. This is needed to select the master CRTC/transcoder
>while configuring transcoder port sync for the corresponding slaves.
>
>v4:
>* Rebase
>v3:
>* Use master_tramscoder instead of master_crtc for valid
>HW state readouts (Ville)
>v2:
>* Move this to intel_mode_set_pipe_config(Jani N, Ville)
>* Use slave_bitmask to save associated slaves in master crtc state (Ville)
>
>Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>Cc: Matt Roper <matthew.d.roper@intel.com>
>Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
>Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>---
> drivers/gpu/drm/i915/display/intel_display.c  | 123 ++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_display.h  |   3 +
> .../drm/i915/display/intel_display_types.h    |   6 +
> 3 files changed, 132 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>index c05ba6af6226..4ff375d5852d 100644
>--- a/drivers/gpu/drm/i915/display/intel_display.c
>+++ b/drivers/gpu/drm/i915/display/intel_display.c
>@@ -521,6 +521,24 @@ needs_modeset(const struct intel_crtc_state *state)
> 	return drm_atomic_crtc_needs_modeset(&state->base);
> }
>
>+bool
>+is_trans_port_sync_mode(struct drm_i915_private *dev_priv,
>+			const struct intel_crtc_state *state)

on TGL we now also need a master transcoder for DP-MST. I'm wondering if
we couldn't reuse the same mechanism so we would dissociate a little bit
the port_sync_mode from saving or searching for a master transcoder
in crtc_state.

>@@ -12369,6 +12478,15 @@ intel_modeset_pipe_config(struct intel_crtc_state *pipe_config)
> 	drm_mode_set_crtcinfo(&pipe_config->base.adjusted_mode,
> 			      CRTC_STEREO_DOUBLE);
>
>+	/* Set the crtc_state defaults for trans_port_sync */
>+	pipe_config->master_transcoder = INVALID_TRANSCODER;

could we get away with the INVALID_TRANSCODER by simply making
pipe_config->master_transcoder = pipe_config->cpu_transcoder?

then we can always make sure it's assigned to something valid
and use it in the cases it makes sense (port sync mode and dp-mst).

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

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

* Re: [PATCH v5 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-27  0:11     ` [PATCH v5 3/6] " Manasi Navare
  2019-09-27 21:04       ` Manasi Navare
  2019-09-30 14:21       ` Ville Syrjälä
@ 2019-09-30 19:45       ` Lucas De Marchi
  2019-10-07  3:33         ` Manasi Navare
  2 siblings, 1 reply; 38+ messages in thread
From: Lucas De Marchi @ 2019-09-30 19:45 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Jani Nikula, intel-gfx

On Thu, Sep 26, 2019 at 05:11:10PM -0700, Manasi Navare wrote:
>After the state is committed, we readout the HW registers and compare
>the HW state with the SW state that we just committed.
>For Transcdoer port sync, we add master_transcoder and the
>salves bitmask to the crtc_state, hence we need to read those during
>the HW state readout to avoid pipe state mismatch.
>
>v6:
>* Go through both parts of HW readout (Maarten)
>* Add a WARN if the same trans configured as
>master and slave (Ville, Maarten)
>v5:
>* Add return INVALID in defaut case (Maarten)
>v4:
>* Get power domains in master loop for get_config (Ville)
>v3:
>* Add TRANSCODER_D (Maarten)
>* v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>v2:
>* Add Transcoder_D and MISSING_CASE (Maarten)
>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>Cc: Matt Roper <matthew.d.roper@intel.com>
>Cc: Jani Nikula <jani.nikula@intel.com>
>Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
>Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>---
> drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
> 1 file changed, 69 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>index af6b8f10f132..6e4af6ded6f0 100644
>--- a/drivers/gpu/drm/i915/display/intel_display.c
>+++ b/drivers/gpu/drm/i915/display/intel_display.c
>@@ -10510,6 +10510,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
> 	}
> }
>
>+static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
>+					 enum transcoder cpu_transcoder)

I find this function name misleading since there's no indication it's
actually reading the HW.

Maybe even inline this in the only caller? Or would a `_readout` suffix
make sense?

>+{
>+	u32 trans_port_sync, master_select;
>+
>+	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
>+
>+	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
>+		return INVALID_TRANSCODER;
>+
>+	master_select = trans_port_sync &
>+			PORT_SYNC_MODE_MASTER_SELECT_MASK;
>+	switch (master_select) {
>+	case 1:
>+		return TRANSCODER_A;
>+	case 2:
>+		return TRANSCODER_B;
>+	case 3:
>+		return TRANSCODER_C;
>+	case 4:
>+		return TRANSCODER_D;
>+	default:
>+		MISSING_CASE(master_select);
>+		return INVALID_TRANSCODER;
>+	}
>+}
>+
>+static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
>+					       struct intel_crtc_state *pipe_config)

>+{
>+	struct drm_device *dev = crtc->base.dev;
>+	struct drm_i915_private *dev_priv = to_i915(dev);
>+	u32 transcoders;
>+	enum transcoder cpu_transcoder;
>+
>+	pipe_config->master_transcoder = transcoder_master(dev_priv,
>+							   pipe_config->cpu_transcoder);
>+	if (pipe_config->master_transcoder != INVALID_TRANSCODER)
>+		pipe_config->sync_mode_slaves_mask = 0;
>+
>+	transcoders = BIT(TRANSCODER_A) |
>+		BIT(TRANSCODER_B) |
>+		BIT(TRANSCODER_C) |
>+		BIT(TRANSCODER_D);
>+	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
>+		enum intel_display_power_domain power_domain;
>+		intel_wakeref_t trans_wakeref;
>+
>+		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
>+		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
>+								   power_domain);
>+
>+		if (!trans_wakeref)
>+			continue;
>+
>+		if (transcoder_master(dev_priv, cpu_transcoder) ==
>+		    pipe_config->cpu_transcoder)
>+			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
>+
>+		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
>+	}
>+
>+	WARN_ON(pipe_config->master_transcoder != INVALID_TRANSCODER &&
>+		pipe_config->sync_mode_slaves_mask);
>+}
>+
> static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> 				    struct intel_crtc_state *pipe_config)
> {
>@@ -10629,6 +10695,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> 		pipe_config->pixel_multiplier = 1;
> 	}
>
>+	if (INTEL_GEN(dev_priv) >= 11)
>+		icelake_get_trans_port_sync_config(crtc, pipe_config);

Three letters prefix for functions is much more common, so I'd stick
with that. For Ice Lake for example there's only icelake_get_ddi_pll()
as opposed to tons of icl_*() functions.


>+
> out:
> 	for_each_power_domain(power_domain, power_domain_mask)
> 		intel_display_power_put(dev_priv,
>-- 
>2.19.1
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
  2019-09-30 18:37 ` Lucas De Marchi
@ 2019-10-01 12:17   ` Ville Syrjälä
  0 siblings, 0 replies; 38+ messages in thread
From: Ville Syrjälä @ 2019-10-01 12:17 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: Daniel Vetter, intel-gfx

On Mon, Sep 30, 2019 at 11:37:41AM -0700, Lucas De Marchi wrote:
> On Sun, Sep 22, 2019 at 10:08:02AM -0700, Manasi Navare wrote:
> >In case of tiled displays when the two tiles are sent across two CRTCs
> >over two separate DP SST connectors, we need a mechanism to synchronize
> >the two CRTCs and their corresponding transcoders.
> >So use the master-slave mode where there is one master corresponding
> >to last horizontal and vertical tile that needs to be genlocked with
> >all other slave tiles.
> >This patch identifies saves the master transcoder in all the slave
> >CRTC states. This is needed to select the master CRTC/transcoder
> >while configuring transcoder port sync for the corresponding slaves.
> >
> >v4:
> >* Rebase
> >v3:
> >* Use master_tramscoder instead of master_crtc for valid
> >HW state readouts (Ville)
> >v2:
> >* Move this to intel_mode_set_pipe_config(Jani N, Ville)
> >* Use slave_bitmask to save associated slaves in master crtc state (Ville)
> >
> >Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> >Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >Cc: Matt Roper <matthew.d.roper@intel.com>
> >Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> >Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >---
> > drivers/gpu/drm/i915/display/intel_display.c  | 123 ++++++++++++++++++
> > drivers/gpu/drm/i915/display/intel_display.h  |   3 +
> > .../drm/i915/display/intel_display_types.h    |   6 +
> > 3 files changed, 132 insertions(+)
> >
> >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> >index c05ba6af6226..4ff375d5852d 100644
> >--- a/drivers/gpu/drm/i915/display/intel_display.c
> >+++ b/drivers/gpu/drm/i915/display/intel_display.c
> >@@ -521,6 +521,24 @@ needs_modeset(const struct intel_crtc_state *state)
> > 	return drm_atomic_crtc_needs_modeset(&state->base);
> > }
> >
> >+bool
> >+is_trans_port_sync_mode(struct drm_i915_private *dev_priv,
> >+			const struct intel_crtc_state *state)
> 
> on TGL we now also need a master transcoder for DP-MST. I'm wondering if
> we couldn't reuse the same mechanism so we would dissociate a little bit
> the port_sync_mode from saving or searching for a master transcoder
> in crtc_state.

I think we want to track them separately to make the state checker etc.
robust. But I do think we should likely use the same logic for picking
all masters, and I think that logic should probably just be
"lowest numbered pipe is the master".

> 
> >@@ -12369,6 +12478,15 @@ intel_modeset_pipe_config(struct intel_crtc_state *pipe_config)
> > 	drm_mode_set_crtcinfo(&pipe_config->base.adjusted_mode,
> > 			      CRTC_STEREO_DOUBLE);
> >
> >+	/* Set the crtc_state defaults for trans_port_sync */
> >+	pipe_config->master_transcoder = INVALID_TRANSCODER;
> 
> could we get away with the INVALID_TRANSCODER by simply making
> pipe_config->master_transcoder = pipe_config->cpu_transcoder?

That would degrade the state checker I think. Ie. we could
accidentally program the transcoder to be its own master and wouldn't
even notice. We would also need to add extra logic to check
for this when programming things and that would just result in
more wtfs when reading the code.

> 
> then we can always make sure it's assigned to something valid
> and use it in the cases it makes sense (port sync mode and dp-mst).
> 
> Lucas De Marchi
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

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

* Re: [PATCH v3 4/6] drm/i915/display/icl: Enable master-slaves in trans port sync
  2019-09-30 15:28   ` Ville Syrjälä
@ 2019-10-07  3:14     ` Manasi Navare
  0 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-10-07  3:14 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: Daniel Vetter, intel-gfx

On Mon, Sep 30, 2019 at 06:28:16PM +0300, Ville Syrjälä wrote:
> On Sun, Sep 22, 2019 at 10:08:05AM -0700, Manasi Navare wrote:
> > As per the display enable sequence, we need to follow the enable sequence
> > for slaves first with DP_TP_CTL set to Idle and configure the transcoder
> > port sync register to select the corersponding master, then follow the
> > enable sequence for master leaving DP_TP_CTL to idle.
> > At this point the transcoder port sync mode is configured and enabled
> > and the Vblanks of both ports are synchronized so then set DP_TP_CTL
> > for the slave and master to Normal and do post crtc enable updates.
> > 
> > v6:
> > * Modeset implies active_changed, remove one condition (Maarten)
> > v5:
> > * Fix checkpatch warning (Manasi)
> > v4:
> > * Reuse skl_commit_modeset_enables() hook (Maarten)
> > * Obtain slave crtc and states from master (Maarten)
> > v3:
> > * Rebase on drm-tip (Manasi)
> > v2:
> > * Create a icl_update_crtcs hook (Maarten, Danvet)
> > * This sequence only for CRTCs in trans port sync mode (Maarten)
> > 
> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > Cc: Matt Roper <matthew.d.roper@intel.com>
> > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_ddi.c     |   3 +-
> >  drivers/gpu/drm/i915/display/intel_display.c | 141 ++++++++++++++++++-
> >  drivers/gpu/drm/i915/display/intel_display.h |   2 +
> >  3 files changed, 142 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> > index 3e6394139964..62e9f5602b6b 100644
> > --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> > @@ -3347,7 +3347,8 @@ static void hsw_ddi_pre_enable_dp(struct intel_encoder *encoder,
> >  					      true);
> >  	intel_dp_sink_set_fec_ready(intel_dp, crtc_state);
> >  	intel_dp_start_link_train(intel_dp);
> > -	if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
> > +	if ((port != PORT_A || INTEL_GEN(dev_priv) >= 9) &&
> > +	    !is_trans_port_sync_mode(dev_priv, crtc_state))
> >  		intel_dp_stop_link_train(intel_dp);
> >  
> >  	intel_ddi_enable_fec(encoder, crtc_state);
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > index 711987eb4e9e..10425a789b5e 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -13928,6 +13928,30 @@ static void intel_update_crtc(struct intel_crtc *crtc,
> >  	intel_finish_crtc_commit(state, crtc);
> >  }
> >  
> > +static struct intel_crtc *intel_get_slave_crtc(struct drm_i915_private *dev_priv,
> 
> 'dev_priv' can be derived from the crtc state.

Ok yes will just pass the crtc_state

> 
> > +					       struct intel_crtc_state *new_crtc_state)
> 
> const
> 
> > +{
> 
> cpu_transcoder = ffs(slaves) - 1;

Cool, thanks for pointing out this ffs function


> return get_crtc((enum pipe)cpu_transcoder);
> 
> or something.
> 
> Maybe toss in a  WARN_ON(!is_power_of_2(slaves)).

Yes and that shd take care of ffs(slaves) == 0 as well

Manasi

> 
> 
> 
> > +	if (new_crtc_state->sync_mode_slaves_mask &
> > +	    BIT(TRANSCODER_A))
> > +		return intel_get_crtc_for_pipe(dev_priv,
> > +					       PIPE_A);
> > +	else if (new_crtc_state->sync_mode_slaves_mask &
> > +		 BIT(TRANSCODER_B))
> > +		return intel_get_crtc_for_pipe(dev_priv,
> > +					       PIPE_B);
> > +	else if (new_crtc_state->sync_mode_slaves_mask &
> > +		 BIT(TRANSCODER_C))
> > +		return intel_get_crtc_for_pipe(dev_priv,
> > +					       PIPE_C);
> > +	else if (new_crtc_state->sync_mode_slaves_mask &
> > +		 BIT(TRANSCODER_D))
> > +		return intel_get_crtc_for_pipe(dev_priv,
> > +					       PIPE_D);
> > +	/* should never happen */
> > +	WARN_ON(1);
> > +	return NULL;
> > +}
> > +
> >  static void intel_old_crtc_state_disables(struct intel_atomic_state *state,
> >  					  struct intel_crtc_state *old_crtc_state,
> >  					  struct intel_crtc_state *new_crtc_state,
> > @@ -14006,6 +14030,104 @@ static void intel_commit_modeset_enables(struct intel_atomic_state *state)
> >  	}
> >  }
> >  
> > +static void intel_crtc_enable_trans_port_sync(struct intel_crtc *crtc,
> > +					      struct intel_atomic_state *state,
> > +					      struct intel_crtc_state *new_crtc_state)
> > +{
> > +	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> > +
> > +	update_scanline_offset(new_crtc_state);
> > +	dev_priv->display.crtc_enable(new_crtc_state, state);
> > +	intel_crtc_enable_pipe_crc(crtc);
> > +}
> > +
> > +static void intel_set_dp_tp_ctl_normal(struct intel_crtc *crtc,
> > +				       struct intel_atomic_state *state)
> > +{
> > +	struct drm_connector_state *conn_state;
> > +	struct drm_connector *conn;
> > +	struct intel_dp *intel_dp;
> > +	int i;
> > +
> > +	for_each_new_connector_in_state(&state->base, conn, conn_state, i) {
> > +		if (conn_state->crtc == &crtc->base)
> > +			break;
> > +	}
> > +	intel_dp = enc_to_intel_dp(&intel_attached_encoder(conn)->base);
> > +	intel_dp_stop_link_train(intel_dp);
> > +}
> > +
> > +static void intel_post_crtc_enable_updates(struct intel_crtc *crtc,
> > +					   struct intel_atomic_state *state,
> > +					   struct intel_crtc_state *old_crtc_state,
> > +					   struct intel_crtc_state *new_crtc_state)
> > +{
> > +	struct intel_plane_state *new_plane_state =
> > +		intel_atomic_get_new_plane_state(state,
> > +						 to_intel_plane(crtc->base.primary));
> > +
> > +	if (new_crtc_state->update_pipe && !new_crtc_state->enable_fbc)
> > +		intel_fbc_disable(crtc);
> > +	else if (new_plane_state)
> > +		intel_fbc_enable(crtc, new_crtc_state, new_plane_state);
> > +
> > +	intel_begin_crtc_commit(state, crtc);
> > +	skl_update_planes_on_crtc(state, crtc);
> > +	intel_finish_crtc_commit(state, crtc);
> > +}
> > +
> > +static void intel_update_trans_port_sync_crtcs(struct intel_crtc *crtc,
> > +					       struct intel_atomic_state *state,
> > +					       struct intel_crtc_state *old_crtc_state,
> > +					       struct intel_crtc_state *new_crtc_state)
> > +{
> > +	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> > +	struct intel_crtc *slave_crtc = intel_get_slave_crtc(dev_priv,
> > +							     new_crtc_state);
> > +	struct intel_crtc_state *new_slave_crtc_state =
> > +		intel_atomic_get_new_crtc_state(state, slave_crtc);
> > +	struct intel_crtc_state *old_slave_crtc_state =
> > +		intel_atomic_get_old_crtc_state(state, slave_crtc);
> > +
> > +	WARN_ON(!slave_crtc || !new_slave_crtc_state ||
> > +		!old_slave_crtc_state);
> > +
> > +	DRM_DEBUG_KMS("Updating Transcoder Port Sync Master CRTC = %d %s and Slave CRTC %d %s\n",
> > +		      crtc->base.base.id, crtc->base.name, slave_crtc->base.base.id,
> > +		      slave_crtc->base.name);
> > +
> > +	/* Enable seq for slave with with DP_TP_CTL left Idle until the
> > +	 * master is ready
> > +	 */
> > +	intel_crtc_enable_trans_port_sync(slave_crtc,
> > +					  state,
> > +					  new_slave_crtc_state);
> > +
> > +	/* Enable seq for master with with DP_TP_CTL left Idle */
> > +	intel_crtc_enable_trans_port_sync(crtc,
> > +					  state,
> > +					  new_crtc_state);
> > +
> > +	/* Set Slave's DP_TP_CTL to Normal */
> > +	intel_set_dp_tp_ctl_normal(slave_crtc,
> > +				   state);
> > +
> > +	/* Set Master's DP_TP_CTL To Normal */
> > +	usleep_range(200, 400);
> > +	intel_set_dp_tp_ctl_normal(crtc,
> > +				   state);
> > +
> > +	/* Now do the post crtc enable for all master and slaves */
> > +	intel_post_crtc_enable_updates(slave_crtc,
> > +				       state,
> > +				       new_slave_crtc_state,
> > +				       old_slave_crtc_state);
> > +	intel_post_crtc_enable_updates(crtc,
> > +				       state,
> > +				       new_crtc_state,
> > +				       old_crtc_state);
> > +}
> > +
> >  static void skl_commit_modeset_enables(struct intel_atomic_state *state)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> > @@ -14040,6 +14162,7 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state)
> >  		for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
> >  			bool vbl_wait = false;
> >  			unsigned int cmask = drm_crtc_mask(&crtc->base);
> > +			bool modeset = needs_modeset(new_crtc_state);
> >  
> >  			pipe = crtc->pipe;
> >  
> > @@ -14062,12 +14185,24 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state)
> >  			 */
> >  			if (!skl_ddb_entry_equal(&new_crtc_state->wm.skl.ddb,
> >  						 &old_crtc_state->wm.skl.ddb) &&
> > -			    !new_crtc_state->base.active_changed &&
> > +			    !modeset &&
> >  			    state->wm_results.dirty_pipes != updated)
> >  				vbl_wait = true;
> >  
> > -			intel_update_crtc(crtc, state, old_crtc_state,
> > -					  new_crtc_state);
> > +			if (modeset && is_trans_port_sync_mode(dev_priv,
> > +							       new_crtc_state)) {
> > +				if (is_trans_port_sync_master(dev_priv,
> > +							      new_crtc_state))
> > +					intel_update_trans_port_sync_crtcs(crtc,
> > +									   state,
> > +									   old_crtc_state,
> > +									   new_crtc_state);
> > +				else
> > +					continue;
> > +			} else {
> > +				intel_update_crtc(crtc, state, old_crtc_state,
> > +						  new_crtc_state);
> > +			}
> >  
> >  			if (vbl_wait)
> >  				intel_wait_for_vblank(dev_priv, pipe);
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
> > index 1623face436b..efa4d62514ce 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display.h
> > @@ -27,6 +27,7 @@
> >  
> >  #include <drm/drm_util.h>
> >  #include <drm/i915_drm.h>
> > +#include "intel_dp_link_training.h"
> >  
> >  enum link_m_n_set;
> >  struct dpll;
> > @@ -54,6 +55,7 @@ struct intel_plane;
> >  struct intel_plane_state;
> >  struct intel_remapped_info;
> >  struct intel_rotation_info;
> > +struct intel_crtc_state;
> >  
> >  enum i915_gpio {
> >  	GPIOA,
> > -- 
> > 2.19.1
> 
> -- 
> Ville Syrjälä
> Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 2/6] drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports
  2019-09-30 14:19   ` Ville Syrjälä
@ 2019-10-07  3:22     ` Manasi Navare
  0 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-10-07  3:22 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: Daniel Vetter, intel-gfx, Jani Nikula

On Mon, Sep 30, 2019 at 05:19:09PM +0300, Ville Syrjälä wrote:
> On Sun, Sep 22, 2019 at 10:08:03AM -0700, Manasi Navare wrote:
> > In case of tiled displays where different tiles are displayed across
> > different ports, we need to synchronize the transcoders involved.
> > This patch implements the transcoder port sync feature for
> > synchronizing one master transcoder with one or more slave
> > transcoders. This is only enbaled in slave transcoder
> > and the master transcoder is unaware that it is operating
> > in this mode.
> > This has been tested with tiled display connected to ICL.
> > 
> > v5:
> > * Add TRANSCODER_D case and MISSING_CASE (Maarten)
> > v4:
> > Rebase
> > v3:
> > * Check of DP_MST moved to atomic_check (Maarten)
> > v2:
> > * Do not use RMW, just write to the register in commit (Jani N)
> > 
> > Cc: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > Cc: Matt Roper <matthew.d.roper@intel.com>
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 46 ++++++++++++++++++++
> >  1 file changed, 46 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > index 4ff375d5852d..1ae5eafe2892 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -4426,6 +4426,49 @@ static void icl_set_pipe_chicken(struct intel_crtc *crtc)
> >  	I915_WRITE(PIPE_CHICKEN(pipe), tmp);
> >  }
> >  
> > +static void icl_enable_trans_port_sync(const struct intel_crtc_state *crtc_state)
> > +{
> > +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
> > +	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> > +	u32 trans_ddi_func_ctl2_val;
> > +	u8 master_select;
> > +
> > +	/*
> > +	 * Configure the master select and enable Transcoder Port Sync for
> > +	 * Slave CRTCs transcoder.
> > +	 */
> > +	if (crtc_state->master_transcoder == INVALID_TRANSCODER)
> > +		return;
> > +
> > +	switch (crtc_state->master_transcoder) {
> > +	case TRANSCODER_A:
> > +		master_select = 1;
> > +		break;
> > +	case TRANSCODER_B:
> > +		master_select = 2;
> > +		break;
> > +	case TRANSCODER_C:
> > +		master_select = 3;
> > +		break;
> > +	case TRANSCODER_D:
> > +		master_select = 4;
> > +		break;
> 
> That's all just master_transcoder+1.
>

So just get rid of the switch statement and add master_transcoder +1?
 
> > +	case TRANSCODER_EDP:
> 
> EDP transcoder can be master. The MISSING_CASE is wrong for EDP.

Yes, EDP trans cannot be a slave but can be a master, so I guess for that case just
have if (TRANSCODER_EDP), master_Select == 0?

Manasi

> 
> > +	default:
> > +		MISSING_CASE(crtc_state->master_transcoder);
> > +		master_select = 0;
> > +	}
> > +	/* Set the master select bits for Tranascoder Port Sync */
> > +	trans_ddi_func_ctl2_val = (PORT_SYNC_MODE_MASTER_SELECT(master_select) &
> > +				   PORT_SYNC_MODE_MASTER_SELECT_MASK) <<
> > +		PORT_SYNC_MODE_MASTER_SELECT_SHIFT;
> > +	/* Enable Transcoder Port Sync */
> > +	trans_ddi_func_ctl2_val |= PORT_SYNC_MODE_ENABLE;
> > +
> > +	I915_WRITE(TRANS_DDI_FUNC_CTL2(crtc_state->cpu_transcoder),
> > +		   trans_ddi_func_ctl2_val);
> > +}
> > +
> >  static void intel_update_pipe_config(const struct intel_crtc_state *old_crtc_state,
> >  				     const struct intel_crtc_state *new_crtc_state)
> >  {
> > @@ -6494,6 +6537,9 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config,
> >  	if (!transcoder_is_dsi(cpu_transcoder))
> >  		intel_set_pipe_timings(pipe_config);
> >  
> > +	if (INTEL_GEN(dev_priv) >= 11)
> > +		icl_enable_trans_port_sync(pipe_config);
> > +
> >  	intel_set_pipe_src_size(pipe_config);
> >  
> >  	if (cpu_transcoder != TRANSCODER_EDP &&
> > -- 
> > 2.19.1
> 
> -- 
> Ville Syrjälä
> Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v5 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-30 14:21       ` Ville Syrjälä
@ 2019-10-07  3:31         ` Manasi Navare
  0 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-10-07  3:31 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: Jani Nikula, intel-gfx

On Mon, Sep 30, 2019 at 05:21:08PM +0300, Ville Syrjälä wrote:
> On Thu, Sep 26, 2019 at 05:11:10PM -0700, Manasi Navare wrote:
> > After the state is committed, we readout the HW registers and compare
> > the HW state with the SW state that we just committed.
> > For Transcdoer port sync, we add master_transcoder and the
> > salves bitmask to the crtc_state, hence we need to read those during
> > the HW state readout to avoid pipe state mismatch.
> > 
> > v6:
> > * Go through both parts of HW readout (Maarten)
> > * Add a WARN if the same trans configured as
> > master and slave (Ville, Maarten)
> > v5:
> > * Add return INVALID in defaut case (Maarten)
> > v4:
> > * Get power domains in master loop for get_config (Ville)
> > v3:
> > * Add TRANSCODER_D (Maarten)
> > * v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > v2:
> > * Add Transcoder_D and MISSING_CASE (Maarten)
> > 
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > Cc: Matt Roper <matthew.d.roper@intel.com>
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
> >  1 file changed, 69 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > index af6b8f10f132..6e4af6ded6f0 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -10510,6 +10510,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
> >  	}
> >  }
> >  
> > +static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> > +					 enum transcoder cpu_transcoder)
> > +{
> > +	u32 trans_port_sync, master_select;
> > +
> > +	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> > +
> > +	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> > +		return INVALID_TRANSCODER;
> > +
> > +	master_select = trans_port_sync &
> > +			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> > +	switch (master_select) {
> > +	case 1:
> > +		return TRANSCODER_A;
> > +	case 2:
> > +		return TRANSCODER_B;
> > +	case 3:
> > +		return TRANSCODER_C;
> > +	case 4:
> > +		return TRANSCODER_D;
> 
> Missing EDP. Also A-D are just master_select-1

Yes will just derive it as master_Select -1 and for 0, i will
set it to EDP
That should work right?

> 
> > +	default:
> > +		MISSING_CASE(master_select);
> > +		return INVALID_TRANSCODER;
> > +	}
> > +}
> > +
> > +static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> > +					       struct intel_crtc_state *pipe_config)
> 
> s/pipe_config/crtc_state/
>

Ok
 
> 'crtc' argument can be derived so doesn't need to be passed in.
>

Ok will remove that
 
> > +{
> > +	struct drm_device *dev = crtc->base.dev;
> > +	struct drm_i915_private *dev_priv = to_i915(dev);
> > +	u32 transcoders;
> > +	enum transcoder cpu_transcoder;
> > +
> > +	pipe_config->master_transcoder = transcoder_master(dev_priv,
> > +							   pipe_config->cpu_transcoder);
> > +	if (pipe_config->master_transcoder != INVALID_TRANSCODER)
> > +		pipe_config->sync_mode_slaves_mask = 0;
> 
> Zeroing seems redundant.

Just for safer side since we want the bitmask to be 0 for slaves
But I guess it will be initialized to 0 anyways right so no need to set it to 0?

MAnasi


> 
> > +
> > +	transcoders = BIT(TRANSCODER_A) |
> > +		BIT(TRANSCODER_B) |
> > +		BIT(TRANSCODER_C) |
> > +		BIT(TRANSCODER_D);
> > +	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> > +		enum intel_display_power_domain power_domain;
> > +		intel_wakeref_t trans_wakeref;
> > +
> > +		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> > +		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> > +								   power_domain);
> > +
> > +		if (!trans_wakeref)
> > +			continue;
> > +
> > +		if (transcoder_master(dev_priv, cpu_transcoder) ==
> > +		    pipe_config->cpu_transcoder)
> > +			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> > +
> > +		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> > +	}
> > +
> > +	WARN_ON(pipe_config->master_transcoder != INVALID_TRANSCODER &&
> > +		pipe_config->sync_mode_slaves_mask);
> > +}
> > +
> >  static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> >  				    struct intel_crtc_state *pipe_config)
> >  {
> > @@ -10629,6 +10695,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> >  		pipe_config->pixel_multiplier = 1;
> >  	}
> >  
> > +	if (INTEL_GEN(dev_priv) >= 11)
> > +		icelake_get_trans_port_sync_config(crtc, pipe_config);
> > +
> >  out:
> >  	for_each_power_domain(power_domain, power_domain_mask)
> >  		intel_display_power_put(dev_priv,
> > -- 
> > 2.19.1
> 
> -- 
> Ville Syrjälä
> Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v5 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config
  2019-09-30 19:45       ` Lucas De Marchi
@ 2019-10-07  3:33         ` Manasi Navare
  0 siblings, 0 replies; 38+ messages in thread
From: Manasi Navare @ 2019-10-07  3:33 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: Jani Nikula, intel-gfx

On Mon, Sep 30, 2019 at 12:45:39PM -0700, Lucas De Marchi wrote:
> On Thu, Sep 26, 2019 at 05:11:10PM -0700, Manasi Navare wrote:
> >After the state is committed, we readout the HW registers and compare
> >the HW state with the SW state that we just committed.
> >For Transcdoer port sync, we add master_transcoder and the
> >salves bitmask to the crtc_state, hence we need to read those during
> >the HW state readout to avoid pipe state mismatch.
> >
> >v6:
> >* Go through both parts of HW readout (Maarten)
> >* Add a WARN if the same trans configured as
> >master and slave (Ville, Maarten)
> >v5:
> >* Add return INVALID in defaut case (Maarten)
> >v4:
> >* Get power domains in master loop for get_config (Ville)
> >v3:
> >* Add TRANSCODER_D (Maarten)
> >* v3 Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >v2:
> >* Add Transcoder_D and MISSING_CASE (Maarten)
> >
> >Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >Cc: Matt Roper <matthew.d.roper@intel.com>
> >Cc: Jani Nikula <jani.nikula@intel.com>
> >Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> >Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >---
> >drivers/gpu/drm/i915/display/intel_display.c | 69 ++++++++++++++++++++
> >1 file changed, 69 insertions(+)
> >
> >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> >index af6b8f10f132..6e4af6ded6f0 100644
> >--- a/drivers/gpu/drm/i915/display/intel_display.c
> >+++ b/drivers/gpu/drm/i915/display/intel_display.c
> >@@ -10510,6 +10510,72 @@ static void haswell_get_ddi_port_state(struct intel_crtc *crtc,
> >	}
> >}
> >
> >+static enum transcoder transcoder_master(struct drm_i915_private *dev_priv,
> >+					 enum transcoder cpu_transcoder)
> 
> I find this function name misleading since there's no indication it's
> actually reading the HW.
> 
> Maybe even inline this in the only caller? Or would a `_readout` suffix
> make sense?

I think renaming it with a _readout suffix will be good, i will do that

Manasi

> 
> >+{
> >+	u32 trans_port_sync, master_select;
> >+
> >+	trans_port_sync = I915_READ(TRANS_DDI_FUNC_CTL2(cpu_transcoder));
> >+
> >+	if ((trans_port_sync & PORT_SYNC_MODE_ENABLE) == 0)
> >+		return INVALID_TRANSCODER;
> >+
> >+	master_select = trans_port_sync &
> >+			PORT_SYNC_MODE_MASTER_SELECT_MASK;
> >+	switch (master_select) {
> >+	case 1:
> >+		return TRANSCODER_A;
> >+	case 2:
> >+		return TRANSCODER_B;
> >+	case 3:
> >+		return TRANSCODER_C;
> >+	case 4:
> >+		return TRANSCODER_D;
> >+	default:
> >+		MISSING_CASE(master_select);
> >+		return INVALID_TRANSCODER;
> >+	}
> >+}
> >+
> >+static void icelake_get_trans_port_sync_config(struct intel_crtc *crtc,
> >+					       struct intel_crtc_state *pipe_config)
> 
> >+{
> >+	struct drm_device *dev = crtc->base.dev;
> >+	struct drm_i915_private *dev_priv = to_i915(dev);
> >+	u32 transcoders;
> >+	enum transcoder cpu_transcoder;
> >+
> >+	pipe_config->master_transcoder = transcoder_master(dev_priv,
> >+							   pipe_config->cpu_transcoder);
> >+	if (pipe_config->master_transcoder != INVALID_TRANSCODER)
> >+		pipe_config->sync_mode_slaves_mask = 0;
> >+
> >+	transcoders = BIT(TRANSCODER_A) |
> >+		BIT(TRANSCODER_B) |
> >+		BIT(TRANSCODER_C) |
> >+		BIT(TRANSCODER_D);
> >+	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
> >+		enum intel_display_power_domain power_domain;
> >+		intel_wakeref_t trans_wakeref;
> >+
> >+		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
> >+		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
> >+								   power_domain);
> >+
> >+		if (!trans_wakeref)
> >+			continue;
> >+
> >+		if (transcoder_master(dev_priv, cpu_transcoder) ==
> >+		    pipe_config->cpu_transcoder)
> >+			pipe_config->sync_mode_slaves_mask |= BIT(cpu_transcoder);
> >+
> >+		intel_display_power_put(dev_priv, power_domain, trans_wakeref);
> >+	}
> >+
> >+	WARN_ON(pipe_config->master_transcoder != INVALID_TRANSCODER &&
> >+		pipe_config->sync_mode_slaves_mask);
> >+}
> >+
> >static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> >				    struct intel_crtc_state *pipe_config)
> >{
> >@@ -10629,6 +10695,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
> >		pipe_config->pixel_multiplier = 1;
> >	}
> >
> >+	if (INTEL_GEN(dev_priv) >= 11)
> >+		icelake_get_trans_port_sync_config(crtc, pipe_config);
> 
> Three letters prefix for functions is much more common, so I'd stick
> with that. For Ice Lake for example there's only icelake_get_ddi_pll()
> as opposed to tons of icl_*() functions.
> 
> 
> >+
> >out:
> >	for_each_power_domain(power_domain, power_domain_mask)
> >		intel_display_power_put(dev_priv,
> >-- 
> >2.19.1
> >
> >_______________________________________________
> >Intel-gfx mailing list
> >Intel-gfx@lists.freedesktop.org
> >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
  2019-09-30 14:14 ` [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Ville Syrjälä
@ 2019-10-07  3:43   ` Manasi Navare
  2019-10-09 18:01     ` Ville Syrjälä
  0 siblings, 1 reply; 38+ messages in thread
From: Manasi Navare @ 2019-10-07  3:43 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: Daniel Vetter, intel-gfx

On Mon, Sep 30, 2019 at 05:14:15PM +0300, Ville Syrjälä wrote:
> On Sun, Sep 22, 2019 at 10:08:02AM -0700, Manasi Navare wrote:
> > In case of tiled displays when the two tiles are sent across two CRTCs
> > over two separate DP SST connectors, we need a mechanism to synchronize
> > the two CRTCs and their corresponding transcoders.
> > So use the master-slave mode where there is one master corresponding
> > to last horizontal and vertical tile that needs to be genlocked with
> > all other slave tiles.
> > This patch identifies saves the master transcoder in all the slave
> > CRTC states. This is needed to select the master CRTC/transcoder
> > while configuring transcoder port sync for the corresponding slaves.
> > 
> > v4:
> > * Rebase
> > v3:
> > * Use master_tramscoder instead of master_crtc for valid
> > HW state readouts (Ville)
> > v2:
> > * Move this to intel_mode_set_pipe_config(Jani N, Ville)
> > * Use slave_bitmask to save associated slaves in master crtc state (Ville)
> > 
> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > Cc: Matt Roper <matthew.d.roper@intel.com>
> > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c  | 123 ++++++++++++++++++
> >  drivers/gpu/drm/i915/display/intel_display.h  |   3 +
> >  .../drm/i915/display/intel_display_types.h    |   6 +
> >  3 files changed, 132 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > index c05ba6af6226..4ff375d5852d 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -521,6 +521,24 @@ needs_modeset(const struct intel_crtc_state *state)
> >  	return drm_atomic_crtc_needs_modeset(&state->base);
> >  }
> >  
> > +bool
> > +is_trans_port_sync_mode(struct drm_i915_private *dev_priv,
> 
> Redundant function parameter. Can be derived if needed.

Ok

> 
> > +			const struct intel_crtc_state *state)
> 
> 'crtc_state'

Ok


> 
> > +{
> > +	return (INTEL_GEN(dev_priv) >= 11 &&
> 
> I don't think we need a gen check at all. The state should not have
> master/slaves set if the feature is not supported.

Ok will remove this here and for master as well

> 
> > +		(state->master_transcoder != INVALID_TRANSCODER ||
> > +		 state->sync_mode_slaves_mask));
> > +}
> > +
> > +static bool
> > +is_trans_port_sync_master(struct drm_i915_private *dev_priv,
> > +			  const struct intel_crtc_state *state)
> > +{
> > +	return (INTEL_GEN(dev_priv) >= 11 &&
> > +		(state->master_transcoder == INVALID_TRANSCODER &&
> > +		 state->sync_mode_slaves_mask));
> > +}
> > +
> >  /*
> >   * Platform specific helpers to calculate the port PLL loopback- (clock.m),
> >   * and post-divider (clock.p) values, pre- (clock.vco) and post-divided fast
> > @@ -11773,6 +11791,91 @@ static bool c8_planes_changed(const struct intel_crtc_state *new_crtc_state)
> >  	return !old_crtc_state->c8_planes != !new_crtc_state->c8_planes;
> >  }
> >  
> > +static int icl_add_sync_mode_crtcs(struct drm_crtc *crtc,
> 
> intel_ types all over please.

Yes i think this patch was written we changed everything to intel_ states, will change it all
to intel states

But do we stll keep drm_atomic_state or change that to intel_atomic_state as well?

> 
> Also don't need all three funciton arguments. Either just
> crtc_state or state+crtc will do.

Hmm, but I do need the atomic_state, crtc_state and also the crtc in the modeset


> 
> > +				   struct intel_crtc_state *crtc_state,
> > +				   struct drm_atomic_state *state)
> > +{
> > +	struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
> > +	struct drm_connector *master_connector, *connector;
> > +	struct drm_connector_state *connector_state;
> > +	struct drm_connector_list_iter conn_iter;
> > +	struct drm_crtc *master_crtc = NULL;
> > +	struct drm_crtc_state *master_crtc_state;
> > +	struct intel_crtc_state *master_pipe_config;
> > +	int i, tile_group_id;
> > +
> > +	if (INTEL_GEN(dev_priv) < 11)
> > +		return 0;
> > +
> > +	/*
> > +	 * In case of tiled displays there could be one or more slaves but there is
> > +	 * only one master. Lets make the CRTC used by the connector corresponding
> > +	 * to the last horizonal and last vertical tile a master/genlock CRTC.
> > +	 * All the other CRTCs corresponding to other tiles of the same Tile group
> > +	 * are the slave CRTCs and hold a pointer to their genlock CRTC.
> > +	 */
> > +	for_each_new_connector_in_state(state, connector, connector_state, i) {
> > +		if (connector_state->crtc != crtc)
> > +			continue;
> > +		if (!connector->has_tile)
> > +			continue;
> > +		if (crtc_state->base.mode.hdisplay != connector->tile_h_size ||
> > +		    crtc_state->base.mode.vdisplay != connector->tile_v_size)
> > +			return 0;
> > +		if (connector->tile_h_loc == connector->num_h_tile - 1 &&
> > +		    connector->tile_v_loc == connector->num_v_tile - 1)
> > +			continue;
> > +		crtc_state->sync_mode_slaves_mask = 0;
> > +		tile_group_id = connector->tile_group->id;
> > +		drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
> > +		drm_for_each_connector_iter(master_connector, &conn_iter) {
> > +			struct drm_connector_state *master_conn_state = NULL;
> > +
> > +			if (!master_connector->has_tile)
> > +				continue;
> > +			if (master_connector->tile_h_loc != master_connector->num_h_tile - 1 ||
> > +			    master_connector->tile_v_loc != master_connector->num_v_tile - 1)
> > +				continue;
> > +			if (master_connector->tile_group->id != tile_group_id)
> > +				continue;
> > +
> > +			master_conn_state = drm_atomic_get_connector_state(state,
> > +									   master_connector);
> > +			if (IS_ERR(master_conn_state)) {
> > +				drm_connector_list_iter_end(&conn_iter);
> > +				return PTR_ERR(master_conn_state);
> > +			}
> > +			if (master_conn_state->crtc) {
> > +				master_crtc = master_conn_state->crtc;
> > +				break;
> > +			}
> > +		}
> > +		drm_connector_list_iter_end(&conn_iter);
> > +
> > +		if (!master_crtc) {
> > +			DRM_DEBUG_KMS("Could not find Master CRTC for Slave CRTC %d\n",
> > +				      connector_state->crtc->base.id);
> > +			return -EINVAL;
> > +		}
> > +
> > +		master_crtc_state = drm_atomic_get_crtc_state(state,
> > +							      master_crtc);
> > +		if (IS_ERR(master_crtc_state))
> > +			return PTR_ERR(master_crtc_state);
> > +
> > +		master_pipe_config = to_intel_crtc_state(master_crtc_state);
> > +		crtc_state->master_transcoder = master_pipe_config->cpu_transcoder;
> > +		master_pipe_config->sync_mode_slaves_mask |=
> > +			BIT(crtc_state->cpu_transcoder);
> > +		DRM_DEBUG_KMS("Master Transcoder = %s added for Slave CRTC = %d, slave transcoder bitmask = %d\n",
> > +			      transcoder_name(crtc_state->master_transcoder),
> > +			      crtc_state->base.crtc->base.id,
> > +			      master_pipe_config->sync_mode_slaves_mask);
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> >  static int intel_crtc_atomic_check(struct drm_crtc *_crtc,
> >  				   struct drm_crtc_state *_crtc_state)
> >  {
> > @@ -12276,6 +12379,12 @@ clear_intel_crtc_state(struct intel_crtc_state *crtc_state)
> >  	if (IS_G4X(dev_priv) ||
> >  	    IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> >  		saved_state->wm = crtc_state->wm;
> > +	/* Save the slave bitmask which gets filled for master crtc state during
> > +	 * slave atomic check call.
> > +	 */
> 
> Wrong comment format.

What is wrong with the format?

> 
> > +	if (is_trans_port_sync_master(dev_priv, crtc_state))
> > +		saved_state->sync_mode_slaves_mask =
> > +			crtc_state->sync_mode_slaves_mask;
> >  
> >  	/* Keep base drm_crtc_state intact, only clear our extended struct */
> >  	BUILD_BUG_ON(offsetof(struct intel_crtc_state, base));
> > @@ -12369,6 +12478,15 @@ intel_modeset_pipe_config(struct intel_crtc_state *pipe_config)
> >  	drm_mode_set_crtcinfo(&pipe_config->base.adjusted_mode,
> >  			      CRTC_STEREO_DOUBLE);
> >  
> > +	/* Set the crtc_state defaults for trans_port_sync */
> > +	pipe_config->master_transcoder = INVALID_TRANSCODER;
> > +	ret = icl_add_sync_mode_crtcs(crtc, pipe_config, state);
> > +	if (ret) {
> > +		DRM_DEBUG_KMS("Cannot assign Sync Mode CRTCs: %d\n",
> > +			      ret);
> > +		return ret;
> > +	}
> > +
> >  	/* Pass our mode to the connectors and the CRTC to give them a chance to
> >  	 * adjust it according to limitations or connector properties, and also
> >  	 * a chance to reject the mode entirely.
> > @@ -12882,6 +13000,11 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
> >  	PIPE_CONF_CHECK_INFOFRAME(hdmi);
> >  	PIPE_CONF_CHECK_INFOFRAME(drm);
> >  
> > +	if (INTEL_GEN(dev_priv) >= 11) {
> 
> Just do the check uncoditionally.

Ok makes sens, will remove the gen check

Regards
Manasi

> 
> > +		PIPE_CONF_CHECK_I(sync_mode_slaves_mask);
> > +		PIPE_CONF_CHECK_I(master_transcoder);
> > +	}
> > +
> >  #undef PIPE_CONF_CHECK_X
> >  #undef PIPE_CONF_CHECK_I
> >  #undef PIPE_CONF_CHECK_BOOL
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
> > index b1ae0e59c715..1623face436b 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display.h
> > @@ -93,6 +93,7 @@ enum pipe {
> >  #define pipe_name(p) ((p) + 'A')
> >  
> >  enum transcoder {
> > +	INVALID_TRANSCODER = -1,
> >  	/*
> >  	 * The following transcoders have a 1:1 transcoder -> pipe mapping,
> >  	 * keep their values fixed: the code assumes that TRANSCODER_A=0, the
> > @@ -453,6 +454,8 @@ enum drm_mode_status
> >  intel_mode_valid_max_plane_size(struct drm_i915_private *dev_priv,
> >  				const struct drm_display_mode *mode);
> >  enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port);
> > +bool is_trans_port_sync_mode(struct drm_i915_private *i915,
> > +			     const struct intel_crtc_state *state);
> >  
> >  void intel_plane_destroy(struct drm_plane *plane);
> >  void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> > index d5cc4b810d9e..17ff34ca298b 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> > @@ -991,6 +991,12 @@ struct intel_crtc_state {
> >  
> >  	/* Forward Error correction State */
> >  	bool fec_enable;
> > +
> > +	/* Pointer to master transcoder in case of tiled displays */
> > +	enum transcoder master_transcoder;
> > +
> > +	/* Bitmask to indicate slaves attached */
> > +	u8 sync_mode_slaves_mask;
> >  };
> >  
> >  struct intel_crtc {
> > -- 
> > 2.19.1
> 
> -- 
> Ville Syrjälä
> Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync
  2019-10-07  3:43   ` Manasi Navare
@ 2019-10-09 18:01     ` Ville Syrjälä
  0 siblings, 0 replies; 38+ messages in thread
From: Ville Syrjälä @ 2019-10-09 18:01 UTC (permalink / raw)
  To: Manasi Navare; +Cc: Daniel Vetter, intel-gfx

On Sun, Oct 06, 2019 at 08:43:31PM -0700, Manasi Navare wrote:
> On Mon, Sep 30, 2019 at 05:14:15PM +0300, Ville Syrjälä wrote:
> > On Sun, Sep 22, 2019 at 10:08:02AM -0700, Manasi Navare wrote:
> > > In case of tiled displays when the two tiles are sent across two CRTCs
> > > over two separate DP SST connectors, we need a mechanism to synchronize
> > > the two CRTCs and their corresponding transcoders.
> > > So use the master-slave mode where there is one master corresponding
> > > to last horizontal and vertical tile that needs to be genlocked with
> > > all other slave tiles.
> > > This patch identifies saves the master transcoder in all the slave
> > > CRTC states. This is needed to select the master CRTC/transcoder
> > > while configuring transcoder port sync for the corresponding slaves.
> > > 
> > > v4:
> > > * Rebase
> > > v3:
> > > * Use master_tramscoder instead of master_crtc for valid
> > > HW state readouts (Ville)
> > > v2:
> > > * Move this to intel_mode_set_pipe_config(Jani N, Ville)
> > > * Use slave_bitmask to save associated slaves in master crtc state (Ville)
> > > 
> > > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > Cc: Matt Roper <matthew.d.roper@intel.com>
> > > Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
> > > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_display.c  | 123 ++++++++++++++++++
> > >  drivers/gpu/drm/i915/display/intel_display.h  |   3 +
> > >  .../drm/i915/display/intel_display_types.h    |   6 +
> > >  3 files changed, 132 insertions(+)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > > index c05ba6af6226..4ff375d5852d 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > @@ -521,6 +521,24 @@ needs_modeset(const struct intel_crtc_state *state)
> > >  	return drm_atomic_crtc_needs_modeset(&state->base);
> > >  }
> > >  
> > > +bool
> > > +is_trans_port_sync_mode(struct drm_i915_private *dev_priv,
> > 
> > Redundant function parameter. Can be derived if needed.
> 
> Ok
> 
> > 
> > > +			const struct intel_crtc_state *state)
> > 
> > 'crtc_state'
> 
> Ok
> 
> 
> > 
> > > +{
> > > +	return (INTEL_GEN(dev_priv) >= 11 &&
> > 
> > I don't think we need a gen check at all. The state should not have
> > master/slaves set if the feature is not supported.
> 
> Ok will remove this here and for master as well
> 
> > 
> > > +		(state->master_transcoder != INVALID_TRANSCODER ||
> > > +		 state->sync_mode_slaves_mask));
> > > +}
> > > +
> > > +static bool
> > > +is_trans_port_sync_master(struct drm_i915_private *dev_priv,
> > > +			  const struct intel_crtc_state *state)
> > > +{
> > > +	return (INTEL_GEN(dev_priv) >= 11 &&
> > > +		(state->master_transcoder == INVALID_TRANSCODER &&
> > > +		 state->sync_mode_slaves_mask));
> > > +}
> > > +
> > >  /*
> > >   * Platform specific helpers to calculate the port PLL loopback- (clock.m),
> > >   * and post-divider (clock.p) values, pre- (clock.vco) and post-divided fast
> > > @@ -11773,6 +11791,91 @@ static bool c8_planes_changed(const struct intel_crtc_state *new_crtc_state)
> > >  	return !old_crtc_state->c8_planes != !new_crtc_state->c8_planes;
> > >  }
> > >  
> > > +static int icl_add_sync_mode_crtcs(struct drm_crtc *crtc,
> > 
> > intel_ types all over please.
> 
> Yes i think this patch was written we changed everything to intel_ states, will change it all
> to intel states
> 
> But do we stll keep drm_atomic_state or change that to intel_atomic_state as well?
> 
> > 
> > Also don't need all three funciton arguments. Either just
> > crtc_state or state+crtc will do.
> 
> Hmm, but I do need the atomic_state, crtc_state and also the crtc in the modeset

One can always derive the others.

Option 1:
foo(crtc_state)
{
	crtc = crtc_state->crtc;
	state = crtc_state->state;
	...
}

Option 2:
foo(state, crtc)
{
	crtc_state = get_crtc_state(state, crtc);
	...
}

IMO life is more pleasant when you don't have to think about
every function needing to be passed a different set of redundant
information.

> 
> 
> > 
> > > +				   struct intel_crtc_state *crtc_state,
> > > +				   struct drm_atomic_state *state)
> > > +{
> > > +	struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
> > > +	struct drm_connector *master_connector, *connector;
> > > +	struct drm_connector_state *connector_state;
> > > +	struct drm_connector_list_iter conn_iter;
> > > +	struct drm_crtc *master_crtc = NULL;
> > > +	struct drm_crtc_state *master_crtc_state;
> > > +	struct intel_crtc_state *master_pipe_config;
> > > +	int i, tile_group_id;
> > > +
> > > +	if (INTEL_GEN(dev_priv) < 11)
> > > +		return 0;
> > > +
> > > +	/*
> > > +	 * In case of tiled displays there could be one or more slaves but there is
> > > +	 * only one master. Lets make the CRTC used by the connector corresponding
> > > +	 * to the last horizonal and last vertical tile a master/genlock CRTC.
> > > +	 * All the other CRTCs corresponding to other tiles of the same Tile group
> > > +	 * are the slave CRTCs and hold a pointer to their genlock CRTC.
> > > +	 */
> > > +	for_each_new_connector_in_state(state, connector, connector_state, i) {
> > > +		if (connector_state->crtc != crtc)
> > > +			continue;
> > > +		if (!connector->has_tile)
> > > +			continue;
> > > +		if (crtc_state->base.mode.hdisplay != connector->tile_h_size ||
> > > +		    crtc_state->base.mode.vdisplay != connector->tile_v_size)
> > > +			return 0;
> > > +		if (connector->tile_h_loc == connector->num_h_tile - 1 &&
> > > +		    connector->tile_v_loc == connector->num_v_tile - 1)
> > > +			continue;
> > > +		crtc_state->sync_mode_slaves_mask = 0;
> > > +		tile_group_id = connector->tile_group->id;
> > > +		drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
> > > +		drm_for_each_connector_iter(master_connector, &conn_iter) {
> > > +			struct drm_connector_state *master_conn_state = NULL;
> > > +
> > > +			if (!master_connector->has_tile)
> > > +				continue;
> > > +			if (master_connector->tile_h_loc != master_connector->num_h_tile - 1 ||
> > > +			    master_connector->tile_v_loc != master_connector->num_v_tile - 1)
> > > +				continue;
> > > +			if (master_connector->tile_group->id != tile_group_id)
> > > +				continue;
> > > +
> > > +			master_conn_state = drm_atomic_get_connector_state(state,
> > > +									   master_connector);
> > > +			if (IS_ERR(master_conn_state)) {
> > > +				drm_connector_list_iter_end(&conn_iter);
> > > +				return PTR_ERR(master_conn_state);
> > > +			}
> > > +			if (master_conn_state->crtc) {
> > > +				master_crtc = master_conn_state->crtc;
> > > +				break;
> > > +			}
> > > +		}
> > > +		drm_connector_list_iter_end(&conn_iter);
> > > +
> > > +		if (!master_crtc) {
> > > +			DRM_DEBUG_KMS("Could not find Master CRTC for Slave CRTC %d\n",
> > > +				      connector_state->crtc->base.id);
> > > +			return -EINVAL;
> > > +		}
> > > +
> > > +		master_crtc_state = drm_atomic_get_crtc_state(state,
> > > +							      master_crtc);
> > > +		if (IS_ERR(master_crtc_state))
> > > +			return PTR_ERR(master_crtc_state);
> > > +
> > > +		master_pipe_config = to_intel_crtc_state(master_crtc_state);
> > > +		crtc_state->master_transcoder = master_pipe_config->cpu_transcoder;
> > > +		master_pipe_config->sync_mode_slaves_mask |=
> > > +			BIT(crtc_state->cpu_transcoder);
> > > +		DRM_DEBUG_KMS("Master Transcoder = %s added for Slave CRTC = %d, slave transcoder bitmask = %d\n",
> > > +			      transcoder_name(crtc_state->master_transcoder),
> > > +			      crtc_state->base.crtc->base.id,
> > > +			      master_pipe_config->sync_mode_slaves_mask);
> > > +	}
> > > +
> > > +	return 0;
> > > +}
> > > +
> > >  static int intel_crtc_atomic_check(struct drm_crtc *_crtc,
> > >  				   struct drm_crtc_state *_crtc_state)
> > >  {
> > > @@ -12276,6 +12379,12 @@ clear_intel_crtc_state(struct intel_crtc_state *crtc_state)
> > >  	if (IS_G4X(dev_priv) ||
> > >  	    IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> > >  		saved_state->wm = crtc_state->wm;
> > > +	/* Save the slave bitmask which gets filled for master crtc state during
> > > +	 * slave atomic check call.
> > > +	 */
> > 
> > Wrong comment format.
> 
> What is wrong with the format?

Should look like:

/*
 * foo
 * bar
 */

not 

/* foo
 * bar
 */

Hmm. Looks like checkpatch doesn't complain about that anymore,
so maybe some people have finally come to accept either format.

> 
> > 
> > > +	if (is_trans_port_sync_master(dev_priv, crtc_state))
> > > +		saved_state->sync_mode_slaves_mask =
> > > +			crtc_state->sync_mode_slaves_mask;
> > >  
> > >  	/* Keep base drm_crtc_state intact, only clear our extended struct */
> > >  	BUILD_BUG_ON(offsetof(struct intel_crtc_state, base));
> > > @@ -12369,6 +12478,15 @@ intel_modeset_pipe_config(struct intel_crtc_state *pipe_config)
> > >  	drm_mode_set_crtcinfo(&pipe_config->base.adjusted_mode,
> > >  			      CRTC_STEREO_DOUBLE);
> > >  
> > > +	/* Set the crtc_state defaults for trans_port_sync */
> > > +	pipe_config->master_transcoder = INVALID_TRANSCODER;
> > > +	ret = icl_add_sync_mode_crtcs(crtc, pipe_config, state);
> > > +	if (ret) {
> > > +		DRM_DEBUG_KMS("Cannot assign Sync Mode CRTCs: %d\n",
> > > +			      ret);
> > > +		return ret;
> > > +	}
> > > +
> > >  	/* Pass our mode to the connectors and the CRTC to give them a chance to
> > >  	 * adjust it according to limitations or connector properties, and also
> > >  	 * a chance to reject the mode entirely.
> > > @@ -12882,6 +13000,11 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
> > >  	PIPE_CONF_CHECK_INFOFRAME(hdmi);
> > >  	PIPE_CONF_CHECK_INFOFRAME(drm);
> > >  
> > > +	if (INTEL_GEN(dev_priv) >= 11) {
> > 
> > Just do the check uncoditionally.
> 
> Ok makes sens, will remove the gen check
> 
> Regards
> Manasi
> 
> > 
> > > +		PIPE_CONF_CHECK_I(sync_mode_slaves_mask);
> > > +		PIPE_CONF_CHECK_I(master_transcoder);
> > > +	}
> > > +
> > >  #undef PIPE_CONF_CHECK_X
> > >  #undef PIPE_CONF_CHECK_I
> > >  #undef PIPE_CONF_CHECK_BOOL
> > > diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
> > > index b1ae0e59c715..1623face436b 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display.h
> > > +++ b/drivers/gpu/drm/i915/display/intel_display.h
> > > @@ -93,6 +93,7 @@ enum pipe {
> > >  #define pipe_name(p) ((p) + 'A')
> > >  
> > >  enum transcoder {
> > > +	INVALID_TRANSCODER = -1,
> > >  	/*
> > >  	 * The following transcoders have a 1:1 transcoder -> pipe mapping,
> > >  	 * keep their values fixed: the code assumes that TRANSCODER_A=0, the
> > > @@ -453,6 +454,8 @@ enum drm_mode_status
> > >  intel_mode_valid_max_plane_size(struct drm_i915_private *dev_priv,
> > >  				const struct drm_display_mode *mode);
> > >  enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port);
> > > +bool is_trans_port_sync_mode(struct drm_i915_private *i915,
> > > +			     const struct intel_crtc_state *state);
> > >  
> > >  void intel_plane_destroy(struct drm_plane *plane);
> > >  void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
> > > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> > > index d5cc4b810d9e..17ff34ca298b 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> > > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> > > @@ -991,6 +991,12 @@ struct intel_crtc_state {
> > >  
> > >  	/* Forward Error correction State */
> > >  	bool fec_enable;
> > > +
> > > +	/* Pointer to master transcoder in case of tiled displays */
> > > +	enum transcoder master_transcoder;
> > > +
> > > +	/* Bitmask to indicate slaves attached */
> > > +	u8 sync_mode_slaves_mask;
> > >  };
> > >  
> > >  struct intel_crtc {
> > > -- 
> > > 2.19.1
> > 
> > -- 
> > Ville Syrjälä
> > Intel

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

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

end of thread, other threads:[~2019-10-09 18:01 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-22 17:08 [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Manasi Navare
2019-09-22 17:08 ` [PATCH v3 2/6] drm/i915/display/icl: Enable TRANSCODER PORT SYNC for tiled displays across separate ports Manasi Navare
2019-09-30 14:19   ` Ville Syrjälä
2019-10-07  3:22     ` Manasi Navare
2019-09-22 17:08 ` [PATCH v3 3/6] drm/i915/display/icl: HW state readout for transcoder port sync config Manasi Navare
2019-09-23  4:43   ` Manasi Navare
2019-09-24 15:38   ` Maarten Lankhorst
2019-09-24 17:59     ` Manasi Navare
2019-09-25 10:08       ` Ville Syrjälä
2019-09-25 18:37         ` Manasi Navare
2019-09-26 12:28           ` Ville Syrjälä
2019-09-26 17:29             ` Manasi Navare
2019-09-24 19:50   ` [PATCH v4] " Manasi Navare
2019-09-24 22:59     ` kbuild test robot
2019-09-27  0:11     ` [PATCH v5 3/6] " Manasi Navare
2019-09-27 21:04       ` Manasi Navare
2019-09-30 14:21       ` Ville Syrjälä
2019-10-07  3:31         ` Manasi Navare
2019-09-30 19:45       ` Lucas De Marchi
2019-10-07  3:33         ` Manasi Navare
2019-09-22 17:08 ` [PATCH v3 4/6] drm/i915/display/icl: Enable master-slaves in trans port sync Manasi Navare
2019-09-30 15:28   ` Ville Syrjälä
2019-10-07  3:14     ` Manasi Navare
2019-09-22 17:08 ` [PATCH v3 5/6] drm/i915/display/icl: Disable transcoder port sync as part of crtc_disable() sequence Manasi Navare
2019-09-22 17:08 ` [PATCH v3 6/6] drm/i915/display/icl: In port sync mode disable slaves first then master Manasi Navare
2019-09-22 17:39 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Patchwork
2019-09-23  8:29 ` ✓ Fi.CI.IGT: " Patchwork
2019-09-24 21:17 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev2) Patchwork
2019-09-25 15:30 ` ✓ Fi.CI.IGT: " Patchwork
2019-09-27  0:41 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev3) Patchwork
2019-09-27 19:07 ` ✗ Fi.CI.IGT: failure " Patchwork
2019-09-27 20:38 ` ✓ Fi.CI.BAT: success for series starting with [v3,1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync (rev4) Patchwork
2019-09-28 12:22 ` ✗ Fi.CI.IGT: failure " Patchwork
2019-09-30 14:14 ` [PATCH v3 1/6] drm/i915/display/icl: Save Master transcoder in slave's crtc_state for Transcoder Port Sync Ville Syrjälä
2019-10-07  3:43   ` Manasi Navare
2019-10-09 18:01     ` Ville Syrjälä
2019-09-30 18:37 ` Lucas De Marchi
2019-10-01 12:17   ` Ville Syrjälä

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.