Store tables, number of tables, number of rows and number of columns in
intel_vbt_data when search for the VBT #57 has succeeded. Structurize
all VS/PE-O relevant metadata inside anonymous struct named as vspeo.

Display version determines number of rows present in each table. pre-MTL
platforms should have 10 rows while MTL+ should have 16 rows.

v3->v4
- remove unnecessary init of VS/PE-O metadata (Suraj)
- add helper for computing number of rows (Suraj)
- fix num_rows's type (Jani, Suraj)
- declare num_rows (Suraj)

Signed-off-by: Michał Grzelak <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_bios.c         | 10 +++++++++-
 drivers/gpu/drm/i915/display/intel_display_core.h |  7 +++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_bios.c 
b/drivers/gpu/drm/i915/display/intel_bios.c
index 420b09b4d01ef..d071f0e5d4380 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -2185,6 +2185,11 @@ parse_compression_parameters(struct intel_display 
*display)
        }
 }
 
+static int vswing_preemph_num_rows(struct intel_display *display)
+{
+       return DISPLAY_VER(display) >= 14 ? 16 : 10;
+}
+
 static void
 parse_vswing_preemph_override(struct intel_display *display)
 {
@@ -2199,7 +2204,10 @@ parse_vswing_preemph_override(struct intel_display 
*display)
        if (!block)
                return;
 
-       drm_dbg_kms(display->drm, "valid VS/PE-O request but not yet 
supported\n");
+       display->vbt.vspeo.tables = block->tables;
+       display->vbt.vspeo.num_tables = block->num_tables;
+       display->vbt.vspeo.num_columns = block->num_columns;
+       display->vbt.vspeo.num_rows = vswing_preemph_num_rows(display);
 }
 
 static u8 translate_iboost(struct intel_display *display, u8 val)
diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h 
b/drivers/gpu/drm/i915/display/intel_display_core.h
index 09ce25a6d4b11..061bf479458f0 100644
--- a/drivers/gpu/drm/i915/display/intel_display_core.h
+++ b/drivers/gpu/drm/i915/display/intel_display_core.h
@@ -242,6 +242,13 @@ struct intel_vbt_data {
        struct list_head display_devices;
        struct list_head bdb_blocks;
 
+       struct {
+               const u32 *tables;
+               int num_tables;
+               int num_columns;
+               int num_rows;
+       } vspeo;
+
        struct sdvo_device_mapping {
                u8 initialized;
                u8 dvo_port;
-- 
2.45.2

Reply via email to