All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/4] Prep. for DP audio MST support
@ 2016-08-23 20:49 Dhinakaran Pandiyan
  2016-08-23 20:49 ` [PATCH v3 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
                   ` (4 more replies)
  0 siblings, 5 replies; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-23 20:49 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

This series lays the groundwork for more DP MST audio work that will
follow.

v2:
Different solution replacing the enc_to_dig_port() fix (Ville, Lyude).
No changes to MST audio enabling and move audio_connector patches.
Reordered the patches (Lyude)

v3:
Different solution to get port from encoder (danvet).
Removed locals that are not needed any more.
Minor variable renaming clean up.
Rebased on dinq.
Retained r-b for "start adding dp mst audio" as it does not change.

Dhinakaran Pandiyan (3):
  drm/i915: Store port enum in intel_encoder
  drm/i915: Switch to using port stored in intel_encoder
  drm/i915: Move audio_connector to intel_encoder

Libin Yang (1):
  drm/i915: start adding dp mst audio

 drivers/gpu/drm/i915/i915_debugfs.c | 19 +++++++++++++-
 drivers/gpu/drm/i915/i915_drv.h     |  1 +
 drivers/gpu/drm/i915/intel_audio.c  | 51 ++++++++++++++-----------------------
 drivers/gpu/drm/i915/intel_ddi.c    | 21 +++++++++++----
 drivers/gpu/drm/i915/intel_dp.c     |  1 +
 drivers/gpu/drm/i915/intel_dp_mst.c | 22 ++++++++++++++++
 drivers/gpu/drm/i915/intel_drv.h    |  7 +++--
 drivers/gpu/drm/i915/intel_dsi.c    |  1 +
 drivers/gpu/drm/i915/intel_dvo.c    |  2 ++
 drivers/gpu/drm/i915/intel_hdmi.c   |  1 +
 drivers/gpu/drm/i915/intel_lvds.c   |  3 ++-
 drivers/gpu/drm/i915/intel_tv.c     |  2 ++
 12 files changed, 90 insertions(+), 41 deletions(-)

-- 
2.5.0

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

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

* [PATCH v3 1/4] drm/i915: Store port enum in intel_encoder
  2016-08-23 20:49 [PATCH v3 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
@ 2016-08-23 20:49 ` Dhinakaran Pandiyan
  2016-08-24  6:08   ` Daniel Vetter
  2016-08-23 20:49 ` [PATCH v3 2/4] drm/i915: Switch to using port stored in intel_encoder Dhinakaran Pandiyan
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-23 20:49 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

Storing the port enum in intel_encoder makes it convenient to know the
port attached to an encoder. Moving the port information up from
intel_digital_port to intel_encoder avoids unecessary intel_digital_port
access and handles MST encoders cleanly without requiring conditional
checks for them (thanks danvet).

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h     | 1 +
 drivers/gpu/drm/i915/intel_ddi.c    | 1 +
 drivers/gpu/drm/i915/intel_dp.c     | 1 +
 drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
 drivers/gpu/drm/i915/intel_drv.h    | 1 +
 drivers/gpu/drm/i915/intel_dsi.c    | 1 +
 drivers/gpu/drm/i915/intel_dvo.c    | 2 ++
 drivers/gpu/drm/i915/intel_hdmi.c   | 1 +
 drivers/gpu/drm/i915/intel_lvds.c   | 3 ++-
 drivers/gpu/drm/i915/intel_tv.c     | 2 ++
 10 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9cd102c..60e282d5 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -185,6 +185,7 @@ enum plane {
 #define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) + 'A')
 
 enum port {
+	PORT_NONE = -1,
 	PORT_A = 0,
 	PORT_B,
 	PORT_C,
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index c2df4e4..086de39 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2426,6 +2426,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
 	intel_dig_port->max_lanes = max_lanes;
 
 	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
+	intel_encoder->attached_port = port;
 	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
 	intel_encoder->cloneable = 0;
 
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 364db90..4771428 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5726,6 +5726,7 @@ bool intel_dp_init(struct drm_device *dev,
 		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
 	}
 	intel_encoder->cloneable = 0;
+	intel_encoder->attached_port = port;
 
 	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
 	dev_priv->hotplug.irq_port[port] = intel_dig_port;
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 629337d..a51f6f7 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -540,6 +540,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
 			 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe));
 
 	intel_encoder->type = INTEL_OUTPUT_DP_MST;
+	intel_encoder->attached_port = intel_dig_port->port;
 	intel_encoder->crtc_mask = 0x7;
 	intel_encoder->cloneable = 0;
 
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 1c700b0..101d671 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -202,6 +202,7 @@ struct intel_encoder {
 	struct drm_encoder base;
 
 	enum intel_output_type type;
+	enum port attached_port;
 	unsigned int cloneable;
 	void (*hot_plug)(struct intel_encoder *);
 	bool (*compute_config)(struct intel_encoder *,
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index de8e9fb..293e530 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -1478,6 +1478,7 @@ void intel_dsi_init(struct drm_device *dev)
 
 	intel_connector->get_hw_state = intel_connector_get_hw_state;
 
+	intel_encoder->attached_port = port;
 	/*
 	 * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI
 	 * port C. BXT isn't limited like this.
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 47bdf9d..86a888f 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -511,7 +511,9 @@ void intel_dvo_init(struct drm_device *dev)
 				 "DVO %c", intel_dvo_port_name(dvo->dvo_reg));
 
 		intel_encoder->type = INTEL_OUTPUT_DVO;
+		intel_encoder->attached_port = PORT_NONE;
 		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
+
 		switch (dvo->type) {
 		case INTEL_DVO_CHIP_TMDS:
 			intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG) |
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 4df9f38..070a5e2 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1962,6 +1962,7 @@ void intel_hdmi_init(struct drm_device *dev,
 	}
 
 	intel_encoder->type = INTEL_OUTPUT_HDMI;
+	intel_encoder->attached_port = port;
 	if (IS_CHERRYVIEW(dev)) {
 		if (port == PORT_D)
 			intel_encoder->crtc_mask = 1 << 2;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 668eabb..a497698 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -1052,8 +1052,9 @@ void intel_lvds_init(struct drm_device *dev)
 	intel_connector->get_hw_state = intel_connector_get_hw_state;
 
 	intel_connector_attach_encoder(intel_connector, intel_encoder);
-	intel_encoder->type = INTEL_OUTPUT_LVDS;
 
+	intel_encoder->type = INTEL_OUTPUT_LVDS;
+	intel_encoder->attached_port = PORT_NONE;
 	intel_encoder->cloneable = 0;
 	if (HAS_PCH_SPLIT(dev))
 		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 49136ad..18c4257 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1603,7 +1603,9 @@ intel_tv_init(struct drm_device *dev)
 	intel_connector->get_hw_state = intel_connector_get_hw_state;
 
 	intel_connector_attach_encoder(intel_connector, intel_encoder);
+
 	intel_encoder->type = INTEL_OUTPUT_TVOUT;
+	intel_encoder->attached_port = PORT_NONE;
 	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
 	intel_encoder->cloneable = 0;
 	intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
-- 
2.5.0

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

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

* [PATCH v3 2/4] drm/i915: Switch to using port stored in intel_encoder
  2016-08-23 20:49 [PATCH v3 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
  2016-08-23 20:49 ` [PATCH v3 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
@ 2016-08-23 20:49 ` Dhinakaran Pandiyan
  2016-08-23 20:49 ` [PATCH v3 3/4] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-23 20:49 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

Now that we have the port enum stored in intel_encoder use that instead of
dereferencing intel_dig_port. Saves us a few locals.

struct intel_encoder variables have been renamed to be consistent and
convey type information.

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 39 +++++++++++++++-----------------------
 1 file changed, 15 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index d32f586..5a41439 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -276,17 +276,15 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder)
 }
 
 static void hsw_audio_codec_enable(struct drm_connector *connector,
-				   struct intel_encoder *encoder,
+				   struct intel_encoder *intel_encoder,
 				   const struct drm_display_mode *adjusted_mode)
 {
 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
-	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
+	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
 	enum pipe pipe = intel_crtc->pipe;
+	enum port port = intel_encoder->attached_port;
 	struct i915_audio_component *acomp = dev_priv->audio_component;
 	const uint8_t *eld = connector->eld;
-	struct intel_digital_port *intel_dig_port =
-		enc_to_dig_port(&encoder->base);
-	enum port port = intel_dig_port->port;
 	uint32_t tmp;
 	int len, i;
 	int n, rate;
@@ -355,14 +353,12 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
 	mutex_unlock(&dev_priv->av_mutex);
 }
 
