All of lore.kernel.org
 help / color / mirror / Atom feed
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 04/16] drm/i915/bios: prepare for parsing VBT #57
Date: Tue, 31 Mar 2026 20:33:20 +0200	[thread overview]
Message-ID: <20260331183332.1773886-5-michal.grzelak@intel.com> (raw)
In-Reply-To: <20260331183332.1773886-1-michal.grzelak@intel.com>

Add dead, generic VBT #57 parsing code since searching for VBT #57 at
the moment is switched off by default.

Add a struct storing all VS/PE relevant data into intel_vbt_data.

Add other possible renames into the comment.

Allocate matrix of intel_ddi_buf_trans_entry. This "buffers' table" (or
"buffers' block", or "tables' block") will be used to store all deparsed
values from VBT #57. Store matrix's pointer in intel_vbt_data.

Deallocate whole matrix on driver removal.

Signed-off-by: Michał Grzelak <michal.grzelak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_bios.c     | 44 +++++++++++++++++++
 .../gpu/drm/i915/display/intel_display_core.h |  9 ++++
 2 files changed, 53 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index b6fe87c29aa7..778584c59fc6 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -34,6 +34,7 @@
 #include <drm/drm_fixed.h>
 #include <drm/drm_print.h>
 
+#include "intel_ddi_buf_trans.h"
 #include "intel_display.h"
 #include "intel_display_core.h"
 #include "intel_display_rpm.h"
@@ -2183,6 +2184,38 @@ parse_compression_parameters(struct intel_display *display)
 	}
 }
 
+static void
+parse_vswing_preemph_override(struct intel_display *display)
+{
+	union intel_ddi_buf_trans_entry **bufs_table;
+	const struct bdb_vswing_preemph *block;
+	u8 num_rows;
+
+	if (display->vbt.version < 218)
+		return;
+
+	block = bdb_find_section(display, BDB_VSWING_PREEMPH);
+
+	/* pre-ICL GOP don't have VBT #57 */
+	if (!block)
+		return;
+
+	num_rows = DISPLAY_VER(display) >= 14 ? 16 : 10;
+
+	bufs_table = kzalloc(block->num_tables * sizeof(*bufs_table), GFP_KERNEL);
+
+	for (int idx = 0; idx < block->num_tables; idx++)
+		bufs_table[idx] = kzalloc(num_rows * sizeof(**bufs_table), GFP_KERNEL);
+
+	drm_dbg_kms(display->drm, "Vswing / Preemph Override not yet supported on the platform\n");
+	bufs_table = NULL;
+
+	display->vbt.vswing_preemph.bufs_table = bufs_table;
+	display->vbt.vswing_preemph.num_tables = block->num_tables;
+	display->vbt.vswing_preemph.num_rows = num_rows;
+	display->vbt.vswing_preemph.num_cols = block->num_columns;
+}
+
 static u8 translate_iboost(struct intel_display *display, u8 val)
 {
 	static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */
@@ -2978,6 +3011,9 @@ init_vbt_defaults(struct intel_display *display)
 							      !HAS_PCH_SPLIT(display));
 	drm_dbg_kms(display->drm, "Set default to SSC at %d kHz\n",
 		    display->vbt.lvds_ssc_freq);
+
+	/* Vswing / Preemphasis Override */
+	display->vbt.vswing_preemph.bufs_table = NULL;
 }
 
 /* Common defaults which may be overridden by VBT. */
@@ -3274,6 +3310,7 @@ void intel_bios_init(struct intel_display *display)
 
 	/* Depends on child device list */
 	parse_compression_parameters(display);
+	parse_vswing_preemph_override(display);
 
 out:
 	if (!vbt) {
@@ -3358,6 +3395,13 @@ void intel_bios_driver_remove(struct intel_display *display)
 		list_del(&entry->node);
 		kfree(entry);
 	}
+
+	if (display->vbt.vswing_preemph.bufs_table) {
+		for (int idx = 0; idx < display->vbt.vswing_preemph.num_tables; idx++)
+			kfree(display->vbt.vswing_preemph.bufs_table[idx]);
+
+		kfree(display->vbt.vswing_preemph.bufs_table);
+	}
 }
 
 void intel_bios_fini_panel(struct intel_panel *panel)
diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h
index d708d322aa85..c18465b1018b 100644
--- a/drivers/gpu/drm/i915/display/intel_display_core.h
+++ b/drivers/gpu/drm/i915/display/intel_display_core.h
@@ -233,6 +233,15 @@ struct intel_vbt_data {
 	struct list_head display_devices;
 	struct list_head bdb_blocks;
 
+	struct {
+		// union intel_ddi_buf_trans_entry **tables_block;
+		// union intel_ddi_buf_trans_entry **bufs_block;
+		union intel_ddi_buf_trans_entry **bufs_table;
+		int num_tables;
+		int num_cols;
+		int num_rows;
+	} vswing_preemph;
+
 	struct sdvo_device_mapping {
 		u8 initialized;
 		u8 dvo_port;
-- 
2.45.2


  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 ` Michał Grzelak [this message]
2026-08-13 23:12   ` [PATCH v1 04/16] drm/i915/bios: prepare for parsing VBT #57 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 ` [PATCH v1 08/16] drm/i915/bios: support VS/PE Override per each ddi port Michał Grzelak
2026-04-03  8:39   ` 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-5-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.