From: "Michał Grzelak" <michal.grzelak@intel.com>
To: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Cc: "Jani Nikula" <jani.nikula@linux.intel.com>,
"Michał Grzelak" <michal.grzelak@intel.com>
Subject: [PATCH v1 08/16] drm/i915/bios: support VS/PE Override per each ddi port
Date: Tue, 31 Mar 2026 20:33:24 +0200 [thread overview]
Message-ID: <20260331183332.1773886-9-michal.grzelak@intel.com> (raw)
In-Reply-To: <20260331183332.1773886-1-michal.grzelak@intel.com>
Add helper function to check if port asks for overriding default VS/PE
tables.
Add ddi_vswing_preemph into bios_encoder_data. This is required because
every devdata needs a separate intel_ddi_buf_trans since each port can
request an override. Store buffer's pointer in ddi_vswing_preemph. Treat
setting .buf_trans to NULL as if the request was invalid.
Initialize port's buffer pointer to NULL when no VBT was provided.
Allocate intel_ddi_buf_trans buffer per port if the request is valid.
Defer index computing to occur later during override_buf_trans(). Set
the index to being not yet computed.
Deallocate buffer on driver removal when port asked for an allocation.
Signed-off-by: Michał Grzelak <michal.grzelak@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 29 +++++++++++++++++++++++
drivers/gpu/drm/i915/display/intel_bios.h | 1 +
2 files changed, 30 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index f2f1a57dbdbc..016696de2870 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -77,6 +77,7 @@
struct intel_bios_encoder_data {
struct intel_display *display;
+ struct ddi_vswing_preemph vswing_preemph;
struct child_device_config child;
struct dsc_compression_parameters_entry *dsc;
struct list_head node;
@@ -2758,6 +2759,20 @@ static void sanitize_hdmi_level_shift(struct intel_bios_encoder_data *devdata,
}
}
+static void override_vswing_preemph(struct intel_bios_encoder_data *devdata)
+{
+ struct intel_ddi_buf_trans *buf_trans;
+
+ devdata->vswing_preemph.buf_trans = NULL;
+ devdata->vswing_preemph.index = (union ddi_vswing_preemph_index) -1;
+
+ if (!intel_bios_encoder_overrides_vswing(devdata))
+ return;
+
+ buf_trans = kzalloc(sizeof(*buf_trans), GFP_KERNEL);
+ devdata->vswing_preemph.buf_trans = buf_trans;
+}
+
static bool
intel_bios_encoder_supports_crt(const struct intel_bios_encoder_data *devdata)
{
@@ -2949,6 +2964,7 @@ static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
sanitize_dedicated_external(devdata, port);
sanitize_device_type(devdata, port);
sanitize_hdmi_level_shift(devdata, port);
+ override_vswing_preemph(devdata);
}
static bool has_ddi_port_info(struct intel_display *display)
@@ -3157,6 +3173,9 @@ init_vbt_missing_defaults(struct intel_display *display)
break;
devdata->display = display;
+ devdata->vswing_preemph.buf_trans = NULL;
+ devdata->vswing_preemph.index =
+ (union ddi_vswing_preemph_index) -1;
child = &devdata->child;
if (port == PORT_F)
@@ -3490,6 +3509,10 @@ void intel_bios_driver_remove(struct intel_display *display)
node) {
list_del(&devdata->node);
kfree(devdata->dsc);
+
+ if (devdata->vswing_preemph.buf_trans)
+ kfree(devdata->vswing_preemph.buf_trans);
+
kfree(devdata);
}
@@ -3937,6 +3960,12 @@ bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devda
return devdata->display->vbt.version >= 209 && devdata->child.tbt;
}
+bool intel_bios_encoder_overrides_vswing(const struct intel_bios_encoder_data *devdata)
+{
+ return devdata->display->vbt.version >= 218 &&
+ devdata->child.use_vbt_vswing;
+}
+
bool intel_bios_encoder_is_dedicated_external(const struct intel_bios_encoder_data *devdata)
{
return devdata->display->vbt.version >= 264 &&
diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
index 75dff27b4228..50c8fc91fbe8 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.h
+++ b/drivers/gpu/drm/i915/display/intel_bios.h
@@ -73,6 +73,7 @@ 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);
+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);
bool intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata);
--
2.45.2
next prev parent reply other threads:[~2026-03-31 18:34 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-31 18:33 [PATCH v1 00/16] VS/PE Override support Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 01/16] drm/i915/lt: align xe3plpd with VS/PE Override layout Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 02/16] drm/i915/buf_trans: switch from u8 to u32 Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 03/16] drm/i915/buf_trans: describe VS/PE Override layout Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 04/16] drm/i915/bios: prepare for parsing VBT #57 Michał Grzelak
2026-08-13 23:12 ` sashiko-bot
2026-03-31 18:33 ` [PATCH v1 05/16] drm/i915/bios: parse LT's VS/PE Override Block #57 Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 06/16] drm/i915/bios: parse Snps's " Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 07/16] drm/i915/bios: parse EHL's " Michał Grzelak
2026-03-31 18:33 ` Michał Grzelak [this message]
2026-04-03 8:39 ` [PATCH v1 08/16] drm/i915/bios: support VS/PE Override per each ddi port kernel test robot
2026-03-31 18:33 ` [PATCH v1 09/16] drm/i915/bios: print VS/PE Override port info Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 10/16] drm/i915/ddi: cache VS/PE struct pointer into intel_encoder Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 11/16] drm/i915/buf_trans: override encoder->get_buf_trans when asked Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 12/16] drm/i915/buf_trans: compute LT's VS/PE Override index Michał Grzelak
2026-04-01 7:16 ` kernel test robot
2026-03-31 18:33 ` [PATCH v1 13/16] drm/i915/buf_trans: compute Snps's " Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 14/16] drm/i915/buf_trans: compute EHL's " Michał Grzelak
2026-03-31 18:33 ` [PATCH v1 15/16] drm/i915/bios: search for VBT #57 by default Michał Grzelak
2026-04-15 6:42 ` kernel test robot
2026-04-15 6:42 ` [LTP] " kernel test robot
2026-04-16 6:40 ` Petr Vorel
2026-04-16 6:40 ` Petr Vorel
2026-04-16 7:40 ` Oliver Sang
2026-04-16 7:40 ` Oliver Sang
2026-04-16 9:17 ` Michał Grzelak
2026-04-16 9:17 ` Michał Grzelak
2026-04-17 17:11 ` Petr Vorel
2026-04-17 17:11 ` Petr Vorel
2026-03-31 18:33 ` [PATCH v1 16/16] drm/i915/bios: remove VS/PE Override warning Michał Grzelak
2026-03-31 19:47 ` ✗ i915.CI.BAT: failure for VS/PE Override support Patchwork
2026-03-31 20:52 ` ✗ CI.checkpatch: warning " Patchwork
2026-03-31 20:53 ` ✓ CI.KUnit: success " Patchwork
2026-03-31 21:35 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-01 4:45 ` ✓ Xe.CI.FULL: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260331183332.1773886-9-michal.grzelak@intel.com \
--to=michal.grzelak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.