-static void ilk_audio_codec_disable(struct intel_encoder *encoder)
+static void ilk_audio_codec_disable(struct intel_encoder *intel_encoder)
 {
-	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
-	struct intel_digital_port *intel_dig_port =
-		enc_to_dig_port(&encoder->base);
-	enum port port = intel_dig_port->port;
+	struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
+	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
 	enum pipe pipe = intel_crtc->pipe;
+	enum port port = intel_encoder->attached_port;
 	uint32_t tmp, eldv;
 	i915_reg_t aud_config, aud_cntrl_st2;
 
@@ -402,18 +398,15 @@ static void ilk_audio_codec_disable(struct intel_encoder *encoder)
 }
 
 static void ilk_audio_codec_enable(struct drm_connector *connector,
-				   struct intel_encoder *encoder,
+				   struct intel_encoder *intel_encoder,
 				   const struct drm_display_mode *adjusted_mode)
 {
 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
-	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
-	struct intel_digital_port *intel_dig_port =
-		enc_to_dig_port(&encoder->base);
-	enum port port = intel_dig_port->port;
+	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
 	enum pipe pipe = intel_crtc->pipe;
+	enum port port = intel_encoder->attached_port;
 	uint8_t *eld = connector->eld;
-	uint32_t eldv;
-	uint32_t tmp;
+	uint32_t tmp, eldv;
 	int len, i;
 	i915_reg_t hdmiw_hdmiedid, aud_config, aud_cntl_st, aud_cntrl_st2;
 
@@ -495,11 +488,10 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
 	const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
 	struct drm_connector *connector;
-	struct drm_device *dev = encoder->dev;
-	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
 	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_encoder->attached_port;
 
 	connector = drm_select_eld(encoder);
 	if (!connector)
@@ -542,11 +534,10 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
 {
 	struct drm_encoder *encoder = &intel_encoder->base;
-	struct drm_device *dev = encoder->dev;
-	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
 	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_encoder->attached_port;
 
 	if (dev_priv->display.audio_codec_disable)
 		dev_priv->display.audio_codec_disable(intel_encoder);
-- 
2.5.0

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

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

* [PATCH v3 3/4] drm/i915: Move audio_connector to intel_encoder
  2016-08-23 20:49 [PATCH v3 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
  2016-08-23 20:49 ` [PATCH v3 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
  2016-08-23 20:49 ` [PATCH v3 2/4] drm/i915: Switch to using port stored in intel_encoder Dhinakaran Pandiyan
@ 2016-08-23 20:49 ` Dhinakaran Pandiyan
  2016-08-23 20:49 ` [PATCH v3 4/4] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
  2016-08-24  3:20 ` ✗ Fi.CI.BAT: failure for Prep. for DP audio MST support (rev2) Patchwork
  4 siblings, 0 replies; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-23 20:49 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

With DP MST, a digital_port can carry more than one audio stream. Hence,
more than one audio_connector needs to be attached to intel_digital_port in
such cases. However, each stream is associated with an unique encoder. So,
instead of creating an array of audio_connectors per port, move
audio_connector from struct intel_digital_port to struct intel_encoder.
This also simplifies access to the right audio_connector from codec
functions in intel_audio.c that receive intel_encoder.

v2: Removed local that are needed anymore.

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 12 ++++--------
 drivers/gpu/drm/i915/intel_drv.h   |  4 ++--
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 5a41439..b86bfad 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -490,7 +490,6 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 	struct drm_connector *connector;
 	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
-	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
 	enum port port = intel_encoder->attached_port;
 
 	connector = drm_select_eld(encoder);
@@ -515,7 +514,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 						     adjusted_mode);
 
 	mutex_lock(&dev_priv->av_mutex);
-	intel_dig_port->audio_connector = connector;
+	intel_encoder->audio_connector = connector;
 	/* referred in audio callbacks */
 	dev_priv->dig_port_map[port] = intel_encoder;
 	mutex_unlock(&dev_priv->av_mutex);
@@ -536,14 +535,13 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
 	struct drm_encoder *encoder = &intel_encoder->base;
 	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
-	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
 	enum port port = intel_encoder->attached_port;
 
 	if (dev_priv->display.audio_codec_disable)
 		dev_priv->display.audio_codec_disable(intel_encoder);
 
 	mutex_lock(&dev_priv->av_mutex);
-	intel_dig_port->audio_connector = NULL;
+	intel_encoder->audio_connector = NULL;
 	dev_priv->dig_port_map[port] = NULL;
 	mutex_unlock(&dev_priv->av_mutex);
 
@@ -704,7 +702,6 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
 {
 	struct drm_i915_private *dev_priv = dev_to_i915(dev);
 	struct intel_encoder *intel_encoder;
-	struct intel_digital_port *intel_dig_port;
 	const u8 *eld;
 	int ret = -EINVAL;
 
@@ -713,10 +710,9 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
 	/* intel_encoder might be NULL for DP MST */
 	if (intel_encoder) {
 		ret = 0;
-		intel_dig_port = enc_to_dig_port(&intel_encoder->base);
-		*enabled = intel_dig_port->audio_connector != NULL;
+		*enabled = intel_encoder->audio_connector != NULL;
 		if (*enabled) {
-			eld = intel_dig_port->audio_connector->eld;
+			eld = intel_encoder->audio_connector->eld;
 			ret = drm_eld_size(eld);
 			memcpy(buf, eld, min(max_bytes, ret));
 		}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 101d671..0f8eebe 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -232,6 +232,8 @@ struct intel_encoder {
 	void (*suspend)(struct intel_encoder *);
 	int crtc_mask;
 	enum hpd_pin hpd_pin;
+	/* for communication with audio component; protected by av_mutex */
+	const struct drm_connector *audio_connector;
 };
 
 struct intel_panel {
@@ -948,8 +950,6 @@ struct intel_digital_port {
 	enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
 	bool release_cl2_override;
 	uint8_t max_lanes;
-	/* for communication with audio component; protected by av_mutex */
-	const struct drm_connector *audio_connector;
 };
 
 struct intel_dp_mst_encoder {
-- 
2.5.0

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

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

* [PATCH v3 4/4] drm/i915: start adding dp mst audio
  2016-08-23 20:49 [PATCH v3 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
                   ` (2 preceding siblings ...)
  2016-08-23 20:49 ` [PATCH v3 3/4] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
@ 2016-08-23 20:49 ` Dhinakaran Pandiyan
  2016-08-24  3:20 ` ✗ Fi.CI.BAT: failure for Prep. for DP audio MST support (rev2) Patchwork
  4 siblings, 0 replies; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-23 20:49 UTC (permalink / raw)
  To: intel-gfx; +Cc: libin.yang, Daniel Vetter

From: Libin Yang <libin.yang@linux.intel.com>

(This patch is developed by Dave Airlie <airlied@redhat.com> originally)

This patch adds support for DP MST audio in i915.

Enable audio codec when DP MST is enabled if has_audio flag is set.
Disable audio codec when DP MST is disabled if has_audio flag is set.

Another separated patches to support DP MST audio will be implemented
in audio driver.

Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
Reviewed-by: Lyude <cpaul@redhat.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 19 ++++++++++++++++++-
 drivers/gpu/drm/i915/intel_ddi.c    | 20 +++++++++++++++-----
 drivers/gpu/drm/i915/intel_dp_mst.c | 21 +++++++++++++++++++++
 drivers/gpu/drm/i915/intel_drv.h    |  2 ++
 4 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index d0b4c74..8ec69d0 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2925,6 +2925,20 @@ static void intel_dp_info(struct seq_file *m,
 		intel_panel_info(m, &intel_connector->panel);
 }
 
+static void intel_dp_mst_info(struct seq_file *m,
+			  struct intel_connector *intel_connector)
+{
+	struct intel_encoder *intel_encoder = intel_connector->encoder;
+	struct intel_dp_mst_encoder *intel_mst =
+		enc_to_mst(&intel_encoder->base);
+	struct intel_digital_port *intel_dig_port = intel_mst->primary;
+	struct intel_dp *intel_dp = &intel_dig_port->dp;
+	bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr,
+					intel_connector->port);
+
+	seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
+}
+
 static void intel_hdmi_info(struct seq_file *m,
 			    struct intel_connector *intel_connector)
 {
@@ -2967,7 +2981,10 @@ static void intel_connector_info(struct seq_file *m,
 	switch (connector->connector_type) {
 	case DRM_MODE_CONNECTOR_DisplayPort:
 	case DRM_MODE_CONNECTOR_eDP:
-		intel_dp_info(m, intel_connector);
+		if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
+			intel_dp_mst_info(m, intel_connector);
+		else
+			intel_dp_info(m, intel_connector);
 		break;
 	case DRM_MODE_CONNECTOR_LVDS:
 		if (intel_encoder->type == INTEL_OUTPUT_LVDS)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 086de39..1429232 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2173,6 +2173,19 @@ void intel_ddi_fdi_disable(struct drm_crtc *crtc)
 	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
 }
 
+bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
+				 struct intel_crtc *intel_crtc)
+{
+	u32 temp;
+
+	if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
+		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
+		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
+			return true;
+	}
+	return false;
+}
+
 void intel_ddi_get_config(struct intel_encoder *encoder,
 			  struct intel_crtc_state *pipe_config)
 {
@@ -2238,11 +2251,8 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
 		break;
 	}
 
-	if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
-		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
-		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
-			pipe_config->has_audio = true;
-	}
+	pipe_config->has_audio =
+		intel_ddi_is_audio_enabled(dev_priv, intel_crtc);
 
 	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.bpp &&
 	    pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) {
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index a51f6f7..5d03ebf 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -76,6 +76,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
 		return false;
 	}
 
+	if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found->port))
+		pipe_config->has_audio = true;
 	mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
 
 	pipe_config->pbn = mst_pbn;
@@ -97,6 +99,10 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
+	struct drm_device *dev = encoder->base.dev;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct drm_crtc *crtc = encoder->base.crtc;
+	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 	int ret;
 
 	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
@@ -107,6 +113,10 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
 	if (ret) {
 		DRM_ERROR("failed to update payload %d\n", ret);
 	}
+	if (intel_crtc->config->has_audio) {
+		intel_audio_codec_disable(encoder);
+		intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO);
+	}
 }
 
 static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
@@ -207,7 +217,9 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
 	enum port port = intel_dig_port->port;
+	enum pipe pipe = crtc->pipe;
 	int ret;
 
 	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
@@ -222,6 +234,12 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
 	ret = drm_dp_check_act_status(&intel_dp->mst_mgr);
 
 	ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr);
+	if (crtc->config->has_audio) {
+		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
+				 pipe_name(pipe));
+		intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
+		intel_audio_codec_enable(encoder);
+	}
 }
 
 static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder,
@@ -245,6 +263,9 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder,
 	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
 	u32 temp, flags = 0;
 
+	pipe_config->has_audio =
+		intel_ddi_is_audio_enabled(dev_priv, crtc);
+
 	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
 	if (temp & TRANS_DDI_PHSYNC)
 		flags |= DRM_MODE_FLAG_PHSYNC;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 0f8eebe..530baec 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1142,6 +1142,8 @@ void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
 void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
 bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
 void intel_ddi_fdi_disable(struct drm_crtc *crtc);
+bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
+				 struct intel_crtc *intel_crtc);
 void intel_ddi_get_config(struct intel_encoder *encoder,
 			  struct intel_crtc_state *pipe_config);
 struct intel_encoder *
-- 
2.5.0

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

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

* ✗ Fi.CI.BAT: failure for Prep. for DP audio MST support (rev2)
  2016-08-23 20:49 [PATCH v3 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
                   ` (3 preceding siblings ...)
  2016-08-23 20:49 ` [PATCH v3 4/4] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
@ 2016-08-24  3:20 ` Patchwork
  4 siblings, 0 replies; 22+ messages in thread
From: Patchwork @ 2016-08-24  3:20 UTC (permalink / raw)
  To: Pandiyan, Dhinakaran; +Cc: intel-gfx

== Series Details ==

Series: Prep. for DP audio MST support (rev2)
URL   : https://patchwork.freedesktop.org/series/11129/
State : failure

== Summary ==

Series 11129v2 Prep. for DP audio MST support
http://patchwork.freedesktop.org/api/1.0/series/11129/revisions/2/mbox/

Test gem_exec_suspend:
        Subgroup basic-s3:
                dmesg-warn -> INCOMPLETE (fi-hsw-4770k)
Test kms_cursor_legacy:
        Subgroup basic-flip-vs-cursor-legacy:
                pass       -> FAIL       (fi-skl-6700k)
        Subgroup basic-flip-vs-cursor-varying-size:
                pass       -> FAIL       (fi-skl-6700k)
                fail       -> PASS       (fi-hsw-4770r)

fi-bdw-5557u     total:249  pass:232  dwarn:0   dfail:0   fail:1   skip:16 
fi-bsw-n3050     total:249  pass:202  dwarn:0   dfail:0   fail:3   skip:44 
fi-byt-n2820     total:249  pass:204  dwarn:0   dfail:0   fail:4   skip:41 
fi-hsw-4770k     total:107  pass:91   dwarn:0   dfail:0   fail:0   skip:15 
fi-hsw-4770r     total:249  pass:222  dwarn:0   dfail:0   fail:1   skip:26 
fi-ivb-3520m     total:249  pass:217  dwarn:0   dfail:0   fail:1   skip:31 
fi-skl-6260u     total:249  pass:234  dwarn:0   dfail:0   fail:1   skip:14 
fi-skl-6700k     total:249  pass:214  dwarn:4   dfail:0   fail:3   skip:28 
fi-snb-2520m     total:249  pass:201  dwarn:4   dfail:0   fail:2   skip:42 
fi-snb-2600      total:249  pass:202  dwarn:4   dfail:0   fail:1   skip:42 

Results at /archive/results/CI_IGT_test/Patchwork_2414/

74607c2ff95614c1ace6a7207a2960ecc1cec95c drm-intel-nightly: 2016y-08m-23d-19h-46m-16s UTC integration manifest
f7d8bf1 drm/i915: Switch to using port stored in intel_encoder
50a0bdf drm/i915: Store port enum in intel_encoder

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

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

* Re: [PATCH v3 1/4] drm/i915: Store port enum in intel_encoder
  2016-08-23 20:49 ` [PATCH v3 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
@ 2016-08-24  6:08   ` Daniel Vetter
  2016-08-24  6:28     ` Pandiyan, Dhinakaran
  2016-08-24  7:22     ` [PATCH v4 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
  0 siblings, 2 replies; 22+ messages in thread
From: Daniel Vetter @ 2016-08-24  6:08 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: Daniel Vetter, intel-gfx, libin.yang

On Tue, Aug 23, 2016 at 01:49:17PM -0700, Dhinakaran Pandiyan wrote:
> Storing the port enum in intel_encoder makes it convenient to know the
> port attached to an encoder. Moving the port information up from
> intel_digital_port to intel_encoder avoids unecessary intel_digital_port
> access and handles MST encoders cleanly without requiring conditional
> checks for them (thanks danvet).
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h     | 1 +
>  drivers/gpu/drm/i915/intel_ddi.c    | 1 +
>  drivers/gpu/drm/i915/intel_dp.c     | 1 +
>  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
>  drivers/gpu/drm/i915/intel_drv.h    | 1 +
>  drivers/gpu/drm/i915/intel_dsi.c    | 1 +
>  drivers/gpu/drm/i915/intel_dvo.c    | 2 ++
>  drivers/gpu/drm/i915/intel_hdmi.c   | 1 +
>  drivers/gpu/drm/i915/intel_lvds.c   | 3 ++-
>  drivers/gpu/drm/i915/intel_tv.c     | 2 ++
>  10 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 9cd102c..60e282d5 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -185,6 +185,7 @@ enum plane {
>  #define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) + 'A')
>  
>  enum port {
> +	PORT_NONE = -1,
>  	PORT_A = 0,
>  	PORT_B,
>  	PORT_C,
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index c2df4e4..086de39 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2426,6 +2426,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
>  	intel_dig_port->max_lanes = max_lanes;
>  
>  	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
> +	intel_encoder->attached_port = port;
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	intel_encoder->cloneable = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 364db90..4771428 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5726,6 +5726,7 @@ bool intel_dp_init(struct drm_device *dev,
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	}
>  	intel_encoder->cloneable = 0;
> +	intel_encoder->attached_port = port;
>  
>  	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
>  	dev_priv->hotplug.irq_port[port] = intel_dig_port;
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 629337d..a51f6f7 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -540,6 +540,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
>  			 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe));
>  
>  	intel_encoder->type = INTEL_OUTPUT_DP_MST;
> +	intel_encoder->attached_port = intel_dig_port->port;
>  	intel_encoder->crtc_mask = 0x7;
>  	intel_encoder->cloneable = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 1c700b0..101d671 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -202,6 +202,7 @@ struct intel_encoder {
>  	struct drm_encoder base;
>  
>  	enum intel_output_type type;
> +	enum port attached_port;

Why the attached_ prefix? The intel_encoder _is_ the port (more or less at
least). Also intel_sdvo.c is missing. Otherwise I think it makes sense.
-Daniel


>  	unsigned int cloneable;
>  	void (*hot_plug)(struct intel_encoder *);
>  	bool (*compute_config)(struct intel_encoder *,
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> index de8e9fb..293e530 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -1478,6 +1478,7 @@ void intel_dsi_init(struct drm_device *dev)
>  
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
> +	intel_encoder->attached_port = port;
>  	/*
>  	 * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI
>  	 * port C. BXT isn't limited like this.
> diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
> index 47bdf9d..86a888f 100644
> --- a/drivers/gpu/drm/i915/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/intel_dvo.c
> @@ -511,7 +511,9 @@ void intel_dvo_init(struct drm_device *dev)
>  				 "DVO %c", intel_dvo_port_name(dvo->dvo_reg));
>  
>  		intel_encoder->type = INTEL_OUTPUT_DVO;
> +		intel_encoder->attached_port = PORT_NONE;
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
> +
>  		switch (dvo->type) {
>  		case INTEL_DVO_CHIP_TMDS:
>  			intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG) |
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 4df9f38..070a5e2 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1962,6 +1962,7 @@ void intel_hdmi_init(struct drm_device *dev,
>  	}
>  
>  	intel_encoder->type = INTEL_OUTPUT_HDMI;
> +	intel_encoder->attached_port = port;
>  	if (IS_CHERRYVIEW(dev)) {
>  		if (port == PORT_D)
>  			intel_encoder->crtc_mask = 1 << 2;
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> index 668eabb..a497698 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -1052,8 +1052,9 @@ void intel_lvds_init(struct drm_device *dev)
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
>  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> -	intel_encoder->type = INTEL_OUTPUT_LVDS;
>  
> +	intel_encoder->type = INTEL_OUTPUT_LVDS;
> +	intel_encoder->attached_port = PORT_NONE;
>  	intel_encoder->cloneable = 0;
>  	if (HAS_PCH_SPLIT(dev))
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> index 49136ad..18c4257 100644
> --- a/drivers/gpu/drm/i915/intel_tv.c
> +++ b/drivers/gpu/drm/i915/intel_tv.c
> @@ -1603,7 +1603,9 @@ intel_tv_init(struct drm_device *dev)
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
>  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> +
>  	intel_encoder->type = INTEL_OUTPUT_TVOUT;
> +	intel_encoder->attached_port = PORT_NONE;
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
>  	intel_encoder->cloneable = 0;
>  	intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
> -- 
> 2.5.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v3 1/4] drm/i915: Store port enum in intel_encoder
  2016-08-24  6:08   ` Daniel Vetter
@ 2016-08-24  6:28     ` Pandiyan, Dhinakaran
  2016-08-24  7:22     ` [PATCH v4 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
  1 sibling, 0 replies; 22+ messages in thread
From: Pandiyan, Dhinakaran @ 2016-08-24  6:28 UTC (permalink / raw)
  To: daniel; +Cc: daniel.vetter, intel-gfx, libin.yang

On Wed, 2016-08-24 at 08:08 +0200, Daniel Vetter wrote:
> On Tue, Aug 23, 2016 at 01:49:17PM -0700, Dhinakaran Pandiyan wrote:
> > Storing the port enum in intel_encoder makes it convenient to know the
> > port attached to an encoder. Moving the port information up from
> > intel_digital_port to intel_encoder avoids unecessary intel_digital_port
> > access and handles MST encoders cleanly without requiring conditional
> > checks for them (thanks danvet).
> > 
> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_drv.h     | 1 +
> >  drivers/gpu/drm/i915/intel_ddi.c    | 1 +
> >  drivers/gpu/drm/i915/intel_dp.c     | 1 +
> >  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
> >  drivers/gpu/drm/i915/intel_drv.h    | 1 +
> >  drivers/gpu/drm/i915/intel_dsi.c    | 1 +
> >  drivers/gpu/drm/i915/intel_dvo.c    | 2 ++
> >  drivers/gpu/drm/i915/intel_hdmi.c   | 1 +
> >  drivers/gpu/drm/i915/intel_lvds.c   | 3 ++-
> >  drivers/gpu/drm/i915/intel_tv.c     | 2 ++
> >  10 files changed, 13 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 9cd102c..60e282d5 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -185,6 +185,7 @@ enum plane {
> >  #define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) + 'A')
> >  
> >  enum port {
> > +	PORT_NONE = -1,
> >  	PORT_A = 0,
> >  	PORT_B,
> >  	PORT_C,
> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> > index c2df4e4..086de39 100644
> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > @@ -2426,6 +2426,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
> >  	intel_dig_port->max_lanes = max_lanes;
> >  
> >  	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
> > +	intel_encoder->attached_port = port;
> >  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> >  	intel_encoder->cloneable = 0;
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index 364db90..4771428 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -5726,6 +5726,7 @@ bool intel_dp_init(struct drm_device *dev,
> >  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> >  	}
> >  	intel_encoder->cloneable = 0;
> > +	intel_encoder->attached_port = port;
> >  
> >  	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
> >  	dev_priv->hotplug.irq_port[port] = intel_dig_port;
> > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> > index 629337d..a51f6f7 100644
> > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> > @@ -540,6 +540,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
> >  			 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe));
> >  
> >  	intel_encoder->type = INTEL_OUTPUT_DP_MST;
> > +	intel_encoder->attached_port = intel_dig_port->port;
> >  	intel_encoder->crtc_mask = 0x7;
> >  	intel_encoder->cloneable = 0;
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 1c700b0..101d671 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -202,6 +202,7 @@ struct intel_encoder {
> >  	struct drm_encoder base;
> >  
> >  	enum intel_output_type type;
> > +	enum port attached_port;
> 
> Why the attached_ prefix? The intel_encoder _is_ the port (more or less at
> least). Also intel_sdvo.c is missing. Otherwise I think it makes sense.
> -Daniel
> 
> 

I didn't realize that, will change. 

> >  	unsigned int cloneable;
> >  	void (*hot_plug)(struct intel_encoder *);
> >  	bool (*compute_config)(struct intel_encoder *,
> > diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> > index de8e9fb..293e530 100644
> > --- a/drivers/gpu/drm/i915/intel_dsi.c
> > +++ b/drivers/gpu/drm/i915/intel_dsi.c
> > @@ -1478,6 +1478,7 @@ void intel_dsi_init(struct drm_device *dev)
> >  
> >  	intel_connector->get_hw_state = intel_connector_get_hw_state;
> >  
> > +	intel_encoder->attached_port = port;
> >  	/*
> >  	 * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI
> >  	 * port C. BXT isn't limited like this.
> > diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
> > index 47bdf9d..86a888f 100644
> > --- a/drivers/gpu/drm/i915/intel_dvo.c
> > +++ b/drivers/gpu/drm/i915/intel_dvo.c
> > @@ -511,7 +511,9 @@ void intel_dvo_init(struct drm_device *dev)
> >  				 "DVO %c", intel_dvo_port_name(dvo->dvo_reg));
> >  
> >  		intel_encoder->type = INTEL_OUTPUT_DVO;
> > +		intel_encoder->attached_port = PORT_NONE;
> >  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
> > +
> >  		switch (dvo->type) {
> >  		case INTEL_DVO_CHIP_TMDS:
> >  			intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG) |
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> > index 4df9f38..070a5e2 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -1962,6 +1962,7 @@ void intel_hdmi_init(struct drm_device *dev,
> >  	}
> >  
> >  	intel_encoder->type = INTEL_OUTPUT_HDMI;
> > +	intel_encoder->attached_port = port;
> >  	if (IS_CHERRYVIEW(dev)) {
> >  		if (port == PORT_D)
> >  			intel_encoder->crtc_mask = 1 << 2;
> > diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> > index 668eabb..a497698 100644
> > --- a/drivers/gpu/drm/i915/intel_lvds.c
> > +++ b/drivers/gpu/drm/i915/intel_lvds.c
> > @@ -1052,8 +1052,9 @@ void intel_lvds_init(struct drm_device *dev)
> >  	intel_connector->get_hw_state = intel_connector_get_hw_state;
> >  
> >  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> > -	intel_encoder->type = INTEL_OUTPUT_LVDS;
> >  
> > +	intel_encoder->type = INTEL_OUTPUT_LVDS;
> > +	intel_encoder->attached_port = PORT_NONE;
> >  	intel_encoder->cloneable = 0;
> >  	if (HAS_PCH_SPLIT(dev))
> >  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> > diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> > index 49136ad..18c4257 100644
> > --- a/drivers/gpu/drm/i915/intel_tv.c
> > +++ b/drivers/gpu/drm/i915/intel_tv.c
> > @@ -1603,7 +1603,9 @@ intel_tv_init(struct drm_device *dev)
> >  	intel_connector->get_hw_state = intel_connector_get_hw_state;
> >  
> >  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> > +
> >  	intel_encoder->type = INTEL_OUTPUT_TVOUT;
> > +	intel_encoder->attached_port = PORT_NONE;
> >  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
> >  	intel_encoder->cloneable = 0;
> >  	intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
> > -- 
> > 2.5.0
> > 
> 

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

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

* [PATCH v4 0/4] Prep. for DP audio MST support
  2016-08-24  6:08   ` Daniel Vetter
  2016-08-24  6:28     ` Pandiyan, Dhinakaran
@ 2016-08-24  7:22     ` Dhinakaran Pandiyan
  2016-08-24  7:22       ` [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
                         ` (3 more replies)
  1 sibling, 4 replies; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-24  7:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

This series lays the groundwork for more DP MST audio work that will
follow.

v2:
Different solution replacing the enc_to_dig_port() fix (Ville, Lyude).
No changes to MST audio enabling and move audio_connector patches.
Reordered the patches (Lyude)

v3:
Different solution to get port from encoder (danvet).
Removed locals that are not needed any more.
Minor variable renaming clean up.
Rebased on dinq.
Retained r-b for "start adding dp mst audio" as it does not change.

v4:
Fixed missing port initialization in intel_sdvo.c
Renamed the port enum member from 'attached_port' to 'port'
Fixed commit message typos.

Dhinakaran Pandiyan (3):
  drm/i915: Store port enum in intel_encoder
  drm/i915: Switch to using port stored in intel_encoder
  drm/i915: Move audio_connector to intel_encoder

Libin Yang (1):
  drm/i915: start adding dp mst audio

 drivers/gpu/drm/i915/i915_debugfs.c | 19 +++++++++++++-
 drivers/gpu/drm/i915/i915_drv.h     |  1 +
 drivers/gpu/drm/i915/intel_audio.c  | 51 ++++++++++++++-----------------------
 drivers/gpu/drm/i915/intel_ddi.c    | 21 +++++++++++----
 drivers/gpu/drm/i915/intel_dp.c     |  1 +
 drivers/gpu/drm/i915/intel_dp_mst.c | 22 ++++++++++++++++
 drivers/gpu/drm/i915/intel_drv.h    |  7 +++--
 drivers/gpu/drm/i915/intel_dsi.c    |  1 +
 drivers/gpu/drm/i915/intel_dvo.c    |  2 ++
 drivers/gpu/drm/i915/intel_hdmi.c   |  1 +
 drivers/gpu/drm/i915/intel_lvds.c   |  3 ++-
 drivers/gpu/drm/i915/intel_sdvo.c   |  1 +
 drivers/gpu/drm/i915/intel_tv.c     |  2 ++
 13 files changed, 91 insertions(+), 41 deletions(-)

-- 
2.5.0

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

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

* [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder
  2016-08-24  7:22     ` [PATCH v4 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
@ 2016-08-24  7:22       ` Dhinakaran Pandiyan
  2016-08-26 23:50         ` Pandiyan, Dhinakaran
                           ` (2 more replies)
  2016-08-24  7:22       ` [PATCH v4 2/4] drm/i915: Switch to using port stored " Dhinakaran Pandiyan
                         ` (2 subsequent siblings)
  3 siblings, 3 replies; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-24  7:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

Storing the port enum in intel_encoder makes it convenient to know the
port attached to an encoder. Moving the port information up from
intel_digital_port to intel_encoder avoids unecessary intel_digital_port
access and handles MST encoders cleanly without requiring conditional
checks for them (thanks danvet).

v2:
Renamed the port enum member from 'attached_port' to 'port' (danvet)
Fixed missing initialization of port in intel_sdvo.c (danvet)

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h     | 1 +
 drivers/gpu/drm/i915/intel_ddi.c    | 1 +
 drivers/gpu/drm/i915/intel_dp.c     | 1 +
 drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
 drivers/gpu/drm/i915/intel_drv.h    | 1 +
 drivers/gpu/drm/i915/intel_dsi.c    | 1 +
 drivers/gpu/drm/i915/intel_dvo.c    | 2 ++
 drivers/gpu/drm/i915/intel_hdmi.c   | 1 +
 drivers/gpu/drm/i915/intel_lvds.c   | 3 ++-
 drivers/gpu/drm/i915/intel_sdvo.c   | 1 +
 drivers/gpu/drm/i915/intel_tv.c     | 2 ++
 11 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9cd102c..60e282d5 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -185,6 +185,7 @@ enum plane {
 #define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) + 'A')
 
 enum port {
+	PORT_NONE = -1,
 	PORT_A = 0,
 	PORT_B,
 	PORT_C,
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index c2df4e4..402755d 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2426,6 +2426,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
 	intel_dig_port->max_lanes = max_lanes;
 
 	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
+	intel_encoder->port = port;
 	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
 	intel_encoder->cloneable = 0;
 
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 364db90..cfe2f4a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5726,6 +5726,7 @@ bool intel_dp_init(struct drm_device *dev,
 		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
 	}
 	intel_encoder->cloneable = 0;
+	intel_encoder->port = port;
 
 	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
 	dev_priv->hotplug.irq_port[port] = intel_dig_port;
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 629337d..d1d7e91 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -540,6 +540,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
 			 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe));
 
 	intel_encoder->type = INTEL_OUTPUT_DP_MST;
+	intel_encoder->port = intel_dig_port->port;
 	intel_encoder->crtc_mask = 0x7;
 	intel_encoder->cloneable = 0;
 
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 1c700b0..68bf134 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -202,6 +202,7 @@ struct intel_encoder {
 	struct drm_encoder base;
 
 	enum intel_output_type type;
+	enum port port;
 	unsigned int cloneable;
 	void (*hot_plug)(struct intel_encoder *);
 	bool (*compute_config)(struct intel_encoder *,
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index de8e9fb..eb5cc0b 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -1478,6 +1478,7 @@ void intel_dsi_init(struct drm_device *dev)
 
 	intel_connector->get_hw_state = intel_connector_get_hw_state;
 
+	intel_encoder->port = port;
 	/*
 	 * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI
 	 * port C. BXT isn't limited like this.
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 47bdf9d..6dc2791 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -511,7 +511,9 @@ void intel_dvo_init(struct drm_device *dev)
 				 "DVO %c", intel_dvo_port_name(dvo->dvo_reg));
 
 		intel_encoder->type = INTEL_OUTPUT_DVO;
+		intel_encoder->port = PORT_NONE;
 		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
+
 		switch (dvo->type) {
 		case INTEL_DVO_CHIP_TMDS:
 			intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG) |
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 4df9f38..25eeac3 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1962,6 +1962,7 @@ void intel_hdmi_init(struct drm_device *dev,
 	}
 
 	intel_encoder->type = INTEL_OUTPUT_HDMI;
+	intel_encoder->port = port;
 	if (IS_CHERRYVIEW(dev)) {
 		if (port == PORT_D)
 			intel_encoder->crtc_mask = 1 << 2;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 668eabb..b756248 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -1052,8 +1052,9 @@ void intel_lvds_init(struct drm_device *dev)
 	intel_connector->get_hw_state = intel_connector_get_hw_state;
 
 	intel_connector_attach_encoder(intel_connector, intel_encoder);
-	intel_encoder->type = INTEL_OUTPUT_LVDS;
 
+	intel_encoder->type = INTEL_OUTPUT_LVDS;
+	intel_encoder->port = PORT_NONE;
 	intel_encoder->cloneable = 0;
 	if (HAS_PCH_SPLIT(dev))
 		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index e378f35..c5e04e8 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2973,6 +2973,7 @@ bool intel_sdvo_init(struct drm_device *dev,
 	/* encoder type will be decided later */
 	intel_encoder = &intel_sdvo->base;
 	intel_encoder->type = INTEL_OUTPUT_SDVO;
+	intel_encoder->port = port;
 	drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0,
 			 "SDVO %c", port_name(port));
 
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 49136ad..dba365c 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1603,7 +1603,9 @@ intel_tv_init(struct drm_device *dev)
 	intel_connector->get_hw_state = intel_connector_get_hw_state;
 
 	intel_connector_attach_encoder(intel_connector, intel_encoder);
+
 	intel_encoder->type = INTEL_OUTPUT_TVOUT;
+	intel_encoder->port = PORT_NONE;
 	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
 	intel_encoder->cloneable = 0;
 	intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
-- 
2.5.0

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

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

* [PATCH v4 2/4] drm/i915: Switch to using port stored in intel_encoder
  2016-08-24  7:22     ` [PATCH v4 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
  2016-08-24  7:22       ` [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
@ 2016-08-24  7:22       ` Dhinakaran Pandiyan
  2016-08-29 21:23         ` Lyude Paul
  2016-08-24  7:22       ` [PATCH v4 3/4] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
  2016-08-24  7:23       ` [PATCH v4 4/4] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
  3 siblings, 1 reply; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-24  7:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

Now that we have the port enum stored in intel_encoder, use that instead of
dereferencing intel_dig_port. Saves us a few locals.

struct intel_encoder variables have been renamed to be consistent and
convey type information.

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 39 +++++++++++++++-----------------------
 1 file changed, 15 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index d32f586..5a41439 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -276,17 +276,15 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder)
 }
 
 static void hsw_audio_codec_enable(struct drm_connector *connector,
-				   struct intel_encoder *encoder,
+				   struct intel_encoder *intel_encoder,
 				   const struct drm_display_mode *adjusted_mode)
 {
 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
-	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
+	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
 	enum pipe pipe = intel_crtc->pipe;
+	enum port port = intel_encoder->attached_port;
 	struct i915_audio_component *acomp = dev_priv->audio_component;
 	const uint8_t *eld = connector->eld;
-	struct intel_digital_port *intel_dig_port =
-		enc_to_dig_port(&encoder->base);
-	enum port port = intel_dig_port->port;
 	uint32_t tmp;
 	int len, i;
 	int n, rate;
@@ -355,14 +353,12 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
 	mutex_unlock(&dev_priv->av_mutex);
 }
 
-static void ilk_audio_codec_disable(struct intel_encoder *encoder)
+static void ilk_audio_codec_disable(struct intel_encoder *intel_encoder)
 {
-	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
-	struct intel_digital_port *intel_dig_port =
-		enc_to_dig_port(&encoder->base);
-	enum port port = intel_dig_port->port;
+	struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
+	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
 	enum pipe pipe = intel_crtc->pipe;
+	enum port port = intel_encoder->attached_port;
 	uint32_t tmp, eldv;
 	i915_reg_t aud_config, aud_cntrl_st2;
 
@@ -402,18 +398,15 @@ static void ilk_audio_codec_disable(struct intel_encoder *encoder)
 }
 
 static void ilk_audio_codec_enable(struct drm_connector *connector,
-				   struct intel_encoder *encoder,
+				   struct intel_encoder *intel_encoder,
 				   const struct drm_display_mode *adjusted_mode)
 {
 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
-	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
-	struct intel_digital_port *intel_dig_port =
-		enc_to_dig_port(&encoder->base);
-	enum port port = intel_dig_port->port;
+	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
 	enum pipe pipe = intel_crtc->pipe;
+	enum port port = intel_encoder->attached_port;
 	uint8_t *eld = connector->eld;
-	uint32_t eldv;
-	uint32_t tmp;
+	uint32_t tmp, eldv;
 	int len, i;
 	i915_reg_t hdmiw_hdmiedid, aud_config, aud_cntl_st, aud_cntrl_st2;
 
@@ -495,11 +488,10 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
 	const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
 	struct drm_connector *connector;
-	struct drm_device *dev = encoder->dev;
-	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
 	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_encoder->attached_port;
 
 	connector = drm_select_eld(encoder);
 	if (!connector)
@@ -542,11 +534,10 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
 {
 	struct drm_encoder *encoder = &intel_encoder->base;
-	struct drm_device *dev = encoder->dev;
-	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
 	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
-	enum port port = intel_dig_port->port;
+	enum port port = intel_encoder->attached_port;
 
 	if (dev_priv->display.audio_codec_disable)
 		dev_priv->display.audio_codec_disable(intel_encoder);
-- 
2.5.0

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

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

* [PATCH v4 3/4] drm/i915: Move audio_connector to intel_encoder
  2016-08-24  7:22     ` [PATCH v4 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
  2016-08-24  7:22       ` [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
  2016-08-24  7:22       ` [PATCH v4 2/4] drm/i915: Switch to using port stored " Dhinakaran Pandiyan
@ 2016-08-24  7:22       ` Dhinakaran Pandiyan
  2016-08-29 21:56         ` Pandiyan, Dhinakaran
  2016-08-29 22:16         ` Dhinakaran Pandiyan
  2016-08-24  7:23       ` [PATCH v4 4/4] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
  3 siblings, 2 replies; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-24  7:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

With DP MST, a digital_port can carry more than one audio stream. Hence,
more than one audio_connector needs to be attached to intel_digital_port in
such cases. However, each stream is associated with an unique encoder. So,
instead of creating an array of audio_connectors per port, move
audio_connector from struct intel_digital_port to struct intel_encoder.
This also simplifies access to the right audio_connector from codec
functions in intel_audio.c that receive intel_encoder.

v2: Removed locals that are not needed anymore.

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 12 ++++--------
 drivers/gpu/drm/i915/intel_drv.h   |  4 ++--
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 5a41439..b86bfad 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -490,7 +490,6 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 	struct drm_connector *connector;
 	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
-	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
 	enum port port = intel_encoder->attached_port;
 
 	connector = drm_select_eld(encoder);
@@ -515,7 +514,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 						     adjusted_mode);
 
 	mutex_lock(&dev_priv->av_mutex);
-	intel_dig_port->audio_connector = connector;
+	intel_encoder->audio_connector = connector;
 	/* referred in audio callbacks */
 	dev_priv->dig_port_map[port] = intel_encoder;
 	mutex_unlock(&dev_priv->av_mutex);
@@ -536,14 +535,13 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
 	struct drm_encoder *encoder = &intel_encoder->base;
 	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
-	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
 	enum port port = intel_encoder->attached_port;
 
 	if (dev_priv->display.audio_codec_disable)
 		dev_priv->display.audio_codec_disable(intel_encoder);
 
 	mutex_lock(&dev_priv->av_mutex);
-	intel_dig_port->audio_connector = NULL;
+	intel_encoder->audio_connector = NULL;
 	dev_priv->dig_port_map[port] = NULL;
 	mutex_unlock(&dev_priv->av_mutex);
 
@@ -704,7 +702,6 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
 {
 	struct drm_i915_private *dev_priv = dev_to_i915(dev);
 	struct intel_encoder *intel_encoder;
-	struct intel_digital_port *intel_dig_port;
 	const u8 *eld;
 	int ret = -EINVAL;
 
@@ -713,10 +710,9 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
 	/* intel_encoder might be NULL for DP MST */
 	if (intel_encoder) {
 		ret = 0;
-		intel_dig_port = enc_to_dig_port(&intel_encoder->base);
-		*enabled = intel_dig_port->audio_connector != NULL;
+		*enabled = intel_encoder->audio_connector != NULL;
 		if (*enabled) {
-			eld = intel_dig_port->audio_connector->eld;
+			eld = intel_encoder->audio_connector->eld;
 			ret = drm_eld_size(eld);
 			memcpy(buf, eld, min(max_bytes, ret));
 		}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 68bf134..30186bf 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -232,6 +232,8 @@ struct intel_encoder {
 	void (*suspend)(struct intel_encoder *);
 	int crtc_mask;
 	enum hpd_pin hpd_pin;
+	/* for communication with audio component; protected by av_mutex */
+	const struct drm_connector *audio_connector;
 };
 
 struct intel_panel {
@@ -948,8 +950,6 @@ struct intel_digital_port {
 	enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
 	bool release_cl2_override;
 	uint8_t max_lanes;
-	/* for communication with audio component; protected by av_mutex */
-	const struct drm_connector *audio_connector;
 };
 
 struct intel_dp_mst_encoder {
-- 
2.5.0

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

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

* [PATCH v4 4/4] drm/i915: start adding dp mst audio
  2016-08-24  7:22     ` [PATCH v4 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
                         ` (2 preceding siblings ...)
  2016-08-24  7:22       ` [PATCH v4 3/4] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
@ 2016-08-24  7:23       ` Dhinakaran Pandiyan
  2016-09-02 17:04         ` Lyude
  3 siblings, 1 reply; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-24  7:23 UTC (permalink / raw)
  To: intel-gfx; +Cc: libin.yang, Daniel Vetter

From: Libin Yang <libin.yang@linux.intel.com>

(This patch is developed by Dave Airlie <airlied@redhat.com> originally)

This patch adds support for DP MST audio in i915.

Enable audio codec when DP MST is enabled if has_audio flag is set.
Disable audio codec when DP MST is disabled if has_audio flag is set.

Another separated patches to support DP MST audio will be implemented
in audio driver.

Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
Reviewed-by: Lyude <cpaul@redhat.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 19 ++++++++++++++++++-
 drivers/gpu/drm/i915/intel_ddi.c    | 20 +++++++++++++++-----
 drivers/gpu/drm/i915/intel_dp_mst.c | 21 +++++++++++++++++++++
 drivers/gpu/drm/i915/intel_drv.h    |  2 ++
 4 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index d0b4c74..8ec69d0 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2925,6 +2925,20 @@ static void intel_dp_info(struct seq_file *m,
 		intel_panel_info(m, &intel_connector->panel);
 }
 
+static void intel_dp_mst_info(struct seq_file *m,
+			  struct intel_connector *intel_connector)
+{
+	struct intel_encoder *intel_encoder = intel_connector->encoder;
+	struct intel_dp_mst_encoder *intel_mst =
+		enc_to_mst(&intel_encoder->base);
+	struct intel_digital_port *intel_dig_port = intel_mst->primary;
+	struct intel_dp *intel_dp = &intel_dig_port->dp;
+	bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr,
+					intel_connector->port);
+
+	seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
+}
+
 static void intel_hdmi_info(struct seq_file *m,
 			    struct intel_connector *intel_connector)
 {
@@ -2967,7 +2981,10 @@ static void intel_connector_info(struct seq_file *m,
 	switch (connector->connector_type) {
 	case DRM_MODE_CONNECTOR_DisplayPort:
 	case DRM_MODE_CONNECTOR_eDP:
-		intel_dp_info(m, intel_connector);
+		if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
+			intel_dp_mst_info(m, intel_connector);
+		else
+			intel_dp_info(m, intel_connector);
 		break;
 	case DRM_MODE_CONNECTOR_LVDS:
 		if (intel_encoder->type == INTEL_OUTPUT_LVDS)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 402755d..a0253cf 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2173,6 +2173,19 @@ void intel_ddi_fdi_disable(struct drm_crtc *crtc)
 	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
 }
 
+bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
+				 struct intel_crtc *intel_crtc)
+{
+	u32 temp;
+
+	if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
+		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
+		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
+			return true;
+	}
+	return false;
+}
+
 void intel_ddi_get_config(struct intel_encoder *encoder,
 			  struct intel_crtc_state *pipe_config)
 {
@@ -2238,11 +2251,8 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
 		break;
 	}
 
-	if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
-		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
-		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
-			pipe_config->has_audio = true;
-	}
+	pipe_config->has_audio =
+		intel_ddi_is_audio_enabled(dev_priv, intel_crtc);
 
 	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.bpp &&
 	    pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) {
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index d1d7e91..d3d774d 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -76,6 +76,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
 		return false;
 	}
 
+	if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found->port))
+		pipe_config->has_audio = true;
 	mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
 
 	pipe_config->pbn = mst_pbn;
@@ -97,6 +99,10 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
+	struct drm_device *dev = encoder->base.dev;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct drm_crtc *crtc = encoder->base.crtc;
+	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 	int ret;
 
 	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
@@ -107,6 +113,10 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
 	if (ret) {
 		DRM_ERROR("failed to update payload %d\n", ret);
 	}
+	if (intel_crtc->config->has_audio) {
+		intel_audio_codec_disable(encoder);
+		intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO);
+	}
 }
 
 static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
@@ -207,7 +217,9 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
 	enum port port = intel_dig_port->port;
+	enum pipe pipe = crtc->pipe;
 	int ret;
 
 	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
@@ -222,6 +234,12 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
 	ret = drm_dp_check_act_status(&intel_dp->mst_mgr);
 
 	ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr);
