* [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* 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@lists.freedesktop.org
Cc: daniel.vetter@ffwll.ch, libin.yang@linux.intel.com
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 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@linux.intel.com
Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org,
libin.yang@linux.intel.com
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
* [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* 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 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@redhat.com
Cc: libin.yang@linux.intel.com, daniel.vetter@ffwll.ch,
intel-gfx@lists.freedesktop.org
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
* [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* 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@lists.freedesktop.org
Cc: daniel.vetter@ffwll.ch, libin.yang@linux.intel.com
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
* [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 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