diff mbox series

[07/10] drm/i915: Populate encoder->devdata for g4x+ DP/HDMI ports

Message ID 20230208015508.24824-8-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: Prep work for vbt.ports[] nukage | expand

Commit Message

Ville Syrjälä Feb. 8, 2023, 1:55 a.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Let's make encoder->devdata (the VBT informaiton for the port)
available on g4x+ platforms as well. Much easier when you can
just grab it there instead of trying to find it from some global
list array based on the port.

Note that (unlike DDI platforms) we don't currently require
that each DP/HDMI port is actually declared in VBT. Perhaps
in the future we may want to rethink that, but for now just
stick in a debug+FIXME as a reminder.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/g4x_dp.c   | 10 ++++++++++
 drivers/gpu/drm/i915/display/g4x_hdmi.c | 10 ++++++++++
 2 files changed, 20 insertions(+)

Comments

Jani Nikula Feb. 13, 2023, 4:12 p.m. UTC | #1
On Wed, 08 Feb 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Let's make encoder->devdata (the VBT informaiton for the port)

*information

> available on g4x+ platforms as well. Much easier when you can
> just grab it there instead of trying to find it from some global
> list array based on the port.
>
> Note that (unlike DDI platforms) we don't currently require
> that each DP/HDMI port is actually declared in VBT. Perhaps
> in the future we may want to rethink that, but for now just
> stick in a debug+FIXME as a reminder.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/g4x_dp.c   | 10 ++++++++++
>  drivers/gpu/drm/i915/display/g4x_hdmi.c | 10 ++++++++++
>  2 files changed, 20 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c b/drivers/gpu/drm/i915/display/g4x_dp.c
> index fa754038d669..0cc1531a03a3 100644
> --- a/drivers/gpu/drm/i915/display/g4x_dp.c
> +++ b/drivers/gpu/drm/i915/display/g4x_dp.c
> @@ -1279,11 +1279,19 @@ static const struct drm_encoder_funcs intel_dp_enc_funcs = {
>  bool g4x_dp_init(struct drm_i915_private *dev_priv,
>  		 i915_reg_t output_reg, enum port port)
>  {
> +	const struct intel_bios_encoder_data *devdata;
>  	struct intel_digital_port *dig_port;
>  	struct intel_encoder *intel_encoder;
>  	struct drm_encoder *encoder;
>  	struct intel_connector *intel_connector;
>  
> +	devdata = intel_bios_encoder_data_lookup(dev_priv, port);
> +
> +	/* FIXME bail? */
> +	if (!devdata)
> +		drm_dbg_kms(&dev_priv->drm, "No VBT child device for DP-%c\n",
> +			    port_name(port));
> +
>  	dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
>  	if (!dig_port)
>  		return false;
> @@ -1295,6 +1303,8 @@ bool g4x_dp_init(struct drm_i915_private *dev_priv,
>  	intel_encoder = &dig_port->base;
>  	encoder = &intel_encoder->base;
>  
> +	intel_encoder->devdata = devdata;
> +
>  	mutex_init(&dig_port->hdcp_mutex);
>  
>  	if (drm_encoder_init(&dev_priv->drm, &intel_encoder->base,
> diff --git a/drivers/gpu/drm/i915/display/g4x_hdmi.c b/drivers/gpu/drm/i915/display/g4x_hdmi.c
> index 64c3b3990702..e9ae4c67b8a4 100644
> --- a/drivers/gpu/drm/i915/display/g4x_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/g4x_hdmi.c
> @@ -548,10 +548,18 @@ intel_hdmi_hotplug(struct intel_encoder *encoder,
>  void g4x_hdmi_init(struct drm_i915_private *dev_priv,
>  		   i915_reg_t hdmi_reg, enum port port)
>  {
> +	const struct intel_bios_encoder_data *devdata;
>  	struct intel_digital_port *dig_port;
>  	struct intel_encoder *intel_encoder;
>  	struct intel_connector *intel_connector;
>  
> +	devdata = intel_bios_encoder_data_lookup(dev_priv, port);
> +
> +	/* FIXME bail? */
> +	if (!devdata)
> +		drm_dbg_kms(&dev_priv->drm, "No VBT child device for HDMI-%c\n",
> +			    port_name(port));
> +
>  	dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
>  	if (!dig_port)
>  		return;
> @@ -564,6 +572,8 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
>  
>  	intel_encoder = &dig_port->base;
>  
> +	intel_encoder->devdata = devdata;
> +
>  	mutex_init(&dig_port->hdcp_mutex);
>  
>  	drm_encoder_init(&dev_priv->drm, &intel_encoder->base,
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c b/drivers/gpu/drm/i915/display/g4x_dp.c
index fa754038d669..0cc1531a03a3 100644
--- a/drivers/gpu/drm/i915/display/g4x_dp.c
+++ b/drivers/gpu/drm/i915/display/g4x_dp.c
@@ -1279,11 +1279,19 @@  static const struct drm_encoder_funcs intel_dp_enc_funcs = {
 bool g4x_dp_init(struct drm_i915_private *dev_priv,
 		 i915_reg_t output_reg, enum port port)
 {
+	const struct intel_bios_encoder_data *devdata;
 	struct intel_digital_port *dig_port;
 	struct intel_encoder *intel_encoder;
 	struct drm_encoder *encoder;
 	struct intel_connector *intel_connector;
 
+	devdata = intel_bios_encoder_data_lookup(dev_priv, port);
+
+	/* FIXME bail? */
+	if (!devdata)
+		drm_dbg_kms(&dev_priv->drm, "No VBT child device for DP-%c\n",
+			    port_name(port));
+
 	dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
 	if (!dig_port)
 		return false;
@@ -1295,6 +1303,8 @@  bool g4x_dp_init(struct drm_i915_private *dev_priv,
 	intel_encoder = &dig_port->base;
 	encoder = &intel_encoder->base;
 
+	intel_encoder->devdata = devdata;
+
 	mutex_init(&dig_port->hdcp_mutex);
 
 	if (drm_encoder_init(&dev_priv->drm, &intel_encoder->base,
diff --git a/drivers/gpu/drm/i915/display/g4x_hdmi.c b/drivers/gpu/drm/i915/display/g4x_hdmi.c
index 64c3b3990702..e9ae4c67b8a4 100644
--- a/drivers/gpu/drm/i915/display/g4x_hdmi.c
+++ b/drivers/gpu/drm/i915/display/g4x_hdmi.c
@@ -548,10 +548,18 @@  intel_hdmi_hotplug(struct intel_encoder *encoder,
 void g4x_hdmi_init(struct drm_i915_private *dev_priv,
 		   i915_reg_t hdmi_reg, enum port port)
 {
+	const struct intel_bios_encoder_data *devdata;
 	struct intel_digital_port *dig_port;
 	struct intel_encoder *intel_encoder;
 	struct intel_connector *intel_connector;
 
+	devdata = intel_bios_encoder_data_lookup(dev_priv, port);
+
+	/* FIXME bail? */
+	if (!devdata)
+		drm_dbg_kms(&dev_priv->drm, "No VBT child device for HDMI-%c\n",
+			    port_name(port));
+
 	dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
 	if (!dig_port)
 		return;
@@ -564,6 +572,8 @@  void g4x_hdmi_init(struct drm_i915_private *dev_priv,
 
 	intel_encoder = &dig_port->base;
 
+	intel_encoder->devdata = devdata;
+
 	mutex_init(&dig_port->hdcp_mutex);
 
 	drm_encoder_init(&dev_priv->drm, &intel_encoder->base,