+	if (crtc->config->has_audio) {
+		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
+				 pipe_name(pipe));
+		intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
+		intel_audio_codec_enable(encoder);
+	}
 }
 
 static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder,
@@ -245,6 +263,9 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder,
 	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
 	u32 temp, flags = 0;
 
+	pipe_config->has_audio =
+		intel_ddi_is_audio_enabled(dev_priv, crtc);
+
 	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
 	if (temp & TRANS_DDI_PHSYNC)
 		flags |= DRM_MODE_FLAG_PHSYNC;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 30186bf..308b07b 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1142,6 +1142,8 @@ void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
 void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
 bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
 void intel_ddi_fdi_disable(struct drm_crtc *crtc);
+bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
+				 struct intel_crtc *intel_crtc);
 void intel_ddi_get_config(struct intel_encoder *encoder,
 			  struct intel_crtc_state *pipe_config);
 struct intel_encoder *
-- 
2.5.0

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

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

* Re: [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder
  2016-08-24  7:22       ` [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
@ 2016-08-26 23:50         ` Pandiyan, Dhinakaran
  2016-08-29 21:20         ` Lyude Paul
  2016-09-06 12:07         ` Ville Syrjälä
  2 siblings, 0 replies; 22+ messages in thread
From: Pandiyan, Dhinakaran @ 2016-08-26 23:50 UTC (permalink / raw)
  To: intel-gfx; +Cc: daniel.vetter, libin.yang

IRC acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>

On Wed, 2016-08-24 at 00:22 -0700, Dhinakaran Pandiyan wrote:
> Storing the port enum in intel_encoder makes it convenient to know the
> port attached to an encoder. Moving the port information up from
> intel_digital_port to intel_encoder avoids unecessary intel_digital_port
> access and handles MST encoders cleanly without requiring conditional
> checks for them (thanks danvet).
> 
> v2:
> Renamed the port enum member from 'attached_port' to 'port' (danvet)
> Fixed missing initialization of port in intel_sdvo.c (danvet)
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h     | 1 +
>  drivers/gpu/drm/i915/intel_ddi.c    | 1 +
>  drivers/gpu/drm/i915/intel_dp.c     | 1 +
>  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
>  drivers/gpu/drm/i915/intel_drv.h    | 1 +
>  drivers/gpu/drm/i915/intel_dsi.c    | 1 +
>  drivers/gpu/drm/i915/intel_dvo.c    | 2 ++
>  drivers/gpu/drm/i915/intel_hdmi.c   | 1 +
>  drivers/gpu/drm/i915/intel_lvds.c   | 3 ++-
>  drivers/gpu/drm/i915/intel_sdvo.c   | 1 +
>  drivers/gpu/drm/i915/intel_tv.c     | 2 ++
>  11 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 9cd102c..60e282d5 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -185,6 +185,7 @@ enum plane {
>  #define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) + 'A')
>  
>  enum port {
> +	PORT_NONE = -1,
>  	PORT_A = 0,
>  	PORT_B,
>  	PORT_C,
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index c2df4e4..402755d 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2426,6 +2426,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
>  	intel_dig_port->max_lanes = max_lanes;
>  
>  	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
> +	intel_encoder->port = port;
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	intel_encoder->cloneable = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 364db90..cfe2f4a 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5726,6 +5726,7 @@ bool intel_dp_init(struct drm_device *dev,
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	}
>  	intel_encoder->cloneable = 0;
> +	intel_encoder->port = port;
>  
>  	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
>  	dev_priv->hotplug.irq_port[port] = intel_dig_port;
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 629337d..d1d7e91 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -540,6 +540,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
>  			 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe));
>  
>  	intel_encoder->type = INTEL_OUTPUT_DP_MST;
> +	intel_encoder->port = intel_dig_port->port;
>  	intel_encoder->crtc_mask = 0x7;
>  	intel_encoder->cloneable = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 1c700b0..68bf134 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -202,6 +202,7 @@ struct intel_encoder {
>  	struct drm_encoder base;
>  
>  	enum intel_output_type type;
> +	enum port port;
>  	unsigned int cloneable;
>  	void (*hot_plug)(struct intel_encoder *);
>  	bool (*compute_config)(struct intel_encoder *,
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> index de8e9fb..eb5cc0b 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -1478,6 +1478,7 @@ void intel_dsi_init(struct drm_device *dev)
>  
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
> +	intel_encoder->port = port;
>  	/*
>  	 * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI
>  	 * port C. BXT isn't limited like this.
> diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
> index 47bdf9d..6dc2791 100644
> --- a/drivers/gpu/drm/i915/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/intel_dvo.c
> @@ -511,7 +511,9 @@ void intel_dvo_init(struct drm_device *dev)
>  				 "DVO %c", intel_dvo_port_name(dvo->dvo_reg));
>  
>  		intel_encoder->type = INTEL_OUTPUT_DVO;
> +		intel_encoder->port = PORT_NONE;
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
> +
>  		switch (dvo->type) {
>  		case INTEL_DVO_CHIP_TMDS:
>  			intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG) |
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 4df9f38..25eeac3 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1962,6 +1962,7 @@ void intel_hdmi_init(struct drm_device *dev,
>  	}
>  
>  	intel_encoder->type = INTEL_OUTPUT_HDMI;
> +	intel_encoder->port = port;
>  	if (IS_CHERRYVIEW(dev)) {
>  		if (port == PORT_D)
>  			intel_encoder->crtc_mask = 1 << 2;
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> index 668eabb..b756248 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -1052,8 +1052,9 @@ void intel_lvds_init(struct drm_device *dev)
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
>  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> -	intel_encoder->type = INTEL_OUTPUT_LVDS;
>  
> +	intel_encoder->type = INTEL_OUTPUT_LVDS;
> +	intel_encoder->port = PORT_NONE;
>  	intel_encoder->cloneable = 0;
>  	if (HAS_PCH_SPLIT(dev))
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> index e378f35..c5e04e8 100644
> --- a/drivers/gpu/drm/i915/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> @@ -2973,6 +2973,7 @@ bool intel_sdvo_init(struct drm_device *dev,
>  	/* encoder type will be decided later */
>  	intel_encoder = &intel_sdvo->base;
>  	intel_encoder->type = INTEL_OUTPUT_SDVO;
> +	intel_encoder->port = port;
>  	drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0,
>  			 "SDVO %c", port_name(port));
>  
> diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> index 49136ad..dba365c 100644
> --- a/drivers/gpu/drm/i915/intel_tv.c
> +++ b/drivers/gpu/drm/i915/intel_tv.c
> @@ -1603,7 +1603,9 @@ intel_tv_init(struct drm_device *dev)
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
>  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> +
>  	intel_encoder->type = INTEL_OUTPUT_TVOUT;
> +	intel_encoder->port = PORT_NONE;
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
>  	intel_encoder->cloneable = 0;
>  	intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));

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

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

