From nobody Fri Jul 24 20:51:09 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1095E4457D1 for ; Fri, 24 Jul 2026 16:18:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784909887; cv=fail; b=jBGGFY4akUX7JoTTqrjYNsDmL++1T+ygzEg5i1MqpERAdqQDHNQUdRkdy4yCDkM93P4H1XMLtQmBdP9M8qJlviutZopAr57nlgV1bs7XH8lYMPssVi6Pns4wK4Ta6L/ZiYUB83gkuUumKlgHezDi1mddA/AbBQ3vlsqbCkHsDcU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784909887; c=relaxed/simple; bh=trwgm0O7tQ4qoGOELUkrpO8xVNUNgiS589LZotRE9kM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Pv/4vbef3qqlkfZz/wJ9m13hO9xNe9zxDsV1Tnv0biWE2I4bahB0enoZEJpTeYvsMWaeBvMt5iSQF4iZIVilo5z4QvmU9pBinxNlj7atLSuafvrkB55jeLZF1mejg/5v7weCKghBCCpGdfyZSytGEWZE+3uCTPjdRqkpY8puN8k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=cAPuhvZ9; arc=fail smtp.client-ip=40.93.194.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="cAPuhvZ9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HdVS0VjRhlSCzO6IzwdBle5rHkgknw73E3KcjNRO/HkmoYUoYr4oVvKceqtxpSmnc48V5oZC7Nj2UlW+cr72VsJ+Vg3YvQDaGOqgJJv1DiUDHTk2MHgOROeotVdWQih3awhA4jZqsiTOnmFVh60WvBjc9uObfWNZXUb0XrmwjgYO4bKCjdM5jOEX0irTi/2HXcdoA/n5KGczWQ8f0xnX03gT/re5+gpkLbb/c+HoNadiD1CJjpsE6fFeA1UC/s0+UnNtRmwSWF3D0ELD5/6z6zK2xi3bFdRRx9HWN9/nb98gTvCmHEuJSX83YKLNRJ2sz/0prWdll+qfYy7rbGVl0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jHu/J/2qm9eCemmAzvy/GI8yQp0cMupQkmhYrjmLGIM=; b=bAKtmLwnZMuCX7Mpwztyxwen7FpyQ7uVJEablml0sUO+dS30PcUitE3ddKXkZR63Ts2zSm1E5uqPxznmMeWU7jegFSlGnJs3qfWpIL+MwmIfTdsg+fVuhv/mMOgWFWORCB97lLsJpPazw6A+mgrFNmbEXJasr8cImK5+JeNQ55u3XhDeXNo5m8remUFy5DAqQYqjbDkL7OaB22DhkaUZI6uT+A2FtPell0TzR/+JZBkRZrAVXCtwr/p3hmvdnOqUVQ67hMocHeMz9grhi6RzQCVFPUnvKtVjix8tuALN/D6IkxTcxgxuXSOyhPRv+HjtjLonjviBnjBlpSc2FtpyNg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux.intel.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jHu/J/2qm9eCemmAzvy/GI8yQp0cMupQkmhYrjmLGIM=; b=cAPuhvZ9XiIvFRiBW1/kEwoSL/AygEPlgrPJW/JdK94lAVvfUunGWprBaQWWfj2TXYdyXdjfWwRX3B/kYLApb8XAYu0DaE1lLmFE+QGXjwvhV/Rvf/Mk7zG1gQ/6lRpQutKy8yZYWryk3y7YapPDpP8jYFtdli2UGLfZ7+rDmto= Received: from PH2PEPF0000385A.namprd17.prod.outlook.com (2603:10b6:518:1::7c) by PH7PR12MB7965.namprd12.prod.outlook.com (2603:10b6:510:270::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Fri, 24 Jul 2026 16:17:54 +0000 Received: from SN1PEPF000397AF.namprd05.prod.outlook.com (2a01:111:f403:f90d::1) by PH2PEPF0000385A.outlook.office365.com (2603:1036:903:48::3) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.12 via Frontend Transport; Fri, 24 Jul 2026 16:17:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SN1PEPF000397AF.mail.protection.outlook.com (10.167.248.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 16:17:53 +0000 Received: from MKMALEXHUAN01.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Fri, 24 Jul 2026 11:17:52 -0500 From: Alex Huang To: , , , , , , , , , , , CC: , , , Alex Huang Subject: [PATCH v2 1/4] drm/edid: Parse AMD VSDB for FreeSync refresh range Date: Fri, 24 Jul 2026 12:17:10 -0400 Message-ID: <20260724161713.119382-2-Alex.Huang2@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724161713.119382-1-Alex.Huang2@amd.com> References: <20260724161713.119382-1-Alex.Huang2@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397AF:EE_|PH7PR12MB7965:EE_ X-MS-Office365-Filtering-Correlation-Id: 9360d785-aa16-40fb-a49c-08dee99f1d61 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700016|82310400026|376014|23010399003|7416014|22082099003|18002099003|10067099003|11063799006|56012099006|921020; X-Microsoft-Antispam-Message-Info: luCMbg0hPKmdskQFj2/yFoVKizSlacYU7nz60wwEQVhqSJ5MMVQx7z3weUtHcNsZuh3VNuFKtF3sE7xJ+zSK1Z9h8J0TK/zV+S00J1YZDfOisjYkHWjQ0QHnja7JdFWk3lnnqsJhSBDntDdcnvLBNdSUL2OCzFrotkc/iZ54toyW+BT6pOE+OqD0ISptQh+rDdi25QUR0QKi9oMrpY/8yuWKx1fnT83y51v7TVjVjraDwEYoqsXH65LLiDH9Fp05VVFuB09iITxIrvGepaQwtcdKINPF9PqTy8BEtjolknfMtawpyeadNbHOHcl88dsbis4w4TepITY8vtY/4Poj/FBqrGuWlvmzc/SH/LDiikFv6Y9+HWVqu6C9KD8vDDQHXeOMq2s2gFK6LHLBEhCnAq5v80wDJp9nt0luZ3DDtR64Bo0CHxkIAGavkclRmIo2+fA5xaPaoPh2EtacpaZ3rQD0ko7QLvSD3AY6anVmk+t89uWPfpVhYUkLvaWS6hKFBMP5BYFS+LYTF9SBRF3WR07Gtt7u+BEKa3TQr0z//ZpOFQPpAjyMCTu1z1dy/eWcCx/oaKr4v+XqXzs0XbKpkcZ5PRK44ZJbVun1LK5qVrADsihVYaFF5jAq1D/h5QFUGbdH7cSyHhuFjRlb7gm25ly8+nJrD3KtZc147tcd5Ua/6LlT3BajXQkL61/P4Rd0NbWYv/synzQ6OaLxMlT35KNOlj6F/PJyjPRnah1BnIoEi6Uj12iXlb8d0vuxxnYt X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(36860700016)(82310400026)(376014)(23010399003)(7416014)(22082099003)(18002099003)(10067099003)(11063799006)(56012099006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: AV6BhI79prS0m1ja80przKie1lZRVpO6wAcNRd89MkdOvazjFGU3D3w4p7MeB4JbQVsNYWM9RFvO5/RLG5M2iG7sOvQejDSO9teQ04IHdptY2semNoaNhAjiDHMhrBbViK53m5J0kCBkl8e9/1WPosZFON+Rc1aa9B4rbEhJWop8V5L8bFbt0KH8rkPKGAvWak6bEslGvwnKDs3MhhFPYFfLmjnm/Q6rJZdLUIiR1bGHsBTMGnvPIBufo91YcD7jQ2+iY6hmDGcGEeqMKO85s1+QEGu7AXhKk3W5s7uXnvTr27j+nS2kvI5UI7iaMZo6Ib6NputRAnYE+UrVf2qO1zyok0LFo01qHhzlHHplmMmjQVQPL5YVnSoerdigcXAaTuBjtPL0HjK5suOy5Tc6qXIjJnzPATTJEFwjMQCm1h1nTjNHIOOk+8dbFGkrYPkA X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 16:17:53.4548 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9360d785-aa16-40fb-a49c-08dee99f1d61 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF000397AF.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7965 Content-Type: text/plain; charset="utf-8" Commit 118362a96286 ("drm/edid: Parse AMD Vendor-Specific Data Block") added parsing of the AMD VSDB, but only for version 3 and only for the replay/panel-type/luminance fields. Monitors that only advertise FreeSync through a v1 or v2 AMD VSDB therefore get no variable refresh rate range from the common EDID parser. Restructure drm_parse_amd_vsdb() and implement parsing for the FreeSync refresh range fields provided in the AMD VSDB. Signed-off-by: Alex Huang Reviewed-by: Mario Limonciello (AMD) --- drivers/gpu/drm/drm_edid.c | 141 ++++++++++++++++++++++++++++-------- include/drm/drm_connector.h | 22 +++++- 2 files changed, 133 insertions(+), 30 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index df3c25bac761..2abe85b76d33 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -101,20 +101,42 @@ enum drm_edid_internal_quirk { #define MICROSOFT_IEEE_OUI 0xca125c #define AMD_IEEE_OUI 0x00001A =20 +#define AMD_VSDB_V1_PAYLOAD_LEN 8 +#define AMD_VSDB_V2_PAYLOAD_LEN 13 #define AMD_VSDB_V3_PAYLOAD_MIN_LEN 15 -#define AMD_VSDB_V3_PAYLOAD_MAX_LEN 20 +#define AMD_VSDB_V3_PAYLOAD_MAX_LEN 21 =20 -struct amd_vsdb_v3_payload { +#define AMD_VSDB_V3_MAX_VFREQ_EXT2_LEN 21 + +struct amd_vsdb_common_payload { u8 oui[3]; u8 version; +} __packed; + +struct amd_vsdb_v1_payload { + struct amd_vsdb_common_payload common; u8 feature_caps; - u8 rsvd0[3]; + u8 min_vfreq; + u8 max_vfreq; + u8 freesync_vcp_code; +} __packed; + +struct amd_vsdb_v2_payload { + struct amd_vsdb_v1_payload v1; u8 cs_eotf_support; u8 lum1_max; u8 lum1_min; u8 lum2_max; u8 lum2_min; - u8 rsvd1[2]; +} __packed; + +struct amd_vsdb_v3_payload { + struct amd_vsdb_v2_payload v2; + u8 max_vfreq_ext_low; + /* + * byte 14: bits 0-1 extend MSB of max refresh rate + */ + u8 max_vfreq_ext_high; /* * Bytes beyond AMD_VSDB_V3_PAYLOAD_MIN_LEN are optional; a * monitor may provide a payload as short as 15 bytes. Always @@ -123,6 +145,12 @@ struct amd_vsdb_v3_payload { u8 extra[AMD_VSDB_V3_PAYLOAD_MAX_LEN - AMD_VSDB_V3_PAYLOAD_MIN_LEN]; } __packed; =20 +static const u8 amd_vsdb_min_len[] =3D { + [1] =3D AMD_VSDB_V1_PAYLOAD_LEN, + [2] =3D AMD_VSDB_V2_PAYLOAD_LEN, + [3] =3D AMD_VSDB_V3_PAYLOAD_MIN_LEN, +}; + struct detailed_mode_closure { struct drm_connector *connector; const struct drm_edid *drm_edid; @@ -5231,7 +5259,7 @@ static bool cea_db_is_microsoft_vsdb(const struct cea= _db *db) static bool cea_db_is_amd_vsdb(const struct cea_db *db) { return cea_db_is_vendor(db, AMD_IEEE_OUI) && - cea_db_payload_len(db) >=3D AMD_VSDB_V3_PAYLOAD_MIN_LEN && + cea_db_payload_len(db) >=3D AMD_VSDB_V1_PAYLOAD_LEN && cea_db_payload_len(db) <=3D AMD_VSDB_V3_PAYLOAD_MAX_LEN; } =20 @@ -6431,43 +6459,98 @@ static void drm_parse_microsoft_vsdb(struct drm_con= nector *connector, connector->base.id, connector->name, version, db[5]); } =20 +static void drm_parse_amd_vsdb_common(struct drm_display_info *info, + const struct amd_vsdb_common_payload *data) +{ + info->amd_vsdb.version =3D data->version; +} + +static void drm_parse_amd_vsdb_v1(struct drm_display_info *info, + const struct amd_vsdb_v1_payload *data) +{ + info->amd_vsdb.freesync_supported =3D data->feature_caps & 0x1; + info->amd_vsdb.min_frame_rate =3D data->min_vfreq; + info->amd_vsdb.max_frame_rate =3D data->max_vfreq; + info->amd_vsdb.freesync_vcp_code =3D data->freesync_vcp_code; + + drm_parse_amd_vsdb_common(info, &data->common); +} + +static void drm_parse_amd_vsdb_v2(struct drm_display_info *info, + const struct amd_vsdb_v2_payload *data) +{ + info->amd_vsdb.luminance_range1.max_luminance =3D data->lum1_max; + info->amd_vsdb.luminance_range1.min_luminance =3D data->lum1_min; + info->amd_vsdb.luminance_range2.max_luminance =3D data->lum2_max; + info->amd_vsdb.luminance_range2.min_luminance =3D data->lum2_min; + + drm_parse_amd_vsdb_v1(info, &data->v1); +} + +static void drm_parse_amd_vsdb_v3(struct drm_display_info *info, + const struct amd_vsdb_v3_payload *data, + int payload_len) +{ + u16 max_frame_rate; + + info->amd_vsdb.replay_mode =3D data->v2.v1.feature_caps & 0x40; + info->amd_vsdb.panel_type =3D (data->v2.cs_eotf_support & 0xC0) >> 6; + + drm_parse_amd_vsdb_v2(info, &data->v2); + + /* vfreq is provided in a different set of fields for v3. */ + max_frame_rate =3D data->max_vfreq_ext_low | + (data->max_vfreq_ext_high & 0x3) << 8; + + /* + * The AMD VSDB v3 payload length is variable (15..21 bytes). + * All fields through max_vfreq_ext_high (byte 14) are always + * present, but data->extra[] (bytes 15+) may not be, so any access + * to extra[] must be guarded with a runtime length check to + * avoid out-of-bounds reads on shorter (but spec-valid) payloads. + */ + if (payload_len >=3D AMD_VSDB_V3_MAX_VFREQ_EXT2_LEN) + max_frame_rate |=3D (data->extra[5] & 0x3) << 10; + + info->amd_vsdb.max_frame_rate =3D max_frame_rate; +} + static void drm_parse_amd_vsdb(struct drm_connector *connector, const struct cea_db *db) { struct drm_display_info *info =3D &connector->display_info; const u8 *data =3D cea_db_data(db); - const struct amd_vsdb_v3_payload *p; + int payload_len =3D cea_db_payload_len(db); + u8 version; =20 - p =3D (const struct amd_vsdb_v3_payload *)data; + version =3D ((const struct amd_vsdb_common_payload *)data)->version; =20 - if (p->version !=3D 0x03) { + if (version < 1 || version > 3) { drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Unsupported AMD VSDB version %u\n", - connector->base.id, connector->name, p->version); + connector->base.id, connector->name, version); return; } =20 - info->amd_vsdb.version =3D p->version; - info->amd_vsdb.replay_mode =3D p->feature_caps & 0x40; - info->amd_vsdb.panel_type =3D (p->cs_eotf_support & 0xC0) >> 6; - info->amd_vsdb.luminance_range1.max_luminance =3D p->lum1_max; - info->amd_vsdb.luminance_range1.min_luminance =3D p->lum1_min; - info->amd_vsdb.luminance_range2.max_luminance =3D p->lum2_max; - info->amd_vsdb.luminance_range2.min_luminance =3D p->lum2_min; + if (payload_len < amd_vsdb_min_len[version]) { + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] AMD VSDB v%u payload too short (%d bytes)\n", + connector->base.id, connector->name, version, payload_len); + return; + } =20 - /* - * The AMD VSDB v3 payload length is variable (15..20 bytes). - * All fields through p->rsvd1 (byte 14) are always present, - * but p->extra[] (bytes 15+) may not be. Any future access to - * extra[] must be guarded with a runtime length check to avoid - * out-of-bounds reads on shorter (but spec-valid) payloads. - * For example: - * - * int len =3D cea_db_payload_len(db); - * - * if (len > AMD_VSDB_V3_PAYLOAD_MIN_LEN) - * info->amd_vsdb.foo =3D p->extra[0]; - */ + switch (version) { + case 3: + drm_parse_amd_vsdb_v3(info, (const struct amd_vsdb_v3_payload *)data, + payload_len); + break; + case 2: + drm_parse_amd_vsdb_v2(info, (const struct amd_vsdb_v2_payload *)data); + break; + case 1: + drm_parse_amd_vsdb_v1(info, (const struct amd_vsdb_v1_payload *)data); + break; + } } =20 static void drm_parse_cea_ext(struct drm_connector *connector, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 5f5ca023cd65..0914a2bd8ef1 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -697,7 +697,7 @@ enum drm_bus_flags { * struct drm_amd_vsdb_info - AMD-specific VSDB information * * This structure holds information parsed from the AMD Vendor-Specific Da= ta - * Block (VSDB) version 3. + * Block (VSDB) versions 1 to 3. */ struct drm_amd_vsdb_info { /** @@ -705,6 +705,26 @@ struct drm_amd_vsdb_info { */ u8 version; =20 + /** + * @freesync_supported: FreeSync (variable refresh rate) supported by pan= el + */ + bool freesync_supported; + + /** + * @min_frame_rate: FreeSync minimum refresh rate in Hz + */ + u16 min_frame_rate; + + /** + * @max_frame_rate: FreeSync maximum refresh rate in Hz + */ + u16 max_frame_rate; + + /** + * @freesync_vcp_code: MCCS VCP code for FreeSync + */ + u8 freesync_vcp_code; + /** * @replay_mode: Panel Replay supported */ --=20 2.34.1 From nobody Fri Jul 24 20:51:09 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012049.outbound.protection.outlook.com [52.101.43.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F147342D75B for ; Fri, 24 Jul 2026 16:18:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784909895; cv=fail; b=VPAZaQxQNx4K6yBIJ/tH/w/yrQDDLlvMOtl2AgXPumTqZ17zauVAqhwRJg9t2aEh/9vraiLEkA7JJ1SE+H08p1/dbG3WihqbZbMgF19FGvux6WG8eS8yKQvHM5mwIGsOFqJG937mwfqgpgELQdkFLwjtGp4fEdhrn+3X3DdQS2E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784909895; c=relaxed/simple; bh=H9BWDvIJxcUET0jyxoJRFKHq+y3qZi2YaOdRcHfKzNg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pU2tZBIurYDmHQDEJoaRWBBG65V9boFWyq/qVIm4fdHLJOrMrssH0wtNbsvGQh2ZE/cwyy0ABQpK2XnJ+M5hLX7VS6Q7LGxgOiJPK3RUbIUY6wkouY+nD4NOSZgGljqORiRiqNJP/HsBQMkC2S5pJM7LLcm8vCFBY/6IbWgGuzQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=klE9K1BR; arc=fail smtp.client-ip=52.101.43.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="klE9K1BR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tJOWg99AujY4uafLFio3iiysMw7pdd7JiJaj2ic1o+/0sAODnny/vU056WL0quBESIRx9+ZhM+S+fjE6CIJNcxaB4qjeR7bqIp2SUbdbNNjIqpwnFrPNiYdW8DR+1JwOVV2lXg9YmwiZtmqsSUqz98gaBIPjPfSMvHiQJd1UQ5G6+nsSfuhFaixZvfPRNB8IQrV8umTUxB6oU2e+cB6s22LB9zTFGylSfGjrSokhdFZ8rv8UFyV7Bq3BuEewlgG/5GBcQMYUNq5gwiw/GWViUJBTk404hlcmL7l4bJFhzX/EgT6LNu63cZ8WgPCwy9J+cSAutpSrNWeV8dHS1F7e9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fOkrdwfAxpUds4dhmlOglxRoPmYwAavJG+Kb5a6ABmg=; b=Rz17V1+aGFZTF4qyVivORNEZz4RNG/mIo5sgXA7GVBuZ2nnAp/iuW4W9UIzSuYwD7K7b9RACZRuujS62G872l/aGwDTewDFpbxIph3CElEgmMDsKmDRRonBAZEyFWgKtXcg3MrA4oCTmlhLEucPhp3WKkCiC+KBR7JAowElRAXYY3eITarbIeK0FC2cWFw1PdMpF6DYcU+5LUQBZh5zEsv0FUT23GEydKox6u85A8Zk9UBPSGNS65GwJRUL3kfGp0z1i1fvoZT2UE8RlEPvv6ns6zzsyXSTOE4CUq4e2CzhtAx5s8W6FDZb3brqdp8x2qysVgRsS+hgg5Da8mdlsSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux.intel.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fOkrdwfAxpUds4dhmlOglxRoPmYwAavJG+Kb5a6ABmg=; b=klE9K1BRkWLnMmqq9A5ARVdD3v6/fsikOZFOFBLKx+xkzmBn8nNreLU3K114+uN5RsO8u8Eq6Y3Ak5j2/Ekgv8nSI29kaMyG8oeyWQGoRiDFuU6LSF4nOYdJxoEwZz7mECz+dzEZMbe3kReRP1jTdx9CwZ0CdGbKtbebokXx6Jc= Received: from SN7PR04CA0031.namprd04.prod.outlook.com (2603:10b6:806:120::6) by IA1PR12MB6018.namprd12.prod.outlook.com (2603:10b6:208:3d6::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.12; Fri, 24 Jul 2026 16:17:58 +0000 Received: from SN1PEPF000397B5.namprd05.prod.outlook.com (2603:10b6:806:120:cafe::29) by SN7PR04CA0031.outlook.office365.com (2603:10b6:806:120::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.12 via Frontend Transport; Fri, 24 Jul 2026 16:17:57 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SN1PEPF000397B5.mail.protection.outlook.com (10.167.248.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 16:17:56 +0000 Received: from MKMALEXHUAN01.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Fri, 24 Jul 2026 11:17:54 -0500 From: Alex Huang To: , , , , , , , , , , , CC: , , , Alex Huang Subject: [PATCH v2 2/4] drm/amd/display: Use HDMI FreeSync range from common EDID parser Date: Fri, 24 Jul 2026 12:17:11 -0400 Message-ID: <20260724161713.119382-3-Alex.Huang2@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724161713.119382-1-Alex.Huang2@amd.com> References: <20260724161713.119382-1-Alex.Huang2@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B5:EE_|IA1PR12MB6018:EE_ X-MS-Office365-Filtering-Correlation-Id: 5894a264-b468-40f6-2d5d-08dee99f1f63 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|1800799024|23010399003|36860700016|7416014|921020|6133799003|18002099003|22082099003|3023799007|11063799006|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: zCIVAf74m9YhX0iEEv4LZ9yQgWeDbDxUENe4vJ0XMyFIounOya7yZex68CqNqxjQRv0sI7b9sChcL9i6OBWx547i299DUpY0OjtPyxv0R4ndh06kOOLIKkyx2qjb+MqPjrytB1DoNSV4/VqQ+DBnQ25sbmFll1/TzzOj3fLkqXeiX5SlNEuT6YU58fC9Qyra0GGT/pCR/Hh2Q88nPl9XLKzBKPzy6z6FaEbb6qtgytwcr6rhbwcGVlM17bMAG+AquYN2nGRpsUgYyq2/yx4jL5F3pUgOTT/ASqNba3ncGh1tiAqsjDW+sLMk/e5fcFCC/ESQzsUqETez9cfpgJOypRnH8ax9WPXsvoMB5lQD7Eg45XiRYgmJFET0dTgAJPtV/Qvzj/5T4cpOoaw7yE+eXoQJprRuTa4GZQvjVi/9XihUj1d03qW2GObDK+jwAzuXgStVrGTkdnZE10UgazK7mqNZepHIWDt66Cqupao5sVledoNCs3Z7uwXkv7FZC52ffuYl+MPqBR1dvdCm7SDJsax7D2BThJmP7XTIooqTTQ/TiQNZ4AiyNsEmmEIcraM2nFct28GK5WEbk0rODXjvdBvjRBd/W31rDnDndJkjcgK3ck/UtW+WJy5MnfeLTaRfku9qiQeVvFcvQpFhhG08cbZ1ZmEXqvvXQUm2oPA1TPmtE/kdBL6RS96GdjMMPKxQggd29ijkSCBOTxxgqndDNxqW9kHzDuBvP32sJLhCX4ILThUpBO2NMIauRY4/yQGB X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(82310400026)(1800799024)(23010399003)(36860700016)(7416014)(921020)(6133799003)(18002099003)(22082099003)(3023799007)(11063799006)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: MEuruwC7EN/MYbqYo+32SQQdFG93HVedd14xTIPfX82WHC/RyxDN0gIANmHFg4FaBW4gHaDzkgqvMYVxWihlsb9khEufQI++YfF9ZdP9gvD5RP+yMi2WZZoHviUVfXUIMu4S+ZeV7cisTHQUpcCKPv8EIMNCLRqCByJZF6LG+xq0NUoRm6t6jgOWQJ9mJ4C9zrL9GcQNUJMMqCPe1t8e3ewwDxI6sw4zYHOikX+Z56+1ZMrf7i0li76m7dMs5gVJMejjE+KYkXO0m7KYBLn+wq/H6xMbkKwC/s7gVnik+pSWOBKWJsCbTrCJmqerEWAVZcwHkiY46RnKebxY1cuLZEjeVtoFhl9xNs6t0FlNBRMSJDdZjbz3KkLGbw1BO+WOJBp9MM/jT2aJ3dfO/yaYjbTmN3vbxeZvVeE+1/n+ebPWE9eZrKvUNy1Sa8+8MpJb X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 16:17:56.8226 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5894a264-b468-40f6-2d5d-08dee99f1f63 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF000397B5.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6018 Content-Type: text/plain; charset="utf-8" HDMI FreeSync on amdgpu is detected using the AMD VSDB parser in the DMUB firmware, now that the common DRM EDID parser can do the same, use the common parser. Extend get_amd_vsdb() to copy the relevant flags and data now being extracted from the AMD VSDB. Additionally, parse_hdmi_amd_vsdb() and the parse_edid_cea() firmware helpers now have no callers; remove them. Signed-off-by: Alex Huang Reviewed-by: Mario Limonciello (AMD) --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 178 +----------------- 1 file changed, 8 insertions(+), 170 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 9c564cd5edee..fd9bb205c8f0 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -36,7 +36,6 @@ #include "dc/inc/hw/dmcu.h" #include "dc/inc/hw/abm.h" #include "dc/dc_dmub_srv.h" -#include "dc/dc_edid_parser.h" #include "dc/dc_stat.h" #include "dc/dc_state.h" #include "amdgpu_dm_trace.h" @@ -13632,139 +13631,6 @@ static int amdgpu_dm_atomic_check(struct drm_devi= ce *dev, return ret; } =20 -static bool dm_edid_parser_send_cea(struct amdgpu_display_manager *dm, - unsigned int offset, - unsigned int total_length, - u8 *data, - unsigned int length, - struct amdgpu_hdmi_vsdb_info *vsdb) -{ - bool res; - union dmub_rb_cmd cmd; - struct dmub_cmd_send_edid_cea *input; - struct dmub_cmd_edid_cea_output *output; - - if (length > DMUB_EDID_CEA_DATA_CHUNK_BYTES) - return false; - - memset(&cmd, 0, sizeof(cmd)); - - input =3D &cmd.edid_cea.data.input; - - cmd.edid_cea.header.type =3D DMUB_CMD__EDID_CEA; - cmd.edid_cea.header.sub_type =3D 0; - cmd.edid_cea.header.payload_bytes =3D - sizeof(cmd.edid_cea) - sizeof(cmd.edid_cea.header); - input->offset =3D offset; - input->length =3D length; - input->cea_total_length =3D total_length; - memcpy(input->payload, data, length); - - res =3D dc_wake_and_execute_dmub_cmd(dm->dc->ctx, &cmd, DM_DMUB_WAIT_TYPE= _WAIT_WITH_REPLY); - if (!res) { - drm_err(adev_to_drm(dm->adev), "EDID CEA parser failed\n"); - return false; - } - - output =3D &cmd.edid_cea.data.output; - - if (output->type =3D=3D DMUB_CMD__EDID_CEA_ACK) { - if (!output->ack.success) { - drm_err(adev_to_drm(dm->adev), "EDID CEA ack failed at offset %d\n", - output->ack.offset); - } - } else if (output->type =3D=3D DMUB_CMD__EDID_CEA_AMD_VSDB) { - if (!output->amd_vsdb.vsdb_found) - return false; - - vsdb->freesync_supported =3D output->amd_vsdb.freesync_supported; - vsdb->amd_vsdb_version =3D output->amd_vsdb.amd_vsdb_version; - vsdb->min_refresh_rate_hz =3D output->amd_vsdb.min_frame_rate; - vsdb->max_refresh_rate_hz =3D output->amd_vsdb.max_frame_rate; - vsdb->freesync_mccs_vcp_code =3D output->amd_vsdb.freesync_mccs_vcp_code; - } else { - drm_warn(adev_to_drm(dm->adev), "Unknown EDID CEA parser results\n"); - return false; - } - - return true; -} - -static bool parse_edid_cea_dmcu(struct amdgpu_display_manager *dm, - u8 *edid_ext, int len, - struct amdgpu_hdmi_vsdb_info *vsdb_info) -{ - int i; - - /* send extension block to DMCU for parsing */ - for (i =3D 0; i < len; i +=3D 8) { - bool res; - int offset; - - /* send 8 bytes a time */ - if (!dc_edid_parser_send_cea(dm->dc, i, len, &edid_ext[i], 8)) - return false; - - if (i+8 =3D=3D len) { - /* EDID block sent completed, expect result */ - int version, min_rate, max_rate; - - res =3D dc_edid_parser_recv_amd_vsdb(dm->dc, &version, &min_rate, &max_= rate); - if (res) { - /* amd vsdb found */ - vsdb_info->freesync_supported =3D 1; - vsdb_info->amd_vsdb_version =3D version; - vsdb_info->min_refresh_rate_hz =3D min_rate; - vsdb_info->max_refresh_rate_hz =3D max_rate; - /* Not enabled on DMCU*/ - vsdb_info->freesync_mccs_vcp_code =3D 0; - return true; - } - /* not amd vsdb */ - return false; - } - - /* check for ack*/ - res =3D dc_edid_parser_recv_cea_ack(dm->dc, &offset); - if (!res) - return false; - } - - return false; -} - -static bool parse_edid_cea_dmub(struct amdgpu_display_manager *dm, - u8 *edid_ext, int len, - struct amdgpu_hdmi_vsdb_info *vsdb_info) -{ - int i; - - /* send extension block to DMCU for parsing */ - for (i =3D 0; i < len; i +=3D 8) { - /* send 8 bytes a time */ - if (!dm_edid_parser_send_cea(dm, i, len, &edid_ext[i], 8, vsdb_info)) - return false; - } - - return vsdb_info->freesync_supported; -} - -static bool parse_edid_cea(struct amdgpu_dm_connector *aconnector, - u8 *edid_ext, int len, - struct amdgpu_hdmi_vsdb_info *vsdb_info) -{ - struct amdgpu_device *adev =3D drm_to_adev(aconnector->base.dev); - bool ret; - - mutex_lock(&adev->dm.dc_lock); - if (adev->dm.dmub_srv) - ret =3D parse_edid_cea_dmub(&adev->dm, edid_ext, len, vsdb_info); - else - ret =3D parse_edid_cea_dmcu(&adev->dm, edid_ext, len, vsdb_info); - mutex_unlock(&adev->dm.dc_lock); - return ret; -} - static void parse_edid_displayid_vrr(struct drm_connector *connector, const struct edid *edid) { @@ -13815,42 +13681,14 @@ static int get_amd_vsdb(struct amdgpu_dm_connecto= r *aconnector, =20 vsdb_info->replay_mode =3D connector->display_info.amd_vsdb.replay_mode; vsdb_info->amd_vsdb_version =3D connector->display_info.amd_vsdb.version; + vsdb_info->freesync_supported =3D connector->display_info.amd_vsdb.freesy= nc_supported; + vsdb_info->min_refresh_rate_hz =3D connector->display_info.amd_vsdb.min_f= rame_rate; + vsdb_info->max_refresh_rate_hz =3D connector->display_info.amd_vsdb.max_f= rame_rate; + vsdb_info->freesync_mccs_vcp_code =3D connector->display_info.amd_vsdb.fr= eesync_vcp_code; =20 return connector->display_info.amd_vsdb.version !=3D 0; } =20 -static int parse_hdmi_amd_vsdb(struct amdgpu_dm_connector *aconnector, - const struct edid *edid, - struct amdgpu_hdmi_vsdb_info *vsdb_info) -{ - u8 *edid_ext =3D NULL; - int i; - bool valid_vsdb_found =3D false; - - /*----- drm_find_cea_extension() -----*/ - /* No EDID or EDID extensions */ - if (edid =3D=3D NULL || edid->extensions =3D=3D 0) - return -ENODEV; - - /* Find CEA extension */ - for (i =3D 0; i < edid->extensions; i++) { - edid_ext =3D (uint8_t *)edid + EDID_LENGTH * (i + 1); - if (edid_ext[0] =3D=3D CEA_EXT) - break; - } - - if (i =3D=3D edid->extensions) - return -ENODEV; - - /*----- cea_db_offsets() -----*/ - if (edid_ext[0] !=3D CEA_EXT) - return -ENODEV; - - valid_vsdb_found =3D parse_edid_cea(aconnector, edid_ext, EDID_LENGTH, vs= db_info); - - return valid_vsdb_found ? i : -ENODEV; -} - /** * amdgpu_dm_update_freesync_caps - Update Freesync capabilities * @@ -13932,8 +13770,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, } =20 } else if (drm_edid && sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) { - i =3D parse_hdmi_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); - if (i >=3D 0) { + i =3D get_amd_vsdb(amdgpu_dm_connector, &vsdb_info); + if (i) { amdgpu_dm_connector->vsdb_info =3D vsdb_info; sink->edid_caps.freesync_vcp_code =3D vsdb_info.freesync_mccs_vcp_code; =20 @@ -13953,8 +13791,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); =20 if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST) { - i =3D parse_hdmi_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); - if (i >=3D 0) { + i =3D get_amd_vsdb(amdgpu_dm_connector, &vsdb_info); + if (i) { amdgpu_dm_connector->vsdb_info =3D vsdb_info; sink->edid_caps.freesync_vcp_code =3D vsdb_info.freesync_mccs_vcp_code; =20 --=20 2.34.1 From nobody Fri Jul 24 20:51:09 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011049.outbound.protection.outlook.com [40.107.208.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 945054457C6 for ; Fri, 24 Jul 2026 16:18:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784909899; cv=fail; b=MGT63HKnnp4bXeeoeIgu2Wl8zlWpJOe4ph/2YciCQRrWBFXl5XSCY5zU+d/gHQ7yzA5Ldw3M3bFu8hj5YpAbHcl5oJsuJUT188Yg3V6r5e6LkxoCnaR+2PtR3UUcybS7KWCgV/2GsIP/gOzo31HmgcOqdzvwIyEBri/vRPN7KQE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784909899; c=relaxed/simple; bh=3djk0aQEyALq5ZKF/MM48TVqnODtS+qzNTdZevg25Og=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hrQtsDhF1Gy9EUqBCrb6mYNSuNmSnyw7q7e0z5kF5l91SMbFafwUdENkE2wsrQK8y2crwdHPvnhC8Pnk5EBB58EE+jeYhHaOqGDSTtyvgidDYFEx6rx2qJ+OvsSZ8ElBmaQPH6fwfgJoSsIvYJ21GDDdAYQodApg/kkv+XL4dcE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=umqAej7V; arc=fail smtp.client-ip=40.107.208.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="umqAej7V" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k7fuzQnvT09f//auDjkztjwPDeTEm2GtQ8iZnjmsZkHLkdQxyjwVJMT24BisqiIB7uL0EM7GYL7qE2AP6cJz8bm5aOAQhCRL8e5sNk6m0ZGl5pB3FFROzYmZxxhGmQBr53uo3KUixWy4Orv7Advr/Vv7Dk6RRNfkuqxYit3Dty68kPDb9jxq1xtq/Z+UJ5uhnPhYin08oEtT38vdFEap1Md/sqtQERExW3GqYhsat3vyOv+VXCv1XD4jGJR55+ynzGZssXz2KdrHEYSBnmCLzSxOFI4ycDfWI6Z44CX9oh160r8vDdmgTelPgs5pxQmTs9YNqKx6MoRWwQ4DfLygMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xWvYjF+Ewft1MmckU6Iod6mjugUf+Q2C6IRBnpKp50E=; b=Wu948GkOaDNlQNlJwegGDII5GTm5IWsA/7kaQ2ylt6BODEuys1O5ykWnr9FN04sK4j/lg+FlRxTjy+WMzPrHQ7sqsvF4GOXuipTn+bvBW7cOqzFi8RCaWohlpmKjwRjnOsa4l+v2R/fssdjaO+yO3Yu05yfhS5BIiYwqt/5cGIKwBbaB/elxxKW+F7FrYkBozoMO/yHblDkcWdqMVxvt2rVf02jWCZ+Cl8mnX4pGGUA5XUpBJ/fGNIHaPgcOJhfUVZMOsbsvywIargFj+D8wivHBIOeadSgA3vKXS/nnsdll2gwTWrxgUxGylLDyEitY6y/d+3JaYU7/+x1ic2fJqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux.intel.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xWvYjF+Ewft1MmckU6Iod6mjugUf+Q2C6IRBnpKp50E=; b=umqAej7VQ+38HbpBgCzADvbJkzksgdUG6WUw7DUDCOTrIuWN9NtuRnBDOUeU9/RklhiB7ic4KgWCpuCRwNNbbrUmLfk0ilQWXruCsfwLj5fXS3galNbXiLRD7NZtTCV+cjIqL+ziWM1vyiqWN4IDYj+iQOUV0A0Or+vrvTxmjbA= Received: from SN7PR04CA0033.namprd04.prod.outlook.com (2603:10b6:806:120::8) by CYYPR12MB8940.namprd12.prod.outlook.com (2603:10b6:930:bd::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 16:17:58 +0000 Received: from SN1PEPF000397B5.namprd05.prod.outlook.com (2603:10b6:806:120:cafe::84) by SN7PR04CA0033.outlook.office365.com (2603:10b6:806:120::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.12 via Frontend Transport; Fri, 24 Jul 2026 16:17:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SN1PEPF000397B5.mail.protection.outlook.com (10.167.248.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 16:17:58 +0000 Received: from MKMALEXHUAN01.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Fri, 24 Jul 2026 11:17:56 -0500 From: Alex Huang To: , , , , , , , , , , , CC: , , , Alex Huang Subject: [PATCH v2 3/4] drm/amd/display: Clean up FreeSync capability detection Date: Fri, 24 Jul 2026 12:17:12 -0400 Message-ID: <20260724161713.119382-4-Alex.Huang2@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724161713.119382-1-Alex.Huang2@amd.com> References: <20260724161713.119382-1-Alex.Huang2@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B5:EE_|CYYPR12MB8940:EE_ X-MS-Office365-Filtering-Correlation-Id: f8d31363-9cc4-4ad8-4297-08dee99f2054 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|82310400026|376014|36860700016|23010399003|22082099003|18002099003|11063799006|5023799004|921020|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: bXUtnU74Jk5uswaV8FjLysaz3PuREAVSSGcsQQ3/P8m/RxYT3qvNvAb4c7iW1zDcDfVbERC9AMei/6WUunudgfI0ns0e16Oef6tmDNYGHGUStUKpFczUMl6dXowDd0gh+alE3WKllKOvHkeGAEozkIqAebzEw7tW+kigK0g2PyPeEqUQSBW5Xl47emDQGVz2kZbImLRKwzwSpMJR1Ms7o0yjSKfvFjR2nZ6IK8xOYdD7uxJgghF8XwiaY5m6KmNAJGF9yQKi+IIoPKcnfx6CB1Wvklo1prXVyfFycY29j+dVv84stuSN4dJIUMkB5CTn4SpceJ86DHP668FJq51KrN7fzAmbntuNO5VXEgfpccNcr1vbqIUKH4juVBfURin0grabyPDeaJXzVY+LK6tL3GqUCcW1v+OMAWEHuBVTHTgWIE2A8GWTiYTe9s2ukWPBd7VzIiRtz4sECqvgIk6EWGXOEGgulkV+K2sjZpAnvr2gcUY1UmfdE1D7ZZvhakIYHdGEcVkqY2Qmme18Id2t3X1gitNBBAc65NzJLg0dKS5Qa8ww5ZjDL7fOOKhZW1sOlbUGUilmrBfPJWfjX6oeVvlTpZ6MKOEhKpckWeuRC45ei5OpVC1NtR4UjywIn8oTtTikO5YtVYaDcdCsqp7twVCjruSw9OQ1U1widUot/UsGq5Lt648C4sKp5jYTYpwr3ta2z0Vgwt9tfqhbb/2yP22BSUxPezswfPt4TarT6IWXu6XnHI9FgbN+AZl0rmkF X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(82310400026)(376014)(36860700016)(23010399003)(22082099003)(18002099003)(11063799006)(5023799004)(921020)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: djcZ4RRqcFkY8k4uDPaowa9uESqVRyghmFaKZxwHiUlVn+YiH8f/E/8uvEZARkk2aLckRrgrGazHCEvx9Dw0sqsEjv7TjzGCqQgwZhMfoUQWWeL6MZ+GXqxUWIe43vf8GhOqq6JYr6QaIKUR+Z7+UW5MSmRQbJzWIv4sBF/uIvrz+NtUsZHZjYPlABIp6DZycFiEBx/iL/I6iduiUSm6t+M4hZ6nv0Nta1jX28gmfRtTuGOpUQQ5O28XcJJmiXr6PWEf+eNZustcdn7BwqtQ+auMzePdg3N0nwr5sR4yR7arMVIvm4Y6JST0gWvmh/tAGtEEQFq9p5ud/8RX+HsTeKVeUutlkM9RNg72me+cWy1cxVbS4RWBSVnjn3FF4aK9cdE0QDug622Nei37cdAQq8YVNtFriLHNAuzdMfRXK0Y53QJIR1LXWPnxRARGEx3h X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 16:17:58.4010 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f8d31363-9cc4-4ad8-4297-08dee99f2054 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF000397B5.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8940 Content-Type: text/plain; charset="utf-8" Many duplicate codes can be extracted to common code, fill amdgpu_dm_connector fields outside of the DP/eDP, HDMI branches, pull the VSDB data once using get_amd_vsdb() and then derive the refresh rate ranges. When a monitor advertises support for FreeSync, the refresh rate from the AMD VSDB is used, otherwise, falls back on the monitor_range, either EDID refresh rate range field or DisplayID VRR data. Signed-off-by: Alex Huang Reviewed-by: Mario Limonciello (AMD) --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 82 +++++++++---------- 1 file changed, 38 insertions(+), 44 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index fd9bb205c8f0..06ab1c2ef951 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13707,7 +13707,7 @@ static int get_amd_vsdb(struct amdgpu_dm_connector = *aconnector, void amdgpu_dm_update_freesync_caps(struct drm_connector *connector, const struct drm_edid *drm_edid, bool do_mccs) { - int i =3D 0; + bool has_vsdb =3D 0; struct amdgpu_dm_connector *amdgpu_dm_connector =3D to_amdgpu_dm_connector(connector); struct dm_connector_state *dm_con_state =3D NULL; @@ -13751,63 +13751,57 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, connector->display_info.monitor_range.max_vfreq =3D=3D 0)) parse_edid_displayid_vrr(connector, edid); =20 - if (edid && (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || - sink->sink_signal =3D=3D SIGNAL_TYPE_EDP)) { - if (amdgpu_dm_connector->dc_link && - amdgpu_dm_connector->dc_link->dpcd_caps.allow_invalid_MSA_timing_par= am) { - amdgpu_dm_connector->min_vfreq =3D connector->display_info.monitor_rang= e.min_vfreq; - amdgpu_dm_connector->max_vfreq =3D connector->display_info.monitor_rang= e.max_vfreq; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) - freesync_capable =3D true; + has_vsdb =3D get_amd_vsdb(amdgpu_dm_connector, &vsdb_info) !=3D 0; + + if (has_vsdb) { + amdgpu_dm_connector->vsdb_info =3D vsdb_info; + + /* copy refresh rate info as long as VSDB advertises FreeSync */ + if (vsdb_info.freesync_supported) { + amdgpu_dm_connector->min_vfreq =3D vsdb_info.min_refresh_rate_hz; + amdgpu_dm_connector->max_vfreq =3D vsdb_info.max_refresh_rate_hz; + + connector->display_info.monitor_range.min_vfreq =3D + vsdb_info.min_refresh_rate_hz; + connector->display_info.monitor_range.max_vfreq =3D + vsdb_info.max_refresh_rate_hz; } + } else { + /* fall back to the base EDID range when there is no VSDB */ + amdgpu_dm_connector->min_vfreq =3D connector->display_info.monitor_range= .min_vfreq; + amdgpu_dm_connector->max_vfreq =3D connector->display_info.monitor_range= .max_vfreq; + } =20 - get_amd_vsdb(amdgpu_dm_connector, &vsdb_info); + if (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || + sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { + if (amdgpu_dm_connector->dc_link && + amdgpu_dm_connector->dc_link->dpcd_caps.allow_invalid_MSA_timing_par= am && + amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10) + freesync_capable =3D true; =20 if (vsdb_info.replay_mode) { - amdgpu_dm_connector->vsdb_info.replay_mode =3D vsdb_info.replay_mode; - amdgpu_dm_connector->vsdb_info.amd_vsdb_version =3D vsdb_info.amd_vsdb_= version; amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_EDP; } + } else if (has_vsdb && sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) { + sink->edid_caps.freesync_vcp_code =3D vsdb_info.freesync_mccs_vcp_code; =20 - } else if (drm_edid && sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) { - i =3D get_amd_vsdb(amdgpu_dm_connector, &vsdb_info); - if (i) { - amdgpu_dm_connector->vsdb_info =3D vsdb_info; - sink->edid_caps.freesync_vcp_code =3D vsdb_info.freesync_mccs_vcp_code; - - if (vsdb_info.freesync_supported) { - amdgpu_dm_connector->min_vfreq =3D vsdb_info.min_refresh_rate_hz; - amdgpu_dm_connector->max_vfreq =3D vsdb_info.max_refresh_rate_hz; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > = 10) - freesync_capable =3D true; - - connector->display_info.monitor_range.min_vfreq =3D vsdb_info.min_refr= esh_rate_hz; - connector->display_info.monitor_range.max_vfreq =3D vsdb_info.max_refr= esh_rate_hz; - } - } + if (vsdb_info.freesync_supported && + amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10) + freesync_capable =3D true; } =20 if (amdgpu_dm_connector->dc_link) as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); =20 - if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST) { - i =3D get_amd_vsdb(amdgpu_dm_connector, &vsdb_info); - if (i) { - amdgpu_dm_connector->vsdb_info =3D vsdb_info; - sink->edid_caps.freesync_vcp_code =3D vsdb_info.freesync_mccs_vcp_code; + if (has_vsdb && as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST) { + sink->edid_caps.freesync_vcp_code =3D vsdb_info.freesync_mccs_vcp_code; =20 - if (vsdb_info.freesync_supported && vsdb_info.amd_vsdb_version > 0) { - amdgpu_dm_connector->pack_sdp_v1_3 =3D true; - amdgpu_dm_connector->as_type =3D as_type; + if (vsdb_info.freesync_supported && vsdb_info.amd_vsdb_version > 0) { + amdgpu_dm_connector->pack_sdp_v1_3 =3D true; + amdgpu_dm_connector->as_type =3D as_type; =20 - amdgpu_dm_connector->min_vfreq =3D vsdb_info.min_refresh_rate_hz; - amdgpu_dm_connector->max_vfreq =3D vsdb_info.max_refresh_rate_hz; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > = 10) - freesync_capable =3D true; - - connector->display_info.monitor_range.min_vfreq =3D vsdb_info.min_refr= esh_rate_hz; - connector->display_info.monitor_range.max_vfreq =3D vsdb_info.max_refr= esh_rate_hz; - } + if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) + freesync_capable =3D true; } } =20 --=20 2.34.1 From nobody Fri Jul 24 20:51:09 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011034.outbound.protection.outlook.com [52.101.62.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02727447813 for ; Fri, 24 Jul 2026 16:18:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784909895; cv=fail; b=QsXyolZjA30uAiJB0HvPd6NujBy7vTfJr7xO7/2E9hi1Ug9ITWABKY9i3lP6DMyKrYRJqE4hs12Kw19xBPiIdw7aG4gGtgiE8EW0DjqQ8KXZAH4gn2qCzo03miWBabYiy0vU68kv2kPCkQN7gLacEgVel5iG95MXR9wuZDzk6AQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784909895; c=relaxed/simple; bh=fpjBv260+VBdQVBdjnqhgwZCGdWTydLYCV6xgM/p/7Q=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UW0hFjDcah7Mp0iJPHbiVwFgYRc9EVirOBTmlsndrjDYnRxrtdTsAe1EV43OBauRetP2uiPLKzweQlAo8z/GHEyrGkILwyZ3rXEV+QlNotgBH3fGPi1vr8t6qGq5CAcbMDERvLp2JMi1r8MafuO28sT/C57hX59fagEskQkEcGw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=LNS9pHME; arc=fail smtp.client-ip=52.101.62.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="LNS9pHME" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QOAAK6ZlYq5yfjxlEFJxeb5U7iYmq+0RiRi202JQMKNx3j+pA2G2uPLLogrnjsTiae2jxqZghbxKm5fSqskvGXpYh9X6BNFuBYBBSWwOSR4iPNAIyLnKYio6tmPOkl4XLXWH7nIdtpgrrQkzVO4fF5ayo+dXZaVQmBIG4K0ETfvkz6JL1+kZug2uVRujSBSqbLh3ZcPhb7ZzmH4xhHlJ8UuOnv7CEGPUcZCmeCObgL2St6RoaINIaUYNJk13rhOce7ouO0D5jGhmu6DXkum4CcXI9WJr3As2/iksb7hw3cfXrOas3rug1cxUsXovJ4Dx4TKqKFYGeDaLpggeF0sCmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AtnpzdFXhTH80rScA0PHwOBiwDG9ECV9Qag+1EtKUVI=; b=khmxLGIj/TmUqVMOiJFwMQgOp/Ili0H1MKI2T7SEr5xOEyMFgx96KX2O+yRwh4heYxxp3OaMbB2vzhbN1IbJc/xShGajLVCORc5kruDPWgub3Kl374/gfQES3NSWCBPElursFy4tuZqTc7mJrLv6X9IBVJ+piRbrPRA6W6deh3FIR6o0cxOp6t2ZtqLZ2Iv5Gs7ztUE1n3Z+CdlEEzPTrczm7BGmSofBibnaXCAzZoU3cBmY0UcRCFJyxZ/1VP6v5pwTxH22oB73TNQzpGa/987oY45mMTWFz2D6HaXZZIlSgfrv0iooC/etQRs3Js2qCgfQNP7t6do24LiBWvF+PQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux.intel.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AtnpzdFXhTH80rScA0PHwOBiwDG9ECV9Qag+1EtKUVI=; b=LNS9pHMEK6SuJRSZzlg1Y/FepfUSUNNdEQkPe+BZgm5ealYWnxnrkIpLPwOVA+u17HF1NHV/Xd6OWq9e3o8d1iGiPke0WB3T9IQi94qG2n5sIoCydGjeNdgRfo8o0CfZ38G8YkC9qr+JKPPBf5+8uG7v6qx6d7qzILWsDogGstg= Received: from SA9PR13CA0001.namprd13.prod.outlook.com (2603:10b6:806:21::6) by PH0PR12MB7888.namprd12.prod.outlook.com (2603:10b6:510:28b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 16:18:01 +0000 Received: from SN1PEPF000397B2.namprd05.prod.outlook.com (2603:10b6:806:21:cafe::7d) by SA9PR13CA0001.outlook.office365.com (2603:10b6:806:21::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 16:18:01 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by SN1PEPF000397B2.mail.protection.outlook.com (10.167.248.56) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 16:18:00 +0000 Received: from MKMALEXHUAN01.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Fri, 24 Jul 2026 11:17:59 -0500 From: Alex Huang To: , , , , , , , , , , , CC: , , , Alex Huang Subject: [PATCH v2 4/4] drm/amd/display: Remove unused DMCU/DMUB EDID CEA parser Date: Fri, 24 Jul 2026 12:17:13 -0400 Message-ID: <20260724161713.119382-5-Alex.Huang2@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724161713.119382-1-Alex.Huang2@amd.com> References: <20260724161713.119382-1-Alex.Huang2@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B2:EE_|PH0PR12MB7888:EE_ X-MS-Office365-Filtering-Correlation-Id: 19edf8df-f55f-45d4-1161-08dee99f21d8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|23010399003|36860700016|1800799024|376014|7416014|921020|10067099003|5023799004|11063799006|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: cdga18yA3gABXe+jJLenWo4XfnvpVZpZlpA2Bd1LiDGYmR9Wycm4mZueolfbdYCdeY1nVetkbLWDYlOC95DxH9ZY1dvT68Vl6dm3vKSQirXQ6lweRFTn1/vtfTlozUz8V+3Xs/mSwOGMCWEanxT4GtGq5G3ZVdV28AAUH04qD4F/Klniz7J+0KvtRTn3jjWijogkX3upHPG7rT8i/jgmLt+Iop/EkOeh4TD2aMn05DDPnmoMfYC3+jgEBHuJjSeI6oI7YItt27HDOVAyzCW5MlLohemEG9NvvwJV97/OaihQkf2GfZUR6+sBxspw00lzxLQY/YBuOU4obZzs2cqpJOfzKNKj1k9K9EAGO9uZUhgeosNhGRiBZ11c7VJckN+eR7FGKj6J4KyKJhFA8LgsI9/+IW7a3q1nDVm3SYrj5jfdIcETQ6R2sQ088pUwj941cHUc9PlK3QZIKCrUQ69d9pgood491z00Epy2t4SEVYIEYrZIO+zH8aKaJll4q74T2vyPw+ohZWEqt39BGPDuqiFR9INiqykg4qoatKIqD78JfTeRLgRpDV7rg0GafWFhSn5EY5WkmIdfkUhrg/T5nCHq7KLzosLAViO/UjCHf+b6jwms5cUqzQAgP8EJ7N6CWXf4oZmMWt50VdUdN41ZKOPOHWDCY2y4euSomCqYwAiHrKgjP1oStnycquZK/iexQl4M+SwFBPUgIB3/AWzOpF/2dweSpoX2U+e/LH54cpovK7GkmvOtjFYJ5wk9m7oE X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(23010399003)(36860700016)(1800799024)(376014)(7416014)(921020)(10067099003)(5023799004)(11063799006)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: fL4TkNkl5LdxyHvNcsgx3heB9itmlkKTT/IrgH3k/bzTb1x+XXEZRfyJJVZdUMejZqgZPMqd5or3djQtbDdeitg8PFMrOi2mjpKLLtXvzmnboZYEnPeQ6uVDq4oSA+H+Bzhqa3fMXttFYC7ZXVmVOFhKUk31keb8tjp0R4WD4gpcdvlc1vmpbTTSqWamc2KPVV1sljWUEVuXFtuKmpOU9ocOWRqjoi54MnCTaNSCHCeVpdCGeULAGpFuLLVhEhaK7unecFdvkRHBYzFfZjtLwZoBSkcgapGv6M1hj8+oeZPyiH86x287mOTMW8S+zhWH8cmQD0alxP0iwRakwEGmTWWZ2TO46wqK4wr/XcCJfVaOx9pwFg9+AZcXFXyJotIOhbko4qseEGQDiqMc4Fbzwp7dLCe9+dybpManthUtOMgGe6RELQRl+NQ1cBA6t1NZ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 16:18:00.9396 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 19edf8df-f55f-45d4-1161-08dee99f21d8 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF000397B2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7888 Content-Type: text/plain; charset="utf-8" With HDMI FreeSync detection now sourced from the common DRM EDID parser, the DMUB parsing for AMD VSDB is no longer used. Remove all relevant fields and files for this flow, it is no longer necessary to ever take firmware round-trip for this. Signed-off-by: Alex Huang Reviewed-by: Mario Limonciello (AMD) --- drivers/gpu/drm/amd/display/dc/Makefile | 1 - .../gpu/drm/amd/display/dc/dc_edid_parser.c | 80 ------------ .../gpu/drm/amd/display/dc/dc_edid_parser.h | 44 ------- drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c | 121 ------------------ drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h | 10 -- .../gpu/drm/amd/display/dmub/inc/dmub_cmd.h | 71 ---------- 6 files changed, 327 deletions(-) delete mode 100644 drivers/gpu/drm/amd/display/dc/dc_edid_parser.c delete mode 100644 drivers/gpu/drm/amd/display/dc/dc_edid_parser.h diff --git a/drivers/gpu/drm/amd/display/dc/Makefile b/drivers/gpu/drm/amd/= display/dc/Makefile index 93d02956c5eb..e88a9cea8d88 100644 --- a/drivers/gpu/drm/amd/display/dc/Makefile +++ b/drivers/gpu/drm/amd/display/dc/Makefile @@ -63,7 +63,6 @@ include $(AMD_DC) =20 FILES =3D FILES +=3D dc_dmub_srv.o -FILES +=3D dc_edid_parser.o FILES +=3D dc_fused_io.o FILES +=3D dc_helper.o FILES +=3D core/dc.o diff --git a/drivers/gpu/drm/amd/display/dc/dc_edid_parser.c b/drivers/gpu/= drm/amd/display/dc/dc_edid_parser.c deleted file mode 100644 index 0db5b49e9d5e..000000000000 --- a/drivers/gpu/drm/amd/display/dc/dc_edid_parser.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2021 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software= "), - * to deal in the Software without restriction, including without limitati= on - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included= in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: AMD - * - */ - -#include "dce/dce_dmcu.h" -#include "dc_edid_parser.h" - -bool dc_edid_parser_send_cea(struct dc *dc, - int offset, - int total_length, - uint8_t *data, - int length) -{ - struct dmcu *dmcu =3D dc->res_pool->dmcu; - - if (dmcu && - dmcu->funcs->is_dmcu_initialized(dmcu) && - dmcu->funcs->send_edid_cea) { - return dmcu->funcs->send_edid_cea(dmcu, - offset, - total_length, - data, - length); - } - - return false; -} - -bool dc_edid_parser_recv_cea_ack(struct dc *dc, int *offset) -{ - struct dmcu *dmcu =3D dc->res_pool->dmcu; - - if (dmcu && - dmcu->funcs->is_dmcu_initialized(dmcu) && - dmcu->funcs->recv_edid_cea_ack) { - return dmcu->funcs->recv_edid_cea_ack(dmcu, offset); - } - - return false; -} - -bool dc_edid_parser_recv_amd_vsdb(struct dc *dc, - int *version, - int *min_frame_rate, - int *max_frame_rate) -{ - struct dmcu *dmcu =3D dc->res_pool->dmcu; - - if (dmcu && - dmcu->funcs->is_dmcu_initialized(dmcu) && - dmcu->funcs->recv_amd_vsdb) { - return dmcu->funcs->recv_amd_vsdb(dmcu, - version, - min_frame_rate, - max_frame_rate); - } - - return false; -} diff --git a/drivers/gpu/drm/amd/display/dc/dc_edid_parser.h b/drivers/gpu/= drm/amd/display/dc/dc_edid_parser.h deleted file mode 100644 index da67ec06f0a2..000000000000 --- a/drivers/gpu/drm/amd/display/dc/dc_edid_parser.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2021 Advanced Micro Devices, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software= "), - * to deal in the Software without restriction, including without limitati= on - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included= in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: AMD - * - */ - -#ifndef _DC_EDID_PARSER_H_ -#define _DC_EDID_PARSER_H_ - -#include "core_types.h" - -bool dc_edid_parser_send_cea(struct dc *dc, - int offset, - int total_length, - uint8_t *data, - int length); - -bool dc_edid_parser_recv_cea_ack(struct dc *dc, int *offset); - -bool dc_edid_parser_recv_amd_vsdb(struct dc *dc, - int *version, - int *min_frame_rate, - int *max_frame_rate); - -#endif /* _DC_EDID_PARSER_H_ */ diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c b/drivers/gpu/dr= m/amd/display/dc/dce/dce_dmcu.c index 25ebd8a52ae4..23de1c793ec3 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c @@ -56,9 +56,6 @@ #define MCP_BL_SET_PWM_FRAC 0x6A /* Enable or disable Fractional PWM */ #define CRC_WIN_NOTIFY 0x92 #define CRC_STOP_UPDATE 0x93 -#define MCP_SEND_EDID_CEA 0xA0 -#define EDID_CEA_CMD_ACK 1 -#define EDID_CEA_CMD_NACK 2 #define MASTER_COMM_CNTL_REG__MASTER_COMM_INTERRUPT_MASK 0x00000001L =20 // PSP FW version @@ -812,121 +809,6 @@ static bool dcn20_unlock_phy(struct dmcu *dmcu) return true; } =20 -static bool dcn10_send_edid_cea(struct dmcu *dmcu, - int offset, - int total_length, - uint8_t *data, - int length) -{ - struct dce_dmcu *dmcu_dce =3D TO_DCE_DMCU(dmcu); - uint32_t header, data1, data2; - - /* If microcontroller is not running, do nothing */ - if (dmcu->dmcu_state !=3D DMCU_RUNNING) - return false; - - if (length > 8 || length <=3D 0) - return false; - - header =3D ((uint32_t)offset & 0xFFFF) << 16 | (total_length & 0xFFFF); - data1 =3D (((uint32_t)data[0]) << 24) | (((uint32_t)data[1]) << 16) | - (((uint32_t)data[2]) << 8) | ((uint32_t)data[3]); - data2 =3D (((uint32_t)data[4]) << 24) | (((uint32_t)data[5]) << 16) | - (((uint32_t)data[6]) << 8) | ((uint32_t)data[7]); - - /* waitDMCUReadyForCmd */ - REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0, 1, 10000); - - /* setDMCUParam_Cmd */ - REG_UPDATE(MASTER_COMM_CMD_REG, MASTER_COMM_CMD_REG_BYTE0, MCP_SEND_EDID_= CEA); - - REG_WRITE(MASTER_COMM_DATA_REG1, header); - REG_WRITE(MASTER_COMM_DATA_REG2, data1); - REG_WRITE(MASTER_COMM_DATA_REG3, data2); - - /* notifyDMCUMsg */ - REG_UPDATE(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 1); - - /* waitDMCUReadyForCmd */ - REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0, 1, 10000); - - return true; -} - -static bool dcn10_get_scp_results(struct dmcu *dmcu, - uint32_t *cmd, - uint32_t *data1, - uint32_t *data2, - uint32_t *data3) -{ - struct dce_dmcu *dmcu_dce =3D TO_DCE_DMCU(dmcu); - - /* If microcontroller is not running, do nothing */ - if (dmcu->dmcu_state !=3D DMCU_RUNNING) - return false; - - *cmd =3D REG_READ(SLAVE_COMM_CMD_REG); - *data1 =3D REG_READ(SLAVE_COMM_DATA_REG1); - *data2 =3D REG_READ(SLAVE_COMM_DATA_REG2); - *data3 =3D REG_READ(SLAVE_COMM_DATA_REG3); - - /* clear SCP interrupt */ - REG_UPDATE(SLAVE_COMM_CNTL_REG, SLAVE_COMM_INTERRUPT, 0); - - return true; -} - -static bool dcn10_recv_amd_vsdb(struct dmcu *dmcu, - int *version, - int *min_frame_rate, - int *max_frame_rate) -{ - uint32_t data[4]; - int cmd, ack, len; - - if (!dcn10_get_scp_results(dmcu, &data[0], &data[1], &data[2], &data[3])) - return false; - - cmd =3D data[0] & 0x3FF; - len =3D (data[0] >> 10) & 0x3F; - ack =3D data[1]; - - if (cmd !=3D MCP_SEND_EDID_CEA || ack !=3D EDID_CEA_CMD_ACK || len !=3D 1= 2) - return false; - - if ((data[2] & 0xFF)) { - *version =3D (data[2] >> 8) & 0xFF; - *min_frame_rate =3D (data[3] >> 16) & 0xFFFF; - *max_frame_rate =3D data[3] & 0xFFFF; - return true; - } - - return false; -} - -static bool dcn10_recv_edid_cea_ack(struct dmcu *dmcu, int *offset) -{ - uint32_t data[4]; - int cmd, ack; - - if (!dcn10_get_scp_results(dmcu, - &data[0], &data[1], &data[2], &data[3])) - return false; - - cmd =3D data[0] & 0x3FF; - ack =3D data[1]; - - if (cmd !=3D MCP_SEND_EDID_CEA) - return false; - - if (ack =3D=3D EDID_CEA_CMD_ACK) - return true; - - *offset =3D data[2]; /* nack */ - return false; -} - - #if defined(CONFIG_DRM_AMD_SECURE_DISPLAY) static void dcn10_forward_crc_window(struct dmcu *dmcu, struct rect *rect, @@ -1030,9 +912,6 @@ static const struct dmcu_funcs dcn10_funcs =3D { .get_psr_state =3D dcn10_get_dmcu_psr_state, .set_psr_wait_loop =3D dcn10_psr_wait_loop, .get_psr_wait_loop =3D dcn10_get_psr_wait_loop, - .send_edid_cea =3D dcn10_send_edid_cea, - .recv_amd_vsdb =3D dcn10_recv_amd_vsdb, - .recv_edid_cea_ack =3D dcn10_recv_edid_cea_ack, #if defined(CONFIG_DRM_AMD_SECURE_DISPLAY) .forward_crc_window =3D dcn10_forward_crc_window, .stop_crc_win_update =3D dcn10_stop_crc_win_update, diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h b/drivers/gpu/drm= /amd/display/dc/inc/hw/dmcu.h index de3113ecbc77..eebfd177463d 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/dmcu.h @@ -74,16 +74,6 @@ struct dmcu_funcs { bool (*is_dmcu_initialized)(struct dmcu *dmcu); bool (*lock_phy)(struct dmcu *dmcu); bool (*unlock_phy)(struct dmcu *dmcu); - bool (*send_edid_cea)(struct dmcu *dmcu, - int offset, - int total_length, - uint8_t *data, - int length); - bool (*recv_amd_vsdb)(struct dmcu *dmcu, - int *version, - int *min_frame_rate, - int *max_frame_rate); - bool (*recv_edid_cea_ack)(struct dmcu *dmcu, int *offset); #if defined(CONFIG_DRM_AMD_SECURE_DISPLAY) void (*forward_crc_window)(struct dmcu *dmcu, struct rect *rect, diff --git a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h b/drivers/gpu/= drm/amd/display/dmub/inc/dmub_cmd.h index 6f6a59a23495..ffe8192d223b 100644 --- a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h +++ b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h @@ -1891,10 +1891,6 @@ enum dmub_cmd_type { * Command type used for interfacing with DPIA. */ DMUB_CMD__DPIA =3D 77, - /** - * Command type used for EDID CEA parsing - */ - DMUB_CMD__EDID_CEA =3D 79, /** * Command type used for getting usbc cable ID */ @@ -6732,69 +6728,6 @@ struct dmub_rb_cmd_transmitter_set_phy_fsm { struct dmub_rb_cmd_transmitter_set_phy_fsm_data data; /**< payload */ }; =20 -/** - * Maximum number of bytes a chunk sent to DMUB for parsing - */ -#define DMUB_EDID_CEA_DATA_CHUNK_BYTES 8 - -/** - * Represent a chunk of CEA blocks sent to DMUB for parsing - */ -struct dmub_cmd_send_edid_cea { - uint16_t offset; /**< offset into the CEA block */ - uint8_t length; /**< number of bytes in payload to copy as part of CEA bl= ock */ - uint16_t cea_total_length; /**< total length of the CEA block */ - uint8_t payload[DMUB_EDID_CEA_DATA_CHUNK_BYTES]; /**< data chunk of the C= EA block */ - uint8_t pad[3]; /**< padding and for future expansion */ -}; - -/** - * Result of VSDB parsing from CEA block - */ -struct dmub_cmd_edid_cea_amd_vsdb { - uint8_t vsdb_found; /**< 1 if parsing has found valid AMD VSDB */ - uint8_t freesync_supported; /**< 1 if Freesync is supported */ - uint16_t amd_vsdb_version; /**< AMD VSDB version */ - uint16_t min_frame_rate; /**< Maximum frame rate */ - uint16_t max_frame_rate; /**< Minimum frame rate */ - uint8_t freesync_mccs_vcp_code; /**< Freesync MCCS VCP code */ -}; - -/** - * Result of sending a CEA chunk - */ -struct dmub_cmd_edid_cea_ack { - uint16_t offset; /**< offset of the chunk into the CEA block */ - uint8_t success; /**< 1 if this sending of chunk succeeded */ - uint8_t pad; /**< padding and for future expansion */ -}; - -/** - * Specify whether the result is an ACK/NACK or the parsing has finished - */ -enum dmub_cmd_edid_cea_reply_type { - DMUB_CMD__EDID_CEA_AMD_VSDB =3D 1, /**< VSDB parsing has finished */ - DMUB_CMD__EDID_CEA_ACK =3D 2, /**< acknowledges the CEA sending is OK or= failing */ -}; - -/** - * Definition of a DMUB_CMD__EDID_CEA command. - */ -struct dmub_rb_cmd_edid_cea { - struct dmub_cmd_header header; /**< Command header */ - union dmub_cmd_edid_cea_data { - struct dmub_cmd_send_edid_cea input; /**< input to send CEA chunks */ - struct dmub_cmd_edid_cea_output { /**< output with results */ - uint8_t type; /**< dmub_cmd_edid_cea_reply_type */ - union { - struct dmub_cmd_edid_cea_amd_vsdb amd_vsdb; - struct dmub_cmd_edid_cea_ack ack; - }; - } output; /**< output to retrieve ACK/NACK or VSDB parsing results */ - } data; /**< Command data */ - -}; - /** * struct dmub_cmd_cable_id_input - Defines the input of DMUB_CMD_GET_USBC= _CABLE_ID command. */ @@ -7588,10 +7521,6 @@ union dmub_rb_cmd { * Definition of a DMUB_CMD__DPIA_SET_TPS_NOTIFICATION command. */ struct dmub_rb_cmd_set_tps_notification set_tps_notification; - /** - * Definition of a DMUB_CMD__EDID_CEA command. - */ - struct dmub_rb_cmd_edid_cea edid_cea; /** * Definition of a DMUB_CMD_GET_USBC_CABLE_ID command. */ --=20 2.34.1