From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CFD22C79FB6 for ; Wed, 9 Sep 2026 18:38:26 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5E23C10E1F0; Wed, 9 Sep 2026 18:38:26 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="Uz2nA7pP"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5C81D10E1F0 for ; Wed, 9 Sep 2026 18:35:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1788978934; x=1820514934; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=uhgAzDVEguk7fNe9UHDztLdmvhNDXAYAi0GjAG1IY/k=; b=Uz2nA7pP17LwvqUroKg6LXEHdMS8eauLttW1qXa++c0FLW+xmXNy+GfT YF9ADO317ZKWsOWSYA1LbIiN7v+b8ZdF+5Bq7L5NXzOWRCVVEAczHQoND RIxUKc08meaoWEy7ZW4mRnsSM2x3EB1DOBQC0rzdFLY2xsdikae+/EdQQ VrfC/LicdCWedJz7ZkHTMdUvPuPEPYz2SYR/hf2zhfDFnGfPZ0DJaakEV vDXohbB0eg1P7+5LRnQn8k6GLjua2LfuFYy5guhJt+xq9qMN5YbaTs+2g EJ6lQ7ObI5FUUGOFap5aBjOmUGpp5nV+ofrbczu4n+P6auqbY+c41gFYM g==; X-CSE-ConnectionGUID: MwU92lD5QliVdBXJDbAw1Q== X-CSE-MsgGUID: +HgN5jvZRcO2LMpSrRxXAQ== X-IronPort-AV: E=McAfee;i="6800,10657,11900"; a="114960113" X-IronPort-AV: E=Sophos;i="6.25,270,1779174000"; d="scan'208";a="114960113" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2026 11:35:34 -0700 X-CSE-ConnectionGUID: oNzV4qkoRQqiBU8i4Tw+zQ== X-CSE-MsgGUID: 1gU8Yi2YSEiRn3g+437o2g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,270,1779174000"; d="scan'208";a="270901297" Received: from dev-417.igk.intel.com ([10.91.214.181]) by orviesa008.jf.intel.com with ESMTP; 09 Sep 2026 11:35:32 -0700 From: =?UTF-8?q?Micha=C5=82=20Grzelak?= To: igt-dev@lists.freedesktop.org Cc: Pranay Samala , Jani Nikula , Suraj Kandpal , =?UTF-8?q?Micha=C5=82=20Grzelak?= Subject: [PATCH i-g-t v6 5/6] tools/vbt_decode: parse & dump VS/PE-O tables for Combo Date: Wed, 9 Sep 2026 20:34:50 +0200 Message-ID: <20260909183451.2630263-6-michal.grzelak@intel.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260909183451.2630263-1-michal.grzelak@intel.com> References: <20260909183451.2630263-1-michal.grzelak@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Organization: Intel Technology Poland sp. z o.o. - ul. Slowackiego 173, 80-298 Gdansk - KRS 101882 - NIP 957-07-52-316 Content-Transfer-Encoding: 8bit X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" Dump VBT #57 tables for JSL/EHL. Add a table of strings to store each table's purpose. Show the affected modes on dumping. Warn the user on varying purpose of VS/PE-O tables which depend on whether VBT comes from EHL or JSL. v5->v6 - add spaces around operators v4->v5 - show all Combo's columns v1->v2 - check platform basing on devid not VBT signature (Jani) Signed-off-by: MichaƂ Grzelak --- lib/intel_chipset.h | 2 ++ tools/intel_vbt_decode.c | 53 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h index 1f02932e4a..bdeaf038b5 100644 --- a/lib/intel_chipset.h +++ b/lib/intel_chipset.h @@ -203,6 +203,8 @@ void intel_check_pch(void); #define IS_COMETLAKE(devid) (intel_get_device_info(devid)->is_cometlake) #define IS_CANNONLAKE(devid) (intel_get_device_info(devid)->is_cannonlake) #define IS_ICELAKE(devid) (intel_get_device_info(devid)->is_icelake) +#define IS_JASPERLAKE(devid) (intel_get_device_info(devid)->is_jasperlake) +#define IS_ELKHARTLAKE(devid) (intel_get_device_info(devid)->is_elkhartlake) #define IS_TIGERLAKE(devid) (intel_get_device_info(devid)->is_tigerlake) #define IS_ROCKETLAKE(devid) (intel_get_device_info(devid)->is_rocketlake) #define IS_DG1(devid) (intel_get_device_info(devid)->is_dg1) diff --git a/tools/intel_vbt_decode.c b/tools/intel_vbt_decode.c index 85f1404785..da80297e4f 100644 --- a/tools/intel_vbt_decode.c +++ b/tools/intel_vbt_decode.c @@ -3474,6 +3474,12 @@ static const char * const vspeo_cx0_tables[6] = { "C10: UNUSED; C20: DP 2.X", }; +static const char * const vspeo_combo_tables[3] = { + "High Vswing eDP/DP upto HBR3", + "Low Vswing eDP upto HBR2", + "Low Vswing eDP upto HBR3", +}; + static void dump_cx0_vspeo(const struct bdb_vswing_preemph *vspeo, int num_rows) { @@ -3502,6 +3508,51 @@ static void dump_cx0_vspeo(const struct bdb_vswing_preemph *vspeo, } } +static void dump_combo_vspeo(const struct bdb_vswing_preemph *vspeo, + int num_rows) +{ + const unsigned int *tables = vspeo->tables; + size_t offset = 0; + + fprintf(stderr, "\tWarning: purpose of tables varies between EHL & JSL\n"); + printf("\tNumber of vswing tables: %d\n", vspeo->num_tables); + printf("\tNumber of columns: %d\n", vspeo->num_columns); + printf("\tNumber of rows: %d\n", num_rows); + + printf("\tPHY type: Combo\n"); + for (int idx = 0; idx < vspeo->num_tables; idx++) { + printf("\tVswing Table #%d (%s):\n", idx + 1, vspeo_combo_tables[idx]); + for (int row = 0; row < num_rows; row++) { + int dw2_swing_sel = tables[offset]; + int dw7_n_scalar = tables[offset + 1]; + int dw4_cursor_coeff = tables[offset + 2]; + int dw4_post_cursor_2 = tables[offset + 3]; + int dw4_post_cursor_1 = tables[offset + 4]; + int rcomp_scalar = tables[offset + 5]; + int rterm_select = tables[offset + 6]; + int tap3_disable = tables[offset + 7]; + int tap2_disable = tables[offset + 8]; + int cursor_program = tables[offset + 9]; + int coeff_polarity = tables[offset + 10]; + + printf("\t\t%s: ", vspeo_dp14_levels[row]); + printf("dw2_swing_sel: 0x%08x, ", dw2_swing_sel); + printf("dw7_n_scalar: 0x%08x, ", dw7_n_scalar); + printf("dw4_cursor_coeff: 0x%08x, ", dw4_cursor_coeff); + printf("dw4_post_cursor_2: 0x%08x, ", dw4_post_cursor_2); + printf("dw4_post_cursor_1: 0x%08x, ", dw4_post_cursor_1); + printf("rcomp_scalar: 0x%08x, ", rcomp_scalar); + printf("rterm_select: 0x%08x, ", rterm_select); + printf("tap3_disable: 0x%08x, ", tap3_disable); + printf("tap2_disable: 0x%08x, ", tap2_disable); + printf("cursor_program: 0x%08x, ", cursor_program); + printf("coeff_polarity: 0x%08x\n", coeff_polarity); + + offset += vspeo->num_columns; + } + } +} + static int vswing_preemph_num_rows(int devid) { @@ -3527,6 +3578,8 @@ static void dump_vswing_preemphasis(struct context *context, IS_LUNARLAKE(devid) || IS_METEORLAKE(devid)) { dump_cx0_vspeo(vspeo, num_rows); + } else if (IS_JASPERLAKE(devid) || IS_ELKHARTLAKE(devid)) { + dump_combo_vspeo(vspeo, num_rows); } else { printf("Warning: deparsing VS/PE-O from devid %x not supported\n", devid); } -- 2.45.2