* Re: [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder
  2016-08-24  7:22       ` [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
  2016-08-26 23:50         ` Pandiyan, Dhinakaran
@ 2016-08-29 21:20         ` Lyude Paul
  2016-09-06 12:07         ` Ville Syrjälä
  2 siblings, 0 replies; 22+ messages in thread
From: Lyude Paul @ 2016-08-29 21:20 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, intel-gfx; +Cc: Daniel Vetter, libin.yang

Reviewed-by: Lyude <cpaul@redhat.com>

On Wed, 2016-08-24 at 00:22 -0700, Dhinakaran Pandiyan wrote:
> Storing the port enum in intel_encoder makes it convenient to know the
> port attached to an encoder. Moving the port information up from
> intel_digital_port to intel_encoder avoids unecessary intel_digital_port
> access and handles MST encoders cleanly without requiring conditional
> checks for them (thanks danvet).
> 
> v2:
> Renamed the port enum member from 'attached_port' to 'port' (danvet)
> Fixed missing initialization of port in intel_sdvo.c (danvet)
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h     | 1 +
>  drivers/gpu/drm/i915/intel_ddi.c    | 1 +
>  drivers/gpu/drm/i915/intel_dp.c     | 1 +
>  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
>  drivers/gpu/drm/i915/intel_drv.h    | 1 +
>  drivers/gpu/drm/i915/intel_dsi.c    | 1 +
>  drivers/gpu/drm/i915/intel_dvo.c    | 2 ++
>  drivers/gpu/drm/i915/intel_hdmi.c   | 1 +
>  drivers/gpu/drm/i915/intel_lvds.c   | 3 ++-
>  drivers/gpu/drm/i915/intel_sdvo.c   | 1 +
>  drivers/gpu/drm/i915/intel_tv.c     | 2 ++
>  11 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 9cd102c..60e282d5 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -185,6 +185,7 @@ enum plane {
>  #define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) +
> 'A')
>  
>  enum port {
> +	PORT_NONE = -1,
>  	PORT_A = 0,
>  	PORT_B,
>  	PORT_C,
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> b/drivers/gpu/drm/i915/intel_ddi.c
> index c2df4e4..402755d 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2426,6 +2426,7 @@ void intel_ddi_init(struct drm_device *dev, enum port
> port)
>  	intel_dig_port->max_lanes = max_lanes;
>  
>  	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
> +	intel_encoder->port = port;
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	intel_encoder->cloneable = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 364db90..cfe2f4a 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5726,6 +5726,7 @@ bool intel_dp_init(struct drm_device *dev,
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	}
>  	intel_encoder->cloneable = 0;
> +	intel_encoder->port = port;
>  
>  	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
>  	dev_priv->hotplug.irq_port[port] = intel_dig_port;
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c
> b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 629337d..d1d7e91 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -540,6 +540,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port
> *intel_dig_port, enum
>  			 DRM_MODE_ENCODER_DPMST, "DP-MST %c",
> pipe_name(pipe));
>  
>  	intel_encoder->type = INTEL_OUTPUT_DP_MST;
> +	intel_encoder->port = intel_dig_port->port;
>  	intel_encoder->crtc_mask = 0x7;
>  	intel_encoder->cloneable = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index 1c700b0..68bf134 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -202,6 +202,7 @@ struct intel_encoder {
>  	struct drm_encoder base;
>  
>  	enum intel_output_type type;
> +	enum port port;
>  	unsigned int cloneable;
>  	void (*hot_plug)(struct intel_encoder *);
>  	bool (*compute_config)(struct intel_encoder *,
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c
> b/drivers/gpu/drm/i915/intel_dsi.c
> index de8e9fb..eb5cc0b 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -1478,6 +1478,7 @@ void intel_dsi_init(struct drm_device *dev)
>  
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
> +	intel_encoder->port = port;
>  	/*
>  	 * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI
> DSI
>  	 * port C. BXT isn't limited like this.
> diff --git a/drivers/gpu/drm/i915/intel_dvo.c
> b/drivers/gpu/drm/i915/intel_dvo.c
> index 47bdf9d..6dc2791 100644
> --- a/drivers/gpu/drm/i915/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/intel_dvo.c
> @@ -511,7 +511,9 @@ void intel_dvo_init(struct drm_device *dev)
>  				 "DVO %c", intel_dvo_port_name(dvo-
> >dvo_reg));
>  
>  		intel_encoder->type = INTEL_OUTPUT_DVO;
> +		intel_encoder->port = PORT_NONE;
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
> +
>  		switch (dvo->type) {
>  		case INTEL_DVO_CHIP_TMDS:
>  			intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG)
> |
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> b/drivers/gpu/drm/i915/intel_hdmi.c
> index 4df9f38..25eeac3 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1962,6 +1962,7 @@ void intel_hdmi_init(struct drm_device *dev,
>  	}
>  
>  	intel_encoder->type = INTEL_OUTPUT_HDMI;
> +	intel_encoder->port = port;
>  	if (IS_CHERRYVIEW(dev)) {
>  		if (port == PORT_D)
>  			intel_encoder->crtc_mask = 1 << 2;
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c
> b/drivers/gpu/drm/i915/intel_lvds.c
> index 668eabb..b756248 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -1052,8 +1052,9 @@ void intel_lvds_init(struct drm_device *dev)
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
>  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> -	intel_encoder->type = INTEL_OUTPUT_LVDS;
>  
> +	intel_encoder->type = INTEL_OUTPUT_LVDS;
> +	intel_encoder->port = PORT_NONE;
>  	intel_encoder->cloneable = 0;
>  	if (HAS_PCH_SPLIT(dev))
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> diff --git a/drivers/gpu/drm/i915/intel_sdvo.c
> b/drivers/gpu/drm/i915/intel_sdvo.c
> index e378f35..c5e04e8 100644
> --- a/drivers/gpu/drm/i915/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> @@ -2973,6 +2973,7 @@ bool intel_sdvo_init(struct drm_device *dev,
>  	/* encoder type will be decided later */
>  	intel_encoder = &intel_sdvo->base;
>  	intel_encoder->type = INTEL_OUTPUT_SDVO;
> +	intel_encoder->port = port;
>  	drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0,
>  			 "SDVO %c", port_name(port));
>  
> diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> index 49136ad..dba365c 100644
> --- a/drivers/gpu/drm/i915/intel_tv.c
> +++ b/drivers/gpu/drm/i915/intel_tv.c
> @@ -1603,7 +1603,9 @@ intel_tv_init(struct drm_device *dev)
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
>  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> +
>  	intel_encoder->type = INTEL_OUTPUT_TVOUT;
> +	intel_encoder->port = PORT_NONE;
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
>  	intel_encoder->cloneable = 0;
>  	intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v4 2/4] drm/i915: Switch to using port stored in intel_encoder
  2016-08-24  7:22       ` [PATCH v4 2/4] drm/i915: Switch to using port stored " Dhinakaran Pandiyan
@ 2016-08-29 21:23         ` Lyude Paul
  2016-08-29 23:16           ` Pandiyan, Dhinakaran
  0 siblings, 1 reply; 22+ messages in thread
From: Lyude Paul @ 2016-08-29 21:23 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, intel-gfx; +Cc: Daniel Vetter, libin.yang

Looks like a much better solution then the previous one.

Reviewed-by: Lyude <cpaul@redhat.com>

On Wed, 2016-08-24 at 00:22 -0700, Dhinakaran Pandiyan wrote:
> Now that we have the port enum stored in intel_encoder, use that instead of
> dereferencing intel_dig_port. Saves us a few locals.
> 
> struct intel_encoder variables have been renamed to be consistent and
> convey type information.
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_audio.c | 39 +++++++++++++++--------------------
> ---
>  1 file changed, 15 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_audio.c
> b/drivers/gpu/drm/i915/intel_audio.c
> index d32f586..5a41439 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -276,17 +276,15 @@ static void hsw_audio_codec_disable(struct intel_encoder
> *encoder)
>  }
>  
>  static void hsw_audio_codec_enable(struct drm_connector *connector,
> -				   struct intel_encoder *encoder,
> +				   struct intel_encoder *intel_encoder,
>  				   const struct drm_display_mode
> *adjusted_mode)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> -	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
> +	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder-
> >base.crtc);
>  	enum pipe pipe = intel_crtc->pipe;
> +	enum port port = intel_encoder->attached_port;
>  	struct i915_audio_component *acomp = dev_priv->audio_component;
>  	const uint8_t *eld = connector->eld;
> -	struct intel_digital_port *intel_dig_port =
> -		enc_to_dig_port(&encoder->base);
> -	enum port port = intel_dig_port->port;
>  	uint32_t tmp;
>  	int len, i;
>  	int n, rate;
> @@ -355,14 +353,12 @@ static void hsw_audio_codec_enable(struct drm_connector
> *connector,
>  	mutex_unlock(&dev_priv->av_mutex);
>  }
>  
> -static void ilk_audio_codec_disable(struct intel_encoder *encoder)
> +static void ilk_audio_codec_disable(struct intel_encoder *intel_encoder)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> -	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
> -	struct intel_digital_port *intel_dig_port =
> -		enc_to_dig_port(&encoder->base);
> -	enum port port = intel_dig_port->port;
> +	struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
> +	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder-
> >base.crtc);
>  	enum pipe pipe = intel_crtc->pipe;
> +	enum port port = intel_encoder->attached_port;
>  	uint32_t tmp, eldv;
>  	i915_reg_t aud_config, aud_cntrl_st2;
>  
> @@ -402,18 +398,15 @@ static void ilk_audio_codec_disable(struct intel_encoder
> *encoder)
>  }
>  
>  static void ilk_audio_codec_enable(struct drm_connector *connector,
> -				   struct intel_encoder *encoder,
> +				   struct intel_encoder *intel_encoder,
>  				   const struct drm_display_mode
> *adjusted_mode)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> -	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
> -	struct intel_digital_port *intel_dig_port =
> -		enc_to_dig_port(&encoder->base);
> -	enum port port = intel_dig_port->port;
> +	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder-
> >base.crtc);
>  	enum pipe pipe = intel_crtc->pipe;
> +	enum port port = intel_encoder->attached_port;
>  	uint8_t *eld = connector->eld;
> -	uint32_t eldv;
> -	uint32_t tmp;
> +	uint32_t tmp, eldv;
>  	int len, i;
>  	i915_reg_t hdmiw_hdmiedid, aud_config, aud_cntl_st, aud_cntrl_st2;
>  
> @@ -495,11 +488,10 @@ void intel_audio_codec_enable(struct intel_encoder
> *intel_encoder)
>  	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
>  	const struct drm_display_mode *adjusted_mode = &crtc->config-
> >base.adjusted_mode;
>  	struct drm_connector *connector;
> -	struct drm_device *dev = encoder->dev;
> -	struct drm_i915_private *dev_priv = to_i915(dev);
> +	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
>  	struct i915_audio_component *acomp = dev_priv->audio_component;
>  	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
> -	enum port port = intel_dig_port->port;
> +	enum port port = intel_encoder->attached_port;
>  
>  	connector = drm_select_eld(encoder);
>  	if (!connector)
> @@ -542,11 +534,10 @@ void intel_audio_codec_enable(struct intel_encoder
> *intel_encoder)
>  void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
>  {
>  	struct drm_encoder *encoder = &intel_encoder->base;
> -	struct drm_device *dev = encoder->dev;
> -	struct drm_i915_private *dev_priv = to_i915(dev);
> +	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
>  	struct i915_audio_component *acomp = dev_priv->audio_component;
>  	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
> -	enum port port = intel_dig_port->port;
> +	enum port port = intel_encoder->attached_port;
>  
>  	if (dev_priv->display.audio_codec_disable)
>  		dev_priv->display.audio_codec_disable(intel_encoder);
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v4 3/4] drm/i915: Move audio_connector to intel_encoder
  2016-08-24  7:22       ` [PATCH v4 3/4] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
@ 2016-08-29 21:56         ` Pandiyan, Dhinakaran
  2016-08-29 22:16         ` Dhinakaran Pandiyan
  1 sibling, 0 replies; 22+ messages in thread
From: Pandiyan, Dhinakaran @ 2016-08-29 21:56 UTC (permalink / raw)
  To: intel-gfx; +Cc: daniel.vetter, libin.yang

Confirmed on IRC, Lyude is fine with carrying over R-B from previous
version.


On Wed, 2016-08-24 at 00:22 -0700, Dhinakaran Pandiyan wrote:
> With DP MST, a digital_port can carry more than one audio stream. Hence,
> more than one audio_connector needs to be attached to intel_digital_port in
> such cases. However, each stream is associated with an unique encoder. So,
> instead of creating an array of audio_connectors per port, move
> audio_connector from struct intel_digital_port to struct intel_encoder.
> This also simplifies access to the right audio_connector from codec
> functions in intel_audio.c that receive intel_encoder.
> 
> v2: Removed locals that are not needed anymore.
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_audio.c | 12 ++++--------
>  drivers/gpu/drm/i915/intel_drv.h   |  4 ++--
>  2 files changed, 6 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> index 5a41439..b86bfad 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -490,7 +490,6 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>  	struct drm_connector *connector;
>  	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
>  	struct i915_audio_component *acomp = dev_priv->audio_component;
> -	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
>  	enum port port = intel_encoder->attached_port;
>  
>  	connector = drm_select_eld(encoder);
> @@ -515,7 +514,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>  						     adjusted_mode);
>  
>  	mutex_lock(&dev_priv->av_mutex);
> -	intel_dig_port->audio_connector = connector;
> +	intel_encoder->audio_connector = connector;
>  	/* referred in audio callbacks */
>  	dev_priv->dig_port_map[port] = intel_encoder;
>  	mutex_unlock(&dev_priv->av_mutex);
> @@ -536,14 +535,13 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
>  	struct drm_encoder *encoder = &intel_encoder->base;
>  	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
>  	struct i915_audio_component *acomp = dev_priv->audio_component;
> -	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
>  	enum port port = intel_encoder->attached_port;
>  
>  	if (dev_priv->display.audio_codec_disable)
>  		dev_priv->display.audio_codec_disable(intel_encoder);
>  
>  	mutex_lock(&dev_priv->av_mutex);
> -	intel_dig_port->audio_connector = NULL;
> +	intel_encoder->audio_connector = NULL;
>  	dev_priv->dig_port_map[port] = NULL;
>  	mutex_unlock(&dev_priv->av_mutex);
>  
> @@ -704,7 +702,6 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
>  {
>  	struct drm_i915_private *dev_priv = dev_to_i915(dev);
>  	struct intel_encoder *intel_encoder;
> -	struct intel_digital_port *intel_dig_port;
>  	const u8 *eld;
>  	int ret = -EINVAL;
>  
> @@ -713,10 +710,9 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
>  	/* intel_encoder might be NULL for DP MST */
>  	if (intel_encoder) {
>  		ret = 0;
> -		intel_dig_port = enc_to_dig_port(&intel_encoder->base);
> -		*enabled = intel_dig_port->audio_connector != NULL;
> +		*enabled = intel_encoder->audio_connector != NULL;
>  		if (*enabled) {
> -			eld = intel_dig_port->audio_connector->eld;
> +			eld = intel_encoder->audio_connector->eld;
>  			ret = drm_eld_size(eld);
>  			memcpy(buf, eld, min(max_bytes, ret));
>  		}
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 68bf134..30186bf 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -232,6 +232,8 @@ struct intel_encoder {
>  	void (*suspend)(struct intel_encoder *);
>  	int crtc_mask;
>  	enum hpd_pin hpd_pin;
> +	/* for communication with audio component; protected by av_mutex */
> +	const struct drm_connector *audio_connector;
>  };
>  
>  struct intel_panel {
> @@ -948,8 +950,6 @@ struct intel_digital_port {
>  	enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
>  	bool release_cl2_override;
>  	uint8_t max_lanes;
> -	/* for communication with audio component; protected by av_mutex */
> -	const struct drm_connector *audio_connector;
>  };
>  
>  struct intel_dp_mst_encoder {

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

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

* [PATCH v4 3/4] drm/i915: Move audio_connector to intel_encoder
  2016-08-24  7:22       ` [PATCH v4 3/4] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
  2016-08-29 21:56         ` Pandiyan, Dhinakaran
@ 2016-08-29 22:16         ` Dhinakaran Pandiyan
  1 sibling, 0 replies; 22+ messages in thread
From: Dhinakaran Pandiyan @ 2016-08-29 22:16 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, libin.yang

With DP MST, a digital_port can carry more than one audio stream. Hence,
more than one audio_connector needs to be attached to intel_digital_port in
such cases. However, each stream is associated with an unique encoder. So,
instead of creating an array of audio_connectors per port, move
audio_connector from struct intel_digital_port to struct intel_encoder.
This also simplifies access to the right audio_connector from codec
functions in intel_audio.c that receive intel_encoder.

v2: Removed locals that are not needed anymore.

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reviewed-by: Lyude <cpaul@redhat.com>
---
 drivers/gpu/drm/i915/intel_audio.c | 12 ++++--------
 drivers/gpu/drm/i915/intel_drv.h   |  4 ++--
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 5a41439..b86bfad 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -490,7 +490,6 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 	struct drm_connector *connector;
 	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
-	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
 	enum port port = intel_encoder->attached_port;
 
 	connector = drm_select_eld(encoder);
@@ -515,7 +514,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 						     adjusted_mode);
 
 	mutex_lock(&dev_priv->av_mutex);
-	intel_dig_port->audio_connector = connector;
+	intel_encoder->audio_connector = connector;
 	/* referred in audio callbacks */
 	dev_priv->dig_port_map[port] = intel_encoder;
 	mutex_unlock(&dev_priv->av_mutex);
@@ -536,14 +535,13 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
 	struct drm_encoder *encoder = &intel_encoder->base;
 	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
 	struct i915_audio_component *acomp = dev_priv->audio_component;
-	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
 	enum port port = intel_encoder->attached_port;
 
 	if (dev_priv->display.audio_codec_disable)
 		dev_priv->display.audio_codec_disable(intel_encoder);
 
 	mutex_lock(&dev_priv->av_mutex);
-	intel_dig_port->audio_connector = NULL;
+	intel_encoder->audio_connector = NULL;
 	dev_priv->dig_port_map[port] = NULL;
 	mutex_unlock(&dev_priv->av_mutex);
 
@@ -704,7 +702,6 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
 {
 	struct drm_i915_private *dev_priv = dev_to_i915(dev);
 	struct intel_encoder *intel_encoder;
-	struct intel_digital_port *intel_dig_port;
 	const u8 *eld;
 	int ret = -EINVAL;
 
@@ -713,10 +710,9 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
 	/* intel_encoder might be NULL for DP MST */
 	if (intel_encoder) {
 		ret = 0;
-		intel_dig_port = enc_to_dig_port(&intel_encoder->base);
-		*enabled = intel_dig_port->audio_connector != NULL;
+		*enabled = intel_encoder->audio_connector != NULL;
 		if (*enabled) {
-			eld = intel_dig_port->audio_connector->eld;
+			eld = intel_encoder->audio_connector->eld;
 			ret = drm_eld_size(eld);
 			memcpy(buf, eld, min(max_bytes, ret));
 		}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 68bf134..30186bf 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -232,6 +232,8 @@ struct intel_encoder {
 	void (*suspend)(struct intel_encoder *);
 	int crtc_mask;
 	enum hpd_pin hpd_pin;
+	/* for communication with audio component; protected by av_mutex */
+	const struct drm_connector *audio_connector;
 };
 
 struct intel_panel {
@@ -948,8 +950,6 @@ struct intel_digital_port {
 	enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
 	bool release_cl2_override;
 	uint8_t max_lanes;
-	/* for communication with audio component; protected by av_mutex */
-	const struct drm_connector *audio_connector;
 };
 
 struct intel_dp_mst_encoder {
-- 
2.5.0

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

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

* Re: [PATCH v4 2/4] drm/i915: Switch to using port stored in intel_encoder
  2016-08-29 21:23         ` Lyude Paul
@ 2016-08-29 23:16           ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 22+ messages in thread
From: Pandiyan, Dhinakaran @ 2016-08-29 23:16 UTC (permalink / raw)
  To: cpaul; +Cc: libin.yang, daniel.vetter, intel-gfx

Just realized this patch needs s/attached_port/port, will send out
another version.


On Mon, 2016-08-29 at 17:23 -0400, Lyude Paul wrote:
> Looks like a much better solution then the previous one.
> 
> Reviewed-by: Lyude <cpaul@redhat.com>
> 
> On Wed, 2016-08-24 at 00:22 -0700, Dhinakaran Pandiyan wrote:
> > Now that we have the port enum stored in intel_encoder, use that instead of
> > dereferencing intel_dig_port. Saves us a few locals.
> > 
> > struct intel_encoder variables have been renamed to be consistent and
> > convey type information.
> > 
> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_audio.c | 39 +++++++++++++++--------------------
> > ---
> >  1 file changed, 15 insertions(+), 24 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_audio.c
> > b/drivers/gpu/drm/i915/intel_audio.c
> > index d32f586..5a41439 100644
> > --- a/drivers/gpu/drm/i915/intel_audio.c
> > +++ b/drivers/gpu/drm/i915/intel_audio.c
> > @@ -276,17 +276,15 @@ static void hsw_audio_codec_disable(struct intel_encoder
> > *encoder)
> >  }
> >  
> >  static void hsw_audio_codec_enable(struct drm_connector *connector,
> > -				   struct intel_encoder *encoder,
> > +				   struct intel_encoder *intel_encoder,
> >  				   const struct drm_display_mode
> > *adjusted_mode)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> > -	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
> > +	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder-
> > >base.crtc);
> >  	enum pipe pipe = intel_crtc->pipe;
> > +	enum port port = intel_encoder->attached_port;
> >  	struct i915_audio_component *acomp = dev_priv->audio_component;
> >  	const uint8_t *eld = connector->eld;
> > -	struct intel_digital_port *intel_dig_port =
> > -		enc_to_dig_port(&encoder->base);
> > -	enum port port = intel_dig_port->port;
> >  	uint32_t tmp;
> >  	int len, i;
> >  	int n, rate;
> > @@ -355,14 +353,12 @@ static void hsw_audio_codec_enable(struct drm_connector
> > *connector,
> >  	mutex_unlock(&dev_priv->av_mutex);
> >  }
> >  
> > -static void ilk_audio_codec_disable(struct intel_encoder *encoder)
> > +static void ilk_audio_codec_disable(struct intel_encoder *intel_encoder)
> >  {
> > -	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > -	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
> > -	struct intel_digital_port *intel_dig_port =
> > -		enc_to_dig_port(&encoder->base);
> > -	enum port port = intel_dig_port->port;
> > +	struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
> > +	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder-
> > >base.crtc);
> >  	enum pipe pipe = intel_crtc->pipe;
> > +	enum port port = intel_encoder->attached_port;
> >  	uint32_t tmp, eldv;
> >  	i915_reg_t aud_config, aud_cntrl_st2;
> >  
> > @@ -402,18 +398,15 @@ static void ilk_audio_codec_disable(struct intel_encoder
> > *encoder)
> >  }
> >  
> >  static void ilk_audio_codec_enable(struct drm_connector *connector,
> > -				   struct intel_encoder *encoder,
> > +				   struct intel_encoder *intel_encoder,
> >  				   const struct drm_display_mode
> > *adjusted_mode)
> >  {
> >  	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> > -	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
> > -	struct intel_digital_port *intel_dig_port =
> > -		enc_to_dig_port(&encoder->base);
> > -	enum port port = intel_dig_port->port;
> > +	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder-
> > >base.crtc);
> >  	enum pipe pipe = intel_crtc->pipe;
> > +	enum port port = intel_encoder->attached_port;
> >  	uint8_t *eld = connector->eld;
> > -	uint32_t eldv;
> > -	uint32_t tmp;
> > +	uint32_t tmp, eldv;
> >  	int len, i;
> >  	i915_reg_t hdmiw_hdmiedid, aud_config, aud_cntl_st, aud_cntrl_st2;
> >  
> > @@ -495,11 +488,10 @@ void intel_audio_codec_enable(struct intel_encoder
> > *intel_encoder)
> >  	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
> >  	const struct drm_display_mode *adjusted_mode = &crtc->config-
> > >base.adjusted_mode;
> >  	struct drm_connector *connector;
> > -	struct drm_device *dev = encoder->dev;
> > -	struct drm_i915_private *dev_priv = to_i915(dev);
> > +	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
> >  	struct i915_audio_component *acomp = dev_priv->audio_component;
> >  	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_encoder->attached_port;
> >  
> >  	connector = drm_select_eld(encoder);
> >  	if (!connector)
> > @@ -542,11 +534,10 @@ void intel_audio_codec_enable(struct intel_encoder
> > *intel_encoder)
> >  void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
> >  {
> >  	struct drm_encoder *encoder = &intel_encoder->base;
> > -	struct drm_device *dev = encoder->dev;
> > -	struct drm_i915_private *dev_priv = to_i915(dev);
> > +	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
> >  	struct i915_audio_component *acomp = dev_priv->audio_component;
> >  	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
> > -	enum port port = intel_dig_port->port;
> > +	enum port port = intel_encoder->attached_port;
> >  
> >  	if (dev_priv->display.audio_codec_disable)
> >  		dev_priv->display.audio_codec_disable(intel_encoder);

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

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

* Re: [PATCH v4 4/4] drm/i915: start adding dp mst audio
  2016-08-24  7:23       ` [PATCH v4 4/4] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
@ 2016-09-02 17:04         ` Lyude
  0 siblings, 0 replies; 22+ messages in thread
From: Lyude @ 2016-09-02 17:04 UTC (permalink / raw)
  To: Dhinakaran Pandiyan, intel-gfx; +Cc: Daniel Vetter, libin.yang

This looks fine to me.

Reviewed-by: Lyude <cpaul@redhat.com>

On Wed, 2016-08-24 at 00:23 -0700, Dhinakaran Pandiyan wrote:
> From: Libin Yang <libin.yang@linux.intel.com>
> 
> (This patch is developed by Dave Airlie <airlied@redhat.com>
> originally)
> 
> This patch adds support for DP MST audio in i915.
> 
> Enable audio codec when DP MST is enabled if has_audio flag is set.
> Disable audio codec when DP MST is disabled if has_audio flag is set.
> 
> Another separated patches to support DP MST audio will be implemented
> in audio driver.
> 
> Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
> Reviewed-by: Lyude <cpaul@redhat.com>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 19 ++++++++++++++++++-
>  drivers/gpu/drm/i915/intel_ddi.c    | 20 +++++++++++++++-----
>  drivers/gpu/drm/i915/intel_dp_mst.c | 21 +++++++++++++++++++++
>  drivers/gpu/drm/i915/intel_drv.h    |  2 ++
>  4 files changed, 56 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c
> b/drivers/gpu/drm/i915/i915_debugfs.c
> index d0b4c74..8ec69d0 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -2925,6 +2925,20 @@ static void intel_dp_info(struct seq_file *m,
>  		intel_panel_info(m, &intel_connector->panel);
>  }
>  
> +static void intel_dp_mst_info(struct seq_file *m,
> +			  struct intel_connector *intel_connector)
> +{
> +	struct intel_encoder *intel_encoder = intel_connector-
> >encoder;
> +	struct intel_dp_mst_encoder *intel_mst =
> +		enc_to_mst(&intel_encoder->base);
> +	struct intel_digital_port *intel_dig_port = intel_mst-
> >primary;
> +	struct intel_dp *intel_dp = &intel_dig_port->dp;
> +	bool has_audio = drm_dp_mst_port_has_audio(&intel_dp-
> >mst_mgr,
> +					intel_connector->port);
> +
> +	seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
> +}
> +
>  static void intel_hdmi_info(struct seq_file *m,
>  			    struct intel_connector *intel_connector)
>  {
> @@ -2967,7 +2981,10 @@ static void intel_connector_info(struct
> seq_file *m,
>  	switch (connector->connector_type) {
>  	case DRM_MODE_CONNECTOR_DisplayPort:
>  	case DRM_MODE_CONNECTOR_eDP:
> -		intel_dp_info(m, intel_connector);
> +		if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
> +			intel_dp_mst_info(m, intel_connector);
> +		else
> +			intel_dp_info(m, intel_connector);
>  		break;
>  	case DRM_MODE_CONNECTOR_LVDS:
>  		if (intel_encoder->type == INTEL_OUTPUT_LVDS)
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> b/drivers/gpu/drm/i915/intel_ddi.c
> index 402755d..a0253cf 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2173,6 +2173,19 @@ void intel_ddi_fdi_disable(struct drm_crtc
> *crtc)
>  	I915_WRITE(FDI_RX_CTL(PIPE_A), val);
>  }
>  
> +bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
> +				 struct intel_crtc *intel_crtc)
> +{
> +	u32 temp;
> +
> +	if (intel_display_power_is_enabled(dev_priv,
> POWER_DOMAIN_AUDIO)) {
> +		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
> +		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
> +			return true;
> +	}
> +	return false;
> +}
> +
>  void intel_ddi_get_config(struct intel_encoder *encoder,
>  			  struct intel_crtc_state *pipe_config)
>  {
> @@ -2238,11 +2251,8 @@ void intel_ddi_get_config(struct intel_encoder
> *encoder,
>  		break;
>  	}
>  
> -	if (intel_display_power_is_enabled(dev_priv,
> POWER_DOMAIN_AUDIO)) {
> -		temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
> -		if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
> -			pipe_config->has_audio = true;
> -	}
> +	pipe_config->has_audio =
> +		intel_ddi_is_audio_enabled(dev_priv, intel_crtc);
>  
>  	if (encoder->type == INTEL_OUTPUT_EDP && dev_priv-
> >vbt.edp.bpp &&
>  	    pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) {
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c
> b/drivers/gpu/drm/i915/intel_dp_mst.c
> index d1d7e91..d3d774d 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -76,6 +76,8 @@ static bool intel_dp_mst_compute_config(struct
> intel_encoder *encoder,
>  		return false;
>  	}
>  
> +	if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found-
> >port))
> +		pipe_config->has_audio = true;
>  	mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock,
> bpp);
>  
>  	pipe_config->pbn = mst_pbn;
> @@ -97,6 +99,10 @@ static void intel_mst_disable_dp(struct
> intel_encoder *encoder)
>  	struct intel_dp_mst_encoder *intel_mst =
> enc_to_mst(&encoder->base);
>  	struct intel_digital_port *intel_dig_port = intel_mst-
> >primary;
>  	struct intel_dp *intel_dp = &intel_dig_port->dp;
> +	struct drm_device *dev = encoder->base.dev;
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct drm_crtc *crtc = encoder->base.crtc;
> +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>  	int ret;
>  
>  	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
> @@ -107,6 +113,10 @@ static void intel_mst_disable_dp(struct
> intel_encoder *encoder)
>  	if (ret) {
>  		DRM_ERROR("failed to update payload %d\n", ret);
>  	}
> +	if (intel_crtc->config->has_audio) {
> +		intel_audio_codec_disable(encoder);
> +		intel_display_power_put(dev_priv,
> POWER_DOMAIN_AUDIO);
> +	}
>  }
>  
>  static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
> @@ -207,7 +217,9 @@ static void intel_mst_enable_dp(struct
> intel_encoder *encoder)
>  	struct intel_dp *intel_dp = &intel_dig_port->dp;
>  	struct drm_device *dev = intel_dig_port->base.base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> +	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
>  	enum port port = intel_dig_port->port;
> +	enum pipe pipe = crtc->pipe;
>  	int ret;
>  
>  	DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
> @@ -222,6 +234,12 @@ static void intel_mst_enable_dp(struct
> intel_encoder *encoder)
>  	ret = drm_dp_check_act_status(&intel_dp->mst_mgr);
>  
>  	ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr);
> +	if (crtc->config->has_audio) {
> +		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
> +				 pipe_name(pipe));
> +		intel_display_power_get(dev_priv,
> POWER_DOMAIN_AUDIO);
> +		intel_audio_codec_enable(encoder);
> +	}
>  }
>  
>  static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder
> *encoder,
> @@ -245,6 +263,9 @@ static void intel_dp_mst_enc_get_config(struct
> intel_encoder *encoder,
>  	enum transcoder cpu_transcoder = pipe_config-
> >cpu_transcoder;
>  	u32 temp, flags = 0;
>  
> +	pipe_config->has_audio =
> +		intel_ddi_is_audio_enabled(dev_priv, crtc);
> +
>  	temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
>  	if (temp & TRANS_DDI_PHSYNC)
>  		flags |= DRM_MODE_FLAG_PHSYNC;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index 30186bf..308b07b 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1142,6 +1142,8 @@ void intel_ddi_set_pipe_settings(struct
> drm_crtc *crtc);
>  void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
>  bool intel_ddi_connector_get_hw_state(struct intel_connector
> *intel_connector);
>  void intel_ddi_fdi_disable(struct drm_crtc *crtc);
> +bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
> +				 struct intel_crtc *intel_crtc);
>  void intel_ddi_get_config(struct intel_encoder *encoder,
>  			  struct intel_crtc_state *pipe_config);
>  struct intel_encoder *
-- 
Cheers,
	Lyude
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder
  2016-08-24  7:22       ` [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
  2016-08-26 23:50         ` Pandiyan, Dhinakaran
  2016-08-29 21:20         ` Lyude Paul
@ 2016-09-06 12:07         ` Ville Syrjälä
  2016-09-12 21:48           ` Pandiyan, Dhinakaran
  2 siblings, 1 reply; 22+ messages in thread
From: Ville Syrjälä @ 2016-09-06 12:07 UTC (permalink / raw)
  To: Dhinakaran Pandiyan; +Cc: Daniel Vetter, intel-gfx, libin.yang

On Wed, Aug 24, 2016 at 12:22:57AM -0700, Dhinakaran Pandiyan wrote:
> Storing the port enum in intel_encoder makes it convenient to know the
> port attached to an encoder. Moving the port information up from
> intel_digital_port to intel_encoder avoids unecessary intel_digital_port
> access and handles MST encoders cleanly without requiring conditional
> checks for them (thanks danvet).
> 
> v2:
> Renamed the port enum member from 'attached_port' to 'port' (danvet)
> Fixed missing initialization of port in intel_sdvo.c (danvet)
> 
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h     | 1 +
>  drivers/gpu/drm/i915/intel_ddi.c    | 1 +
>  drivers/gpu/drm/i915/intel_dp.c     | 1 +
>  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
>  drivers/gpu/drm/i915/intel_drv.h    | 1 +
>  drivers/gpu/drm/i915/intel_dsi.c    | 1 +
>  drivers/gpu/drm/i915/intel_dvo.c    | 2 ++
>  drivers/gpu/drm/i915/intel_hdmi.c   | 1 +
>  drivers/gpu/drm/i915/intel_lvds.c   | 3 ++-
>  drivers/gpu/drm/i915/intel_sdvo.c   | 1 +
>  drivers/gpu/drm/i915/intel_tv.c     | 2 ++

Missing intel_crt.c at least.

Also we're going to want a patch to kill off the, now duplicated,
information from intel_dig_port.

>  11 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 9cd102c..60e282d5 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -185,6 +185,7 @@ enum plane {
>  #define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) + 'A')
>  
>  enum port {
> +	PORT_NONE = -1,
>  	PORT_A = 0,
>  	PORT_B,
>  	PORT_C,
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index c2df4e4..402755d 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2426,6 +2426,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
>  	intel_dig_port->max_lanes = max_lanes;
>  
>  	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
> +	intel_encoder->port = port;
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	intel_encoder->cloneable = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 364db90..cfe2f4a 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -5726,6 +5726,7 @@ bool intel_dp_init(struct drm_device *dev,
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
>  	}
>  	intel_encoder->cloneable = 0;
> +	intel_encoder->port = port;
>  
>  	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
>  	dev_priv->hotplug.irq_port[port] = intel_dig_port;
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 629337d..d1d7e91 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -540,6 +540,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
>  			 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe));
>  
>  	intel_encoder->type = INTEL_OUTPUT_DP_MST;
> +	intel_encoder->port = intel_dig_port->port;
>  	intel_encoder->crtc_mask = 0x7;
>  	intel_encoder->cloneable = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 1c700b0..68bf134 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -202,6 +202,7 @@ struct intel_encoder {
>  	struct drm_encoder base;
>  
>  	enum intel_output_type type;
> +	enum port port;
>  	unsigned int cloneable;
>  	void (*hot_plug)(struct intel_encoder *);
>  	bool (*compute_config)(struct intel_encoder *,
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> index de8e9fb..eb5cc0b 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -1478,6 +1478,7 @@ void intel_dsi_init(struct drm_device *dev)
>  
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
> +	intel_encoder->port = port;
>  	/*
>  	 * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI
>  	 * port C. BXT isn't limited like this.
> diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
> index 47bdf9d..6dc2791 100644
> --- a/drivers/gpu/drm/i915/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/intel_dvo.c
> @@ -511,7 +511,9 @@ void intel_dvo_init(struct drm_device *dev)
>  				 "DVO %c", intel_dvo_port_name(dvo->dvo_reg));
>  
>  		intel_encoder->type = INTEL_OUTPUT_DVO;
> +		intel_encoder->port = PORT_NONE;
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
> +
>  		switch (dvo->type) {
>  		case INTEL_DVO_CHIP_TMDS:
>  			intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG) |
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 4df9f38..25eeac3 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1962,6 +1962,7 @@ void intel_hdmi_init(struct drm_device *dev,
>  	}
>  
>  	intel_encoder->type = INTEL_OUTPUT_HDMI;
> +	intel_encoder->port = port;
>  	if (IS_CHERRYVIEW(dev)) {
>  		if (port == PORT_D)
>  			intel_encoder->crtc_mask = 1 << 2;
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> index 668eabb..b756248 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -1052,8 +1052,9 @@ void intel_lvds_init(struct drm_device *dev)
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
>  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> -	intel_encoder->type = INTEL_OUTPUT_LVDS;
>  
> +	intel_encoder->type = INTEL_OUTPUT_LVDS;
> +	intel_encoder->port = PORT_NONE;
>  	intel_encoder->cloneable = 0;
>  	if (HAS_PCH_SPLIT(dev))
>  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> index e378f35..c5e04e8 100644
> --- a/drivers/gpu/drm/i915/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> @@ -2973,6 +2973,7 @@ bool intel_sdvo_init(struct drm_device *dev,
>  	/* encoder type will be decided later */
>  	intel_encoder = &intel_sdvo->base;
>  	intel_encoder->type = INTEL_OUTPUT_SDVO;
> +	intel_encoder->port = port;
>  	drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0,
>  			 "SDVO %c", port_name(port));
>  
> diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> index 49136ad..dba365c 100644
> --- a/drivers/gpu/drm/i915/intel_tv.c
> +++ b/drivers/gpu/drm/i915/intel_tv.c
> @@ -1603,7 +1603,9 @@ intel_tv_init(struct drm_device *dev)
>  	intel_connector->get_hw_state = intel_connector_get_hw_state;
>  
>  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> +
>  	intel_encoder->type = INTEL_OUTPUT_TVOUT;
> +	intel_encoder->port = PORT_NONE;
>  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
>  	intel_encoder->cloneable = 0;
>  	intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
> -- 
> 2.5.0

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

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

* Re: [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder
  2016-09-06 12:07         ` Ville Syrjälä
