On Thu, 04 Jun 2026, Michał Grzelak <[email protected]> wrote:
> Start searching for Vswing / Preemphasis Override Block during VBT
> parsing at init_bdb_blocks().
>
> Check for failure since pre-ICL GOPs do not contain the block. Check
> also if VBT version is appropriately up-to-date.
>
> Issue a debug message when port requests to override VS/PE and parsing
> VBT #57 for the platform has not yet been implemented.
>
> v3->v4
> - add Bspec (Suraj)
>
> Bspec: 32063
> Signed-off-by: Michał Grzelak <[email protected]>
> Reviewed-by: Suraj Kandpal <[email protected]>
> ---
> drivers/gpu/drm/i915/display/intel_bios.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c
> b/drivers/gpu/drm/i915/display/intel_bios.c
> index b6fe87c29aa7c..420b09b4d01ef 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -200,6 +200,8 @@ static const struct {
> .min_size = sizeof(struct bdb_mipi_sequence) },
> { .section_id = BDB_COMPRESSION_PARAMETERS,
> .min_size = sizeof(struct bdb_compression_parameters), },
> + { .section_id = BDB_VSWING_PREEMPH,
> + .min_size = sizeof(struct bdb_vswing_preemph), },
> { .section_id = BDB_GENERIC_DTD,
> .min_size = sizeof(struct bdb_generic_dtd), },
> };
> @@ -2183,6 +2185,23 @@ parse_compression_parameters(struct intel_display
> *display)
> }
> }
>
> +static void
> +parse_vswing_preemph_override(struct intel_display *display)
> +{
> + const struct bdb_vswing_preemph *block;
> +
> + if (display->vbt.version < 218)
> + return;
> +
> + block = bdb_find_section(display, BDB_VSWING_PREEMPH);
> +
> + /* pre-ICL GOPs don't have VBT #57 */
> + if (!block)
> + return;
> +
> + drm_dbg_kms(display->drm, "valid VS/PE-O request but not yet
> supported\n");
> +}
> +
> static u8 translate_iboost(struct intel_display *display, u8 val)
> {
> static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */
> @@ -3274,6 +3293,7 @@ void intel_bios_init(struct intel_display *display)
>
> /* Depends on child device list */
> parse_compression_parameters(display);
> + parse_vswing_preemph_override(display);
This does not depend on the child device list
(display->vbt.display_devices) which is filled by
parse_general_definitions(). The call should be placed at the end of the
group above this.
BR,
Jani.
>
> out:
> if (!vbt) {
--
Jani Nikula, Intel