>
> Add into intel_encoder constant pointer to intel_ddi_buf_trans. Track with it
> VS/PE-O buffer from corresponding BIOS encoder.
>
> Add helper function into intel_bios.[ch] to extract port's intel_ddi_buf_trans
> pointer. Cache the pointer by default into each intel_encoder during
> intel_ddi_init().
>
> This is needed as devdata->buf_trans has been allocated per each port during
> parsing DDI ports in intel_bios.c. Meanwhile every encoder will need to know
> if VS/PE overriding is requested during intel_ddi_buf_trans_init().
>
> Signed-off-by: Michał Grzelak <[email protected]>
> ---
> drivers/gpu/drm/i915/display/intel_bios.c | 6 ++++++
> drivers/gpu/drm/i915/display/intel_bios.h | 2 ++
> drivers/gpu/drm/i915/display/intel_ddi.c | 1 +
> drivers/gpu/drm/i915/display/intel_display_types.h | 1 +
> 4 files changed, 10 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c
> b/drivers/gpu/drm/i915/display/intel_bios.c
> index 1b813a3dff245..6893aa9f01aec 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -3851,6 +3851,12 @@ bool intel_bios_encoder_supports_tbt(const
> struct intel_bios_encoder_data *devda
> return devdata->display->vbt.version >= 209 && devdata->child.tbt; }
>
> +const struct intel_ddi_buf_trans *
> +intel_bios_encoder_extract_vswing(const struct intel_bios_encoder_data
> +*devdata) {
> + return devdata->buf_trans;
> +}
> +
> bool intel_bios_encoder_overrides_vswing(const struct
> intel_bios_encoder_data *devdata) {
> return devdata->display->vbt.version >= 218 && diff --git
> a/drivers/gpu/drm/i915/display/intel_bios.h
> b/drivers/gpu/drm/i915/display/intel_bios.h
> index 50c8fc91fbe85..cf040b9b7915b 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.h
> +++ b/drivers/gpu/drm/i915/display/intel_bios.h
> @@ -73,6 +73,8 @@ bool intel_bios_get_dsc_params(struct intel_encoder
> *encoder, const struct intel_bios_encoder_data *
> intel_bios_encoder_data_lookup(struct intel_display *display, enum port
> port);
>
> +const struct intel_ddi_buf_trans *
> +intel_bios_encoder_extract_vswing(const struct intel_bios_encoder_data
> +*devdata);
> bool intel_bios_encoder_overrides_vswing(const struct
> intel_bios_encoder_data *devdata); bool
> intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data
> *devdata); bool intel_bios_encoder_supports_hdmi(const struct
> intel_bios_encoder_data *devdata); diff --git
> a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 2681940a5cfe3..eb188b27ec96b 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -5249,6 +5249,7 @@ void intel_ddi_init(struct intel_display *display,
>
> encoder = &dig_port->base;
> encoder->devdata = devdata;
> + encoder->vspeo = intel_bios_encoder_extract_vswing(devdata);
>
> drm_encoder_init(display->drm, &encoder->base, &intel_ddi_funcs,
> DRM_MODE_ENCODER_TMDS, "%s",
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 26e59110e7435..0f27bcfb69223 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -297,6 +297,7 @@ struct intel_encoder {
>
> /* VBT information for this encoder (may be NULL for older platforms)
> */
> const struct intel_bios_encoder_data *devdata;
> + const struct intel_ddi_buf_trans *vspeo;
I don’t get why this is really needed you have devdata available you can get
this data on fly why the helper and caching . Even after caching it points to
same table.
Regards,
Suraj Kandpal
> };
>
> struct intel_panel_bl_funcs {
> --
> 2.45.2