> Subject: RE: [PATCH v4 06/10] drm/i915/buf_trans: abstract VS/PE-O access and
> index computation
> 
> On Mon, 1 Jun 2026, Kandpal, Suraj wrote:
> >> Subject: [PATCH v4 06/10] drm/i915/buf_trans: abstract VS/PE-O access
> >> and index computation
> >>
> >> Lay into intel_ddi_buf_trans_get() infrastructure for VS/PE-O.
> >>
> >> Add (*get_phy_vspeo_index)() function hook into struct intel_encoder.
> >> This function pointer is responsible for computing index of requested
> >> table from VBT #57.
> >>
> >> Add also (*get_phy_vspeo)() function hook into struct intel_encoder.
> >> This function pointer will be the accessor which parses and sets
> >> port's buffer basing on VBT #57's data.
> >>
> >> Note that these two pointer need to be separate since they are taking
> >> place during two different abstraction layers:
> >> (*get_phy_vspeo_index()) operates on crtc_state, while (*get_phy_vspeo)()
> consumes devdata.
> >>
> >> Add generic function pointer indicating lack of VS/PE-O's support.
> >>
> >> Signed-off-by: Michał Grzelak <[email protected]>
> >> ---
> >>  .../drm/i915/display/intel_ddi_buf_trans.c    | 30 ++++++++++++++++++-
> >>  .../drm/i915/display/intel_display_types.h    |  5 ++++
> >>  2 files changed, 34 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
> >> b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
> >> index 4cd1e4d76c7a..fbd5efc5ca6c 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
> >> @@ -1784,10 +1784,20 @@ xe3plpd_get_lt_buf_trans(struct intel_encoder
> >> *encoder,
> >>            return intel_get_buf_trans(&xe3plpd_lt_trans_dp14,
> >> n_entries);  }
> >>
> >> +static int
> >> +_get_phy_vspeo_index(struct intel_encoder *encoder,
> >> +               const struct intel_crtc_state *crtc_state) {
> >> +  return -EOPNOTSUPP;
> >> +}

This can be removed.

> >> +
> >>  void intel_ddi_buf_trans_init(struct intel_encoder *encoder)  {
> >>    struct intel_display *display = to_intel_display(encoder);
> >>
> >> +  encoder->get_phy_vspeo_index = _get_phy_vspeo_index;
> >> +  encoder->get_phy_vspeo = NULL;
> >> +

Skip defining this for all platforms by default. Will help later.

> >>    if (HAS_LT_PHY(display)) {
> >>            encoder->get_buf_trans = xe3plpd_get_lt_buf_trans;
> >>    } else if (DISPLAY_VER(display) >= 14) { @@ -1857,5 +1867,23 @@
> >> const struct intel_ddi_buf_trans *intel_ddi_buf_trans_get(struct
> >> intel_encoder *
> >>                                                      const struct
> >> intel_crtc_state *crtc_state,
> >>                                                      int *n_entries)
> >>  {
> >> -  return encoder->get_buf_trans(encoder, crtc_state, n_entries);
> >> +  struct intel_display *display = to_intel_display(encoder);
> >> +  const struct intel_ddi_buf_trans *buf_trans;
> >> +  bool vspeo;
> >> +  int table;
> >> +
> >> +  vspeo = intel_bios_encoder_requests_vspeo(encoder->devdata);
> >> +  if (!vspeo)
> >> +          return encoder->get_buf_trans(encoder, crtc_state,
> >> n_entries);
> >> +
> >> +  table = encoder->get_phy_vspeo_index(encoder, crtc_state);
> >> +  if (table < 0) {
> >> +          drm_WARN_ONCE(display->drm, 1,
> >> +                        "platform does not support VS/PE-O, setting
> >> default\n");


Now with the above two comments implemented what you can do here is 
vspeo = intel_bios_encoder_requests_vspeo(encoder->devdata);

if (!vspeo)
        goto out;

If (encoder->get_phy_vspeo_index) {
        table = encoder->get_phy_vspeo_index(encoder, crtc_state);
        buf_trans = encoder->get_phy_vspeo(encoder->devdata, table);
        return intel_get_buf_trans(buf_trans, n_entries);
}

Out :
        return encoder->get_buf_trans(encoder, crtc_state, n_entries);

Also after looking at the code this function is a get which I dont needs to 
have in its job description what platform does/does not
Support VS/pe-o

Regards,
Suraj Kandpal

> >> +
> >
> > WARN does not belong here maybe a drm_dbg_kms() saying "VBT requests
> vspeo but does not provide index table"
> > The reason being panel vendors may have broken VBT requesting for VS/PE
> but not providing a table.
> > This will just cause Alarms to go off in CI, where you will be
> > debugging broken VBTs which wont be fixed specially for the older
> Generations.
> 
> I agree that drm_dbg_kms() would suffice. I'm not sure on the phrasing
> though. Current patch series does not support DKL nor MG PHY, and this
> message was targeted to be shown when eg. TGL's DKL requests Override when
> there is no code to handle it.
> 
> Now I think that probably it would be better to do what you have already said
> [1], that the debug message should be issued only when VS/PE-O would
> successfully take place, instead of spamming it all along the way.
> 
> BR,
> Michał
> 
> [1] https://lore.kernel.org/intel-
> gfx/[email protected]
> amprd11.prod.outlook.com/
> 
> >
> > Regards,
> > Suraj Kandpal
> >
> >> +          return encoder->get_buf_trans(encoder, crtc_state,
> >> n_entries);
> >> +  }
> >> +
> >> +  buf_trans = encoder->get_phy_vspeo(encoder->devdata, table);
> >> +  return intel_get_buf_trans(buf_trans, n_entries);
> >>  }
> >> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> >> b/drivers/gpu/drm/i915/display/intel_display_types.h
> >> index c21e0c0ef0b1..829e17fbfb0a 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> >> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> >> @@ -292,6 +292,11 @@ struct intel_encoder {
> >>    void (*set_signal_levels)(struct intel_encoder *encoder,
> >>                              const struct intel_crtc_state *crtc_state);
> >>
> >> +  int (*get_phy_vspeo_index)(struct intel_encoder *encoder,
> >> +                             const struct intel_crtc_state *crtc_state);
> >> +  const struct intel_ddi_buf_trans *(*get_phy_vspeo)(const struct
> >> intel_bios_encoder_data *devdata,
> >> +                                                     int idx);
> >> +
> >>    enum hpd_pin hpd_pin;
> >>    enum intel_display_power_domain power_domain;
> >>
> >> --
> >> 2.45.2
> >
> >

Reply via email to