On Wed, 08 Feb 2023, Ville Syrjala <ville.syrjala@xxxxxxxxxxxxxxx> wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxx> > --- > 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