@ 2016-09-12 21:48           ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 22+ messages in thread
From: Pandiyan, Dhinakaran @ 2016-09-12 21:48 UTC (permalink / raw)
  To: ville.syrjala; +Cc: daniel.vetter, intel-gfx, libin.yang

On Tue, 2016-09-06 at 15:07 +0300, Ville Syrjälä wrote:
> On Wed, Aug 24, 2016 at 12:22:57AM -0700, Dhinakaran Pandiyan wrote:
> > Storing the port enum in intel_encoder makes it convenient to know the
> > port attached to an encoder. Moving the port information up from
> > intel_digital_port to intel_encoder avoids unecessary intel_digital_port
> > access and handles MST encoders cleanly without requiring conditional
> > checks for them (thanks danvet).
> > 
> > v2:
> > Renamed the port enum member from 'attached_port' to 'port' (danvet)
> > Fixed missing initialization of port in intel_sdvo.c (danvet)
> > 
> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_drv.h     | 1 +
> >  drivers/gpu/drm/i915/intel_ddi.c    | 1 +
> >  drivers/gpu/drm/i915/intel_dp.c     | 1 +
> >  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
> >  drivers/gpu/drm/i915/intel_drv.h    | 1 +
> >  drivers/gpu/drm/i915/intel_dsi.c    | 1 +
> >  drivers/gpu/drm/i915/intel_dvo.c    | 2 ++
> >  drivers/gpu/drm/i915/intel_hdmi.c   | 1 +
> >  drivers/gpu/drm/i915/intel_lvds.c   | 3 ++-
> >  drivers/gpu/drm/i915/intel_sdvo.c   | 1 +
> >  drivers/gpu/drm/i915/intel_tv.c     | 2 ++
> 
> Missing intel_crt.c at least.
> 
My grep search string was inadequate, will fix this.
Thanks for the review. Can you also look at the the API change patch that you had R-B'd
earlier? I removed your R-B as the patch changed.

