[Intel-gfx] [PATCH 07/10] drm/i915: Populate encoder->devdata for g4x+ DP/HDMI ports
Jani Nikula
jani.nikula at linux.intel.com
Mon Feb 13 16:12:50 UTC 2023
On Wed, 08 Feb 2023, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at 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 at 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,
--
Jani Nikula, Intel Open Source Graphics Center
More information about the Intel-gfx
mailing list