> Also we're going to want a patch to kill off the, now duplicated,
> information from intel_dig_port.
> 

Makes sense, I will work on it. 

> >  11 files changed, 14 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 9cd102c..60e282d5 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -185,6 +185,7 @@ enum plane {
> >  #define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) + 'A')
> >  
> >  enum port {
> > +	PORT_NONE = -1,
> >  	PORT_A = 0,
> >  	PORT_B,
> >  	PORT_C,
> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> > index c2df4e4..402755d 100644
> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > @@ -2426,6 +2426,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
> >  	intel_dig_port->max_lanes = max_lanes;
> >  
> >  	intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
> > +	intel_encoder->port = port;
> >  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> >  	intel_encoder->cloneable = 0;
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index 364db90..cfe2f4a 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -5726,6 +5726,7 @@ bool intel_dp_init(struct drm_device *dev,
> >  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> >  	}
> >  	intel_encoder->cloneable = 0;
> > +	intel_encoder->port = port;
> >  
> >  	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
> >  	dev_priv->hotplug.irq_port[port] = intel_dig_port;
> > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> > index 629337d..d1d7e91 100644
> > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> > @@ -540,6 +540,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
> >  			 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe));
> >  
> >  	intel_encoder->type = INTEL_OUTPUT_DP_MST;
> > +	intel_encoder->port = intel_dig_port->port;
> >  	intel_encoder->crtc_mask = 0x7;
> >  	intel_encoder->cloneable = 0;
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 1c700b0..68bf134 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -202,6 +202,7 @@ struct intel_encoder {
> >  	struct drm_encoder base;
> >  
> >  	enum intel_output_type type;
> > +	enum port port;
> >  	unsigned int cloneable;
> >  	void (*hot_plug)(struct intel_encoder *);
> >  	bool (*compute_config)(struct intel_encoder *,
> > diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> > index de8e9fb..eb5cc0b 100644
> > --- a/drivers/gpu/drm/i915/intel_dsi.c
> > +++ b/drivers/gpu/drm/i915/intel_dsi.c
> > @@ -1478,6 +1478,7 @@ void intel_dsi_init(struct drm_device *dev)
> >  
> >  	intel_connector->get_hw_state = intel_connector_get_hw_state;
> >  
> > +	intel_encoder->port = port;
> >  	/*
> >  	 * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI
> >  	 * port C. BXT isn't limited like this.
> > diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
> > index 47bdf9d..6dc2791 100644
> > --- a/drivers/gpu/drm/i915/intel_dvo.c
> > +++ b/drivers/gpu/drm/i915/intel_dvo.c
> > @@ -511,7 +511,9 @@ void intel_dvo_init(struct drm_device *dev)
> >  				 "DVO %c", intel_dvo_port_name(dvo->dvo_reg));
> >  
> >  		intel_encoder->type = INTEL_OUTPUT_DVO;
> > +		intel_encoder->port = PORT_NONE;
> >  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
> > +
> >  		switch (dvo->type) {
> >  		case INTEL_DVO_CHIP_TMDS:
> >  			intel_encoder->cloneable = (1 << INTEL_OUTPUT_ANALOG) |
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> > index 4df9f38..25eeac3 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -1962,6 +1962,7 @@ void intel_hdmi_init(struct drm_device *dev,
> >  	}
> >  
> >  	intel_encoder->type = INTEL_OUTPUT_HDMI;
> > +	intel_encoder->port = port;
> >  	if (IS_CHERRYVIEW(dev)) {
> >  		if (port == PORT_D)
> >  			intel_encoder->crtc_mask = 1 << 2;
> > diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> > index 668eabb..b756248 100644
> > --- a/drivers/gpu/drm/i915/intel_lvds.c
> > +++ b/drivers/gpu/drm/i915/intel_lvds.c
> > @@ -1052,8 +1052,9 @@ void intel_lvds_init(struct drm_device *dev)
> >  	intel_connector->get_hw_state = intel_connector_get_hw_state;
> >  
> >  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> > -	intel_encoder->type = INTEL_OUTPUT_LVDS;
> >  
> > +	intel_encoder->type = INTEL_OUTPUT_LVDS;
> > +	intel_encoder->port = PORT_NONE;
> >  	intel_encoder->cloneable = 0;
> >  	if (HAS_PCH_SPLIT(dev))
> >  		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> > diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> > index e378f35..c5e04e8 100644
> > --- a/drivers/gpu/drm/i915/intel_sdvo.c
> > +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> > @@ -2973,6 +2973,7 @@ bool intel_sdvo_init(struct drm_device *dev,
> >  	/* encoder type will be decided later */
> >  	intel_encoder = &intel_sdvo->base;
> >  	intel_encoder->type = INTEL_OUTPUT_SDVO;
> > +	intel_encoder->port = port;
> >  	drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0,
> >  			 "SDVO %c", port_name(port));
> >  
> > diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> > index 49136ad..dba365c 100644
> > --- a/drivers/gpu/drm/i915/intel_tv.c
> > +++ b/drivers/gpu/drm/i915/intel_tv.c
> > @@ -1603,7 +1603,9 @@ intel_tv_init(struct drm_device *dev)
> >  	intel_connector->get_hw_state = intel_connector_get_hw_state;
> >  
> >  	intel_connector_attach_encoder(intel_connector, intel_encoder);
> > +
> >  	intel_encoder->type = INTEL_OUTPUT_TVOUT;
> > +	intel_encoder->port = PORT_NONE;
> >  	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
> >  	intel_encoder->cloneable = 0;
> >  	intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
> > -- 
> > 2.5.0
> 

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

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

end of thread, other threads:[~2016-09-12 21:48 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-23 20:49 [PATCH v3 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
2016-08-23 20:49 ` [PATCH v3 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
2016-08-24  6:08   ` Daniel Vetter
2016-08-24  6:28     ` Pandiyan, Dhinakaran
2016-08-24  7:22     ` [PATCH v4 0/4] Prep. for DP audio MST support Dhinakaran Pandiyan
2016-08-24  7:22       ` [PATCH v4 1/4] drm/i915: Store port enum in intel_encoder Dhinakaran Pandiyan
2016-08-26 23:50         ` Pandiyan, Dhinakaran
2016-08-29 21:20         ` Lyude Paul
2016-09-06 12:07         ` Ville Syrjälä
2016-09-12 21:48           ` Pandiyan, Dhinakaran
2016-08-24  7:22       ` [PATCH v4 2/4] drm/i915: Switch to using port stored " Dhinakaran Pandiyan
2016-08-29 21:23         ` Lyude Paul
2016-08-29 23:16           ` Pandiyan, Dhinakaran
2016-08-24  7:22       ` [PATCH v4 3/4] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
2016-08-29 21:56         ` Pandiyan, Dhinakaran
2016-08-29 22:16         ` Dhinakaran Pandiyan
2016-08-24  7:23       ` [PATCH v4 4/4] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
2016-09-02 17:04         ` Lyude
2016-08-23 20:49 ` [PATCH v3 2/4] drm/i915: Switch to using port stored in intel_encoder Dhinakaran Pandiyan
2016-08-23 20:49 ` [PATCH v3 3/4] drm/i915: Move audio_connector to intel_encoder Dhinakaran Pandiyan
2016-08-23 20:49 ` [PATCH v3 4/4] drm/i915: start adding dp mst audio Dhinakaran Pandiyan
2016-08-24  3:20 ` ✗ Fi.CI.BAT: failure for Prep. for DP audio MST support (rev2) Patchwork

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